Claude Code Buddy Modificare Ghid: Cum să obții un animal de companie legendar strălucitor

4/2/2026
6 min read

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
În plus, există o probabilitate de 1% pentru strălucire (Shiny), animalele de companie strălucitoare au animații cu lumini colorate! Probabilitatea de a obține un animal de companie legendar strălucitor este de 1% × 1% = 0.01%, aproximativ una la zece mii.

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 /buddy pentru 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
Aceasta înseamnă că, chiar dacă editezi direct câmpul rarity din fișierul de configurare, sistemul va suprascrie rezultatul la citire cu 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
Acum du-te și încearcă! Îți dorim să obții Buddy-ul tău legendar shiny dorit!

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
Published in Technology

You Might Also Like