Skip to content
news12 min read

Claude Code Has a Hidden Tamagotchi: 18 Species, RPG Stats, and Shiny Variants

Hidden behind a feature flag: Claude Code contains a full Tamagotchi system called Buddy. 18 species across 5 rarity tiers, 5 RPG stats, shiny variants, ASCII sprites, and AI-generated souls.

Author
Anthony M.
12 min readVerified April 1, 2026Tested hands-on
Claude Code Buddy System — 18 ASCII species companions living in your terminal, from common ducks to legendary chonks
The Buddy System: Anthropic's hidden Tamagotchi living inside Claude Code, leaked via a forgotten sourcemap.

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.

Grid showing all 18 Buddy species from Common duck and goose to Legendary mushroom and chonk
All 18 species from the Buddy System — from humble ducks to the mythical chonk.

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 TierDrop RateStarsSpeciesStat Floor
Common60%Duck, Goose, Blob, Cat, Dragon, Octopus5
Uncommon25%★★Owl, Penguin, Turtle, Snail15
Rare10%★★★Ghost, Axolotl, Capybara25
Epic4%★★★★Cactus, Robot, Rabbit35
Legendary1%★★★★★Mushroom, Chonk50

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

StatWhat It DoesHigh Score Vibe
DEBUGGINGHow helpful the buddy is at spotting bugs"Actually, line 47 has a race condition"
PATIENCETolerance for long coding sessions"Take your time, we've got all night"
CHAOSTendency to make unpredictable comments"Have you tried rewriting it in Brainfuck?"
WISDOMDepth and relevance of observations"This design pattern will haunt you in 6 months"
SNARKSarcasm 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.

RPG stat bars showing Debugging, Patience, Chaos, Wisdom, and Snark stats for a Legendary buddy companion
Every buddy gets a unique stat spread — peak stats, dump stats, and everything in between.

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/sleeping
  • o — 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:

CombinationProbabilityOdds
Shiny Common0.60%1 in 167
Shiny Uncommon0.25%1 in 400
Shiny Rare0.10%1 in 1,000
Shiny Epic0.04%1 in 2,500
Shiny Legendary0.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.

Crumbshaker the rabbit buddy companion sitting next to the Claude Code input box with a speech bubble
Crumbshaker — the Epic rabbit already lurking in Claude Code's system prompt.

/buddy Commands: How to Interact

The leaked code reveals three commands:

CommandWhat It Does
/buddyHatches your buddy on first use, shows it on subsequent uses
/buddy petFloating hearts appear above your buddy (yes, really)
/buddy muteHides 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.

Related Articles

Was this review helpful?
Anthony M. — Founder & Lead Reviewer
Anthony M.Verified Builder

We're developers and SaaS builders who use these tools daily in production. Every review comes from hands-on experience building real products — DealPropFirm, ThePlanetIndicator, PropFirmsCodes, and many more. We don't just review tools — we build and ship with them every day.

Written and tested by developers who build with these tools daily.