English | 日本語
An HTTP server agent that automatically decomposes GitHub issues and ships implementation PRs.
The WebUI lets you trigger the equivalent of --issue 21925 --repo CyberAgentSRG/server from your browser.
github-issue-agent accepts a GitHub issue as a parent task, automatically breaks it down into multiple child issues (sub-tasks), implements each of them, and finally consolidates the work into a single pull request.
It is built on top of the Anthropic Managed Agents API (@anthropic-ai/sdk); the agents operate on your GitHub repository directly to drive each task to completion.
bun install
export ANTHROPIC_API_KEY=...
export GITHUB_TOKEN=...
bun run start
# → Listening on http://127.0.0.1:3000Open http://127.0.0.1:3000 in your browser.
| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
listen port |
HOST |
127.0.0.1 |
bind host (set to 0.0.0.0 to expose) |
DB_PATH |
.github-issue-agent/dashboard.db |
SQLite db |
CONFIG_PATH |
(none) | optional config TS path |
ANTHROPIC_API_KEY |
(required) | Anthropic API key |
GITHUB_TOKEN |
(required) | GitHub PAT (repo for classic; contents:read, issues:write, pull_requests:write for fine-grained) |
LOG_LEVEL |
info |
log level |
LOG_FILE |
stderr | log file path |
{ "issue": 42, "repo": "owner/name", "dryRun": false }returns { "runId": "uuid" }
returns { "runs": [...], "total": N }
returns full run detail
returns { "outcome": "stopped" | "..." }
Server-Sent Events stream. Supports Last-Event-ID for resume.
Event kinds: phase, session, subIssue, log, complete, error.
- Open
http://127.0.0.1:3000/runs/newin your browser - Enter
Issue Number(e.g.21925) andRepo(e.g.CyberAgentSRG/server) - (Optional) Check
Dry-runto compute the decomposition plan only - Submit → you are redirected to
/runs/:runId/live, which shows real-time progress over SSE
You can view and edit the agents' system prompts from the WebUI. Edited values are persisted to SQLite (.github-issue-agent/dashboard.db) and automatically loaded into the Anthropic-side agent definition on the next run.
Open the Prompts tab in the header to navigate to the prompt list (/prompts) and edit them.
Customize behavior by creating a github-issue-agent.config.ts file.
import type { Config } from "./src/shared/config";
const config: Config = {
models: { parent: "claude-opus-4-7", child: "claude-sonnet-4-6" },
maxSubIssues: 10,
maxRunMinutes: 120,
maxChildMinutes: 30,
pr: { draft: true, base: "main" },
commitStyle: "conventional",
git: {
authorName: "claude-agent[bot]",
authorEmail: "claude-agent@users.noreply.github.com",
},
};
export default config;As a rough guideline, expect roughly 0.08 USD per session-hour (based on claude-opus-4-7 session pricing as of 2026-04).
The total cost from issue decomposition to sub-task completion depends on the size of the issue and the number of child tasks generated. Anthropic's pricing changes over time, so check the official docs for the latest rates.
See docs/deploy-fly.md for Fly.io deployment steps. The repository ships with Dockerfile, fly.toml, and scripts/start.sh.
E2E=1 TEST_REPO=<owner>/<repo> TEST_ISSUE=<n> bun run scripts/e2e-real.tsSee docs/e2e-setup.md for details.
- Stale lockfile:
rm .github-issue-agent/run.lock.lock - No history in the WebUI: you need to run an issue at least once to populate the DB
- Port conflict:
PORT=3097 bun run start


