When Claude Code first came out there was a little easter egg discoverable by looking through the source on release day: if you asked about swag, a Google Form would pop up. The Claude Code team actually hand-packed the mailers for the first 1k folks.
Claude Code’s source code was leaked which leads to another easter egg, their April Fools joke this year: a “tamagotchi”-style buddy strangely reminiscent of Figma’s April Fools in 2025, FigPals.
Thanks to the source leak, we can reverse engineer how the buddy system works. Let’s hunt some pokemon buddies:
The Buddy System
Buddies are broken down by rarity, species, eye, hat, shiny, and stats:
Stats and shiny appear to be dead code, rolled but never consumed. Here’s what they all actually look like:
Your buddy is determined strictly by your userId and a fixed SALT:
export function companionUserId(): string {
const config = getGlobalConfig();
return config.oauthAccount?.accountUuid ?? config.userID ?? "anon";
}
export function roll(userId: string): Roll {
const key = userId + SALT;
if (rollCache?.key === key) return rollCache.value;
const value = rollFrom(mulberry32(hashString(key)));
rollCache = { key, value };
return value;
}
Notice mulberry32 being used: a 32-bit deterministic pseudo-random number generator. It is not cryptographically secure, but the source indicates it is “good enough for picking ducks”. Because it operates in a 32-bit space, there are exactly 2^32 (about 4.29 billion) possible PRNG states, which is trivial for a modern CPU to brute force in seconds. That means you can pick any combo you want and find a matching UUID in seconds, just using your browser. So let’s do exactly that…
Build your own
Choose your ideal species, eyes, hat, rarity, and shiny. We’ll brute-force a UUID that rolls your exact combo, right in your browser:
To use your UUID, edit ~/.claude.json and change oauthAccount.accountUuid to the generated value, then restart Claude Code. As far as I can tell, changing this value has no negative effect on how Claude Code operates, but it doesn’t hurt to capture a backup first.
Since the name and personality are LLM-generated (not deterministic), they’re stored in a separate companion section you can also customize freely:
{
"oauthAccount": {
"accountUuid": "461d455b-53f9-4f07-87c5-46dc0e2db302"
},
"companion": {
"name": "Gristle",
"personality": "Insists every variable name should rhyme with the one above it."
}
}
So go ahead, build your shiny wizard axolotl, give it whatever name you want, and let it judge your code.

But wait: there’s more!
This post was written before the buddy system came out, now that it is out in Claude Code v2.1.89 (just type /buddy) I’ve uncovered a little more info.
It looks like buddies also get names, and all the previously unused stats (shiny, etc.) influence the name and personality. Here’s the system prompt:
You generate coding companions — small creatures that live in a developer’s terminal and occasionally comment on their work.
Given a rarity, species, stats, and a handful of inspiration words, invent:
- A name: ONE word, max 12 characters. Memorable, slightly absurd. No titles, no “the X”, no epithets. Think pet name, not NPC name. The inspiration words are loose anchors — riff on one, mash two syllables, or just use the vibe. Examples: Pith, Dusker, Crumb, Brogue, Sprocket.
- A one-sentence personality (specific, funny, a quirk that affects how they’d comment on code — should feel consistent with the stats)
Higher rarity = weirder, more specific, more memorable. A legendary should be genuinely strange. Don’t repeat yourself — every companion should feel distinct.
The user message is templated with the buddy’s rolled traits and 4 random inspiration words picked from a bank, e.g.:
Generate a companion.
Rarity: LEGENDARY
Species: owl
Stats: debugging:86 patience:51 chaos:80 wisdom:71 snark:100
Inspiration words: cobble, fennel, apex, murmur
SHINY variant — extra special.
Make it memorable and distinct.
If the API call fails, it falls back to one of 6 hardcoded default names. Here’s the 6 hardcoded fallback names and the complete 156-word inspiration bank:
There’s also an interesting “reaction” system: occasionally (or when addressed directly) your buddy will react to what is going on in your Claude Code session. As you would expect, the endpoint (POST /api/organizations/{org_uuid}/claude_code/buddy_react) also takes the buddy’s name, personality, species, rarity, and stats (debugging, patience, chaos, wisdom, snark) into account. These reactions don’t count against your usage quota though… free inference, anybody?