with one click
issue-runner
// Process a single GitHub issue through the full dev lifecycle. When running under the orchestrator, you receive one issue at a time with a fresh session.
// Process a single GitHub issue through the full dev lifecycle. When running under the orchestrator, you receive one issue at a time with a fresh session.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | issue-runner |
| description | Process a single GitHub issue through the full dev lifecycle. When running under the orchestrator, you receive one issue at a time with a fresh session. |
Process a single GitHub issue through the full development lifecycle: branch, plan, implement, test, review, PR, and merge.
Write issue-progress.json to the exact path in $AGENTERMINAL_PROGRESS_PATH (absolute). Falls back to ./issue-progress.json if the env var is not set. The orchestrator polls this file to detect success or failure, so you must update it after every phase transition.
Use this exact flat JSON shape — the orchestrator parser depends on "phase" being a top-level key:
{
"issue_number": 95,
"phase": "planned",
"error": null
}
Do NOT nest it under an "issues" key or use the issue number as a key. Always keep "phase" at the top level.
Valid phases: pending, branched, planned, implemented, tested, reviewed, merged, complete, skipped.
gh issue view <number>git branch). The orchestrator pre-creates your branch via git worktree. Do not run git checkout -b.
$AGENTERMINAL_PROGRESS_PATH is not set, you are running standalone — create a branch yourself: git checkout -b fix/<number>-<slug> (prefix fix/<number>-, slug: lowercase, non-alphanumeric → hyphens, max 40 chars).phase: "branched"plan-issue-<number>.mdagenterminal.request {
type: "plan_review",
description: "Implementation plan for issue #<number>: <title>",
plan_path: "plan-issue-<number>.md",
issue_body: "<full GitHub issue body text>",
auto_dispatch: true
}
Important: Always pass issue_body (the full issue description) so the plan reviewer can verify the plan covers all issue requirements.
{ "review_approved": true/false, "feedback": "..." }.review_approved is false: revise the plan based on feedback, then submit a new agenterminal.request with the same conversation_id and auto_dispatch: true.review_approved is true, update issue-progress.json: phase: "planned"agenterminal.conversation tools — review results are returned inline.phase: "implemented"phase: "tested"agenterminal.request {
type: "code_review",
description: "Fix for issue #<number>: <title>",
ref: "main..HEAD", # ALWAYS use "main..HEAD" — never a branch name
plan_path: "plan-issue-<number>.md",
issue_body: "<full GitHub issue body text>",
auto_dispatch: true
}
Important: Always pass plan_path (the approved plan file) and issue_body (the full issue description) so the reviewer can verify the implementation covers all requirements.
{ "review_approved": true/false, "feedback": "..." }.review_approved is false: fix the MUST-FIX items, commit, then submit a new agenterminal.request with the same conversation_id and auto_dispatch: true.review_approved is true, update issue-progress.json: phase: "reviewed"agenterminal.conversation tools — review results are returned inline.git push -u origin HEADgh pr create --title "Fix #<number>: <title>" --body "<description>"agenterminal.github.poll { pr_number: <pr_number> }
agenterminal.merge {
conversation_id: "<reviewConversationId>",
pr_number: <pr_number>,
merge_method: "squash"
}
phase: "merged"git checkout main && git pullgh issue close <number> --comment "Fixed in PR #<pr>"rm -f plan-issue-<number>.md (development artifact, not a deliverable)phase: "complete"phase: "skipped", error: "plan_rejected"phase: "skipped", error: "tests_failing"phase: "skipped", error: "review_rejected"phase: "skipped", error: "merge_failed"If agenterminal.request returns review_approved: false with feedback indicating the reviewer was unavailable (e.g., "Reviewer unavailable", "timed out", or empty feedback), the review never happened. This is not a rejection — and it is not approval either.
phase: "skipped", error: "reviewer_unavailable" and stop working. The orchestrator will detect this and move on to the next issue.issue-progress.json with phase: "skipped" and error: "<reason>"$AGENTERMINAL_PROGRESS_PATH), switch back to main branch: git checkout main && git pullplan-issue-*.md) — they are gitignored development artifactsagenterminal.github.poll to also catch any new review comments that arrive during the wait