___
( )
.--.
/Β° Β° \ β
β
β
β
β
LEGENDARY MUSHROOM
(______) "Truffle"
| | WISDOM 100 Β· Hat: tophat
The Complete Encyclopedia & Customizer for Claude Code's /buddy System
18 species Β· 5 rarity tiers Β· 7,128 unique combinations Β· binary-level customization
Quick Start Β· Encyclopedia Β· Forge Β· How It Works Β· δΈζζζ‘£
/buddy is a virtual pet companion built into Claude Code β Anthropic's official coding CLI. Introduced on April 1, 2026, it hatches a unique ASCII art creature in your terminal that sits beside your input box, watches you code, and reacts with speech bubbles.
Every buddy is deterministically generated from your Anthropic account UUID. Same account, same buddy β on every device, every time.

This tool lets you browse the full buddy encyclopedia and forge any buddy you want by patching the generation seed in the Claude Code binary.
Requires Bun (ships with Claude Code).
git clone https://github.com/Combjellyshen/claude-buddy.git
cd claude-buddy
# See your destined buddy
bun run index.ts wiki me
# Forge a legendary dragon
bun run index.ts forge --species dragon --rarity legendarybun run index.ts wiki species
|
|
Every species has 3-frame idle animations (5 lines tall, ~12 chars wide). Eyes blink every few seconds. Example:
Duck Cat Dragon Ghost Mushroom Chonk
__ /\_/\ /\_ .---. .--. /\_/\
<(Β· )___ ( Β· Β· ) ( Β·}>~ | Β· Β· | /Β· Β· \ ( Β· Β· )
( ._> ( >o< ) /| | | | (______) ( )
`--Β΄ " " (_| | /\/\/\ | | ( )
" "
bun run index.ts wiki rarity| Tier | Probability | Stars | Base Stat Floor | Color |
|---|---|---|---|---|
| Common | 60% | β | 5 | Gray |
| Uncommon | 25% | β β | 15 | Green |
| Rare | 10% | β β β | 25 | Blue |
| Epic | 4% | β β β β | 35 | Magenta |
| Legendary | 1% | β β β β β | 50 | Gold |
Common ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 60%
Uncommon ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 25%
Rare βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 10%
Epic ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 4%
Legendary ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 1%
Shiny variant: Independent 1% chance on any rarity. A Shiny Legendary has a 0.01% probability β one in ten thousand.
bun run index.ts wiki statsEvery buddy has 5 attributes. Each has one peak stat (80β100) and one dump stat (1β15). Higher rarity = higher base floor.
| Stat | Meaning |
|---|---|
| DEBUGGING | Ability to spot bugs in your code |
| PATIENCE | Tolerance for long build times and flaky tests |
| CHAOS | Tendency to suggest wild refactors at 2am |
| WISDOM | Quality of code review commentary |
| SNARK | Sass level in speech bubble reactions |
Stat formula:
peak = min(100, floor + 50 + random Γ 30)
dump = max(1, floor - 10 + random Γ 15)
other = floor + random Γ 40
| Eye | Name | Vibe |
|---|---|---|
Β· |
Dot | Calm and collected |
β¦ |
Sparkle | Wide-eyed wonder |
Γ |
Crossed | Perpetually dizzy |
β |
Bullseye | Laser focused |
@ |
At-sign | Always online |
Β° |
Degree | Chill vibes |
| Hat | Note | |
|---|---|---|
| none | Common buddies always have no hat | |
| crown | π | Royalty vibes |
| tophat | π© | Distinguished gentleman |
| propeller | π§’ | Spins when excited |
| halo | π | Angelic aura |
| wizard | π§ | Arcane knowledge |
| beanie | π§Ά | Cozy and warm |
| tinyduck | π¦ | A tiny duck on top. Meta. |
Common buddies always get
none. Uncommon+ randomly roll from all 8 options (includingnone).
- Idle animation: 3-frame loop at 500ms with probability-weighted fidgets and blinks
- Reactions: Watches your conversation and generates speech bubbles (~10 seconds)
- Commands:
/buddy pet(floating hearts),/buddy mute(hide),/buddy off(dismiss) - Addressing by name: Say the buddy's name and it responds in its speech bubble
- Soul: Name + personality are AI-generated on first hatch, stored in
~/.claude.json - Bones: Species, rarity, stats, cosmetics are deterministic β re-derived from your UUID every session
18 species Γ 6 eyes Γ 5 rarities Γ 8 hats Γ 2 shiny states = 8,640 visual combos
Each with unique 5-stat distribution β effectively infinite personality variations
# Preview without changing anything
bun run index.ts forge --species dragon --rarity legendary --dry-run
# Apply the patch
bun run index.ts forge --species dragon --rarity legendary
# Show current buddy (with patch detection)
bun run index.ts show
# Restore original buddy
bun run index.ts restore- Reads your account UUID from
~/.claude.json - Brute-forces a salt suffix that produces your desired species + rarity (~seconds)
- Patches the 15-byte salt constant in the Claude Code binary (3 occurrences, in-place)
- Backs up the original binary to
*.buddy-backupbefore patching
| Flag | Description |
|---|---|
--species, -s |
Target species β one of: duck, goose, blob, cat, dragon, octopus, owl, penguin, turtle, snail, ghost, axolotl, capybara, cactus, robot, rabbit, mushroom, chonk |
--rarity, -r |
Target rarity β one of: common (60%), uncommon (25%), rare (10%), epic (4%), legendary (1%) |
--dry-run |
Preview result without patching |
--uuid <id> |
Override auto-detected UUID |
- Backup created automatically before every patch
restorecommand reverts to the original binary- Only the 15-byte salt string is modified β zero code changes
- The companion "soul" (name/personality) in
~/.claude.jsonis a separate layer
Your accountUuid is the same everywhere. Run forge with the same --species and --rarity on each machine β it will find the same salt because the UUID is identical.
Bones sync automatically β same UUID + same salt = same species, rarity, stats, eye, hat on every device.
Soul requires manual copy β the name and personality are AI-generated per device on first /buddy. To keep them consistent:
# On the machine that already has the buddy you like:
cat ~/.claude.json | grep -A3 companion
# Copy the "companion" block
# On the new machine, AFTER running forge but BEFORE running /buddy:
# Paste the "companion" block into ~/.claude.json
# This prevents /buddy from generating a new random nameTip: If you run
/buddybefore copying the soul, it will generate a new name. That's fine β the bones (species, rarity, stats) will still be correct.
βββββββββββββββ ββββββββββββ ββββββββββββββ ββββββββββββββ
β accountUuid ββββββΆβ + salt ββββββΆβ Bun.hash ββββββΆβ Mulberry32 β
β (per user) β β (15 chr) β β (wyhash) β β PRNG β
βββββββββββββββ ββββββββββββ ββββββββββββββ βββββββ¬βββββββ
β
βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββ rng() ββββ rarity (weighted: 60/25/10/4/1)
βββββ rng() ββββ species (1 of 18)
βββββ rng() ββββ eye (1 of 6)
βββββ rng() ββββ hat ("none" if common, else 1 of 8)
βββββ rng() ββββ shiny (< 0.01 = true)
βββββ rng() ββββ stats (peak/dump/other per 5 attributes)
// Hash: Bun's wyhash truncated to 32 bits
uE4(s) β Number(BigInt(Bun.hash(s)) & 0xffffffffn)
// PRNG: Mulberry32 variant
xE4(seed) β function() {
a = (a + 0x6d2b79f5) | 0;
t = Math.imul(a ^ a >>> 15, 1 | a);
t = (t + Math.imul(t ^ t >>> 7, 61 | t)) ^ t;
return ((t ^ t >>> 14) >>> 0) / 4294967296;
}
// Salt constant (what forge patches)
gE4 = "friend-2026-401" // 15 bytes, appears 3 times in binaryClaude Code runs on the Bun runtime. The hash function uE4() has two code paths:
if (typeof Bun < "u")
return Number(BigInt(Bun.hash(s)) & 0xffffffffn); // wyhash β USED AT RUNTIME
else
return fnvHash(s); // FNV-1a β fallback, never reachedTools using FNV-1a (like the Claude Buddy Checker) produce different results than the actual runtime. This tool uses Bun.hash and has been verified against real Claude Code output.
| Layer | Contains | Storage | Mutability |
|---|---|---|---|
| Bones | species, rarity, eye, hat, shiny, stats | Re-derived from hash every session | Fixed per UUID+salt |
| Soul | name, personality | ~/.claude.json β companion |
AI-generated on first hatch, per device |
The "soul" is generated by Claude on first /buddy invocation and stored permanently. The "bones" are never persisted β they're recomputed from hash(uuid + salt) on every startup. This is why editing ~/.claude.json can change the name but not the species.
claude-buddy/
βββ index.ts CLI entry point (wiki / forge / show / restore)
βββ src/
β βββ data.ts Encyclopedia data (species, sprites, descriptions)
β βββ engine.ts Core engine (Bun.hash + Mulberry32 PRNG + brute-force)
β βββ display.ts Terminal renderer (colored cards, stat bars)
β βββ patcher.ts Binary patcher (detect, backup, patch, restore)
βββ test/
β βββ engine.test.ts Verified against real Claude Code output
βββ README.md
βββ README_CN.md δΈζζζ‘£
βββ package.json
The buddy system was discovered on March 31, 2026 when Anthropic accidentally shipped a .map sourcemap file in the npm package @anthropic-ai/claude-code v2.1.88, exposing the entire 512,000-line TypeScript codebase. The species names were obfuscated via String.fromCharCode() arrays to prevent string-searching, but were trivially decoded by the community within hours.
| Project | Description |
|---|---|
| Claude Buddy Checker | Web-based buddy preview (uses FNV-1a, may differ from actual) |
| Claude Code Buddy Gallery | Interactive gallery of all 18 species |
| Buddy animation sprites | Python script generating animated sprite GIF |
| any-buddy | Alternative buddy picker |
| buddy-evolution | RPG evolution proof-of-concept |
- SmartScope β What Is Claude Code's /buddy?
- Kuber Studio β Claude Code Source Leak Breakdown
- Hacker News β Check Your Claude Code Buddy
- aired.sh β Hidden & Unreleased Features Report
- Twitter/X β @claudebuddies
- Twitter/X β @byteHumi breakdown
- Reddit r/ClaudeAI
- GitHub Issue #41684 β RPG evolution proposal
MIT