AgentPlayerAchievements
MCP turns vibe coding into a game. Steam-style achievements for Claude Code, Hermes and more.
README
Agent Player Achievements (AGPA) ๐
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="pixel-art-output/agpa-logo-dark.png"> <source media="(prefers-color-scheme: light)" srcset="pixel-art-output/agpa-logo-light.png"> <img alt="AGPA Logo" src="pixel-art-output/agpa-logo-dark.png" width="192"> </picture> </p>
<p align="center"> <strong>EN</strong>ย |ย <a href="./README.zh-CN.md">ไธญๆ</a>ย |ย <a href="./README.es.md">ES</a>ย |ย <a href="./README.ko.md">ํ๊ตญ์ด</a>ย |ย <a href="./README.ja.md">ๆฅๆฌ่ช</a> </p>
<p align="center"> Gamified achievement system for AI coding agents.<br> <em>Earn XP, unlock trophies, level up โ just by doing what you already do.</em> </p>
<p align="center"> <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a> <a href="#"><img src="https://img.shields.io/badge/achievements-217-blueviolet" alt="217 achievements"></a> <a href="#"><img src="https://img.shields.io/badge/tests-1207-green" alt="1207 tests"></a> <a href="#"><img src="https://img.shields.io/badge/node-%E2%89%A518-brightgreen" alt="Node >= 18"></a> <a href="#"><img src="https://img.shields.io/badge/CLI-27_commands-orange" alt="27 CLI commands"></a> <a href="https://github.com/eiainano/AgentPlayerAchievements"><img src="https://img.shields.io/github/stars/eiainano/AgentPlayerAchievements?style=flat&logo=github" alt="GitHub stars"></a> <a href="https://github.com/eiainano/AgentPlayerAchievements/commits/dev"><img src="https://img.shields.io/github/last-commit/eiainano/AgentPlayerAchievements/dev" alt="Last commit"></a> <a href="README.zh-CN.md"><img src="https://img.shields.io/badge/i18n-5_languages-blue" alt="i18n: 5 languages"></a> </p>
<p align="center"> <b>Claude Code</b>ย ยทย <b>Kilo Code</b>ย ยทย <b>OpenCode</b>ย ยทย <b>Hermes</b>ย ยทย <b>OpenClaw</b> </p>
<p align="center"> <a href="#quick-start">Quick Start</a> ยท <a href="#how-it-works">How It Works</a> ยท <a href="#features">Features</a> ยท <a href="#supported-tools">Supported Tools</a> ยท <a href="#cli-commands">CLI Commands</a> ยท <a href="#community-packs">Community Packs</a> ยท <a href="#dashboard">Dashboard</a> ยท <a href="#security--privacy">Security & Privacy</a> ยท <a href="#contributing">Contributing</a> ยท <a href="#faq">FAQ</a> </p>
Without AGPA โ
- No visibility into your coding habits across sessions
- Can't track progress โ getting faster? Using more tools? No way to know
- No motivation to explore your agent's full feature set
- Same routine every day โ no surprises, no milestones
With AGPA โ
- Auto-tracking โ every tool call, file edit, and git commit logged automatically
- Steam-style dashboard โ XP bar, levels, streaks, heatmaps, achievement showcase
- 217 achievements across 11 categories โ from "Hello World" to "Completionist"
- Instant feedback โ terminal popups, macOS notifications, 8-bit sounds on unlock
Dashboard Preview
<p align="center"> <table> <tr> <td align="center" width="50%"> <img src="assets/screenshots/agpa-shot-1.png" alt="AGPA Home" width="100%"><br> <sub><b>Home</b> โ XP bar, streaks, agent stats</sub> </td> <td align="center" width="50%"> <img src="assets/screenshots/agpa-shot-2.png" alt="Achievement Grid" width="100%"><br> <sub><b>Achievements</b> โ 217 achievements ร 11 categories</sub> </td> </tr> <tr> <td align="center" width="50%"> <img src="assets/screenshots/agpa-shot-3.png" alt="Achievement Sets" width="100%"><br> <sub><b>Sets</b> โ themed collections with progress tracking</sub> </td> <td align="center" width="50%"> <img src="assets/screenshots/agpa-shot-4.png" alt="Achievement Detail" width="100%"><br> <sub><b>Detail Card</b> โ rarity, unlock date, replay animation</sub> </td> </tr> </table> </p>
Quick Start
Prerequisites: Node.js โฅ 18
# Option A: install globally (recommended for users)
npm install -g @eiainano/agpa
agpa init
# Option B: clone and link (recommended for contributors)
git clone https://github.com/eiainano/AgentPlayerAchievements.git
cd AgentPlayerAchievements && npm install && npm link
agpa init
That's it. Keep using your agent โ achievements unlock automatically as you work.
[!TIP] Want to see what the dashboard looks like without waiting for real unlocks? Run
agpa demoto generate sample data instantly.
agpa dashboard # open the achievement dashboard
agpa stats # check your progress
agpa assets download # (optional) pre-download all 219 pixel-art badges
How It Works
Your Coding Session
โ
โโ You code, agent responds โ every action is tracked
โ โโ dual-channel: MCP tools + Hook events
โ
โโ Session ends โ engine evaluates 217 achievements
โ โโ unlocked? โ macOS notification ๐
โ
โโ agpa dashboard โ view, sort, filter, share
Two data channels โ one engine โ one dashboard:
| Channel | Method | Captures |
|---|---|---|
| Hook CLI | Tool hooks (subprocess via stdin) | file.read/write/edit, tool.complete, git.commit, session.start/end, task.complete, agent.spawn |
| MCP Server | STDIO protocol (7 tools) | image.read, file.language_used, plan.mode_entered, user.message, automode.start, achievement config, explain |
Both channels write to the same ~/.agent-achievements/ event log. The engine evaluates 12 condition types against 217 achievements.
[!NOTE] Zero overhead. The Hook CLI is a sub-millisecond subprocess. The MCP server runs on STDIO with no network calls. All data stays on your machine.
Features
- ๐ฎ Achievement Dashboard โ XP bar, level, streak, activity heatmap, rarity breakdown, showcase
- ๐ 217 Achievements across 11 categories โ from "Hello World" to "Completionist"
- ๐ฅ GitHub-style activity heatmap โ 4 months of coding activity at a glance
- ๐ธ Share Card โ dark/light themed, bilingual, downloadable PNG
- ๐ 8-bit sound effects & notifications โ rarity-graded retro sounds + desktop push notifications on unlock
- ๐ Multi-profile โ up to 4 profiles, switch anytime (work, personal, experimentation)
Supported Tools
<p align="center"> <a href="#claude-code"><img src="https://img.shields.io/badge/Claude_Code-auto_+MCP-blueviolet?logo=claude" alt="Claude Code"></a> <a href="#kilo-code--opencode"><img src="https://img.shields.io/badge/Kilo_Code-auto+MCP-00b4d8" alt="Kilo Code"></a> <a href="#kilo-code--opencode"><img src="https://img.shields.io/badge/OpenCode-auto+MCP-2ec4b6" alt="OpenCode"></a> <a href="#cursor--vs-code"><img src="https://img.shields.io/badge/Cursor-MCP_only-007acc?logo=cursor" alt="Cursor"></a> <a href="#cursor--vs-code"><img src="https://img.shields.io/badge/VS_Code-MCP_only-007acc?logo=visualstudiocode" alt="VS Code"></a> <a href="#hermes"><img src="https://img.shields.io/badge/Hermes-MCP_only-ff6b6b" alt="Hermes"></a> <a href="#openclaw"><img src="https://img.shields.io/badge/OpenClaw-auto+_MCP-ffd166" alt="OpenClaw"></a> </p>
| Tool | Auto-track | MCP track | Easiest Setup |
|---|---|---|---|
| Claude Code | โ | โ | agpa init auto-detects |
| Kilo Code | โ | โ | TS plugin + MCP config |
| OpenCode | โ | โ | TS plugin + MCP config |
| Hermes | โ | โ | MCP JSON config |
| OpenClaw | โ | โ | Plugin + MCP config |
All five tools have full dual-channel coverage except Hermes (no hook API). For any MCP-compatible client (Cursor, VS Code, Windsurf, etc.), MCP-only tracking works out of the box โ you just miss hook-based auto-tracking.
[!TIP] New to MCP? Start with
agpa initโ it auto-detects your installed tools and configures everything. Manual JSON configs below are fallbacks.
<details> <summary><b>Claude Code</b> โ auto-track + MCP (full coverage)</summary>
agpa init auto-detects Claude Code and registers both channels. For manual setup:
MCP config (~/.claude/.mcp.json or project-root .mcp.json):
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
Hook registration โ agpa init adds hook entries to your Claude Code settings. Verify with agpa verify.
</details>
<details> <summary><b>Cursor / VS Code</b> โ MCP only</summary>
These editors support MCP but don't expose hook APIs for auto-tracking. You get tool-call tracking via MCP.
Cursor (.cursor/mcp.json):
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
VS Code (.vscode/mcp.json):
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
</details>
<details> <summary><b>Kilo Code / OpenCode</b> โ auto-track + MCP (full coverage)</summary>
These tools support TS plugins for hook-level auto-tracking. agpa init registers the plugin + MCP config.
Manual MCP config (opencode.json or Kilo Code settings):
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
The TS plugin (registered by agpa init) handles PostToolUse, SessionStart, SessionEnd, and other hook events automatically.
</details>
<details> <summary><b>Hermes</b> โ MCP only</summary>
Hermes does not expose a hook API. MCP-based tracking covers tool calls and session events.
MCP config (~/.hermes/mcp.json):
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
</details>
<details> <summary><b>OpenClaw</b> โ auto-track + MCP (full coverage)</summary>
OpenClaw supports a plugin system for hook-level tracking. agpa init registers both the plugin and MCP config.
Manual MCP config:
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
</details>
MCP Server
AGPA runs a Model Context Protocol server (stdio transport) that exposes 7 tools for any MCP-compatible client โ Claude Desktop, Cursor, VS Code, Windsurf, and more.
| Tool | Description |
|---|---|
achievement.track |
Record an agent event (lightweight, <1ms append-only write) |
achievement.poll |
Evaluate pending events โ check for unlocks โ return new achievements |
achievement.stats |
Get player stats: XP, level, total achievements, streaks, recent activity |
achievement.showcase |
Display all achievement definitions โ name, category, rarity, progress |
achievement.config |
Read/write AGPA config: language, notification preferences, profile |
achievement.suggest |
Get personalized achievement recommendations based on current progress |
achievement.explain |
Explain why an achievement is (un)locked โ condition breakdown with event history |
Quick start with any MCP client:
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
Already installed AGPA globally? Run
agpa-mcpdirectly. The server auto-detects your active profile and tool source.
CLI Commands
| Command | Description |
|---|---|
agpa init |
Auto-detect and register with your agent tools |
agpa uninstall |
Cleanly remove AGPA from all configured tools |
agpa verify |
Check installation correctness |
agpa doctor |
Diagnose system state |
agpa dashboard |
Start achievement dashboard (localhost:3867) |
agpa stats |
Show achievement progress summary |
agpa progress |
List all achievements with unlock status |
agpa profile |
Manage achievement profiles (create, list, switch, softwares, delete) |
agpa demo |
Generate MVP demo data for testing |
agpa reset |
Reset all tracking data |
agpa config |
View/modify config (lang, sound, debug...) |
agpa showcase |
Manage showcase (list, pin, unpin, auto-fill) |
agpa search |
Search achievements by keyword/rarity/category |
agpa suggest |
Suggest next achievement to hunt |
agpa sound |
Toggle 8-bit rarity-graded sound effects (on, off) |
agpa activity |
View streak + 4-month activity heatmap |
agpa export |
Export achievement data as JSON |
agpa import |
Import from backup |
agpa mcp |
Start MCP server (stdio mode) |
agpa web |
Alias for agpa dashboard |
agpa pack |
List or inspect installed community achievement packs |
agpa banner |
Switch terminal banner color theme (Neon/Arcade/Gold) |
agpa history |
Browse raw event log entries |
agpa explain |
Show why an achievement is locked/unlocked (condition breakdown) |
agpa watch |
Real-time achievement progress monitor |
agpa upgrade |
Check for updates and upgrade AGPA |
agpa completion |
Generate shell completion script (bash/zsh/fish) |
Full CLI reference:
agpa --help
Community Packs
Anyone can create and share achievement packs. Drop a YAML file into ~/.agent-achievements/packs/ to install:
agpa pack list # list installed packs
agpa pack info <id> # show pack details
See Creating Achievement Packs for the pack format spec, event type catalog, and 12 condition types.
Dashboard
<p align="center"> <em>Stats row โ Streak + Heatmap โ Showcase โ Achievement grid with search/filter</em> </p>
agpa dashboard # default :3867
agpa dashboard 8080 # custom port
agpa dashboard --profile work # launch with specific profile
- Stats: XP, level, total achievements, streak, tasks, tool uses
- Heatmap: GitHub-style 4-month activity grid
- Showcase: Pinned favorite achievements (up to 6)
- Achievement Grid: search, sort by rarity/category, filter unlocked/locked
- Sound toggle: 8-bit rarity-graded effects
- Share button: generates a beautiful bilingual card โ PNG download
Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Engine (src/engine/) โ
โ track() / poll() โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
MCP Server Hook CLI
(src/main.ts) (src/cli/hook.ts)
โ โ
STDIO long-lived short-lived subprocess
โ (stdin pipe)
โ โ
Agent calls Hooks fire
consciously automatically
โ โ
โโโโโโโดโโโโโโ โโโโโโโโดโโโโโโโ
โ Manual โ โ Auto-track โ
โ image.read โ โ tool.completeโ
โ lang_used โ โ file.edit โ
โ plan.mode โ โ session.* โ
โ ... โ โ agent.spawn โ
โโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โฒ โฑ
event.log โ both write here
โ
engine.poll()
โ
state.json
โ
Dashboard
Project Structure
src/
โโโ main.ts # MCP Server entry (STDIO)
โโโ tool-registry.ts # Central tool registration
โโโ cli/
โ โโโ index.ts # Unified CLI entry (27 commands)
โ โโโ hook.ts # Hook CLI (track + poll + auto modes)
โ โโโ init.ts # Interactive install wizard
โ โโโ dashboard.ts # Dashboard launcher
โ โโโ doctor.ts # System diagnostic
โ โโโ ... # 22 more CLI commands
โโโ engine/
โ โโโ engine.ts # Core engine (track / poll / stats)
โ โโโ evaluator.ts # 12 condition type evaluators
โ โโโ store.ts # JSONL event log + state persistence
โ โโโ types.ts # TypeScript interfaces
โ โโโ yaml-parser.ts # YAML achievement definition parser
โโโ dashboard/
โ โโโ server.ts # HTTP server + API routes
โ โโโ api.ts # Card data, stats aggregation
โ โโโ public/ # Zero-framework HTML/CSS/JS frontend
โ โโโ customize-api.ts # Self-customize endpoint
โโโ tools/ # MCP tool definitions (7 tools)
โโโ utils/ # notify, validate, profile, pixel-art, battery, etc.
โโโ verify/
โ โโโ auditor.ts # Achievement verification logic
โโโ config.ts # Global configuration
โโโ helpers.ts # Shared utilities
pixel-art-output/ # Logo images (README)
achievement-definitions.yaml # 217 achievement definitions (authoritative)
scripts/ # dev tools (logo gen, pixel art gen, sounds)
๐ Security & Privacy
- Local-first โ All event data stays in
~/.agent-achievements/. No telemetry, no cloud sync, no network calls at runtime. - Auditable โ The engine is pure TypeScript functions operating on JSONL files. No obfuscation, no binary blobs.
- Minimal dependencies โ 5 runtime dependencies (
@modelcontextprotocol/sdk,yaml,zod,figlet,tsx) โ all widely audited. - STDIO isolation โ The MCP server communicates via standard I/O only. No HTTP endpoints exposed.
- Hook sandbox โ The Hook CLI runs as a sub-millisecond subprocess โ it cannot persist state or access the network.
- Supply chain โ No native modules, no postinstall scripts, no binary downloads at install time.
To report a vulnerability, see SECURITY.md.
๐ฅ Contributing
We welcome contributions! Whether it's an achievement pack, a Dashboard improvement, a new tool integration, or an engine fix โ there's a path for every skill level.
- CONTRIBUTING.md โ setup, coding conventions, PR process, and 4 contribution paths
- Creating Achievement Packs โ the complete guide to writing achievement definitions
.github/ISSUE_TEMPLATE/โ issue and PR templates
๐ Environment Variables
| Variable | Description | Default | Values |
|---|---|---|---|
AGPA_PROFILE |
Active profile name | default |
any string |
AGPA_LANG |
Interface language | en |
en, zh |
AGPA_ENABLED_CATEGORIES |
Filter which achievement categories are active | all | comma-separated (e.g. onboarding,tool_mastery) |
AGPA_DEBUG |
Enable verbose debug logging | false |
true |
AGPA_SOUND |
Override sound effects | config setting | on, off, true, false |
AGPA_SIMPLE_ANIMATIONS |
Use simplified terminal animations | false |
true |
AGPA_BANNER_THEME |
CLI startup banner style | Arcade |
Neon, Arcade, Gold |
AGPA_TELEMETRY |
Enable anonymous usage telemetry | false |
true, false |
AGPA_TELEMETRY_SERVER |
Custom telemetry endpoint URL | '' (none) |
URL string |
AGPA_TOOL_SOURCE |
Override tool source identifier | auto-detected | claude-code, hermes, openclaw, etc. |
AGPA_MODEL |
Current AI model name (for achievements) | auto |
any model string |
[!TIP] Environment variables override
config.jsonsettings. Set them in your shell profile or agent configuration for persistent overrides.
FAQ
Q: Does this slow down my agent? A: No. The Hook CLI is a sub-millisecond subprocess. The MCP server runs on STDIO with zero network overhead.
Q: Can I use it with multiple agents? A: Yes. The init wizard auto-detects Claude Code, Kilo Code, OpenCode, Hermes, and OpenClaw. Each can have its own profile.
Q: My achievements aren't unlocking?
A: Run agpa doctor โ it diagnoses tracking status, hook registration, and event coverage.
Q: How is this different from WakaTime or coding activity trackers? A: WakaTime tells you what you did โ hours, languages, projects. AGPA makes it fun โ XP, levels, achievements, streaks, and Steam-style dopamine hits. It's gamification layered on top of your existing workflow, not another dashboard to check. Think of it as the difference between a fitness tracker's raw step count and a Pokรฉmon Go badge โ same data, different experience.
Q: Can I customize achievement names?
A: Yes. /customize page in the dashboard lets you rename any achievement.
Troubleshooting
[!IMPORTANT] First step for any issue: Run
agpa doctorโ it diagnoses tracking status, hook registration, event coverage, and configuration problems in one shot.
| Symptom | Likely Cause | Fix |
|---|---|---|
| Achievements not unlocking | Hook/MCP not registered | Run agpa doctor to check hook registration + event coverage |
| Dashboard won't start | Port 3867 already in use | agpa dashboard 8080 (or any free port) |
agpa init fails |
Agent tool not detected | Check supported tools list; use manual MCP JSON config as fallback |
| No macOS notifications | terminal-notifier missing |
Run brew install terminal-notifier, or agpa init auto-installs it |
| Sound not playing | Audio context blocked by browser | Click anywhere on the dashboard page to enable audio |
| Profile switching not working | Profile doesn't exist | agpa profile list to see available profiles, then agpa profile switch <name> |
| Hook CLI errors in agent logs | stdin pipe is empty (expected for first run) | Normal โ hooks are short-lived subprocesses; errors are logged to ~/.agent-achievements/error.log |
For persistent issues, check ~/.agent-achievements/error.log or open an issue.
Star History
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=eiainano%2Fagentplayerachievements&type=Date" width="100%">
License
MIT โ see LICENSE
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.