Claude Code Buddy Modificare Ghid: Cum să obții un animal de companie legendar strălucitor
Claude Code Buddy Modificare Ghid: Cum să obții un animal de companie legendar strălucitor
Pe 1 aprilie 2026, Anthropic a lansat în tăcere o funcție ascunsă în versiunea Claude Code 2.1.89 - sistemul de animale de companie /buddy. După ce introduci /buddy în terminal, un mic animal în stil ASCII va "ecloza" lângă caseta ta de introducere, însoțindu-te în scrierea codului și comentând bug-urile.
Fiecare Buddy este generat printr-un algoritm determinist bazat pe ID-ul contului, ceea ce înseamnă că același cont va obține întotdeauna același animal de companie. Dar prin modificarea userID-ului din fișierul de configurare, putem "re-RULA" animalul de companie dorit. Acest articol va detalia principiile algoritmului și scriptul complet de modificare.
I. Prezentare generală a sistemului Buddy
18 specii de animale
Sistemul conține în prezent 18 specii adorabile:
- duck - rață (classic Rubber Duck Debugging)
- goose - gâscă (neastâmpărat)
- blob - jeleu (moale și nedefinit)
- cat - pisică (rece și mândră)
- dragon - dragon (protector impunător)
- octopus - caracatiță (gândire multi-thread)
- owl - bufniță (mentor înțelept)
- penguin - pinguin (prezentabil)
- turtle - broască țestoasă (fiabil și stabil)
- snail - melc (muncă lentă, dar de calitate)
- ghost - fantomă (apare și dispare)
- axolotl - axolot (adorabil și vindecător)
- capybara - capybara (maestru zen)
- cactus - cactus (plantă reconfortantă)
- robot - robot (raționalitate supremă)
- rabbit - iepure (viguros)
- mushroom - ciupercă (observator tăcut)
- chonk - grăsuț (rotund și pufos)
5 niveluri de raritate
- Common (Comun) - 60% șanse, fără decorațiuni cu pălărie
- Uncommon (Rar) - 25% șanse, deblochează pălăria
- Rare (Rare) - 10% șanse, mai multe decorațiuni
- Epic (Epica) - 4% șanse, decorațiuni exclusive
- Legendary (Legendar) - 1% șanse, decorațiuni de top
II. Analiza profundă a principiilor algoritmului
Generarea Buddy-ului utilizează un algoritm random determinist, procesul de bază este următorul:
1. Concatenarea șirului de semințe
const SALT = "friend-2026-401"; // 1 aprilie, ou de Paște const key = userId + SALT;
Valoarea Salt friend-2026-401 conține 401, care reprezintă 1 aprilie - un ou de Paște bine conceput.
2. Hash FNV-1a de 32 de biți
Transformă șirul de semințe într-un întreg de 32 de biți:
function hashString(s) { let h = 2166136261; // baza de offset FNV for (let i = 0; i < s.length; i++) { h ^= s.charCodeAt(i); h = Math.imul(h, 16777619); // FNV prime } return h >>> 0; }
3. PRNG Mulberry32
Inițializează generatorul de numere pseudo-aleatorii cu valoarea hash: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; }; }
Mulberry32 este un PRNG ușor folosit în dezvoltarea jocurilor, potrivit pentru generarea programatică și tabelele de cădere a trofeelor.
4. Extracția rarității (Cheie!)
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; }
// 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; }; }
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"];\nconst RARITYWEIGHTS = { common: 60, uncommon: 25, rare: 10, epic: 4, legendary: 1 };\nconst SALT = "friend-2026-401";\n\nfunction pick(rng, arr) {\n return arr[Math.floor(rng() arr.length)];\n}\n\nfunction rollRarity(rng) {\n const total = Object.values(RARITYWEIGHTS).reduce((a, b) => a + b, 0);\n let roll = rng() total;\n for (const rarity of RARITIES) {\n roll -= RARITY_WEIGHTS[rarity];\n if (roll < 0) return rarity;\n }\n return "common";\n}\n\nfunction testUserId(userId) {\n const key = userId + SALT;\n const seed = hashString(key);\n const rng = mulberry32(seed);\n const rarity = rollRarity(rng);\n const species = pick(rng, SPECIES);\n const shiny = rng() < 0.01;\n return { rarity, species, shiny };\n}\n\nfunction randomUserId() {\n let id = "";\n for (let i = 0; i < 64; i++) {\n id += Math.floor(Math.random() 16).toString(16);\n }\n return id;\n}\n\n// Căutare Buddy strălucitor\nconsole.log("Căutare Buddy strălucitor... ");\nconst targetSpecies = process.argv[2] || null;\n\nwhile (true) {\n const userId = randomUserId();\n const result = testUserId(userId);\n\n if (result.rarity === "legendary" && result.shiny) {\n if (!targetSpecies || result.species === targetSpecies) {\n console.log("Am găsit!");\n console.log("Specie:", result.species);\n console.log("Raritate: Legendară");\n console.log("Strălucitor: Da!");\n console.log("userID:", userId);\n break;\n }\n }\n}\n\n## Patru, pașii de utilizare\n\n- Salvați scriptul: Salvați codul de mai sus ca buddy-reroll.js\n\n- Rulați scriptul: node buddy-reroll.js (puteți specifica specie: node buddy-reroll.js dragon)\n\n- Copiați userID: Scriptul va afișa un userID pentru un Buddy de nivel legendar strălucitor.- Modificare configurație: # Editează ~/.claude.json cat ~/.claude.json | jq '.userID = "noua ta userID" | del(.companion)' > /tmp/claude-new.json && mv /tmp/claude-new.json ~/.claude.json
- Repornește Claude Code, introdu
/buddypentru a vedea noul tău companion!
Cinci, Principiile designului anti-înșelătorie
Designul Claude Code este foarte ingenios, folosind o arhitectură separată între schelet (Bones) și suflet (Soul):
- Bones (schelet):specie, raritate, aspect, atribute——fiecare dată recalculat din userID, niciodată păstrat
- Soul (suflet):nume, descrierea personalității——păstrat local în config
roll(userID). Comentariul este foarte clar: editing config.companion can't fake a rarity.
Dar userID-ul în sine poate fi modificat, acesta este principiul metodei din acest articol.
Șase, Concluzie
Claude Code Buddy este o funcție de tip easter egg bine gândită, care îmbină:
- Randomizare deterministă:combinația clasică FNV-1a + Mulberry32
- Mecanism de tragere:raritate de nivel 5 + 1% shiny, esența jocurilor Gacha
- Design anti-înșelătorie:separarea scheletului/sufletului, asigurând corectitudinea
- Easter egg de 1 aprilie:valoarea salt-ului ascunde un timestamp din 1 aprilie
Referințe:
- Sursa codului Claude Code 2.1.89 (accident npm source map)
- Juejin: „Analizând modul Claude Code Buddy: un algoritm de randomizare deterministă în spatele unui cactus”- DEV.to: Am distrus codul sursă Claude

