Easter Eggs & Hidden Features in Claude Code
A collection of easter eggs, undocumented behaviors, internal codenames, and surprising details found in the Claude Code source code. Organized by category.
- The Buddy / Companion Pet System
- Undercover Mode
- Internal Model Codenames
- The "Young Wizard" API Comment
- Rainbow Text Effects
- CLAUBBIT — Skip All Permission Dialogs
- Hard-Coded Internal Slack Channel
- @[MODEL LAUNCH] Checklist Markers
- KAIROS — The Mystery Mega-Feature
- Spinner Verbs — 204 Creative Loading Messages
- Turn Completion Verbs
- Clawd — The Animated ASCII Mascot
- ANT-ONLY Dead Code Elimination
- April Fools Day Time-Gating
- fun_ending — AI Finds Your Funniest Session Moment
- Magic Setup URLs
- PROACTIVE / Autonomous Tick Mode
- Ultrareview — Paid Code Review with Balance Gate
- /stickers — Opens a Merch Store
- Voice Mode Kill Switch — "Amber Quartz"
- Analytics Kill Switch — "Frond Boric"
- Shiny Buddy — 1% Chance
- Multi-Clauding Detection
- All Hidden / Stub Commands
- System Prompt Engineering Details
- GrowthBook Feature Flags
Files: src/buddy/
A complete RPG-style companion pet system is gated behind feature('BUDDY'). A small
animated creature sits next to your input box and occasionally speaks in a speech bubble.
The buddy's appearance and stats are deterministically generated from your user ID using
the Mulberry32 PRNG
with the hard-coded salt 'friend-2026-401' — meaning every user gets a unique,
reproducible companion for life.
duck, goose, blob, cat, dragon, octopus, owl, penguin, turtle, snail,
ghost, axolotl, capybara, cactus, robot, rabbit, mushroom, chonk
Note: Every species name is encoded as raw hex character codes (e.g.
c(0x63,0x61,0x70,0x79,0x62,0x61,0x72,0x61)="capybara") to prevent build-tooling string scanners from flagging the internal model codename. See §3 Internal Model Codenames.
· ✦ × ◉ @ °
none, crown, tophat, propeller, halo, wizard, beanie, tinyduck
DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK
| Tier | Weight | Stat Floor | Stars |
|---|---|---|---|
| common | 60% | 5 | ★ |
| uncommon | 25% | 15 | ★★ |
| rare | 10% | 25 | ★★★ |
| epic | 4% | 35 | ★★★★ |
| legendary | 1% | 50 | ★★★★★ |
- Bones (deterministic): rarity, species, eye, hat, shiny, stats — derived from
hash(userId + 'friend-2026-401')fed into Mulberry32 - Soul (model-generated): name and personality — generated by the model on first hatch
and stored in
~/.claude/config - The companion is introduced to Claude via a system prompt segment:
"A small {species} named {name} sits beside the user's input box and occasionally comments in a speech bubble. You're not {name} — it's a separate watcher."
There is a 1% chance (independent of rarity) that any buddy is "shiny". This is a
Pokémon-style rarity mechanic: rng() < 0.01 in src/buddy/companion.ts.
File: src/utils/undercover.ts
When active, Claude is given strict instructions never to reveal that it is an AI, never to mention internal model codenames, and to write commit messages "as a human developer would."
## UNDERCOVER MODE — CRITICAL
You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. Your commit
messages, PR titles, and PR bodies MUST NOT contain ANY Anthropic-internal
information. Do not blow your cover.
NEVER include in commit messages or PR descriptions:
- Internal model codenames (animal names like Capybara, Tengu, etc.)
- Unreleased model version numbers (e.g., opus-4-7, sonnet-4-8)
- Internal repo or project names (e.g., claude-cli-internal, anthropics/…)
- Internal tooling, Slack channels, or short links (e.g., go/cc, #claude-code-…)
- The phrase "Claude Code" or any mention that you are an AI
- Any hint of what model or version you are
- Co-Authored-By lines or any other attribution
GOOD commit messages (examples given in code):
"Fix race condition in file watcher initialization""Add support for custom key bindings"
BAD commit messages (explicitly blocked):
"Fix bug found while testing with Claude Capybara""1-shotted by claude-opus-4-6""Generated with Claude Code""Co-Authored-By: Claude Opus 4.6"
CLAUDE_CODE_UNDERCOVER=1— force ON- Auto-activates unless the repo remote matches an internal allowlist
- There is deliberately no force-OFF. Safe default is always ON.
- All code is gated on
process.env.USER_TYPE === 'ant'— dead-code-eliminated from external builds entirely.
The CLI codebase references several internal Anthropic model codenames, all animal names:
| Codename | Status / Notes |
|---|---|
| Tengu | The CLI itself — all 40+ telemetry events are prefixed tengu_* |
| Capybara | An internal model version; name hex-encoded in buddy species list |
| Fennec | Previous model version; migrated via migrateFennecToOpus.ts |
| Numbat | Future/unreleased model — comment says "Remove this section when we launch numbat" |
"Amber Quartz" appears to be the internal codename for the voice feature (see §20).
File: src/query.ts (~line 162)
A developer warning about API rules written in archaic fantasy prose:
/**
* The rules of thinking are lengthy and fortuitous. They require plenty of
* thinking of most long duration and deep meditation for a wizard to wrap
* one's noggin around.
*
* The rules follow:
* 1. A message that contains a thinking or redacted_thinking block must be
* part of a query whose max_thinking_length > 0
* 2. A thinking block may not be the last message in a block
* 3. Thinking blocks must be preserved for the duration of an assistant
* trajectory ...
*
* Heed these rules well, young wizard. For they are the rules of thinking,
* and the rules of thinking are the rules of the universe. If ye does not
* heed these rules, ye will be punished with an entire day of debugging
* and hair pulling.
*/File: src/utils/thinking.ts
Certain keywords trigger per-character rainbow coloring cycling through Red → Orange → Yellow → Green → Blue → Indigo → Violet:
/think— rainbow colors (gated on GrowthBook flagtengu_turtle_carbon)ultrathink— same rainbow effect/ultraplanand/ultrareview— rainbow rendered inPromptInput.tsx- The
/buddyteaser notification on startup also uses rainbow text
A shimmer variant (shimmer = true) provides an alternating phase offset for each
character, giving a wave animation effect.
Files: src/interactiveHelpers.tsx, src/services/analytics/metadata.ts
Setting CLAUBBIT=1 bypasses all trust and permission dialog initialization. The name
appears to be a portmanteau of Claude + rabbit (🐇). Sessions run with this flag
are tracked in analytics as isClaubbit: true.
// Skip permission checks in claubbit
if (!isEnvTruthy(process.env.CLAUBBIT)) {
// ... permission dialog setup
}The internal Anthropic Slack channel #claude-code-feedback with channel ID
C07VBSHV7EV is hard-coded in several places throughout the source. Diagnostic outputs
suggest posting there, session investigation tools reference it, and there is an MCP Slack
tool integration capable of auto-posting diagnostics directly to this channel.
30+ locations throughout src/
Every planned model launch has pre-placed checklist markers scattered across the codebase with instructions for what to change. Examples:
// @[MODEL LAUNCH]: Update the latest frontier model
// @[MODEL LAUNCH]: Update comment writing for Capybara
// @[MODEL LAUNCH]: Remove this section when we launch numbat.
// @[MODEL LAUNCH]: Add the new model to the allowlist if it supports...This is a code-embedded launch checklist — a glimpse into Anthropic's model release process.
Files: src/commands.ts, src/interactiveHelpers.tsx, src/keybindings/defaultBindings.ts
feature('KAIROS') and its variants gate an extensive set of capabilities:
| Flag | Purpose |
|---|---|
KAIROS |
Core feature — enables /brief, /assistant, additional keybindings |
KAIROS_BRIEF |
Brief mode output style |
KAIROS_CHANNELS |
Channel-based communication |
KAIROS_GITHUB_WEBHOOKS |
GitHub webhook subscriptions via /subscribe-pr |
KAIROS_DREAM |
A mysterious "dream" subsystem that activates alongside KAIROS |
KAIROS_CRON / KAIROS_CRON_CONFIG |
Scheduled/cron execution |
"Kairos" is a Greek word meaning the opportune or right moment. The feature appears to be a large unreleased proactive AI assistant capability that works autonomously between user turns.
File: src/constants/spinnerVerbs.ts
While Claude is thinking, a random verb from a list of 204 is shown (e.g., "Thinking…",
"Calculating…"). Users can override or extend this list via settings.spinnerVerbs.
Highlights from the full list:
| Category | Examples |
|---|---|
| Cooking | Baking, Brewing, Caramelizing, Flambéing, Julienning, Kneading, Sautéing, Whisking, Zesting |
| Nonsense words | Beboppin', Boondoggling, Booping, Discombobulating, Fiddle-faddling, Flibbertigibbeting, Lollygagging, Recombobulating, Tomfoolering, Whatchamacalliting, Wibbling |
| Science-y | Hyperspacing, Ionizing, Nebulizing, Osmosing, Photosynthesizing, Quantumizing, Sublimating |
| Dancing | Boogieing, Jitterbugging, Moonwalking, Shimmying, Sock-hopping |
| Unique to Claude | Clauding |
The verb "Clauding" — used as a loading message — exists only in this codebase.
Full list of all 204 verbs
Accomplishing, Actioning, Actualizing, Architecting, Baking, Beaming, Beboppin', Befuddling, Billowing, Blanching, Bloviating, Boogieing, Boondoggling, Booping, Bootstrapping, Brewing, Bunning, Burrowing, Calculating, Canoodling, Caramelizing, Cascading, Catapulting, Cerebrating, Channeling, Channelling, Choreographing, Churning, Clauding, Coalescing, Cogitating, Combobulating, Composing, Computing, Concocting, Considering, Contemplating, Cooking, Crafting, Creating, Crunching, Crystallizing, Cultivating, Deciphering, Deliberating, Determining, Dilly-dallying, Discombobulating, Doing, Doodling, Drizzling, Ebbing, Effecting, Elucidating, Embellishing, Enchanting, Envisioning, Evaporating, Fermenting, Fiddle-faddling, Finagling, Flambéing, Flibbertigibbeting, Flowing, Flummoxing, Fluttering, Forging, Forming, Frolicking, Frosting, Gallivanting, Galloping, Garnishing, Generating, Gesticulating, Germinating, Gitifying, Grooving, Gusting, Harmonizing, Hashing, Hatching, Herding, Honking, Hullaballooing, Hyperspacing, Ideating, Imagining, Improvising, Incubating, Inferring, Infusing, Ionizing, Jitterbugging, Julienning, Kneading, Leavening, Levitating, Lollygagging, Manifesting, Marinating, Meandering, Metamorphosing, Misting, Moonwalking, Moseying, Mulling, Mustering, Musing, Nebulizing, Nesting, Newspapering, Noodling, Nucleating, Orbiting, Orchestrating, Osmosing, Perambulating, Percolating, Perusing, Philosophising, Photosynthesizing, Pollinating, Pondering, Pontificating, Pouncing, Precipitating, Prestidigitating, Processing, Proofing, Propagating, Puttering, Puzzling, Quantumizing, Razzle-dazzling, Razzmatazzing, Recombobulating, Reticulating, Roosting, Ruminating, Sautéing, Scampering, Schlepping, Scurrying, Seasoning, Shenaniganing, Shimmying, Simmering, Skedaddling, Sketching, Slithering, Smooshing, Sock-hopping, Spelunking, Spinning, Sprouting, Stewing, Sublimating, Swirling, Swooping, Symbioting, Synthesizing, Tempering, Thinking, Thundering, Tinkering, Tomfoolering, Topsy-turvying, Transfiguring, Transmuting, Twisting, Undulating, Unfurling, Unravelling, Vibing, Waddling, Wandering, Warping, Whatchamacalliting, Whirlpooling, Whirring, Whisking, Wibbling, Working, Wrangling, Zesting, Zigzagging
File: src/constants/turnCompletionVerbs.ts
When a turn finishes, a past-tense verb is chosen from this tiny list of 8 and shown with the elapsed time (e.g., "Sautéed for 3.2s"):
Baked · Brewed · Churned · Cogitated · Cooked · Crunched · Sautéed · Worked
All chosen to work naturally with the phrase "for [duration]".
Files: src/components/LogoV2/Clawd.tsx, src/components/LogoV2/AnimatedClawd.tsx
The application has a named ASCII/Unicode mascot character called Clawd rendered using Unicode block elements (▛███▜, etc.). It has four poses:
| Pose | Description |
|---|---|
default |
Neutral standing |
arms-up |
Both arms raised (jump!) |
look-left |
Pupils shifted left |
look-right |
Pupils shifted right |
JUMP_WAVE— Crouch → jump with arms up → idle → repeat (60 ms frames)LOOK_AROUND— Look right → look left → default (60 ms frames)
The container is fixed at exactly 3 rows so layout never shifts during animations.
Respects the prefersReducedMotion accessibility setting. Apple Terminal gets special
bg-fill rendering treatment due to its different ANSI handling.
Multiple files
All branches guarded by process.env.USER_TYPE === 'ant' are completely removed from
external builds by the Bun bundler (it is a build-time --define constant). External users
never even receive this code in their bundle. Internal "ant" (Anthropic employee) builds
include:
- Fast mode speculation tracking
- Numeric effort levels
- TMux integration pills
- Debug log panels
- Shot stats and timing metrics
- Internal system tool visualization
- Special loop mode menu
- Dev bar for slow sync operations
- Homespace (Coder workspace) SSH data collection for
/insights - Undercover mode logic
Similarly, feature('FEATURE_NAME') calls with false values are eliminated; only
true-valued feature branches survive in production bundles.
File: src/buddy/useBuddyNotification.tsx
The Buddy companion system has a time-gated teaser specifically targeting April 1, 2026:
// 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 {
if ("external" === 'ant') return true
const d = new Date()
return d.getFullYear() === 2026 && d.getMonth() === 3 && d.getDate() <= 7
}
export function isBuddyLive(): boolean {
if ("external" === 'ant') return true
const d = new Date()
return d.getFullYear() > 2026 || (d.getFullYear() === 2026 && d.getMonth() >= 3)
}The comment even explains the reason for using local time instead of UTC: to create a "24h rolling wave across timezones" for sustained social media buzz rather than a single midnight spike. The feature stays permanently live for all users after April 2026.
File: src/commands/insights.ts
The /insights command includes a section named fun_ending that instructs the Opus model
to find the most humanly interesting moment from your session transcripts — not a
statistic, but something funny or surprising:
{
"name": "fun_ending",
"prompt": "Analyze this Claude Code usage data and find a memorable moment.\n\nRESPOND WITH ONLY A VALID JSON OBJECT:\n{\n \"headline\": \"A memorable QUALITATIVE moment from the transcripts - not a statistic. Something human, funny, or surprising.\",\n \"detail\": \"Brief context about when/where this happened\"\n}"
}The generated headline and detail are rendered at the bottom of the HTML insights report.
Several ?magic= query parameters exist for deep-linking to specific onboarding flows:
https://claude.ai/code/onboarding?magic=env-setup
https://claude.ai/code/onboarding?magic=github-app-setup
Also present in the code: internal go/ shortlinks (e.g., go/ccshare/<id>) for session
sharing — these are Anthropic's corporate URL shortener links that only resolve on
Anthropic's internal network.
File: src/constants/prompts.ts
When feature('PROACTIVE') or feature('KAIROS') is active, Claude receives a special
system prompt section enabling it to work autonomously between user turns via periodic
<tick> messages:
- Each
<tick>contains the user's current local time for context - Multiple ticks are batched into a single message to reduce API calls
- Claude must call
SleepToolif there is no useful work to do on a tick - On the first tick of a new session: greet the user briefly, ask what to work on — do not explore unprompted
- Respects a
terminalFocusfield:unfocused→ autonomous mode,focused→ collaborative
The system prompt also defines a SYSTEM_PROMPT_DYNAMIC_BOUNDARY marker separating
cacheable static prompt content from dynamic runtime content, optimizing API prompt caching.
Files: src/commands/review/ultrareviewCommand.tsx, src/services/api/ultrareviewQuota.ts
/ultrareview is a paid feature that checks your claude.ai account balance before
running. It requires a minimum $10 available balance and shows a billing confirmation
dialog. Links directly to https://claude.ai/settings/billing. A free tier exists but
requires explicit overage confirmation.
Three billing states:
'not-enabled'— Extra Usage not set up'low-balance'— Balance below $10 threshold'needs-confirm'— Balance available, awaiting user confirmation
File: src/commands/stickers/stickers.ts
There is a /stickers command that opens https://www.stickermule.com/claudecode in your
browser. The entire implementation is ~5 lines:
export async function call(): Promise<LocalCommandResult> {
const url = 'https://www.stickermule.com/claudecode'
const success = await openBrowser(url)
if (success) {
return { type: 'text', value: 'Opening sticker page in browser…' }
} else {
return { type: 'text', value: `Failed to open browser. Visit: ${url}` }
}
}File: src/voice/voiceModeEnabled.ts
The voice feature has an emergency kill switch controlled by the GrowthBook flag
tengu_amber_quartz_disabled. When this flag is set, all voice functionality is disabled
globally without any client-side code change. "Amber Quartz" appears to be the internal
project codename for the voice integration.
Voice mode also requires Anthropic OAuth (unavailable with API keys, Bedrock, Vertex, or
Foundry) — it uses a voice_stream endpoint on claude.ai.
File: src/services/analytics/sinkKillswitch.ts
GrowthBook flag tengu_frond_boric (an obviously mangled/obfuscated name) controls a
per-sink analytics kill switch. It can disable Datadog and/or first-party analytics sinks
independently via a JSON config: { datadog?: boolean, firstParty?: boolean }. Setting a
sink to true stops all dispatch to that sink. Fails open — missing config keeps sinks
enabled.
File: src/buddy/companion.ts
Independent of rarity tier, every buddy has a 1% chance of being "shiny" — a direct homage to Pokémon's shiny mechanic:
shiny: rng() < 0.01The shiny flag is stored in CompanionBones and is deterministic per user ID (same seed),
so your buddy is shiny or it isn't — forever.
File: src/commands/insights.ts
The /insights command includes a function detectMultiClauding() that analyzes session
patterns to identify when a user is running multiple Claude Code sessions in parallel —
switching rapidly between them within a 30-minute window. When detected, this is reported
as a "Multi-Clauding (Parallel Sessions)" insight with session overlap percentages.
24. All Hidden / Stub Commands
The following commands are registered in the command registry but are either disabled
(isEnabled: () => false) or explicitly hidden (isHidden: true):
These appear as { isEnabled: () => false, isHidden: true, name: 'stub' }:
/summary, /bughunter, /env, /mock-limits, /ant-trace, /backfill-sessions,
/good-claude, /autofix-pr, /break-cache, /ctx_viz, /perf-issue, /share,
/oauth-refresh, /onboarding, /debug-tool-call, /issue, /teleport, /reset-limits
Hidden but Functional
| Command | Purpose |
|---|---|
/heapdump |
Memory heap dump for diagnostics |
/thinkback-play |
Playback for "year in review" thinking token animations |
/output-style |
Output style configuration (internal use) |
/rate-limit-options |
Rate limit configuration (internal use) |
| Command | Feature Flag |
|---|---|
/torch |
feature('TORCH') — implementation not yet present |
/proactive |
feature('PROACTIVE') || feature('KAIROS') |
/assistant |
feature('KAIROS') |
/peer |
feature('UDS_INBOX') |
/fork |
feature('FORK_SUBAGENT') |
/buddy |
feature('BUDDY') |
File: src/constants/prompts.ts (915 lines)
Some notable hardcoded instructions in the system prompt:
- "Don't add docstrings, comments, or type annotations to code you didn't change"
- "Three similar lines of code is better than a premature abstraction"
- "Never claim 'all tests pass' when they fail"
- "Don't create helpers, utilities, or abstractions for one-time operations"
- Output efficiency: target ≤25 words between tool calls, ≤100 words for final responses
- Cyber-risk instruction: never generate or guess URLs unless confident they're correct
The prompt is split at a SYSTEM_PROMPT_DYNAMIC_BOUNDARY marker — everything above is
sent as a single cached block (cheaper), everything below is uncached dynamic content.
All runtime feature flags follow the naming pattern tengu_<adjective>_<noun>.
Selected flags of interest:
| Flag | Purpose |
|---|---|
tengu_turtle_carbon |
Enables ultrathink / thinking token rainbow coloring |
tengu_amber_quartz_disabled |
Emergency kill switch for voice mode |
tengu_frond_boric |
Analytics sink kill switch (obfuscated name) |
tengu_hive_evidence |
Controls adversarial VERIFICATION_AGENT |
tengu_miraculo_the_bard |
Unknown — whimsical name |
tengu_surreal_dali |
Unknown — named after Salvador Dalí |
tengu_willow_mode |
Unknown mode system |
tengu_thinkback |
Year-in-review thinking token animation system |
tengu_kairos |
The KAIROS proactive assistant feature |
tengu_kairos_dream |
KAIROS "dream" subsystem |
tengu_ccr_bridge |
Bridge/remote-control feature gate |
tengu_cobalt_harbor |
Auto-connect behavior for bridge sessions |
tengu_ccr_mirror |
Event forwarding / mirror mode for bridge |
tengu_bridge_repl_v2 |
V2 bridge REPL path |
tengu_iron_gate_closed |
Generic feature gate (ominous name) |
tengu_slate_prism |
Unknown — defaults to true |
tengu_toolref_defer_j8m |
Tool reference deferral (has a hash suffix) |
Telemetry events also all use the tengu_ prefix (e.g., tengu_update_check,
tengu_mcp_start, tengu_oauth_success) — confirming that "Tengu" is the internal
codename for the Claude Code CLI.
Document generated from source exploration of nitrocode/claude-code. All file paths are
relative to the repository root.