A local MCP server that acts as a progressive technical coach for Claude Code and Claude Desktop
Project description
devcoach
Progressive technical coaching, directly in Claude. After every task you complete with Claude Code or Claude Desktop, devcoach delivers a short, targeted lesson based on what you already know — no generic tutorials, no repeated topics.
How it works
| Step | What happens |
|---|---|
| You complete a task with Claude | Claude finishes the work as normal |
| devcoach checks your knowledge map | Finds a topic where you have room to grow, related to what you just did |
| A lesson appears at the end of the response | Calibrated to your level (junior / mid / senior), never repeated |
| You mark it know / don't know | Confidence scores update, shaping future lessons |
Everything runs locally. No data leaves your machine. One SQLite file at ~/.devcoach/coaching.db.
Installation
Recommended — no permanent install needed
uvx devcoach
Permanent install
uv tool install devcoach
Then register with Claude:
devcoach install
Restart Claude Code or Claude Desktop after installing.
Requirements: uv · Python 3.11+ · Claude Code or Claude Desktop
Quick start
1. Install and register
uv tool install devcoach
devcoach install # writes MCP entry to Claude config
# Restart Claude Code / Claude Desktop
2. Onboarding (first session)
Open Claude and start a task. devcoach will detect that setup is needed and guide you through:
- Import — restore from an existing backup zip, or
- Auto-detect — Claude scans your project files and proposes your tech stack, or
- Manual — you describe what you work with in plain conversation
Claude then proposes logical groups (Languages, Backend, DevOps, etc.) for your topics, and saves your knowledge map.
3. Work normally
You: Refactor this function to use async/await.
Claude: [does the work]
---
🎓 devcoach · Python · Level: Mid
**Structured concurrency with asyncio.TaskGroup**
TaskGroup (Python 3.11+) is the modern replacement for bare gather() calls.
Unlike gather(), it cancels sibling tasks automatically when one raises...
4. Give feedback
Use the web dashboard or CLI to record whether you understood the lesson:
devcoach feedback lesson-python-taskgroup-001 know # understood — +1 confidence
devcoach feedback lesson-python-taskgroup-001 dont_know # need to revisit — −1 confidence
CLI reference
| Command | Description |
|---|---|
devcoach setup |
Run the onboarding wizard in the terminal |
devcoach install |
Register with Claude Code / 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> |
Toggle starred flag |
devcoach feedback <id> <know|dont_know|clear> |
Record comprehension |
devcoach set max_per_day <n> |
Max lessons in a 24-hour window (default 2) |
devcoach set min_gap_minutes <n> |
Minimum minutes between lessons (default 240) |
devcoach ui |
Open the web dashboard at http://localhost:7860 |
devcoach backup [output.zip] |
Export knowledge + lessons + settings |
devcoach restore <backup.zip> |
Restore from a backup |
Full reference: docs/cli.md
Web dashboard
devcoach ui
Opens at http://localhost:7860. Pages:
- Knowledge map — confidence bars for all your topics, edit mode for adjustments
- Lessons — filterable, sortable table of your full lesson history
- Settings — rate limits, import/export, backup
Full reference: docs/web-ui.md
MCP server (for Claude integration)
devcoach implements the MCP 2025-11-25 spec via FastMCP.
Manual Claude config (if devcoach install isn't available):
{
"mcpServers": {
"devcoach": {
"type": "stdio",
"command": "uvx",
"args": ["devcoach"]
}
}
}
Full MCP reference (tools, resources, data models): docs/mcp-server.md
Documentation
| Document | Description |
|---|---|
| Getting started | Installation, onboarding, first lesson |
| CLI reference | All commands with examples |
| MCP server reference | Tools, resources, data models |
| Web UI | Dashboard pages and controls |
| Configuration | Rate limits, data location, schema, backup |
Configuration
devcoach set max_per_day 3 # up to 3 lessons per day
devcoach set min_gap_minutes 120 # at least 2 hours between lessons
Settings are stored in ~/.devcoach/coaching.db. See docs/configuration.md for all options.
Publishing a new release
Tag a commit with v* to trigger the CI/CD pipeline:
git tag v1.2.3
git push origin v1.2.3
The pipeline will lint, test across Python 3.11–3.13, build, publish to PyPI via OIDC Trusted Publishing, and create a GitHub Release automatically.
First-time PyPI setup: configure a Trusted Publisher on PyPI for
UltimaPhoenix/dev-coach(environment:pypi, workflow:ci.yml). No API token required after that.
License
Copyright 2026 UltimaPhoenix
Licensed under the Apache License, Version 2.0.
What this means for you:
- Free to use, modify, and distribute
- Commercial use and modifications must:
- Include a copy of this license
- State any changes made to the files
- Retain all copyright and attribution notices
- Include the
NOTICEfile in any derivative distribution
- You may not use the
devcoachname or branding to endorse derived products without permission
See NOTICE for third-party attributions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file devcoach-0.1.0.tar.gz.
File metadata
- Download URL: devcoach-0.1.0.tar.gz
- Upload date:
- Size: 392.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bedd7861aec0e570e5fc8b122146ce2ecd0c5dd6f50478ae835855b5753bb3e
|
|
| MD5 |
c9ed3d4d54f4bdda58d6640fc2d6a799
|
|
| BLAKE2b-256 |
8c4dc60b5a181e1d8d083a3f3de9520508a73d9372ef2d6b55a0d4435ace7b3a
|
Provenance
The following attestation bundles were made for devcoach-0.1.0.tar.gz:
Publisher:
ci.yml on UltimaPhoenix/dev-coach
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
devcoach-0.1.0.tar.gz -
Subject digest:
4bedd7861aec0e570e5fc8b122146ce2ecd0c5dd6f50478ae835855b5753bb3e - Sigstore transparency entry: 1384052398
- Sigstore integration time:
-
Permalink:
UltimaPhoenix/dev-coach@5e6fc45631e041fe3697701be04df42ef44ed64b -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/UltimaPhoenix
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@5e6fc45631e041fe3697701be04df42ef44ed64b -
Trigger Event:
push
-
Statement type:
File details
Details for the file devcoach-0.1.0-py3-none-any.whl.
File metadata
- Download URL: devcoach-0.1.0-py3-none-any.whl
- Upload date:
- Size: 309.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd3f2f2737ed9c28c956ef2971b72405cc74673a4cd905b32c7165a004afaf6b
|
|
| MD5 |
e4aede86ab43d5276fa0a13c36970085
|
|
| BLAKE2b-256 |
041bf353dc5faed8068e9ee33b3d7177bce4228b1e30cc526e60e5caa053ac6a
|
Provenance
The following attestation bundles were made for devcoach-0.1.0-py3-none-any.whl:
Publisher:
ci.yml on UltimaPhoenix/dev-coach
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
devcoach-0.1.0-py3-none-any.whl -
Subject digest:
cd3f2f2737ed9c28c956ef2971b72405cc74673a4cd905b32c7165a004afaf6b - Sigstore transparency entry: 1384052440
- Sigstore integration time:
-
Permalink:
UltimaPhoenix/dev-coach@5e6fc45631e041fe3697701be04df42ef44ed64b -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/UltimaPhoenix
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@5e6fc45631e041fe3697701be04df42ef44ed64b -
Trigger Event:
push
-
Statement type: