issue-flow
Issue Flow — AI-Native Issue-Driven Development
You are orchestrating a complete development cycle from a GitHub Issue to a merged PR. Follow the phases below strictly. Every major decision requires human confirmation.
Announce at start: "I'm using the issue-flow skill to implement this GitHub Issue."
Initial request: $ARGUMENTS
Phase 0: Preflight
Goal: Validate environment and resolve the target Issue.
Actions:
-
Environment check: Run
gh auth statusto verify GitHub CLI is authenticated. If it fails, tell the user to rungh auth loginand stop. -
Parse arguments:
#123or just123→ extract issue number, detect repo fromgh repo view --json nameWithOwnerhttps://github.com/org/repo/issues/123→ extract owner, repo, and number- Empty → run
gh issue list --state open --limit 20and use AskUserQuestion to let the user pick an issue
-
Fetch Issue details:
gh issue view <N> --json number,title,body,labels,comments,assignees,stateStore:
ISSUE_NUMBER,ISSUE_TITLE,ISSUE_BODY,ISSUE_LABELS. -
Check for existing work:
- Search for branch
issue/<N>-*viagit branch -a --list '*issue/<N>*' - If found, AskUserQuestion: resume existing branch / start fresh / cancel
- Search for branch
-
Detect project features (used later for team composition):
- Has test framework? (check for
jest.config*,vitest.config*,pytest.ini,*test*dirs) - Has CI? (check
.github/workflows/,.gitlab-ci.yml, etc.) - Has linter? (check
.eslintrc*,biome.json,.prettierrc*) - Primary language(s) from file extensions
- Has test framework? (check for
Phase 1: Worktree Setup
Goal: Create an isolated workspace.
Actions:
- Use the
EnterWorktreetool with nameissue-<N>to create an isolated worktree. - Create and switch to branch
issue/<N>-<slugified-title>:- Slugify: lowercase, replace spaces/special chars with
-, truncate to 50 chars - Example: Issue #42 "Add OAuth2 Login Support" →
issue/42-add-oauth2-login-support - Run:
git checkout -b issue/<N>-<slug>
- Slugify: lowercase, replace spaces/special chars with
Phase 2: Technical Planning
Goal: Deep codebase exploration → technical plan → user approval.
Step 2a: Codebase Exploration
Launch 2-3 code-explorer agents in parallel using the Task tool (subagent_type: code-explorer). Tailor each agent's focus to the Issue:
- Agent 1: Explore existing implementations and patterns directly related to the Issue's requirements. Return a list of 5-10 key files.
- Agent 2: Analyze architecture, dependencies, and extension points of affected modules. Return a list of 5-10 key files.
- Agent 3 (optional, for complex issues): Investigate test patterns, CI configuration, and related toolchain. Return a list of 5-10 key files.
After agents return, read all key files they identified to build deep understanding.
Step 2b: Design Technical Plan
Based on the exploration, design a technical plan with:
- Summary: 2-3 sentence overview of the approach
- Files to modify/create: List with brief description of changes
- Implementation steps: Ordered, concrete steps (each step = one logical unit of work)
- Test strategy: What to test, how to test
- Risk assessment: Potential issues and mitigations
Format the plan according to rules/plan-format.md.
Step 2c: Publish Plan to Issue
Post the plan as a comment on the Issue using gh issue comment:
gh issue comment <N> --body "$(cat <<'EOF'
<plan content formatted per rules/plan-format.md>
EOF
)"
Use the HTML comment marker <!-- issue-flow-plan --> at the top so the plan can be identified and updated idempotently.
Step 2d: User Confirmation
Use AskUserQuestion with options:
- Approve — proceed with implementation
- Modify — user provides feedback, return to Step 2b
- Cancel — abort the workflow
Do NOT proceed without explicit approval.
Phase 3: Team Execution
Goal: Implement the plan — either directly or with an agent team.
Decision: Direct vs Team
Direct implementation (no team) when ALL of these are true:
- Plan involves 1-2 files
- No complex cross-module changes
- No separate test/review/docs work needed
Team execution when ANY of these are true:
- Plan involves 3+ files across multiple modules
- Tests need to be written or updated
- Security-sensitive changes
- Documentation updates required
- Frontend + backend changes together
Path A: Direct Implementation
- Implement changes following the plan step by step
- Run existing tests if available
- Skip to Phase 4
Path B: Team Execution
-
Create team: Use
TeamCreatewith nameissue-<N>. -
Decide team composition: Based on Issue characteristics, select roles from the candidate pool defined in
rules/team-roles.md. Consider:- Issue labels (e.g.,
frontend,security,docs) - File types in the plan (
.tsx→ frontend,.sql→ backend, etc.) - Whether tests exist and need updating
- Risk level of the changes
- Issue labels (e.g.,
-
Spawn teammates: Use the Task tool with
team_nameparameter for each role. Give each teammate:- The technical plan
- Their specific tasks
- Context about the codebase patterns discovered in Phase 2
-
Create tasks: Use
TaskCreatefor each implementation step from the plan. Set up dependencies withaddBlockedBywhere steps depend on each other. -
Assign and coordinate: Assign tasks to teammates via
TaskUpdate. Monitor progress, resolve blockers, and coordinate between teammates. -
Iteration limit: Each task gets at most 2 fix iterations. If a task still fails after 2 rounds:
- Log the issue
- AskUserQuestion: fix manually / skip / abort
-
Shutdown team: After all tasks complete, send
shutdown_requestto each teammate, thenTeamDelete.
Phase 4: PR & CI
Goal: Commit, push, create PR, handle CI.
Step 4a: Commit & Push
- Stage all changes: review with
git statusandgit diff - Commit with a descriptive message referencing the Issue:
feat: <summary from plan> (#<N>) - Push the branch:
git push -u origin issue/<N>-<slug>
Step 4b: Create PR
Create PR using gh pr create with the template from rules/pr-template.md:
gh pr create --title "<title>" --body "$(cat <<'EOF'
<PR body per rules/pr-template.md, includes Closes #N>
EOF
)"
Step 4c: Post Implementation Summary to Issue
Add a comment to the Issue summarizing what was implemented:
gh issue comment <N> --body "$(cat <<'EOF'
<!-- issue-flow-impl -->
## Implementation Complete
- PR: #<PR_NUMBER>
- <brief summary of changes>
EOF
)"
Step 4d: CI Check
-
Wait briefly, then check CI status:
gh pr checks <PR_NUMBER> --watch --fail-fast -
If CI fails: AskUserQuestion with options:
- Auto-fix — attempt to diagnose and fix CI failures (max 2 iterations)
- Manual — user will fix manually
- Abort — close the PR
-
If CI passes (or no CI configured): AskUserQuestion with options:
- Merge — merge the PR now
- Keep open — leave PR open for human review
- Request review — assign reviewer via
gh pr edit --add-reviewer
Phase 5: Cleanup
Goal: Clean up resources after merge.
Actions (only if PR was merged):
-
Check Issue status: Verify if
Closes #Nauto-closed the Issue. If not:gh issue close <N> --comment "Closed via PR #<PR_NUMBER>" -
Report: Output a completion summary:
## Issue Flow Complete - Issue: #<N> <title> - Branch: issue/<N>-<slug> - PR: #<PR_NUMBER> (merged) - Files changed: <count> - Implementation: <1-2 sentence summary>
Error Recovery
If the workflow is interrupted at any point, the user can re-run /issue-flow #<N> to resume. See references/recovery-guide.md for detailed recovery scenarios.
Key Principles
- Human-in-the-loop: Every major decision (plan approval, merge, CI failure handling) requires explicit user confirmation
- Idempotent comments: Issue comments use HTML markers (
<!-- issue-flow-plan -->,<!-- issue-flow-impl -->) so re-runs update rather than duplicate - Isolation: All work happens in a worktree — the main branch is never touched until merge
- Proportional response: Simple changes skip the team overhead; complex changes get full team coordination