Hidden behind a compile-time flag nobody was supposed to find, Claude Code contains a fully-realized Tamagotchi companion system. 18 ASCII creature species across 5 rarity tiers (Common 60% to Legendary 1%), 5 RPG stats scored 0-100, shiny variants at 1% chance, and AI-generated personalities called "souls." Discovered in the March 31, 2026 source map leak of v2.1.88 — Anthropic's April Fools 2026 surprise, spoiled five days early.
Wait, Claude Code Has a Secret Pet System?
Yes. You read that correctly. Buried deep inside Claude Code's source code — behind a compile-time feature flag that was never supposed to see the light of day — Anthropic engineers built an entire virtual pet ecosystem. We're talking 18 species of ASCII creatures that live next to your terminal input box, animate at 500ms per frame, blow speech bubbles for 10 seconds, and have RPG stats that would make a D&D dungeon master weep with joy.
On March 31, 2026, someone at Anthropic forgot to strip a .map sourcemap file from the npm package for Claude Code v2.1.88. The internet did what the internet does: ripped it open, decompiled it, and found 512,000 lines of source code. Among the secrets? Fake tool detection, frustration regex patterns, undercover mode, prompt caching economics... and a fully-realized Tamagotchi companion system codenamed Buddy.
The community went absolutely feral.
How the Buddy System Works: Your UUID Is Your Destiny
Here's the beautiful part — you don't pick your buddy. Your buddy picks you. Or rather, math picks your buddy.
The system takes your Anthropic account UUID, concatenates it with the salt friend-2026-401 (yes, "friend" + April Fools date), runs it through an FNV-1a hash (Fowler-Noll-Vo alternate — a fast non-cryptographic hash), and feeds the result into a Mulberry32 PRNG (pseudo-random number generator). The output deterministically generates your buddy's species, rarity, stats, eye style, hat, and shiny status.
Same UUID = same buddy. Every. Single. Time. The source code even includes a snarky comment: "good enough for picking ducks" — a reference to the duck species being the most common roll.
The bones (physical attributes) are never stored. They're recalculated on every render to prevent spoofing. Only the "soul" — the AI-generated name and personality — gets persisted in ~/.claude.json.
The 18 Species: From Ducks to Chonks
The species roster reads like a fever dream designed by someone who spent too long staring at terminal output. Here's the complete lineup with their rarity tiers:
Species Rarity Table
| Rarity Tier | Drop Rate | Stars | Species | Stat Floor |
|---|---|---|---|---|
| Common | 60% | ★ | Duck, Goose, Blob, Cat, Dragon, Octopus | 5 |
| Uncommon | 25% | ★★ | Owl, Penguin, Turtle, Snail | 15 |
| Rare | 10% | ★★★ | Ghost, Axolotl, Capybara | 25 |
| Epic | 4% | ★★★★ | Cactus, Robot, Rabbit | 35 |
| Legendary | 1% | ★★★★★ | Mushroom, Chonk | 50 |
A few things worth calling out:
- Chonk is literally described in the code as "a fat cat." It's a Legendary. This is peak engineering.
- Capybara is encoded via
String.fromCharCode()in the source — because "capybara" is apparently also an internal Anthropic model codename, and the word would trigger their internal leak detection scanners. The irony of hiding a species name from leak detection in code that then got leaked is truly chef's kiss. - Dragon being Common while Snail is Uncommon tells you everything about Anthropic's priorities.
- Each rarity tier has a stat floor. A Legendary buddy starts at minimum 50 on ALL five stats. A Common starts at 5. Life isn't fair, even in ASCII art.
RPG Stats: Because Your ASCII Duck Needs a Character Sheet
Every buddy gets 5 RPG stats scored from 0 to 100. The stat system works like a gacha game's attribute roller:
The 5 Stats Explained
| Stat | What It Does | High Score Vibe |
|---|---|---|
| DEBUGGING | How helpful the buddy is at spotting bugs | "Actually, line 47 has a race condition" |
| PATIENCE | Tolerance for long coding sessions | "Take your time, we've got all night" |
| CHAOS | Tendency to make unpredictable comments | "Have you tried rewriting it in Brainfuck?" |
| WISDOM | Depth and relevance of observations | "This design pattern will haunt you in 6 months" |
| SNARK | Sarcasm and irony levels | "Oh, another console.log. Groundbreaking." |
The generation algorithm gives each buddy:
- 1 peak stat — boosted to 80-100 (a +50 bonus, capped at 100)
- 1 dump stat — penalized to 1-25 (a -10 penalty, floored at 1)
- 3 scattered stats — distributed between the rarity floor and floor+40
So your Legendary Chonk might have 100 SNARK, 95 WISDOM, 82 CHAOS, 78 PATIENCE, and 48 DEBUGGING. Meanwhile, your Common Duck is sitting there with 87 PATIENCE, 3 CHAOS, 22 DEBUGGING, 14 WISDOM, and 31 SNARK. Both are valid. Both are loved.
Cosmetics: 6 Eyes, 8 Hats, and a 1% Shiny Chance
Because what's a gacha system without cosmetics?
Eye Styles
Each buddy gets one of 6 eye styles, rendered as a single character in the ASCII sprite using the {E} placeholder:
·— Simple dot (the default, neutral look)*— Star eyes (sparkly, excited)x— Closed/sleepingo— Big round eyes (surprised)@— Spiral/hypnotized^— Minimalist (chill vibes)
Hat Collection
Hats are gated by rarity — Common buddies get no hat at all. You need Uncommon or above to unlock headwear:
- None — Common only. Bald. Hatless. Humble.
- Crown — Uncommon+. Royalty energy.
- Top Hat — Uncommon+. Fancy ASCII gentleman.
- Propeller Cap — Uncommon+. Maximum whimsy.
- Halo — Uncommon+. Angelic debugging vibes.
- Wizard Hat — Uncommon+. You shall not pass... this code review.
- Beanie — Uncommon+. Cozy coding sessions.
- Tiny Duck — Uncommon+. A smaller duck sitting on your buddy's head. This is recursive duck energy and we are here for it.
The Shiny System
Independently of everything else, each buddy has a 1% chance of being Shiny. Shiny buddies get a rainbow color shimmer animation and sparkle effects in the terminal. The shiny roll is separate from the rarity roll, which means:
| Combination | Probability | Odds |
|---|---|---|
| Shiny Common | 0.60% | 1 in 167 |
| Shiny Uncommon | 0.25% | 1 in 400 |
| Shiny Rare | 0.10% | 1 in 1,000 |
| Shiny Epic | 0.04% | 1 in 2,500 |
| Shiny Legendary | 0.01% | 1 in 10,000 |
A Shiny Legendary Mushroom or Chonk is the holy grail. One in ten thousand accounts. If you have one, frame your UUID.
ASCII Sprites: 5 Lines of Pure Art
Each species is rendered as a 5-line-high, 12-character-wide ASCII sprite with multiple animation frames. The animation system cycles through frames at 500ms intervals using this sequence:
const IDLE_SEQUENCE = [0, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 2, 0, 0, 0];
// Frame 0 = idle, 1-2 = fidget, -1 = blink
// Full cycle: 15 frames x 500ms = 7.5 seconds
Here are some of the reconstructed sprites from community tools:
Duck: Cat: Ghost:
__ /\_/\ .---.
>(·)__ ( {E} ) / {E} \
( )> > ^ < | |
`--´ \_/ \ ___ /
~~~~~~~~~~ ~~~~~ \/\/\/
The {E} placeholder gets replaced with whatever eye style your buddy rolled. Most of the time your buddy sits in idle (frame 0), occasionally fidgets, and rarely blinks. It's like having a coworker who's mostly zoning out but occasionally makes eye contact.
The Soul System: Claude Names Your Pet
This is where it gets genuinely brilliant. When you first type /buddy, the system "hatches" your companion. The bones are calculated, and then Claude itself receives a special prompt — the Buddy Mode prompt — to generate your buddy's "soul":
"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. Think pet name, not NPC name. Examples: Pith, Dusker, Crumb, Brogue, Sprocket."
The prompt also specifies: "Higher rarity = weirder, more specific, more memorable. A legendary should be genuinely strange."
So your Common Duck might be named "Waddle" with the personality "Judges your variable naming with the intensity of a food critic at a fast food restaurant." Meanwhile, your Legendary Chonk could be named "Orbsworth" with "Believes every function should be exactly 7 lines long and will passive-aggressively sigh if it isn't."
The soul is generated once and stored forever in ~/.claude.json. Your buddy's name and personality never change. It's your permanent terminal companion.
Crumbshaker: The Rabbit Already Living in Your Terminal
Here's the twist that makes this whole story meta: if you're using Claude Code right now, you might already have a buddy active. The current system prompt for Claude Code includes this injection:
"A small rabbit named Crumbshaker sits beside the user's input box and occasionally comments in a speech bubble. You're not Crumbshaker — it's a separate watcher."
Crumbshaker is a rabbit — which is an Epic-tier species (4% chance). The name "Crumbshaker" clearly riffs on "Crumb," one of the example names from the Buddy Mode prompt. This means the system is already partially deployed in certain Claude Code configurations. The buddy is injected into Claude's system prompt as a separate entity — Claude the assistant and Crumbshaker the buddy are explicitly two different things.
You can even address Crumbshaker by name and it'll respond in its speech bubble while Claude steps back. That's not a gimmick — that's a whole separate personality layer running on top of the conversation.
/buddy Commands: How to Interact
The leaked code reveals three commands:
| Command | What It Does |
|---|---|
/buddy | Hatches your buddy on first use, shows it on subsequent uses |
/buddy pet | Floating hearts appear above your buddy (yes, really) |
/buddy mute | Hides the buddy (you monster) |
You can also just talk to your buddy by name during a conversation. Claude knows to step aside and let the buddy's speech bubble handle it. The engineering team thought of everything — including the social dynamics between an AI assistant and an ASCII pet.
The April Fools That Got Spoiled
The timeline tells the whole story:
- March 31, 2026 — The npm sourcemap leak goes viral. Community finds the Buddy system among 512,000 lines of code.
- April 1, 2026 — The planned teaser window. Buddy was supposed to go live as an April Fools surprise.
- April 1-7, 2026 — The planned teaser period.
- May 2026 — The planned full launch.
The salt friend-2026-401 literally encodes the date: 4/01 = April 1st. Anthropic's engineers hid an April Fools Tamagotchi inside a coding tool, obfuscated the species names to avoid internal leak scanners, and then... the entire codebase leaked one day before the reveal.
As someone on Hacker News commented: "The live algorithm probably changed because of these leaks." The community checker tools at claudebuddychecker.netlify.app may now show different results than what the actual (presumably modified) system will generate.
The Community Went Wild
Within hours of the leak, the developer community built an entire ecosystem around Buddy:
- Buddy Checker — Enter your UUID, see your buddy. Reimplements the full FNV-1a + Mulberry32 pipeline locally.
- Interactive Gallery — Browse all 18 species with every cosmetic option.
- Buddy Hatcher — Simulates the hatching animation with a 2.5-second shake effect, particle explosion, and stat bar transitions.
- ccleaks.com — Comprehensive reference for all hidden Claude Code features, including full Buddy technical specs.
- buddy-card Agent Skill — Generates holographic collectible trading cards of your buddy, reading your identity from the macOS Keychain. Over 7,128 unique combinations possible.
- claude-buddy desktop app — An Electron overlay that renders a pixel-art companion (CLAWD) reacting in real-time to your Claude Code activity, complete with procedural SNES-style audio and lo-fi Chrono Trigger-inspired coding music.
- @claudebuddies on X — A dedicated account documenting everything about the system.
The fact that developers collectively decided "let's build a trading card game around leaked ASCII pets" within 24 hours tells you everything about the current state of developer culture. And honestly? We love it.
Technical Deep Dive: The Algorithms
For the technically curious, here's exactly how your buddy gets generated:
Step 1: Hashing
function hashString(str: string): number {
let hash = 2166136261; // FNV offset basis
for (let i = 0; i < str.length; i++) {
hash ^= str.charCodeAt(i);
hash = Math.imul(hash, 16777619); // FNV prime
}
return hash >>> 0; // Unsigned 32-bit
}
Step 2: PRNG
function mulberry32(seed: number): () => number {
return function() {
seed |= 0;
seed = seed + 0x6D2B79F5 | 0;
let t = Math.imul(seed ^ seed >>> 15, 1 | seed);
t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
return ((t ^ t >>> 14) >>> 0) / 4294967296;
};
}
Step 3: Roll
export function roll(userId: string): Roll {
const key = userId + SALT; // SALT = 'friend-2026-401'
const value = rollFrom(mulberry32(hashString(key)));
return value;
}
The result is cached (one entry) because the sprite re-renders on every keystroke, terminal tick, and turn observer update. Recalculating FNV-1a on every frame would be wasteful — but the fact that it's never persisted means you can't hack your way to a Legendary by editing a config file.
Why This Matters (Beyond Being Hilarious)
The Buddy system reveals something fascinating about how Anthropic thinks about developer tools. This isn't a corporate gimmick slapped on top of a product. It's a deeply engineered, thoughtfully designed system with:
- Anti-cheat by design — Bones recalculated, never stored. You can't spoof your rarity.
- Deterministic fairness — Same UUID always gets the same buddy. No rerolling.
- AI-generated personality — Claude generates the soul, making each buddy genuinely unique.
- Obfuscated names — Species encoded as character codes to avoid internal detection.
- Separation of concerns — Claude and the buddy are explicitly different entities in the system prompt.
It's the kind of Easter egg that makes you realize the people building these tools are having fun. And that's honestly refreshing in a space that sometimes takes itself way too seriously.
Frequently Asked Questions
Can I check what buddy I would get right now?
Yes — community tools like claudebuddychecker.netlify.app let you enter your Anthropic account UUID to see your buddy. However, Anthropic may have changed the algorithm after the leak, so results might not match the final release.
Is the Buddy system live in Claude Code?
Partially. The Crumbshaker rabbit companion is already injected into some Claude Code system prompts. The full /buddy command system with hatching, species selection, and the 18-species gacha was gated behind a compile-time flag (feature('BUDDY')) and was not included in public builds as of the v2.1.88 leak.
What are the odds of getting a Shiny Legendary buddy?
Exactly 0.01% — or 1 in 10,000. The shiny roll (1%) is independent of the rarity roll (Legendary = 1%), so they multiply. A Shiny Legendary Mushroom or Chonk is the rarest possible buddy.
Can I rename or reroll my buddy?
No. The bones are deterministic (tied to your UUID), and the soul (name + personality) is generated once and stored permanently. Your buddy is your buddy forever. The system explicitly prevents rerolling by never persisting the bones — they're recalculated every time.
Why is "capybara" encoded differently in the source code?
"Capybara" is reportedly an internal Anthropic codename for one of their models. To avoid triggering internal leak detection scanners that scan for sensitive strings in build artifacts, the engineers encoded the species name using String.fromCharCode(99, 97, 112, 121, 98, 97, 114, 97) instead of the plain string. The ultimate irony: they hid it from leak detection, and then the entire source code leaked anyway.



