Skip to main content
Glama
eiainano

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>&nbsp;|&nbsp;<a href="./README.zh-CN.md">ไธญๆ–‡</a>&nbsp;|&nbsp;<a href="./README.es.md">ES</a>&nbsp;|&nbsp;<a href="./README.ko.md">ํ•œ๊ตญ์–ด</a>&nbsp;|&nbsp;<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>&nbsp;ยท&nbsp;<b>Kilo Code</b>&nbsp;ยท&nbsp;<b>OpenCode</b>&nbsp;ยท&nbsp;<b>Hermes</b>&nbsp;ยท&nbsp;<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)