A personal AI coding agent that automates day-to-day development work. Jamie integrates with your source control, monitoring, work tracking, and notification tools through a pluggable adapter system, then uses Claude to automate PR reviews, error triage, health reports, and more.
Jamie is also a set of Claude Code skills — invoke /jamie-review, /jamie-triage, /jamie-work etc. directly from your editor.
| Command | What it does |
|---|---|
jamie review <pr> |
AI code review — finds bugs, security issues, performance problems. Posts comments directly to the PR. |
jamie comments <pr> |
Processes new PR review comments — auto-fixes simple changes, replies to questions, flags complex ones for you. |
jamie summary <pr> |
Generates a concise summary of a merged PR for the team. |
jamie work |
Queries your work trackers for assigned tickets, generates a prioritized plan for the day. |
jamie triage |
Pulls recent errors from monitoring tools, triages them, correlates with recent deploys. |
jamie health |
Generates a narrative health report from monitoring metrics and alerts. |
jamie chat |
Interactive chat with full context from all your tools. |
jamie serve |
Starts the webhook server for automatic PR review and comment handling. |
- Python 3.11+
- uv (recommended) or pip
- API keys for the tools you want to integrate (GitHub, Sentry, Datadog, Jira, etc.)
git clone https://github.com/IainMcl/jamie.git
cd jamie
uv venv && uv pip install -e ".[dev]"
source .venv/bin/activateThe easiest way to set up Jamie is the interactive wizard:
jamie initThis walks you through:
- Selecting which adapters to enable (GitHub, Sentry, Datadog, Jira, Slack, etc.)
- Entering API keys and configuration (stored in
~/.jamie/.env) - Setting schedules for automated tasks
- Linking Claude Code skills
The wizard writes ~/.jamie/config.yaml (committed, no secrets) and ~/.jamie/.env (gitignored, secrets only).
If you prefer, copy the example config and edit it:
mkdir -p ~/.jamie
cp config.example.yaml ~/.jamie/config.yaml
cp .env.example ~/.jamie/.env
# Edit both files with your valuesSee docs/configuration.md for the full config reference.
jamie statusThis shows your configured adapters, AI model, and schedule settings.
# Review a PR
jamie review https://github.com/org/repo/pull/42
# Or use shorthand
jamie review org/repo#42
# Start the webhook server for automatic reviews
jamie serve┌─────────────────────────────────────────────────────┐
│ Claude Code Skills │
│ /jamie-review /jamie-triage /jamie-health ... │
├─────────────────────────────────────────────────────┤
│ Jamie Core │
│ FastAPI server + Typer CLI + APScheduler │
├─────────────────────────────────────────────────────┤
│ Adapter Registry │
│ ┌────────────┬────────────┬──────────┬───────────┐ │
│ │ Source │ Monitoring │ Work │ Notifi- │ │
│ │ Control │ │ Tracking │ cation │ │
│ ├────────────┼────────────┼──────────┼───────────┤ │
│ │ GitHub │ Sentry │ Jira │ Terminal │ │
│ │ │ Datadog │ │ macOS │ │
│ │ │ │ │ Slack │ │
│ │ │ │ │ GitHub │ │
│ └────────────┴────────────┴──────────┴───────────┘ │
└─────────────────────────────────────────────────────┘
Jamie doesn't know about "Sentry" or "Jira" directly — it knows about "monitoring tools" and "work trackers". Each category has an abstract interface; concrete adapters implement it. Adding a new integration (e.g. Grafana, Linear, GitLab) requires creating one file and zero changes to core code.
See docs/adapters.md for how to write a new adapter.
All commands accept --config / -c <path> to override the config file location.
jamie serve [--host HOST] [--port PORT] [--reload]
jamie status
jamie review <pr_ref> [--no-post]
jamie comments <pr_ref> [--no-push]
jamie summary <pr_ref>
jamie work
jamie triage [--since MINUTES]
jamie health
jamie chat
jamie init [PROJECT_PATH]
<pr_ref> accepts: https://github.com/owner/repo/pull/123, owner/repo#123, or owner/repo 123.
When Jamie's skills are linked (done automatically by jamie init), you can invoke them in Claude Code:
| Skill | Description |
|---|---|
/jamie-review |
AI code review for PRs |
/jamie-comments |
Auto-handle PR review comments |
/jamie-triage |
Triage production errors |
/jamie-health |
Daily health report |
/jamie-deploy |
Monitor a deployment |
/jamie-summary |
Summarize merged PRs |
/jamie-work |
Discover assigned work |
/jamie-chat |
Interactive assistant |
/jamie-serve |
Start/stop webhook server |
# Install dev dependencies
uv pip install -e ".[dev]"
# Run tests
pytest
# Lint
ruff check jamie/ tests/
# Run server in dev mode
jamie serve --reloadMIT