GitHub App that resolves issues autonomously. Listens for webhooks, spawns Claude Code to solve issues, and opens PRs.
GitHub webhook → Bun HTTP server → Job queue → Claude Code CLI → PR
- You add the
doobee:solvelabel to an issue or comment@doobeebot solve - GitHub sends a webhook to the Doobee server
- Doobee clones the repo (if first time), creates a git worktree on a new branch
- Runs your setup/start commands, then spawns Claude Code with the issue as a prompt
- Claude resolves the issue, runs verify/fix commands, and commits
- Doobee pushes the branch and opens a PR with
Closes #N - Runs your stop commands, removes the worktree
Doobee can also review PRs, revise based on feedback, handle sub-issues, and more.
- Bun runtime
giton PATHclaude(Claude Code CLI) on PATH, authenticated
git clone git@github.com:anstapol/doobee.git
cd doobee
bun install- Go to Settings > Developer settings > GitHub Apps > New GitHub App
- Set the webhook URL to
https://your-server:4567/webhook - Set a webhook secret (random string)
- Enable these permissions:
- Issues: Read & write
- Pull requests: Read & write
- Contents: Read & write
- Variables: Read (optional — for repo/org variables)
- Organization variables: Read (optional — for org variables)
- Subscribe to these events: Issues, Issue comments, Pull request, Pull request review
- Generate a private key and download the
.pemfile - Note the App ID from the app settings page
- Install the app on your repos
When installed, Doobee automatically creates the doobee:solve, doobee:review, doobee:revise, doobee:stuck, and doobee:in-progress labels on each repo.
cp .env.example .env| Variable | Required | Description |
|---|---|---|
APP_ID |
Yes | GitHub App ID |
PRIVATE_KEY_PATH |
Yes | Path to the .pem private key file |
WEBHOOK_SECRET |
Yes | Webhook secret set during app creation |
REPOS_DIR |
No | Where repos are cloned (default: ./repos) |
PORT |
No | Server port (default: 4567) |
BOT_NAME |
No | Bot login name (default: doobeebot[bot]) |
ALLOWED_ACCOUNTS |
Yes | Comma-separated GitHub usernames/orgs to allow |
bun run devCreate .doobee.json in your repo root:
{
"baseBranch": "main",
"commands": {
"setup": ["npm ci"],
"start": ["docker compose up -d"],
"stop": ["docker compose down"],
"verify": ["npm run build"],
"fix": ["npm run lint:fix"]
},
"maxRetries": 3,
"timeout": 3600,
"model": "claude-sonnet-4-5-20250929",
"promptContext": "This is a Next.js app with Prisma ORM."
}| Field | Default | Description |
|---|---|---|
baseBranch |
"main" |
Branch to create feature branches from |
commands.setup |
[] |
Run once when worktree is created (e.g. install deps) |
commands.start |
[] |
Run before Claude starts (e.g. start services) |
commands.stop |
[] |
Run after Claude finishes (e.g. tear down services) |
commands.verify |
[] |
Passed to Claude — runs these to verify the build |
commands.fix |
[] |
Passed to Claude — runs these to auto-fix lint/format |
maxRetries |
3 |
Attempts before marking stuck |
timeout |
3600 |
Max seconds per Claude invocation |
model |
— | Claude model override |
promptContext |
— | Extra context for Claude's prompt |
All fields are optional. See full configuration docs for repo/org variables and more.
The bin/doobee CLI manages your VPS:
export PATH="/path/to/doobee/bin:$PATH"
doobee config vps_host root@your-server
doobee install # first-time setup
doobee deploy # push updates
doobee logs # follow service logs
doobee status # systemctl status
doobee ssh # open shell on VPSAfter doobee install, follow the printed instructions to copy your .pem key, fill in .env, authenticate Claude CLI, and set up a reverse proxy.
For local development, use bun run dev with ngrok or a similar tunnel for the webhook URL.
- Architecture — system overview, components, webhook routing, worktree lifecycle, job queue
- Flows — detailed Mermaid diagrams for solve, revise, review, comment routing, and cancellation
- Configuration —
.doobee.jsondeep dive, repo/org variables, env vars - Usage — triggering actions, comment commands, cancellation, stuck handling, sub-issues, label lifecycle
- Reference — labels, branches, commits, webhook events, endpoints, output markers