Curenje izvornog koda Claude Code-a — iskopao sam uskrsno jaje za Prvi april: 18 vrsta digitalnih ljubimaca, 1% šansa za Legendary
Ovo pasivno otvaranje Claude Code-a zaista je uzburkalo celu AI scenu. I ja sam dan proveo čitajući izvorni kod — rezultati su bogati.
U najnovijoj verziji Claude Code-a, kucanjem buddy/ možete jednim klikom usvojiti svog digitalnog ljubimca.

Hmmm... pomalo običan, pomalo prosečan.
Ali sa ovim izvornim kodom, mogu da zamolim Codex da mi izvuče sve digitalne ljubimce, pa da koristim onog koji mi se sviđa. Hahaha.

Anthropic je u Claude Code-u sakrio kompletan sistem digitalnih ljubimaca. 18 vrsta, 5 RPG atributa, 1% šansa za Legendary, uz jedinstvena imena i karaktere — nije li to kao nekadašnji Tamagotchi?
Još neobičnije je to što u izvornom kodu piše da je salt vrednost 'friend-2026-401', a danas je tačno 1. april. Ovo je pažljivo isplanirano uskrsno jete za Prvi april.
Pred nama je era CLI-ja, pa se zaista isplati detaljnije proučiti ovog digitalnog ljubimca.
01. Sistem ljubimaca skriven u izvornom kodu
Kada sam otvorio direktorijum src/buddy/, bio sam zapanjen. Nije to samo neka sitnica ubačena usput — to je sistem kompletnog dizajna.
18 vrsta.
duck, goose, blob, cat, dragon, octopus, owl, penguin, turtle, snail, ghost, axolotl, capybara, cactus, robot, rabbit, mushroom — i još jedan koji se zove chonk... nije jasno kakvo je to stvorenje, verovatno nešto okruglo i debelo.
Svaka vrsta ima 3 okvira animacije mirovanja — u terminalu će polako "disati", mahati repom, veoma umirujuće. Za primer, patka:
__
<(· )___
( ._>
`--´U tri okvira animacije, rep se blago pomera, a povremeno doda i ~. Toliko jednostavna ASCII umetnost, a zagledate se i postanete zavisni.
6 vrsta očiju, 8 vrsta šešira.
Tipovi očiju: ·, ✦, ×, ◉, @, °
Opcije šešira: none, crown, tohat, propeller, halo, wizard, beanie, tinyduck.
Posebno tinyduck — šešir u obliku male patke na glavi. Patka sa šeširom od male patke? U redu, priznajem maštu Anthropic-ovih inženjera.
Šešir je dostupan samo za retkost uncommon i iznad — za common ljubimce, mesto za šešir je prazno.

02. Šansa za Legendary je 1%
Ovo je dizajn koji me je najviše opčinio u čitavom sistemu ljubimaca.
RARITY_WEIGHTS = {
common: 60, // 60%
uncommon: 25, // 25%
rare: 10, // 10%
epic: 4, // 4%
legendary: 1, // 1%
}Šansa za Legendary ljubimca je samo 1%, dok je šansa za shiny (varljivu verziju) još niža — množi se sa još 1% na postojeću retkost. Drugim rečima, teorijska šansa za shiny Legendary iznosi 0.01%.
Šta to znači?
Pretpostavimo da Claude Code ima milion korisnika — samo oko 10 hiljada će dobiti Legendary, a onih sa shiny Legendary možda samo oko 100. Ako ikada sretnete korisnika sa shiny Legendary, predlažem vam da screenshotujete za uspomenu, jer je ređe od dobitka na lotu.
Ključno je — ova šansa se ne izvlači iznova pri svakom pokretanju, već je određena vašim userId-jem — jednom za svagda, zauvek nepromenjena.
U izvornom kodu se koristi pseudoslučajni generator brojeva koji se zove Mulberry32, koji na osnovu UUID-a vašeg naloga radi heširanje, a zatim deterministički generiše izgled. Zato, bez obzira na to kako reinstalirate Claude Code, ljubimac je uvek isti.
const SALT = 'friend-2026-401'
export function roll(userId: string): Roll {
const key = userId + SALT
// ...deterministic roll from userId hash
}U salt vrednosti piše 401 — odnosno 1. april, danas.

03. U čemu je vaš ljubimac dobar?
Svaki ljubimac ima 5 atributa, u stilu RPG igara:
- DEBUGGING: sposobnost debagovanja
- PATIENCE: nivo strpljenja
- CHAOS: vrednost haosa (veoma zanimljiv atribut)
- WISDOM: mudrost
- SNARK: nivo sarkazma
Svaki ljubimac ima jedan vrhunski atribut (peak stat) i jedan slab atribut (dump stat), dok su ostali nasumično raspoređeni. Što je retkost veća, to je i donja granica atributa viša. Legendary ljubimac neće imati nijedan nizak atribut — upravo je zato toliko jak.
Moj common ljubimac ima visok CHAOS.
Ne znam da li da se smejem ili plačem.
A karakter ljubimca nije fiksno unapred definisan — generiše se pri izlegućavanju, veliki model ga stvara na osnovu vašeg userId-ja. U teoriji, ljubimac svake osobe ima jedinstven opis ličnosti.
// Model-generated soul — stored in config after first hatch
export type CompanionSoul = {
name: string
personality: string
}Jednom kada se ovaj soul (duša) generiše, trajno se čuva, pa će svaki sledeći put kada otvorite Claude Code ljubimac biti isti, sa svojim imenom i svojim karakterom.
Bones (vizuelni kostur) se pri svakom pokretanju izračunava iz userId-ja, što osigurava da retkost ne može da se falsifikuje; Soul (duša) se trajno čuva, što ljubimcu daje kontinuitet. Ovo odvajanje u dva sloja je prilično elegantno.

04. Skrivene detalje u dizajnu vrsta
Kada pogledate retkost, a zatim i dizajn vrsta, shvatićete da su Anthropic-ovi inženjeri zaista uložili mnogo truda.
Od 18 vrsta, neke su normalan izbor: duck (patka), cat (mačka), penguin (pingvin), owl (sova). Ali nekoliko ih je veoma neuobičajenih i ostavilo je jak utisak na mene.
axolotl (ambistoma), poznata i kao meksička ambistoma, veoma retka vodozemca poznata po tome što stalno ostaje u larvalnom stadijumu, poznata kao "stvorenje večne mladosti". Njeno uključivanje očigledno je privatni izbor inženjera, a ne rezultat tržišnog istraživanja.
chonk, reč koja se na engleskom internetu obično koristi da opiše "bucku mačku", internet sleng. Anthropic je pretvorio u vrstu, a u izvornom kodu je upisana heksadecimalnim ASCII kodiranjem, kako bi zaobišli leksičku proveru pri kompajliranju:
export const chonk = c(0x63, 0x68, 0x6f, 0x6e, 0x6b) as 'chonk'Komentar posebno objašnjava razlog: jedno od imena vrsta se poklopilo sa internim oznakama modela, pa su sva imena vrsta kodirana na ovaj način, kako ne bi aktivirala skener reči pri build-u. Ovaj detalj mi govori da su interni procesi upravljanja u Anthropic-u prilično strogi.
capybara (kapibara), u poslednjih nekoliko godina najpopularnija životinja na internetu, bez konkurencije. Kapibara je poznata po izuzetno smirenom karakteru i postala simbol "ležanja". Njeno uključivanje pokazuje da Anthropic prati internet kulturu.

Svaka vrsta ima 3 nezavisna okvira animacije, koji se polako reprodukuju u terminalu. Pipci hobotnice se njišu; telo duha blaho lebdi; zmajeva krila se otvaraju i zatvaraju. Niko vas ne tera da to primetite, ali kada primetite, u sebi ćete tiho dati plus inženjerima.
Šešir tinyduck znači da ljubimac nosi malu patku na glavi. Sumnjam da je ovo delo nekog inženjera ljubitelja patki.
05. Sve je pažljivo isplanirano unapred
Dok sam čitao izvorni kod, video sam jedan komentar i trenutno se sledio:
// Local date, not UTC — 24h rolling wave across timezones. Sustained Twitter
// buzz instead of a single UTC-midnight spike, gentler on soul-gen load.
// Teaser window: April 1-7, 2026 only. Command stays live forever after.
export function isBuddyTeaserWindow(): boolean {
const d = new Date();
return d.getFullYear() === 2026 && d.getMonth() === 3 && d.getDate() <= 7
}Anthropic nije samo odredio vreme lansiranja — razmislili su i o tempu širenja: koriste lokalnu vremensku zonu umesto UTC, tako da se priče na Twitteru održavaju nedelju dana, od 1. do 7. aprila, umesto da sve eruptira odjednom u ponoć po UTC i brzo splasne.

Ova posvećenost prevazilazi okvire "uskrsnog jajeta za Prvi april" i podseća na kompletan plan lansiranja proizvoda.
A SALT = 'friend-2026-401' je detalj koji mi se najviše sviđa u čitavom izvornom kodu.
friend, prijatelj. 2026-401, 1. april 2026.
Anthropic je u izvornom kodu, tiho, ostavio poruku za korisnike: danas je Claude Code dobio prijatelja.
06. Kompletan proces izlegućavanja ljubimca
Pošto smo razumeli principe, hajde da vidimo i kako se to radi u praksi.
Prvi put kada unesete /buddy, Claude Code pokreće proces izlegućavanja. Veliki model na osnovu informacija o vašem nalogu generiše ime i opis karaktera vašeg ljubimca. Ceo proces traje nekoliko sekundi, a nakon završetka, ljubimac se pojavljuje.
Ako prethodno niste vršili izlegućavanje, pri pokretanju ćete u gornjem delu terminala videti duginu liniju sa /buddy — ovo je Anthropic namerno dizajnirala kao mamac, duginom bojom koja se ističe među belim slovima.

Nakon izlegućavanja ljubimac će se pojaviti pored polja za unos. Možete:
Razgovarati s njim tako što ćete mu se obratiti imenom. U system promptu jasno piše: kada korisnik izgovori njegovo ime, ljubimac izgovara samo jednu rečenicu, ne objašnjava sebe, ne dulji. Ovakva ličnost koja "govori malo, ali je zanimljiva" prilično je simpatična.
Kada ne želite da vas ometa, možete ga ućutkati (mute). U postavkama postavite companionMuted na true i ljubimac će mirno sedeti, neće samoinicijativno progovarati. Ali njegova ASCII animacija je i dalje tu — i dalje možete videti kako pored vas diše i mase repom.
Oblačić će postepeno nestajati. Nakon što ljubimac progovori, oblacić će postepeno izbledeti u roku od 6 sekundi, neće stalno zaklanjati pogled. Izvorni kod poslednje 2 sekunde postavlja kao FADE_WINDOW, pa oblak polako tamni, dajući vam do znanja da će uskoro nestati.
Ovo projektovanje granice pažnje je veoma pažljivo: on vas prati, ali vas ne ometa. Vi ga zovete, on odgovara; ako ga ignorišete, on mirno čeka.
07. Koji su atributi vašeg ljubimca?
S obzirom na to da se Bones (vizuelni kostur) deterministički generiše na osnovu userId-ja, teorijski možete pronaći userId u svojoj Claude Code konfiguraciji i izračunati retkost svog ljubimca.
Putanja konfiguracione datoteke nalazi se u direktorijumu ~/.claude/, u datoteci config.json, koja sadrži polje oauthAccount.accountUuid ili userID — to je seme za generisanje ljubimca.
Zanimljivo je da je algoritam za retkost veoma jednostavan i direktan: koristi Mulberry32, pseudoslučajni generator od samo nekoliko linija, zajedno sa vašim userId-jem i soli friend-2026-401, i može izračunati koju retkost, vrstu, oči i šešir ima vaš ljubimac.
Čitav algoritam je deterministički, transparentan i proverljiv. Anthropic ovde nije pokušao ništa da sakrije, niti je prepustio serveru kontrolu nad vašom retkošću. Šta dobijete, to i imate — nema pozadinskih manipulacija.
Ovakav dizajn je zapravo čest u oblasti NFT-a — atributi NFT-a se određuju on-chain hešom, transparentno i proverljivo. Anthropic je sličnu ideju primenio u sistemu ljubimaca, čime je obezbedio da "retkost ne može da se falsifikuje".
// Regenerate bones from userId, merge with stored soul. Bones never persist
// so species renames and SPECIES-array edits can't break stored companions,
// and editing config.companion can't fake a rarity.
export function getCompanion(): Companion | undefined {
const stored = getGlobalConfig().companion
if (!stored) return undefined
const { bones } = roll(companionUserId())
return { ...stored, ...bones }
}U komentaru je jasno rečeno: Bones se nikada ne čuvaju, svaki put se iznova izračunavaju iz userId-ja. Tako čak i ako direktno uredite konfiguracionu datoteku, ne možete sebi falsifikovati Legendary ljubimca, jer će pri sledećem pokretanju Bones biti ponovo generisan i prepisaće vaše izmene.
Soul (duša, dakle ime i karakter) se čuva, jer ga generiše veliki model i pri svakom ponovnom generisanju bio bi drugačiji — zato mu je potreban kontinuitet.
Ovaj dizajn "nefalsifikovanog poštenja" čitavom sistemu ljubimaca daje dodatni sloj poverenja. Vaš Legendary je vaš i samo vaš, drugi ga nemaju, a ni vi ne možete da se pretvarate da ga imate.
To takođe čini da "deljenje ljubimca" dobije značaj. Ako na društvenim mrežama vidite nekoga ko se hvali Legendary ljubimcem, možete verovati da je zaista imao sreće, a ne da je photoeditovao ili falsifikovao konfiguraciju. Ovakva proverljiva retkost je suština NFT kulture, a Anthropic je primenjuje u alatima terminala.
08. Izvorni kod otkriva filozofiju proizvoda Anthropic-a
Prebrojao sam — u direktorijumu buddy/ postoji 6 datoteka: companion.ts, CompanionSprite.tsx, prompt.ts, sprites.ts, types.ts, useBuddyNotification.tsx. Svaka od njih pisana je sa pažnjom, a ne kao brzopleti kod.
U sprites.ts svaka vrsta ima 3 okvira animacije, sa 18 vrsta to je 54 okvira, a svaki okvir 5 redova koda. Samo ova jedna datoteka sadrži nekoliko stotina redova pažljivo formatirane ASCII umetnosti.
U types.ts dizajniran je kompletan sistem tipova: CompanionBones, CompanionSoul, StoredCompanion, Rarity, Species, Eye, Hat, StatName... kompletn model domena.

U companion.ts implementirani su Mulberry32 PRNG, algoritam težina retkosti, logika generisanja atributa i mehanizam keširanja — nije to nešto što se napiše za dva sata, već pažljivo dizajniran sistem.
Iza ove patke stoji barem jedan inženjer koji je potrošio nedelju ili dve.
Mislim da Anthropic želi da odgovori na pitanje: Šta još treba onima koji dugoročno koriste AI alate za programiranje, osim efikasnosti?
Razvoj je usamljen. Kasno u noći dok debagujete, niko nije pored vas. Kad u pola pisanja koda iskrsne greška, nema ko da te uteši. Sami nosite projekat na plećima i nekada je zaista teško.
Patka ne može rešiti te probleme. Ali patka sa imenom, sa karakterom i sa 1% šansom za Legendary, barem daje osećaj da nekome stalo do toga.
Još jedan detalj koji mi se urezao u sećanje: oblak razgovora ljubimca postepeno nestaje nakon što progovori, ne zaklanja vam pogled trajno. U izvornom kodu piše FADE_WINDOW = 6, pa za poslednjih 6 sekundi polako tamni. Kaže šta ima i odlazi, bez ometanja — projektovanje granice pažnje je upravo onakvo kakvo treba da bude.
9. Kako ovo opisati u biografiji
Ovaj sistem uskrsnih jaja dao mi je odličan ugao za predstavljanje u biografiji: pretvoriti "proučavanje izvornog koda" u "praksu arhitektonskog dizajna".
Naziv projekta: Deterministički sistem za generisanje ljubimaca zasnovan na hešu userId-ja (modelovano prema arhitekturi Claude Code Buddy)
Kratak opis: Referentno na sistem digitalnih ljubimaca iz curenog izvornog koda Claude Code-a, dizajniran je deterministički arhitektura za generisanje zasnovana na korisničkom ID-u, koja obezbeđuje "pošteno, transparentno, nefalsifikovano" personalizovano iskustvo.
Tehničke tačke:
- Koristi Mulberry32 pseudoslučajni generator, sa hešom userId-ja za determinističko generisanje, čime se garantuje "jedinstven i nefalsifikovan izgled"
- Dizajn sa dva odvojena sloja: Bones (deterministički izgled) i Soul (AI generisano ime/karakter), pri čemu se izgled nikada ne čuva, a duša se trajno pamti
- Konfiguracija težina retkosti: common(60%) / uncommon(25%) / rare(10%) / epic(4%) / legendary(1%), uz dodatnih 1% šanse za shiny
- Višeokvirni sistem ASCII animacija, 18 vrsta, sa po 3 okvira animacije po vrsti, implementiran preko mehanizma renderovanja sprite-ova za animaciju u terminalu
- Dizajn determinističkog algoritma slučajnosti koji obezbeđuje da isti korisnik uvek dobije isti rezultat, dok su rezultati različitih korisnika nepredvidivi
- Implementacija Bones/Soul arhitekture razdvajanja — Bones se pri svakom pokretanju izračunava iz heša radi poštenja, Soul se generiše jednom i trajno čuva radi kontinuiteta
- Dizajn sistema težina retkosti i logike generisanja atributa, sa diferencijalnom raspodelom za peak stat i dump stat
Ova arhitektura se može primeniti u mnogim B2C proizvodima: generisanje jedinstvenih avatara, jedinstvene šeme boja, jedinstvenih bedževa i jedinstvenih titula na osnovu korisničkog ID-a — uz personalizaciju, a bez pritiska na skladištenje na strani servera.
U poređenju sa tradicionalnim modelom "lutrije", determinističko generisanje je pravednije, transparentnije i lakše zadobija poverenje korisnika.
ending
Uvek sam mislio da se ljubav proizvođača prema korisnicima vidi po detaljima.
Ne po tome koliko su funkcije moćne, već po tome da li izvan funkcija razmišljaju i o jednom koraku više.
Claude Code je mogao sasvim dobro i bez ove patke. Bez nje bi se kod i dalje pisao, greške bi se ispravljale, Agent bi nastavio da radi.
Ali neki inženjer u Anthropic-u je jedne kasne noći razmisleo o sledećem: možemo li korisnicima pružiti malo druženje?
Zatim su to i uradili. Dizajnirali su 18 vrsta, 5 atributa, vreme lansiranja za Prvi april, duginu boju podsetnika, oblak koji polako nestaje... svaki detalj je pažljivo osmišljen.
Tehnički detalji takođe zaslužuju pažnju.
To što su izabrali Mulberry32 umesto Math.random je zbog determinizma — svako dobija ljubimca koji je jedinstven, trajan i nepromenljiv. Ovaj pristup dizajnu je u skladu sa suštinskom idejom NFT-ja na blokčeinu: algoritmom se garantuje poštenje, umesto da server kontroliše ishod.
Dizajn razdvajanja čuvanja Bones i Soul-a je takođe elegantan. Bones se pri svakom pokretanju iznova izračunava iz userId-ja, osiguravajući da retkost ne može da se falsifikuje; Soul se generiše samo jednom i trajno čuva, čime se obezbeđuje kontinuitet ljubimca. Jedan predstavlja poštenje, drugi emocije — oba su uzeta u obzir.

A ona duga linija /buddy prikazuje se samo pri prvom pokretanju, ako niste izlegli ljubimca. Čim dobijete svog ljubimca, ovaj podsetnik zauvek nestaje. Pojavljuje se u pravom trenutku i nestaje u pravom trenutku, bez ometanja.
Naročito mi se sviđa red koda SALT = 'friend-2026-401'.
friend, prijatelj. 2026-401, 1. april 2026.
Anthropic je u izvornom kodu, tiho, ostavio poruku za korisnike: danas je Claude Code dobio prijatelja.
To nije funkcija, to je pažnja.
[Patka sa 1% šansom za Legendary vredi čekati.]
Danas je 1. april 2026. Nije šala — Claude Code vam je zaista doneo prijatelja.
Nadogradite se na najnoviju verziju, otkucajte /buddy i pogledajte koju retkost ima vaš ljubimac. Ako izvučete Legendary, ne zaboravite da mi pošaljete screenshot, da mi bude zavidno.
vidimo se u sledećem!
