Claude Code Buddy зміни: як отримати блискучого легендарного улюбленця
Claude Code Buddy зміни: як отримати блискучого легендарного улюбленця
1 квітня 2026 року, Anthropic тихо запустила функцію Easter egg у версії Claude Code 2.1.89 — /buddy система улюбленців. Введіть /buddy у терміналі, і маленька ASCII-стиль тваринка "вибродить" поруч з вашим полем введення, супроводжуючи вас у написанні коду та обговоренні багів.
Кожен Buddy генерується за допомогою детерміністичного алгоритму на основі ID облікового запису, що означає, що один і той же обліковий запис завжди отримує одного й того ж улюбленця. Але змінивши userID у конфігураційному файлі, ми можемо "перезавантажити" бажаного улюбленця. У цій статті буде детально описано принципи алгоритму та повний скрипт змін.
I. Огляд системи Buddy
18 видів тварин
Система наразі містить 18 милих видів:
- duck - качка (класичне Rubber Duck Debugging)
- goose - гусак (непосидючий)
- blob - желе (м'який і невизначений)
- cat - кіт (високий і гордий)
- dragon - дракон (могутній охоронець)
- octopus - восьминіг (багатопотокове мислення)
- owl - сова (мудрий наставник)
- penguin - пінгвін (офіційна присутність)
- turtle - черепаха (надійний і стабільний)
- snail - равлик (повільна, але якісна робота)
- ghost - привид (невловимий)
- axolotl - аксолотль (миловидний і заспокійливий)
- capybara - капібара (філософський майстер)
- cactus - кактус (тепле рослина)
- robot - робот (раціональність понад усе)
- rabbit - кролик (енергійний)
- mushroom - гриб (тихий спостерігач)
- chonk - товстун (круглий)
5 рівнів рідкості
- Common (звичайний) - 60% ймовірність, без капелюшків
- Uncommon (рідкісний) - 25% ймовірність, відкриває капелюшки
- Rare (рідкісний) - 10% ймовірність, більше прикрас
- Epic (епічний) - 4% ймовірність, ексклюзивні прикраси
- Legendary (легендарний) - 1% ймовірність, найвищі прикраси
II. Глибокий аналіз принципів алгоритму
Генерація Buddy використовує детерміністичний випадковий алгоритм, основний процес виглядає так:
1. З'єднання рядка насіння
const SALT = "friend-2026-401"; // 1 квітня, день дурня const key = userId + SALT;
Значення Salt friend-2026-401 містить 401, що представляє 1 квітня — ретельно спланований Easter egg на день дурня.
2. FNV-1a 32-бітний хеш
Перетворення рядка насіння в 32-бітне ціле число:
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
Ініціалізація генератора псевдовипадкових чисел за допомогою хеш-значення: 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; }; }
Мульбері 32 - це легкий генератор випадкових чисел (PRNG), який часто використовується в розробці ігор, підходить для програмного генерування та таблиць випадіння трофеїв.
4. Витягування рідкості (ключове!)
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 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" ];[[HTMLPLACEHOLDER0]] [[HTMLPLACEHOLDER1]]
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; }
// Пошук блискучого легендарного console.log("Пошук блискучого легендарного 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("Знайдено!"); console.log("Вид:", result.species); console.log("Рідкість: Легендарний"); console.log("Блискучий: Так!"); console.log("userID:", userId); break; } } }- Змінити конфігурацію: # Редагуйте ~/.claude.json cat ~/.claude.json | jq '.userID = "ваш новий userID" | del(.companion)' > /tmp/claude-new.json && mv /tmp/claude-new.json ~/.claude.json
- Перезапустіть Claude Code,введіть
/buddyі ви побачите нового улюбленця!
П’ять, Принципи дизайну проти шахрайства
Дизайн Claude Code дуже продуманий, використовує архітектуру розділення скелета (Bones) та душі (Soul):
- Bones(скелет):вид, рідкість, зовнішній вигляд, атрибути——кожного разу перераховується з userID, ніколи не зберігається
- Soul(душа):ім’я, опис характеру——зберігається в локальному конфігураційному файлі
roll(userID) під час читання. Коментар написаний дуже прямо:редагування config.companion не може підробити рідкість。
Але сам userID можна змінювати, ось у чому полягає принцип цього методу.
Шість, Підсумок
Claude Code Buddy — це ретельно спроектована функція пасхалки, яка поєднує в собі:
- Детерміновану випадковість:класичне поєднання FNV-1a + Mulberry32
- Механізм витягування карт:5 рівнів рідкості + 1% блискучих, суть ігор Gacha
- Дизайн проти шахрайства:розділення скелета/душі, що забезпечує справедливість
- Пасхалка на День дурня:значення salt приховує мітку часу 1 квітня
Джерела:
- Витік вихідного коду Claude Code 2.1.89 (інцидент з npm source map)
- Juejin: 《Глибоке дослідження режиму Claude Code Buddy: детермінований випадковий алгоритм за кактусом》- DEV.to: Я розібрав код джерела Claude

