Claude Code Buddy ಪರಿಷ್ಕರಣೆ ಮಾರ್ಗದರ್ಶಿ: ಹೇಗೆ ಹೊಳೆಯುವ ಪುರಾಣ ಮಟ್ಟದ ಪೆಟ್ನನ್ನು ಪಡೆಯುವುದು
Claude Code Buddy ಪರಿಷ್ಕರಣೆ ಮಾರ್ಗದರ್ಶಿ: ಹೇಗೆ ಹೊಳೆಯುವ ಪುರಾಣ ಮಟ್ಟದ ಪೆಟ್ನನ್ನು ಪಡೆಯುವುದು
2026年4月1日,Anthropic 在 Claude Code 2.1.89 版本中悄然上线了一个彩蛋功能——/buddy 宠物系统。在终端输入 /buddy 后,一只 ASCII 风格的小动物会"孵化"在你的输入框旁边,陪你写代码、吐槽 bug。
每只 Buddy 由账号 ID 通过确定性算法生成,意味着同一个账号永远获得同一只宠物。但通过修改配置文件中的 userID,我们可以"重ROLL"出心仪的宠物。本文将详细介绍算法原理和完整的修改脚本。
一、Buddy 系统概览
18 种物种
系统目前包含 18 种可爱的物种:
- duck - ಹಕ್ಕಿ(经典的 Rubber Duck Debugging)
- goose - ಹಕ್ಕಿ(调皮捣蛋)
- blob - ಜೇಲಿ(软萌不定形)
- cat - ಬೆಕ್ಕು(高冷傲娇)
- dragon - ಡ್ರಾಗನ್(霸气守护)
- octopus - ಆಮೆ(多线程思考)
- owl - ಉಕ್ಕು(智慧导师)
- penguin - ಪೆಂಗ್ವಿನ್(正装出席)
- turtle - ಕಪ್ಪೆ(稳健可靠)
- snail - ಕೀಟ(慢工出细活)
- ghost - ಭೂತ(神出鬼没)
- axolotl - ಆಕ್ಸೋಲೊಟಲ್(可爱治愈)
- capybara - ಕ್ಯಾಪಿಬಾರಾ(佛系大师)
- cactus - ಕ್ಯಾಕ್ಟಸ್(暖心植物)
- robot - ರೋಬೋಟ್(理性至上)
- rabbit - ಕಂದಾಯ(活蹦乱跳)
- mushroom - ಹೂವು(安静观察)
- chonk - ಕೊಬ್ಬಿದ(圆滚滚)
5 级稀有度
- Common(普通) - 60% 概率,无帽子装饰
- Uncommon(罕见) - 25% 概率,解锁帽子
- Rare(稀有) - 10% 概率,更多装饰
- Epic(史诗) - 4% 概率,专属装饰
- Legendary(传说) - 1% 概率,顶级装饰
二、算法原理深度解析
Buddy 的生成采用确定性随机算法,核心流程如下:
1. 种子字符串拼接
const SALT = "friend-2026-401"; // 4月1日愚人节彩蛋 const key = userId + SALT;
Salt 值 friend-2026-401 中的 401 代表 4月1日——一个精心设计的愚人节彩蛋。
2. FNV-1a 32-bit 哈希
将种子字符串转换为 32 位整数:
function hashString(s) { let h = 2166136261; // FNV offset basis for (let i = 0; i < s.length; i++) { h ^= s.charCodeAt(i); h = Math.imul(h, 16777619); // FNV prime } return h >>> 0; }
3. Mulberry32 PRNG
用哈希值初始化伪随机数生成器:function mulberry32(seed) { let a = seed >>> 0; return function() { a |= 0; a = (a + 0x6d2b79f5) | 0; let t = Math.imul(a ^ (a >>> 15), 1 | a); t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }
ಮಲ್ಬೆರ್ರಿ32 ಆಟದ ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಸಾಮಾನ್ಯವಾಗಿ ಬಳಸುವ ಹಗುರವಾದ PRNG ಆಗಿದ್ದು, ಇದು ಪ್ರೋಗ್ರಾಮಿಕ್ ಉತ್ಪಾದನೆ ಮತ್ತು ಲೂಟ್ ಬಿದ್ದ ಪಟ್ಟಿಗೆ ಸೂಕ್ತವಾಗಿದೆ।
4. ಅಪರೂಪದ ಆಯ್ಕೆ (ಮುಖ್ಯ!)
const RARITIES = ["common", "uncommon", "rare", "epic", "legendary"]; const RARITYWEIGHTS = { common: 60, uncommon: 25, rare: 10, epic: 4, legendary: 1 };
function rollRarity(rng) { const total = 60 + 25 + 10 + 4 + 1; // = 100 let roll = rng() total; for (const rarity of RARITIES) { roll -= RARITYWEIGHTS[rarity]; if (roll < 0) return rarity; } return "common"; }
重要:RARITIES 数组的顺序必须是从低到高,这是加权随机选择的标准实现。
三、完整 Reroll 脚本
以下脚本可以搜索并生成闪光传说级 Buddy 的 userID:
// Claude Code Buddy Reroll 脚本 // 基于 Claude Code 源码逆向分析
// FNV-1a 32-bit hash function hashString(s) { let h = 2166136261; for (let i = 0; i < s.length; i++) { h ^= s.charCodeAt(i); h = Math.imul(h, 16777619); } return h >>> 0; }
// ಮಲ್ಬೆರ್ರಿ32 PRNG function mulberry32(seed) { let a = seed >>> 0; return function() { a |= 0; a = (a + 0x6d2b79f5) | 0; let t = Math.imul(a ^ (a >>> 15), 1 | a); t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }
const SPECIES = [ "duck", "goose", "blob", "cat", "dragon", "octopus", "owl", "penguin", "turtle", "snail", "ghost", "axolotl", "capybara", "cactus", "robot", "rabbit", "mushroom", "chonk" ];const RARITIES = ["common", "uncommon", "rare", "epic", "legendary"]; const RARITYWEIGHTS = { common: 60, uncommon: 25, rare: 10, epic: 4, legendary: 1 }; const SALT = "friend-2026-401";
function pick(rng, arr) { return arr[Math.floor(rng() arr.length)]; }
function rollRarity(rng) { const total = Object.values(RARITYWEIGHTS).reduce((a, b) => a + b, 0); let roll = rng() total; for (const rarity of RARITIES) { roll -= RARITYWEIGHTS[rarity]; if (roll < 0) return rarity; } return "common"; }
function testUserId(userId) { const key = userId + SALT; const seed = hashString(key); const rng = mulberry32(seed); const rarity = rollRarity(rng); const species = pick(rng, SPECIES); const shiny = rng() < 0.01; return { rarity, species, shiny }; }
function randomUserId() { let id = ""; for (let i = 0; i < 64; i++) { id += Math.floor(Math.random() 16).toString(16); } return id; }
// ಚುಕ್ಕಾಣಿ ಪುರಾಣವನ್ನು ಹುಡುಕಿ console.log("ಚುಕ್ಕಾಣಿ ಪುರಾಣವನ್ನು ಹುಡುಕುತ್ತಿದೆ Buddy...\n"); const targetSpecies = process.argv[2] || null;
while (true) { const userId = randomUserId(); const result = testUserId(userId);
if (result.rarity === "legendary" && result.shiny) { if (!targetSpecies || result.species === targetSpecies) { console.log("ಕಂಡುಬಂದಿತು!"); console.log("ಜಾತಿ:", result.species); console.log("ಅನನ್ಯತೆ: ಪುರಾಣ"); console.log("ಚುಕ್ಕಾಣಿ: ಹೌದು!"); console.log("userID:", userId); break; } } } }
ನಾಲ್ಕು, ಬಳಸುವ ಹಂತಗಳು
- ಸ್ಕ್ರಿಪ್ಟ್ ಉಳಿಸಿ: ಮೇಲಿನ ಕೋಡ್ ಅನ್ನು
buddy-reroll.jsಎಂದು ಉಳಿಸಿ
- ಸ್ಕ್ರಿಪ್ಟ್ ನಿರ್ವಹಿಸಿ:
node buddy-reroll.js(ಜಾತಿಯನ್ನು ನಿರ್ಧರಿಸಲು:node buddy-reroll.js dragon)
- userID ನಕಲಿಸಿ: ಸ್ಕ್ರಿಪ್ಟ್ ಒಂದು ಚುಕ್ಕಾಣಿ ಪುರಾಣ ಮಟ್ಟದ Buddy ಯ userID ಅನ್ನು ಔಟ್ಪುಟ್ ಮಾಡುತ್ತದೆ.- ಕೋಷ್ಟಕವನ್ನು ಪರಿಷ್ಕರಿಸಿ:
# ಸಂಪಾದಿಸಿ ~/.claude.json cat ~/.claude.json | jq '.userID = "ನಿಮ್ಮ ಹೊಸ userID" | del(.companion)' > /tmp/claude-new.json && mv /tmp/claude-new.json ~/.claude.json
- ಕ್ಲೋಡ್ ಕೋಡ್ ಪುನಾರಂಭಿಸಿ,ನೀವು
/buddyಅನ್ನು ನಮೂದಿಸಿದರೆ ಹೊಸ ಪೆಟ್ನನ್ನು ನೋಡಬಹುದು!
ಐದು, ಮೋಸ ತಡೆಯುವ ವಿನ್ಯಾಸ ತತ್ವಗಳು
ಕ್ಲೋಡ್ ಕೋಡ್ ನ ವಿನ್ಯಾಸ ಅತ್ಯಂತ ಚಾತುರ್ಯದಿಂದ ಕೂಡಿದೆ, ಹಡಗು (Bones) ಮತ್ತು ಆತ್ಮ (Soul) ವಿಭಜಿತ ಶ್ರೇಣಿಯ ವಿನ್ಯಾಸವನ್ನು ಬಳಸುತ್ತದೆ:
- ಹಡಗು (Bones):ಜಾತಿ, ಅಪರೂಪ, ರೂಪ, ಗುಣ — ಪ್ರತಿ ಬಾರಿ userID ನಿಂದ ಪುನಃ ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ, ಎಂದಿಗೂ ಶಾಶ್ವತಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ
- ಆತ್ಮ (Soul):ಹೆಸರು, ವ್ಯಕ್ತಿತ್ವ ವಿವರಣೆ — ಸ್ಥಳೀಯ ಕಾನ್ಫಿಗ್ ಗೆ ಶಾಶ್ವತಗೊಳಿಸಲಾಗಿದೆ
roll(userID) ನ ಫಲಿತಾಂಶವನ್ನು ಮೀರಿಸುತ್ತದೆ. ಕಾಮೆಂಟ್ ಬಹಳ ಸ್ಪಷ್ಟವಾಗಿ ಬರೆಯಲಾಗಿದೆ:editing config.companion can't fake a rarity。
ಆದರೆ userID ಅನ್ನು ಸಂಪಾದಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ, ಇದು ಈ ಲೇಖನದ ವಿಧಾನದ ತತ್ವವಾಗಿದೆ。
ಆರು, ಸಾರಾಂಶ
ಕ್ಲೋಡ್ ಕೋಡ್ ಬಡ್ಡಿ ಒಂದು ಸೂಕ್ಷ್ಮವಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಇಂಗಿತ ಕಾರ್ಯವಾಗಿದೆ, ಇದು ಸೇರಿಸುತ್ತದೆ:
- ನಿಶ್ಚಿತತೆಯ ಯಾದೃಚ್ಛಿಕತೆ:FNV-1a + Mulberry32 ನ ಶ್ರೇಣಿಯ ಸಂಯೋಜನೆ
- ಕಾರ್ಡ್ ಆಕರ್ಷಣೆ ಯಂತ್ರವಿಧಾನ:5ನೇ ಹಂತದ ಅಪರೂಪ + 1% ಚಮಕ, ಗಾಚಾ ಆಟದ ಆಧ್ಯಾತ್ಮ
- ಮೋಸ ತಡೆಯುವ ವಿನ್ಯಾಸ:ಹಡಗು/ಆತ್ಮ ವಿಭಜನೆ, ನ್ಯಾಯತೆಯನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ
- ಮೂಢನಂಬಿಕೆ ದಿನದ ಇಂಗಿತ:ಉಪ್ಪು ಮೌಲ್ಯವು ಏಪ್ರಿಲ್ 1ರ ಕಾಲಮಾನದ ಅಡಿಯಲ್ಲಿ ಇದೆ
ಉಲ್ಲೇಖಗಳು:
- ಕ್ಲೋಡ್ ಕೋಡ್ 2.1.89 ಮೂಲ ಕೋಡ್ ಲಿಕ್ವಿಡೇಶನ್(npm ಮೂಲ ನಕ್ಷೆ ಅಪಘಾತ)
- ಜುಯಿಂಗ್:《ಕ್ಲೋಡ್ ಕೋಡ್ ಬಡ್ಡಿ ಶ್ರೇಣಿಯ ಆಳವಾದ ವಿಶ್ಲೇಷಣೆ:ಒಂದು ಕಾಕ್ಟಸ್ ಹಿನ್ನಲೆಯಲ್ಲಿ ನಿಶ್ಚಿತತೆಯ ಯಾದೃಚ್ಛಿಕ ಆಲ್ಗಾರಿದಮ್》[[HTMLPLACEHOLDER_0]]

