Guida alla modifica di Claude Code Buddy: come ottenere un animale domestico leggendario splendente

4/2/2026
7 min read

Guida alla modifica di Claude Code Buddy: come ottenere un animale domestico leggendario splendente

Il 1 aprile 2026, Anthropic ha silenziosamente lanciato una funzione segreta nella versione 2.1.89 di Claude Code: il sistema di animali domestici /buddy. Digitando /buddy nel terminale, un piccolo animale in stile ASCII "si schiuderà" accanto alla tua casella di input, accompagnandoti nella scrittura del codice e nel lamentarti dei bug.

Ogni Buddy è generato tramite un algoritmo deterministico basato sull'ID dell'account, il che significa che lo stesso account otterrà sempre lo stesso animale domestico. Tuttavia, modificando il userID nel file di configurazione, possiamo "rilanciare" l'animale domestico desiderato. Questo articolo descriverà in dettaglio il principio dell'algoritmo e lo script completo per la modifica.

1. Panoramica del sistema Buddy

18 specie di animali

Il sistema attualmente include 18 adorabili specie:

  • duck - anatra (classico Rubber Duck Debugging)

  • goose - oca (birichina)

  • blob - gelatina (morbida e indefinita)

  • cat - gatto (freddo e orgoglioso)

  • dragon - drago (maestoso e protettivo)

  • octopus - polpo (pensiero multithread)

  • owl - gufo (mentore saggio)

  • penguin - pinguino (in abito formale)

  • turtle - tartaruga (stabile e affidabile)

  • snail - lumaca (lavoro lento ma preciso)

  • ghost - fantasma (invisibile)

  • axolotl - axolotl (carino e curativo)

  • capybara - capibara (maestro zen)

  • cactus - cactus (pianta affettuosa)

  • robot - robot (razionale)

  • rabbit - coniglio (vivace)

  • mushroom - fungo (osservatore silenzioso)

  • chonk - grassottello (rotondo)

5 livelli di rarità

  • Comune - 60% di probabilità, senza decorazioni a cappello

  • Non comune - 25% di probabilità, sblocca cappelli

  • Raro - 10% di probabilità, più decorazioni

  • Epico - 4% di probabilità, decorazioni esclusive

  • Leggendario - 1% di probabilità, decorazioni di alto livello
Inoltre, c'è una probabilità di 1% di splendente (Shiny), gli animali domestici splendenti hanno un'animazione di bagliore arcobaleno! La probabilità di un leggendario splendente è 1% × 1% = 0.01%, circa una su diecimila.

2. Analisi approfondita del principio dell'algoritmo

La generazione di Buddy utilizza un algoritmo di randomizzazione deterministica, il flusso centrale è il seguente:

1. Concatenazione della stringa di seme

const SALT = "friend-2026-401"; // Uovo di Pasqua del 1 aprile const key = userId + SALT;

Il valore di sale friend-2026-401 in cui 401 rappresenta il 1 aprile—un uovo di Pasqua ben progettato per il giorno degli scherzi.

2. Hash FNV-1a a 32 bit

Convertire la stringa di seme in un intero a 32 bit:

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. PRNG Mulberry32

Inizializzare il generatore di numeri pseudo-casuali con il valore 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 è un PRNG leggero comunemente usato nello sviluppo di giochi, adatto per la generazione procedurale e le tabelle di caduta dei bottini.

4. Estrazione della rarità (fondamentale!)

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; }

// PRNG Mulberry32 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 -= RARITY_WEIGHTS[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; }

// Cerca leggendario lucido console.log("Cerca leggendario lucido 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("Trovato!"); console.log("Specie:", result.species); console.log("Rarità: Leggendario"); console.log("Lucido: Sì!"); console.log("userID:", userId); break; } } }

Quattro, Passaggi per l'uso

  • Salva lo script: Salva il codice sopra come buddy-reroll.js

  • Esegui lo script: node buddy-reroll.js (puoi specificare la specie: node buddy-reroll.js dragon)

  • Copia userID: Lo script stamperà un userID per un Buddy leggendario lucido.- Modifica della configurazione
# Modifica ~/.claude.json cat ~/.claude.json | jq '.userID = "il tuo nuovo userID" | del(.companion)' > /tmp/claude-new.json && mv /tmp/claude-new.json ~/.claude.json

  • Riavvia Claude Code,inserisci /buddy per vedere il tuo nuovo animale domestico!

Cinque, Principi di design anti-frode

Il design di Claude Code è molto ingegnoso, utilizza un'architettura di separazione tra scheletro (Bones) e anima (Soul)

  • Bones(scheletro):specie, rarità, aspetto, attributi——viene ricalcolato ogni volta da userID, mai persistente

  • Soul(anima):nome, descrizione del carattere——persistente nel config locale
Questo significa che anche se modifichi direttamente il campo rarità nel file di configurazione, il sistema sovrascriverà il valore con il risultato di roll(userID) al momento della lettura. Il commento è molto chiaro: editing config.companion can't fake a rarity.

Ma l'userID stesso può essere modificato, ed è qui che risiede il principio del metodo di questo articolo.

Sei, Conclusione

Claude Code Buddy è una funzionalità easter egg progettata con cura, che combina:

  • Randomicità deterministica:classica combinazione di FNV-1a + Mulberry32

  • Meccanismo di estrazione:rarità di livello 5 + 1% di brillantezza, l'essenza dei giochi Gacha

  • Design anti-frode:separazione scheletro/anima, per garantire equità

  • Easter egg del pesce d'aprile:il valore salt nasconde un timestamp del 1 aprile
Prova subito! Ti auguro di ottenere il Buddy leggendario brillante che desideri!

Riferimenti

  • Rilascio del codice sorgente di Claude Code 2.1.89 (incidente della mappa sorgente npm)

  • Juejin: "Analisi approfondita del modello Claude Code Buddy: l'algoritmo di randomicità deterministica dietro un cactus"- DEV.to: Ho Smontato il Codice Sorgente di Claude
Published in Technology

You Might Also Like