Claude Code Buddy модификација: Како добити сјајног легендарног љубимца

4/2/2026
6 min read

Claude Code Buddy модификација: Како добити сјајног легендарног љубимца

  • априла 2026. године, Anthropic је у верзији 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. април — пажљиво дизајнирано изненађење за дан лудака.

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

    Mulberry32 je često korišćen lagani PRNG u razvoju igara, pogodan za proceduralno generisanje i tabele za ispadanje pljačke.

    4. Ekstrakcija retkosti (ključna!)

    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" ];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 -= RARITYWEIGHTS[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// Pretraži sjajnog legendarno\nconsole.log("Pretražujem sjajnog legendarno Buddy...\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("Pronađeno!");\n console.log("Vrsta:", result.species);\n console.log("Retkost: legendarno");\n console.log("Sjajno: Da!");\n console.log("userID:", userId);\n break;\n }\n }\n}\n\n## Četiri, koraci korišćenja\n\n- Sačuvajte skriptu: Sačuvajte gornji kod kao buddy-reroll.js\n\n- Pokrenite skriptu: node buddy-reroll.js (možete odrediti vrstu: node buddy-reroll.js dragon)\n\n- Kopirajte userID: Skripta će ispisati userID sjajnog legendarno Buddy-a- Izmena konfiguracije# Uredi ~/.claude.json cat ~/.claude.json | jq '.userID = "tvojnovi_userID" | del(.companion)' > /tmp/claude-new.json && mv /tmp/claude-new.json ~/.claude.json

    • Ponovo pokreni Claude Code,ukucaj /buddy da vidiš novog ljubimca!

    Pet, Princip dizajna protiv prevara

    Dizajn Claude Code-a je veoma pametan, koristi separaciju između kostura (Bones) i duše (Soul):

    • Bones(kostur):vrsta, retkost, izgled, atributi——svaki put se ponovo izračunava iz userID-a, nikada se ne čuva

    • Soul(duša):ime, opis karaktera——čuva se lokalno u konfiguraciji
    To znači da čak i ako direktno izmeniš polje rarity u konfiguracionom fajlu, sistem će prilikom čitanja prepisati rezultat sa roll(userID). Komentar je vrlo jasan: editing config.companion can't fake a rarity.

    Ali userID se može menjati, što je suština metode u ovom tekstu.

    Šest, Zaključak

    Claude Code Buddy je pažljivo dizajnirana easter egg funkcija, koja kombinuje:

    • Deterministički slučajni:klasična kombinacija FNV-1a + Mulberry32

    • Mehanizam izvlačenja:5 nivoa retkosti + 1% sjaj, suština Gacha igara

    • Dizajn protiv prevara:separacija kostura/duše, osiguranje pravednosti

    • Aprilska šala:salt vrednost skriva vremensku oznaku 1. aprila
    Sada probaj! Želim ti da izvučeš svog omiljenog sjajnog legendarno Buddy-a!

    Reference:

    • Claude Code 2.1.89 curenje izvornog koda (npm source map incident)

    • Juejin: "Duboko istraživanje Claude Code Buddy moda: deterministički slučajni algoritam iza kaktusa"- DEV.to: Rasklopio sam izvorni kod Claude-a
    Published in Technology

    You Might Also Like