Claude Code Buddy зміни: як отримати блискучого легендарного улюбленця

4/2/2026
6 min read

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% ймовірність, найвищі прикраси
Крім того, є окрема 1% ймовірність блиску (Shiny), блискучі улюбленці мають анімацію з райдужним світлом! Ймовірність блискучого легендарного улюбленця становить 1% × 1% = 0.01%, приблизно одна на десять тисяч.

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(душа):ім’я, опис характеру——зберігається в локальному конфігураційному файлі
Це означає, що навіть якщо ви безпосередньо редагуєте поле rarity у конфігураційному файлі, система все одно перекриє його результатом roll(userID) під час читання. Коментар написаний дуже прямо:редагування config.companion не може підробити рідкість

Але сам userID можна змінювати, ось у чому полягає принцип цього методу.

Шість, Підсумок

Claude Code Buddy — це ретельно спроектована функція пасхалки, яка поєднує в собі:

  • Детерміновану випадковість:класичне поєднання FNV-1a + Mulberry32

  • Механізм витягування карт:5 рівнів рідкості + 1% блискучих, суть ігор Gacha

  • Дизайн проти шахрайства:розділення скелета/душі, що забезпечує справедливість

  • Пасхалка на День дурня:значення salt приховує мітку часу 1 квітня
Спробуйте зараз! Бажаю вам отримати бажаного блискучого легендарного Buddy!

Джерела:

  • Витік вихідного коду Claude Code 2.1.89 (інцидент з npm source map)

  • Juejin: 《Глибоке дослідження режиму Claude Code Buddy: детермінований випадковий алгоритм за кактусом》- DEV.to: Я розібрав код джерела Claude
Published in Technology

You Might Also Like

Obsidian випустив Defuddle, піднявши Obsidian Web Clipper на новий рівеньTechnology

Obsidian випустив Defuddle, піднявши Obsidian Web Clipper на новий рівень

Obsidian випустив Defuddle, піднявши Obsidian Web Clipper на новий рівень Я завжди любив основну ідею Obsidian: локальн...

OpenAI раптово оголосила про "три в одному": об'єднання браузера, програмування та ChatGPT, внутрішнє визнання помилок минулого рокуTechnology

OpenAI раптово оголосила про "три в одному": об'єднання браузера, програмування та ChatGPT, внутрішнє визнання помилок минулого року

OpenAI раптово оголосила про "три в одному": об'єднання браузера, програмування та ChatGPT, внутрішнє визнання помилок м...

2026, більше не змушуйте себе "дисциплінуватися"! Зробіть ці 8 простих справ, і здоров'я прийде природноHealth

2026, більше не змушуйте себе "дисциплінуватися"! Зробіть ці 8 простих справ, і здоров'я прийде природно

2026, більше не змушуйте себе "дисциплінуватися"! Зробіть ці 8 простих справ, і здоров'я прийде природно Новий рік почи...

Ті мами, які намагаються схуднути, але не можуть, безумовно, потрапляють сюдиHealth

Ті мами, які намагаються схуднути, але не можуть, безумовно, потрапляють сюди

Ті мами, які намагаються схуднути, але не можуть, безумовно, потрапляють сюди Травень вже минув, як ваш план схуднення?...

📝
Technology

AI Browser 24 години стабільної роботи: посібник

AI Browser 24 години стабільної роботи: посібник Цей посібник описує, як налаштувати стабільне, тривале середовище для A...

📝
Technology

Agent-Browser конфігураційний посібник: повторне використання стану входу в браузер через CDP

Agent-Browser конфігураційний посібник: повторне використання стану входу в браузер через CDP\n\nЦей посібник допоможе в...