Claude Code Buddy Änderungsanleitung: Wie man ein schimmerndes legendäres Haustier erhält
Claude Code Buddy Änderungsanleitung: Wie man ein schimmerndes legendäres Haustier erhält
Am 1. April 2026 hat Anthropic heimlich ein Easter Egg-Feature in der Version 2.1.89 von Claude Code eingeführt – /buddy Haustiersystem. Wenn man /buddy im Terminal eingibt, "schlüpft" ein ASCII-Stil kleines Tierchen neben deinem Eingabefeld, um dir beim Programmieren zu helfen und Bugs zu kommentieren.
Jedes Buddy wird durch die Konto-ID mittels eines deterministischen Algorithmus generiert, was bedeutet, dass dasselbe Konto immer dasselbe Haustier erhält. Aber durch die Änderung der userID in der Konfigurationsdatei können wir unser gewünschtes Haustier "neu rollen". Dieser Artikel wird die Algorithmusprinzipien und das vollständige Änderungs-Skript detailliert erläutern.
I. Überblick über das Buddy-System
18 Arten von Spezies
Das System umfasst derzeit 18 niedliche Spezies:
- duck - Ente (klassisches Rubber Duck Debugging)
- goose - Gans (frech und schelmisch)
- blob - Gelee (weich und formbar)
- cat - Katze (cool und stolz)
- dragon - Drache (mächtig und beschützend)
- octopus - Oktopus (multithreaded Denken)
- owl - Eule (weise Mentorin)
- penguin - Pinguin (formell gekleidet)
- turtle - Schildkröte (stabil und zuverlässig)
- snail - Schnecke (langsame, aber präzise Arbeit)
- ghost - Geist (schlüpfrig und unauffindbar)
- axolotl - Axolotl (niedlich und heilend)
- capybara - Wasserschwein (entspannter Meister)
- cactus - Kaktus (herzliche Pflanze)
- robot - Roboter (rational über alles)
- rabbit - Kaninchen (lebhaft und spritzig)
- mushroom - Pilz (still beobachtend)
- chonk - dicker Kerl (rund und knuffig)
5 Stufen der Seltenheit
- Common (gewöhnlich) - 60% Wahrscheinlichkeit, keine Hut-Dekoration
- Uncommon (ungewöhnlich) - 25% Wahrscheinlichkeit, Hut freischalten
- Rare (selten) - 10% Wahrscheinlichkeit, mehr Dekorationen
- Epic (episch) - 4% Wahrscheinlichkeit, exklusive Dekorationen
- Legendary (legendär) - 1% Wahrscheinlichkeit, Top-Dekorationen
II. Tiefenanalyse der Algorithmusprinzipien
Die Generierung von Buddy verwendet einen deterministischen Zufalls-Algorithmus, der Kernprozess ist wie folgt:
1. Anfügen des Seed-Strings
const SALT = "friend-2026-401"; // 1. April, Aprilscherz-Easter Egg const key = userId + SALT;
Der Salt-Wert friend-2026-401 steht für den 1. April – ein sorgfältig gestaltetes Aprilscherz-Easter Egg.
2. FNV-1a 32-Bit Hash
Umwandlung des Seed-Strings in eine 32-Bit-Ganzzahl:
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
Initialisierung des Pseudo-Zufallszahlengenerators mit dem Hash-Wert: 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 ist ein häufig verwendeter leichter PRNG in der Spieleentwicklung, der sich gut für die prozedurale Generierung und Loot-Drop-Tabellen eignet.
4. Raritäts抽取(关键!)
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" ];- Speichern des Skripts: Speichern Sie den obigen Code als buddy-reroll.js
- Skript ausführen:
node buddy-reroll.js(Sie können die Art angeben:node buddy-reroll.js dragon)
- Benutzer-ID kopieren: Das Skript gibt eine Benutzer-ID für einen schillernden legendären Buddy aus.- Ändern der Konfiguration:
# Bearbeiten von ~/.claude.json cat ~/.claude.json | jq '.userID = "deine neue userID" | del(.companion)' > /tmp/claude-new.json && mv /tmp/claude-new.json ~/.claude.json
- Neustart von Claude Code,geben Sie
/buddyein, um Ihr neues Haustier zu sehen!
Fünf, Prinzipien des Betrugschutzes
Das Design von Claude Code ist sehr clever und verwendet eine Trennung von Skelett (Bones) und Seele (Soul):
- Bones(Skelett):Spezies, Seltenheit, Aussehen, Eigenschaften——wird jedes Mal neu aus userID berechnet, niemals persistent
- Soul(Seele):Name, Charakterbeschreibung——wird lokal in der Konfiguration gespeichert
roll(userID) überschreibt. Der Kommentar ist sehr klar: editing config.companion can't fake a rarity.
Aber die userID selbst kann geändert werden, und das ist das Prinzip der Methode in diesem Artikel.
Sechs, Zusammenfassung
Claude Code Buddy ist eine sorgfältig gestaltete Easter Egg-Funktion, die Folgendes kombiniert:
- Deterministische Zufälligkeit:Die klassische Kombination von FNV-1a + Mulberry32
- Zufallskartenmechanismus:5-stufige Seltenheit + 1% Glanz, das Wesen von Gacha-Spielen
- Betrugschutzdesign:Trennung von Skelett/Seele, um Fairness zu gewährleisten
- Aprilscherz-Easter Egg:Der Salt-Wert verbirgt einen Zeitstempel vom 1. April
Referenzen:
- Claude Code 2.1.89 Quellcode-Leck (npm Source Map Vorfall)
- Juejin: 《Tiefenanalyse des Claude Code Buddy Modus: Ein deterministischer Zufallsalgorithmus hinter einem Kaktus》- DEV.to: Ich habe den Claude Quellcode auseinandergerissen

