AgentPlayerAchievements
by eiainano
README.md
# 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
```bash
# 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 demo` to generate sample data instantly.
```bash
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`):
```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`):
```json
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
```
**VS Code** (`.vscode/mcp.json`):
```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):
```json
{
"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`):
```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**:
```json
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
```
</details>
## MCP Server
AGPA runs a [Model Context Protocol](https://modelcontextprotocol.io) 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:**
```json
{
"mcpServers": {
"agpa": {
"command": "npx",
"args": ["-y", "@eiainano/agpa", "agpa-mcp"]
}
}
}
```
> Already installed AGPA globally? Run `agpa-mcp` directly. 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:
```bash
agpa pack list # list installed packs
agpa pack info <id> # show pack details
```
See [Creating Achievement Packs](docs/creating-achievements.md) 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>
```bash
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](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](CONTRIBUTING.md)** โ setup, coding conventions, PR process, and 4 contribution paths
- **[Creating Achievement Packs](docs/creating-achievements.md)** โ the complete guide to writing achievement definitions
- **[`.github/ISSUE_TEMPLATE/`](.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.json` settings. 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](https://github.com/eiainano/AgentPlayerAchievements/issues).
## 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](LICENSE)
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues