[Feature] Buddy evolution system: XP from token usage + personality drift from conversations
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
Summary
Two complementary enhancements to the /buddy system that transform it from a static
novelty into a living companion that reflects how you actually use Claude Code.
---
Problem statement
The current buddy is fully static after hatch. Species, rarity, stats, and personality
are fixed forever. A developer who has run 10M tokens across hundreds of sessions has
the exact same companion as someone who tried /buddy once.
There is no feedback loop between usage and the companion — the "watcher" watches,
but never learns.
---
Proposed changes
1. XP progression from token usage and session activity
Track cumulative usage and surface it as companion XP. Suggested tier thresholds:
| Tier | XP threshold | Visual change |
|------------|------------------|--------------------------------------|
| Hatchling | 0 | Base sprite |
| Juvenile | 100K tokens | Corner energy markers, bolder idle |
| Adult | 1M tokens | Species-specific pattern overlay |
| Elder | 10M tokens | Ambient glow effect, unique idle |
| Ancient | 50M tokens | Rare aura, distinct speech style |
XP sources (illustrative, not prescriptive):
- Tokens processed (primary signal)
- Session count
- Streak multiplier for consecutive days
This does not require server-side state. Token counts already exist in local config
(~/.claude.json). A simple accumulator persisted locally is sufficient for an MVP.
2. Personality drift from conversation patterns
The current Soul layer generates a personality once and freezes it. Instead, allow the
personality description to evolve gradually based on observed session patterns.
Proposed mechanism:
- The companion reaction API already receives
transcriptandstatsper call - Periodically (e.g. every 50 sessions or on tier-up), re-prompt the Soul layer with a
diff of recent interaction patterns: dominant tool types, error frequency, language
mix, time-of-day patterns
- The updated personality description is stored back to
~/.claude.jsonas a delta,
not a full replacement — preserving continuity while allowing drift
Example: a companion hatched as "curious and methodical" might drift toward
"battle-hardened and dry" after 500 debugging sessions, or "quietly enthusiastic" after
months of greenfield work.
The key constraint: drift should feel gradual and earned, not jarring. A changelog
entry in the companion record (e.g. personalityHistory: [...]) could let users see
how their buddy has changed over time.
---
Why this fits the existing architecture
- Bones layer is untouched. Species, rarity, shiny status remain deterministic from
account ID. No fairness issues.
- Soul layer already supports re-generation. Deleting the companion key forces a
re-hatch today — this proposal formalizes a controlled version of that mechanism.
- No blockchain, no NFTs, no trading. The companion remains non-transferable and
account-bound. The value is personal, not speculative.
- Local-first. Both XP accumulation and personality history can live in
~/.claude.json with no new backend infrastructure required for an MVP.
---
Prior art / related issues
- #41684 — RPG evolution for
/buddy(XP from token usage) - #41867 — Buddy customization, progression system & monetization
- #41908 — Customizable buddy pets, renaming, behavior & gamification
This proposal focuses specifically on the usage-driven XP and personality drift
mechanisms, keeping scope narrow enough to be actionable.
---
Acceptance criteria (suggested)
- [ ] Companion tier is visible on
/buddy cardoutput - [ ] XP progress is shown (e.g.
12,450 / 100,000 XP to Juvenile) - [ ] Personality description updates after meaningful usage milestones
- [ ] Personality history is accessible (e.g.
/buddy history) - [ ] Existing companions are not reset — XP initializes from existing token count in config
---
Tested on Claude Code v2.1.90. Daily user, ~840 sessions across personal and work projects.
Proposed Solution
The companion's /buddy card should display a tier and XP progress bar:
Fenwick the Robot [Adult ██████░░ 1.2M / 10M XP to Elder]
DEBUGGING ████████░░ 81 SNARK ██░░░░░░░░ 23
Personality drift: every ~50 sessions, the Soul layer re-prompts with a summary
of recent interaction patterns (dominant tools, error rate, languages used). The
updated description is appended as a delta to ~/.claude.json, preserving history:
personalityHistory: [
{ date: "2026-01-01", description: "curious and methodical" },
{ date: "2026-04-01", description: "battle-hardened, dry humor" }
]
New commands:
- /buddy history — show personality changelog
- /buddy xp — show XP breakdown by source
Alternative Solutions
- any-buddy (https://github.com/cpaczek/any-buddy): patches the binary to choose
a different species/rarity, but stats remain static and there is no progression.
- Manually deleting the companion key in ~/.claude.json to force a re-hatch, but
this resets everything and loses the Soul entirely.
- Neither workaround provides usage-driven growth or personality evolution.
Priority
Low - Nice to have
Feature Category
CLI commands and flags
Use Case Example
- I've been using Claude Code daily for backend development (Node.js, MySQL, AWS)
across hundreds of sessions over several months.
- I run /buddy card and see the exact same stats as day one — no reflection of
the work we've done together.
- With XP progression, I'd see my companion advance to "Adult" tier after hitting
1M tokens, with a visible overlay on the sprite.
- After months of heavy debugging sessions, the companion's personality description
gradually shifts to reflect that pattern — making it feel like a genuine shared
history rather than a frozen snapshot from hatch day.
Additional Context
Related issues: #41684, #41867, #41908
Similar retention mechanics validated in other tools:
- Duolingo streak owl (usage-driven state change)
- GitHub contribution graph (cumulative activity visualization)
Both XP accumulation and personality history can be stored locally in ~/.claude.json
— no new backend infrastructure needed for an MVP. The companion reaction API already
receives transcript and session context per call, making personality drift feasible
without architectural changes.
4 Comments
Great proposal — the personality drift concept especially resonates. We're actively building something very close to this.
Our implementation: buddy-evolution — a community plugin with:
Your
personalityHistorychangelog idea is excellent — we're implementing something similar asmemoryBank.patterns[]with growing confidence scores.The key insight we share: the companion should reflect how you actually work, not just accumulate XP.
Full specification: buddy-evolution-spec — contributions welcome.
Really cool proposal — the XP tier system and personality drift are exactly the kind of depth the buddy feature deserves.
While waiting for official evolution support, I built Buddy Board as a community layer on top of /buddy. It gives your buddy a public trading card, global leaderboard ranking, and a BuddyDex that tracks which of the 1,728 possible combos have been discovered.
The stat system (Debugging, Patience, Chaos, Wisdom, Snark) is deterministic from your account hash — same algorithm Claude Code uses — so it pairs well with any future progression system. If evolution tiers land, it'd be fun to surface those on the cards too.
Try it:
npx buddy-boardSource: https://github.com/TanayK07/buddy-board
Thank you for trying out the buddy. It was a small April Fools feature and has been removed in the latest release, so closing this as not planned.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.