Guide de modification de Claude Code Buddy : Comment obtenir un animal de compagnie légendaire brillant

4/2/2026
7 min read

Guide de modification de Claude Code Buddy : Comment obtenir un animal de compagnie légendaire brillant

Le 1er avril 2026, Anthropic a discrètement lancé une fonctionnalité cachée dans la version 2.1.89 de Claude Code — système de compagnon /buddy. En entrant /buddy dans le terminal, un petit animal de style ASCII "éclos" à côté de votre champ de saisie, vous accompagnant dans l'écriture de code et les commentaires sur les bugs.

Chaque Buddy est généré par l'ID de compte via un algorithme déterministe, ce qui signifie qu'un même compte obtiendra toujours le même animal de compagnie. Mais en modifiant l'ID utilisateur dans le fichier de configuration, nous pouvons "re-rouler" pour obtenir l'animal de compagnie souhaité. Cet article détaillera le principe de l'algorithme et le script de modification complet.

I. Aperçu du système Buddy

18 espèces d'animaux

Le système comprend actuellement 18 espèces adorables :

  • canard - canard (classique Rubber Duck Debugging)

  • oie - oie (espiègle)

  • blob - gelée (mignonne et amorphe)

  • chat - chat (froid et fier)

  • dragon - dragon (protecteur imposant)

  • pieuvre - pieuvre (pensée multithread)

  • hibou - hibou (mentor sage)

  • pingouin - pingouin (en tenue formelle)

  • tortue - tortue (stable et fiable)

  • escargot - escargot (travail minutieux)

  • fantôme - fantôme (insaisissable)

  • axolotl - axolotl (mignon et guérisseur)

  • capybara - capybara (maître zen)

  • cactus - cactus (plante réconfortante)

  • robot - robot (rationnel avant tout)

  • lapin - lapin (plein de vie)

  • champignon - champignon (observateur silencieux)

  • chonk - gros (rondeur)

5 niveaux de rareté

  • Commun - 60% de probabilité, sans décoration de chapeau

  • Peu commun - 25% de probabilité, déverrouille un chapeau

  • Rare - 10% de probabilité, plus de décorations

  • Épique - 4% de probabilité, décorations exclusives

  • Légendaire - 1% de probabilité, décorations de premier ordre
De plus, il y a une probabilité de 1% de brillance (Shiny), les animaux de compagnie brillants possèdent une animation de scintillement arc-en-ciel ! La probabilité d'un animal de compagnie légendaire brillant est de 1% × 1% = 0,01%, soit environ un sur dix mille.

II. Analyse approfondie du principe de l'algorithme

La génération de Buddy utilise un algorithme de randomisation déterministe, le processus central est le suivant :

1. Concaténation de la chaîne de graines

const SALT = "friend-2026-401"; // Pâques du 1er avril const key = userId + SALT;

La valeur de sel friend-2026-401 où 401 représente le 1er avril — un œuf de Pâques soigneusement conçu.

2. Hachage FNV-1a 32 bits

Convertir la chaîne de graines en entier 32 bits :

function hashString(s) { let h = 2166136261; // Base de décalage 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

Initialiser le générateur de nombres pseudo-aléatoires avec la valeur de hachage : 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 est un PRNG léger couramment utilisé dans le développement de jeux, adapté à la génération procédurale et aux tables de butin.

4. Extraction de rareté (clé !)

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 = ["commun", "incommun", "rare", "épique", "légendaire"]; const RARITYWEIGHTS = { commun: 60, incommun: 25, rare: 10, épique: 4, légendaire: 1 }; const SALT = "ami-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 "commun"; }

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

// Recherche d'un Buddy légendaire brillant console.log("Recherche d'un Buddy légendaire brillant... "); const targetSpecies = process.argv[2] || null;

while (true) { const userId = randomUserId(); const result = testUserId(userId);

if (result.rarity === "légendaire" && result.shiny) { if (!targetSpecies || result.species === targetSpecies) { console.log("Trouvé !"); console.log("Espèce:", result.species); console.log("Rareté: légendaire"); console.log("Brillant: Oui !"); console.log("userID:", userId); break; } } }

Quatre, Étapes d'utilisation

  • Sauvegarder le script : Enregistrez le code ci-dessus sous buddy-reroll.js

  • Exécuter le script : node buddy-reroll.js (vous pouvez spécifier l'espèce : node buddy-reroll.js dragon)

  • Copier userID : Le script affichera un userID de Buddy de niveau légendaire brillant.- Modification de la configuration :
# Éditez ~/.claude.json cat ~/.claude.json | jq '.userID = "votre nouveau userID" | del(.companion)' > /tmp/claude-new.json && mv /tmp/claude-new.json ~/.claude.json

  • Redémarrez Claude Code, entrez /buddy pour voir votre nouvel animal de compagnie !

Cinq, Principes de conception anti-triche

La conception de Claude Code est très astucieuse, utilisant une architecture de séparation des os (Bones) et de l'âme (Soul) :

  • Bones (os) : espèce, rareté, apparence, attributs — recalculés à chaque fois à partir de userID, jamais persistés

  • Soul (âme) : nom, description de caractère — persisté dans la configuration locale
Cela signifie que même si vous modifiez directement le champ de rareté dans le fichier de configuration, le système le remplacera par le résultat de roll(userID) lors de la lecture. Le commentaire est très clair : editing config.companion can't fake a rarity.

Mais le userID lui-même peut être modifié, c'est là que réside le principe de la méthode de cet article.

Six, Résumé

Claude Code Buddy est une fonctionnalité de Pâques soigneusement conçue, combinant :

  • Aléatoire déterministe : combinaison classique de FNV-1a + Mulberry32

  • Mécanisme de tirage : rareté de niveau 5 + 1% de brillance, l'essence des jeux Gacha

  • Conception anti-triche : séparation des os/âme, garantissant l'équité

  • Pâques du poisson d'avril : la valeur salt cache un horodatage du 1er avril
Allez essayer maintenant ! Je vous souhaite de tirer votre Buddy légendaire brillant préféré !

Références :

  • Fuite du code source de Claude Code 2.1.89 (incident de carte source npm)

  • Juejin : "Analyse approfondie du mode Claude Code Buddy : l'algorithme aléatoire déterministe derrière un cactus"- DEV.to : J'ai Déchiré le Code Source de Claude
Published in Technology

You Might Also Like