Guía de modificación de Claude Code Buddy: Cómo obtener mascotas legendarias brillantes

4/2/2026
7 min read

Guía de modificación de Claude Code Buddy: Cómo obtener mascotas legendarias brillantes

El 1 de abril de 2026, Anthropic lanzó silenciosamente una función oculta en la versión 2.1.89 de Claude Code: sistema de mascotas /buddy. Al ingresar /buddy en la terminal, un pequeño animal de estilo ASCII "eclosionará" al lado de tu cuadro de entrada, acompañándote mientras escribes código y comentas sobre errores.

Cada Buddy se genera a partir del ID de cuenta mediante un algoritmo determinista, lo que significa que la misma cuenta siempre obtendrá la misma mascota. Pero al modificar el userID en el archivo de configuración, podemos "re-roll" para obtener la mascota deseada. Este artículo detallará el principio del algoritmo y el script completo de modificación.

I. Visión general del sistema Buddy

18 especies de mascotas

El sistema actualmente incluye 18 adorables especies:

  • duck - pato (el clásico Rubber Duck Debugging)

  • goose - ganso (travieso)

  • blob - gelatina (suave y amorfa)

  • cat - gato (frío y orgulloso)

  • dragon - dragón (imponente guardián)

  • octopus - pulpo (pensamiento multihilo)

  • owl - búho (mentor sabio)

  • penguin - pingüino (vestido formal)

  • turtle - tortuga (estable y confiable)

  • snail - caracol (trabajo lento pero detallado)

  • ghost - fantasma (apareciendo y desapareciendo)

  • axolotl - axolote (adorable y curativo)

  • capybara - capibara (maestro zen)

  • cactus - cactus (planta reconfortante)

  • robot - robot (racionalidad ante todo)

  • rabbit - conejo (salta y corre)

  • mushroom - hongo (observador silencioso)

  • chonk - gordito (redondito)

5 niveles de rareza

  • Común - 60% de probabilidad, sin decoración de sombrero

  • Poco Común - 25% de probabilidad, desbloquea sombreros

  • Raro - 10% de probabilidad, más decoraciones

  • Épico - 4% de probabilidad, decoraciones exclusivas

  • Legendario - 1% de probabilidad, decoraciones de primer nivel
Además, hay una probabilidad independiente del 1% de ser brillante (Shiny), ¡las mascotas brillantes tienen una animación de brillo de colores del arcoíris! La probabilidad de una mascota legendaria brillante es 1% × 1% = 0.01%, aproximadamente uno en diez mil.

II. Análisis profundo del principio del algoritmo

La generación de Buddy utiliza un algoritmo de aleatoriedad determinista, el flujo central es el siguiente:

1. Concatenación de la cadena semilla

const SALT = "friend-2026-401"; // Huevo de Pascua del 1 de abril const key = userId + SALT;

El valor de sal friend-2026-401 contiene el 401 que representa el 1 de abril, ¡un huevo de Pascua cuidadosamente diseñado para el Día de los Inocentes!

2. Hash FNV-1a de 32 bits

Convierte la cadena semilla en un entero de 32 bits:

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

Inicializa el generador de números pseudoaleatorios con el valor 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 es un generador de números aleatorios ligero comúnmente utilizado en el desarrollo de juegos, adecuado para la generación programática y las tablas de botín.

4. Extracción de Rareza (¡Clave!)

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

// Generador de Números Aleatorios 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"];\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// Buscar Buddy legendarios brillantes\nconsole.log("Buscando Buddy legendarios brillantes...\n");\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("¡Encontrado!");\n console.log("Especie:", result.species);\n console.log("Rareza: Legendario");\n console.log("Brillante: ¡Sí!");\n console.log("userID:", userId);\n break;\n }\n }\n}\n\n## Cuatro, Pasos a seguir\n\n- Guardar el script: Guarda el código anterior como buddy-reroll.js\n\n- Ejecutar el script: node buddy-reroll.js (puedes especificar la especie: node buddy-reroll.js dragon)\n\n- Copiar userID: El script generará un userID para un Buddy legendario brillante.- Modificar configuración# Editar ~/.claude.json cat ~/.claude.json | jq '.userID = "tu nuevo userID" | del(.companion)' > /tmp/claude-new.json && mv /tmp/claude-new.json ~/.claude.json

  • Reiniciar Claude Code, ingresa /buddy y podrás ver tu nueva mascota!

Cinco, Principios de diseño anti-trampa

El diseño de Claude Code es muy ingenioso, utiliza una arquitectura de separación de Esqueleto (Bones) y Alma (Soul):

  • Bones (Esqueleto): especie, rareza, apariencia, atributos——se recalcula cada vez desde userID, nunca se persiste

  • Soul (Alma): nombre, descripción de personalidad——persistente en la configuración local
Esto significa que incluso si editas el campo de rareza en el archivo de configuración, el sistema lo sobrescribirá con el resultado de roll(userID) al leerlo. El comentario es muy claro: editing config.companion can't fake a rarity.

Pero el userID en sí puede ser modificado, esta es la base del método de este artículo.

Seis, Resumen

Claude Code Buddy es una función de huevo de pascua cuidadosamente diseñada, que combina:

  • Aleatoriedad determinista: combinación clásica de FNV-1a + Mulberry32

  • Mecanismo de cartas: rareza de nivel 5 + 1% brillante, la esencia de los juegos Gacha

  • Diseño anti-trampa: separación de esqueleto/alma, asegurando la equidad

  • Huevo de pascua de April Fool's: el valor de salt oculta una marca de tiempo del 1 de abril
¡Prueba ahora! ¡Te deseo que consigas el Buddy brillante que deseas!

Referencias:

  • Filtración del código fuente de Claude Code 2.1.89 (incidente del mapa de origen de npm)

  • Juegolandia: "Profundizando en el modo Claude Code Buddy: el algoritmo de aleatoriedad determinista detrás de un cactus"- DEV.to: Desgarré el Código Fuente de Claude
Published in Technology

You Might Also Like