The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Devcoach listing page.
Stay sharp while your AI does the work.
devcoach connects to Claude Code, Claude Desktop, Gemini CLI (beta), Codex CLI (beta), Cursor, Windsurf, and other MCP-compatible tools. After every task you complete, it delivers a short targeted lesson calibrated to what you already know — no generic tutorials, no repeated topics, nothing to open.
Everything runs locally. No data leaves your machine. One SQLite file at ~/.devcoach/coaching.db.
Built on the official Model Context Protocol TypeScript SDK, Node's embedded
node:sqlite, Hono (web dashboard), and Commander (CLI). Requires Node.js ≥ 24.
AI agents now write much of our code — which makes it easy to ship more while understanding less. devcoach turns each task your agent finishes into one short, in-context lesson, so you keep learning as you go. The deeper bet: as AI grows more capable, the scarce skill becomes validating what it produces — and that ability only survives if you keep practicing it.
→ Full decision flow: session startup · lesson selection · depth calibration
Everything stays on your machine. No telemetry, no accounts, no calls home. Just one SQLite file.
devcoach runs locally — a stdio MCP server that stores everything in ~/.devcoach/coaching.db on the machine where your agent runs. It works in Claude Code, Claude Desktop, Gemini CLI (beta), and Codex CLI (beta), but not on claude.ai web (which only supports hosted/remote connectors).
Requires Node.js ≥ 24 (devcoach uses the embedded node:sqlite module, available only from Node 24 onward).
Pick by how you like to work — each section is self-contained (install and connect):
brew install, and you get the devcoach CLI too..mcpb extension.io.github.UltimaPhoenix/devcoach — install it straight from there.macOS / Linux. Add and trust the tap once, install, then connect — you also get the devcoach CLI (so devcoach ui and the CLI work without an npx prefix):
brew tap registers the third-party repository; brew trust --tap marks it trusted so Homebrew will load its formulae when HOMEBREW_REQUIRE_TAP_TRUST is set. Both are one-time. To update later: brew upgrade devcoach. One-liner: brew install UltimaPhoenix/tap/devcoach (run brew trust --tap UltimaPhoenix/tap first if your Homebrew enforces tap trust). The formula declares depends_on "node", so Homebrew pulls in a recent Node automatically.
The simplest way to add devcoach to Claude Code — one click, nothing to configure. It bundles everything (MCP server + automatic-coaching Stop hooks + skill), so don't also run devcoach install (or the Stop hooks get registered twice).
The MCP server, hooks, and skill activate on install — no restart needed. Open the web dashboard right from Claude Code with /devcoach:ui (or just ask — the open_ui tool). The plugin does not add the devcoach CLI, so for terminal use run npx -y devcoach ui (or use Homebrew / npm i -g devcoach for a bare devcoach).
See Claude Code plugin for how it works.
.mcpb) (recommended for Claude Desktop) — BetaA single bundle that runs on Claude Desktop's built-in runtime — no Node or terminal needed. Every GitHub Release ships one:
devcoach-<version>.mcpb from the latest release.mcpbThe bundle is self-signed, so Claude Desktop installs it as an unverified publisher (a real code-signing cert would be needed for a verified signature). Prefer to build it from source?
No install required — npx runs devcoach on demand. For Claude Code and Claude Desktop, one command registers the MCP server, wires up automatic lesson delivery (Stop hooks), and installs the coaching skill into ~/.claude/skills/devcoach/:
Restart your agent afterward. Prefer a global binary? npm install -g devcoach, then run devcoach install (and drop the npx -y prefix everywhere). After upgrading devcoach, re-run devcoach install to refresh the skill — devcoach stats reminds you when it's out of date.
devcoach install isn't available)Option A — via the claude mcp CLI (recommended):
Option B — edit ~/.claude.json directly:
Then add the hooks to ~/.claude/settings.json for automatic lesson delivery — stop-hook decides
after each turn whether a lesson is due, prompt-hook primes the model up front when one is:
Tip: a global install puts
devcoachon yourPATH, so you can drop thenpx -yprefix.devcoach installdetects this automatically. Using the Claude Code plugin (above)? Skip the hooks here — the plugin already provides them.
One command registers the MCP server, the AfterAgent/BeforeAgent lesson hooks, and the coaching skill:
Or install the bundled Gemini extension instead: download devcoach-gemini-extension-<version>.zip from the latest release, unzip, then gemini extensions install <folder>. Pick one of the two (both provide the same hooks; devcoach detects the extension and skips duplicates). Details: docs/install/gemini-cli.md.
One command registers the MCP server (codex mcp add), the Stop/UserPromptSubmit lesson hooks (~/.codex/hooks.json), and the coaching skill (~/.agents/skills/):
Codex asks you to trust the new hooks once on the next run — approve them or coaching stays inert. Details: docs/install/codex.md.
Add this to your agent's MCP config file (or, if your client browses the MCP Registry, install io.github.UltimaPhoenix/devcoach from there):
| Agent | Config file |
|---|---|
| Cursor | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Cline (VS Code) | VS Code Settings → cline.mcpServers |
| Continue.dev | ~/.continue/config.json → mcpServers |
| Zed | .zed/settings.json → context_servers |
Stop hooks (automatic lesson delivery after each task) exist for Claude Code, Gemini CLI, and Codex CLI. The agents in this table have full access to all MCP tools and resources — coaching can be triggered manually or by prompting your agent.
Claude.ai does not support MCP servers. Install the coaching instructions as a skill instead:
assets/SKILL.mdThis gives claude.ai the coaching behaviour without the MCP tools (lesson logging and profile tracking will not work).
Keep the skill up to date. For Claude Code / Claude Desktop, the skill is served automatically (via the MCP prompt or the plugin) and is always current. If you copied it manually to claude.ai, re-paste the latest
SKILL.mdafter each devcoach update.
The first time your agent connects to devcoach it detects that your profile isn't set up and walks you through it inline — no separate command needed. (Prefer the terminal? devcoach setup runs the same wizard.)
devcoach scans your full local Claude Code history (every project the agent has worked in, ranked by recent activity — file and activity metadata only, never prompt text) and offers four ways to build the profile:
Builds the whole profile — topics, confidence scores, groups, and the coaching notebook — in one pass from the stack detected across your history. No questions: you review and adjust the result afterwards (in chat, with the CLI, or in the dashboard).
Opt-in. Everything Automatic does, plus a separate subagent reads the real conversation text of your local Claude Code session transcripts (~/.claude/projects/) for the most accurate profile and notebook it can produce. A metadata-only pre-check runs first over a rolling 3-month window; if it finds more than 8 projects, devcoach asks whether to narrow the window, proceed with the 25 most recent, or pick specific projects. The agent says so up front: this shares more of your own local history with the model than the metadata scan does — once, on this machine, as a setup step.
Prefer to describe your stack yourself? devcoach asks about each technology and your confidence level (1–3 still learning · 4–6 comfortable · 7–9 strong · 10 expert), agrees the topic groups with you, then saves the profile.
On a new machine or reinstalling? Provide the path to your backup zip and your full profile — knowledge map, lessons, settings, and notebook — is restored instantly.
After saving, your agent shows what was set up, grouped the way your knowledge map is organised — for the Automatic modes this is your first look at it, so it's the moment to ask for changes:
That's it. You go back to work. Coaching happens silently in the background.
You work on a task as normal. After your agent responds, devcoach appends a lesson:
Reply y or n (or ✅ / ❌) to adjust your confidence on that topic and shape future lessons — or just move on: no reply means no change.
| Knowledge map (personalize here) | Lesson history | Settings |
|---|---|---|
![]() | ![]() | ![]() |
Every lesson stores where it happened — your project folder, repository, branch, commit hash, editor. You can also personalize your coaching with a learning notebook at ~/.devcoach/learning-state.md that shapes which topics devcoach prioritises and how deep the lessons go.
→ The coaching notebook · Web dashboard guide
Open the dashboard at any time to review your progress, edit your profile, or manage settings:
Using the Claude Code plugin? Type /devcoach:ui in Claude Code instead — no install needed.
| Page | What you can do |
|---|---|
| Knowledge map | See all topics with confidence bars; adjust scores directly |
| Lessons | Browse and filter your full lesson history; star lessons to revisit |
| Settings | Change rate limits, import/export your profile, take a backup |
Full reference: docs/usage/web-ui.md
The CLI is a secondary interface for querying and managing your coaching data. Everything is also available in the web dashboard. Run devcoach --help or devcoach <command> --help for full usage.
| Command | Description |
|---|---|
devcoach install | Register with Claude Code (MCP + hooks + skill) / Claude Desktop |
devcoach profile | Show your knowledge map with confidence bars |
devcoach stats | Overview: lesson counts, weakest/strongest topics |
devcoach lessons | Browse lesson history with filters |
devcoach lesson <id> | Show a single lesson in full |
devcoach star <id> | Mark a lesson as starred |
devcoach feedback <id> <know|dont_know|clear> | Record comprehension |
devcoach set max_per_day <n> | Max lessons per day (default 2) |
devcoach set min_gap_minutes <n> | Minutes between lessons (default 240) |
devcoach backup [file.zip] | Export knowledge + lessons + settings + notebook |
devcoach restore <file.zip> | Restore from a backup |
devcoach setup | Run the onboarding wizard in the terminal |
devcoach ui | Open the web dashboard |
(Prefix with npx -y if you haven't installed globally.) Full reference: docs/usage/cli.md
By default: up to 2 lessons/day, at least 4 hours apart. Want more coaching? Want less? Change it.
Or use the web dashboard Settings page. See docs/reference/configuration.md for all options.
Over a typical work week with 1–2 tasks per day, you'll receive 2–4 lessons aligned to your stack and confidence level. Each lesson takes 30 seconds to read. After a month of normal AI-assisted development, you'll have built a coaching notebook specific to your gaps — exact patterns you struggle with, edge cases you tend to miss, the reasoning behind tools you reach for instinctively.
Too intense? Dial back the frequency: devcoach set max_per_day 1. Want more coaching? Crank it up: devcoach set max_per_day 5. Everything is tunable.
The compounding effect: developers who keep learning while tools get stronger stay in control of the result.
"Node version error"
devcoach requires Node.js ≥ 24. Check your version: node --version. If you're below 24, upgrade: brew upgrade node (Homebrew) or nvm install 24 (if using nvm).
"Failed to install plugin devcoach@ultimaphoenix: … invalid manifest … repository: expected string"
Plugin releases up to 1.0.1 shipped a manifest that current Claude Code rejects, so the install stopped before copying anything. Refresh the marketplace so it points at the latest release, then install again:
"MCP server not connecting"
Run devcoach install to re-register the server with Claude Code or Claude Desktop, then restart the agent. If the issue persists, check ~/.claude.json (Claude Code) and confirm the devcoach entry is present and the command is correct.
"Coaching isn't firing / no lessons appear"
Run devcoach doctor — it checks the whole wiring (Node version, hook entries in ~/.claude/settings.json — plus ~/.gemini/settings.json and ~/.codex/hooks.json when present — skill, MCP registration, database, pacing counters, rate limit) and ends with a verdict explaining exactly why the next stop would or wouldn't cue a lesson. Remember that pacing is intentionally quiet: with the defaults a lesson is cued only after nudge_every interactions in a session and within the rate limits — that's by design, not a bug. For a live trace, set DEVCOACH_HOOK_DEBUG=1 and watch ~/.devcoach/hook.log: every hook run appends one line with its decision (paced (3/10), rate limited: …, cue). Hooks exist for Claude Code, Gemini CLI (beta), and Codex CLI (beta); other agents (Cursor, Windsurf, Cline) don't support them — coaching is available on demand via MCP tools or manual prompting.
"Stop hook error occurred" next to a lesson
That notice is Claude Code's current labeling of any Stop hook that blocks — including devcoach's lesson cue (the accompanying "🎓 devcoach…" line tells you it's coaching, not a failure). It's harmless, and by design it's also rare: the UserPromptSubmit priming hook delivers most lessons within the turn, so the blocking fallback only fires when that didn't happen.
"SQLite permission error"
devcoach writes to ~/.devcoach/coaching.db. If you get a permission error, check the directory exists and you have write access: ls -ld ~/.devcoach. If missing, run devcoach install or devcoach setup to initialize it.
node:sqlite availability (generally solid, but report issues).~/.devcoach/, so each user gets their own coaching database. Profiles are not shared.For Claude Desktop, delete the devcoach key from the platform config file (paths in Manual setup above). Also remove the two hook entries from ~/.claude/settings.json — one under hooks.Stop (devcoach stop-hook) and one under hooks.UserPromptSubmit (devcoach prompt-hook).
Full documentation: The README is a quick start. For detailed guides, visit the official docs:
Help welcome! See CONTRIBUTING.md to get started.
npx @modelcontextprotocol/inspector node dist/bin.js mcp@modelcontextprotocol/server (MCP SDK v2) · node:sqlite · Hono · Commander · Zod · Biome · Vitest · tsupTag a commit with v*:
CI lints, type-checks, tests (Node 24 & 26), builds, and publishes to npm via OIDC provenance
(npm publish --provenance). First-time setup: configure a Trusted Publisher on npmjs.com for the
devcoach package (GitHub Actions, repo UltimaPhoenix/dev-coach, workflow ci.yml).
Copyright (C) 2026 UltimaPhoenix
devcoach is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only).
You may use, modify, and distribute it — provided that any modified version you distribute, or run
as a network service, is also released as open source under the AGPL. There is no commercial
license on offer today; if you need to embed devcoach in a closed-source product,
open an issue and ask.
devcoach is and stays 100% free to download, install, and use — for everyone, forever, including at work and on commercial projects. AGPL is not a price tag: you only ever pay if you want to ship a proprietary/closed derivative of devcoach itself without complying with the AGPL.
Using devcoach does not put your code under the AGPL. It runs as a separate process over
stdio/MCP (npx -y devcoach mcp); talking to it at arm's length is not a derivative work — exactly
like querying an AGPL-licensed database. Your own projects keep whatever license you choose.
Keep using devcoach as a tool/executable (not as an imported library) and the AGPL never reaches your own code.