Retrieve a GitHub issue and coordinate a team to address it.
Usage:
/address-github-issue 42— Address issue #42 in the current repo/address-github-issue owner/repo#42— Address issue #42 in a specific repo/address-github-issue https://github.com/owner/repo/issues/42— Address issue by URL
Instructions:
Validate the
ghCLI is available:- Run
gh --versionto confirm it is installed - If not found, stop and display:
❌ GitHub CLI (`gh`) is not installed. Install it with: brew install gh Then authenticate with: gh auth login - Run
gh auth statusto confirm authentication - If not authenticated, stop and display:
❌ GitHub CLI is not authenticated. Run: gh auth login
- Run
Parse the issue reference from
$ARGUMENTS:- If
$ARGUMENTSis empty, useAskUserQuestionto ask for the issue reference and STOP until provided. - Accepted formats:
- A bare number (e.g.,
42) → use the current repo owner/repo#42→ explicit repo and number- A full GitHub URL (e.g.,
https://github.com/owner/repo/issues/42) → parse repo and number from it
- A bare number (e.g.,
- For bare numbers, determine the current repo with
gh repo view --json nameWithOwner -q .nameWithOwner. If this fails (not in a GitHub repo), stop:❌ Could not determine the GitHub repository. Run this skill from inside a GitHub repo, or provide a full issue reference (e.g., owner/repo#42).
- If
Fetch the issue:
- Run:
gh issue view <number> --repo <owner/repo> --json number,title,body,labels,assignees,milestone,state,comments,url - If the issue is not found or access is denied, stop with the error message from
gh. - Parse the JSON output to extract:
title,body,labels,state,urlcommentsarray (each hasauthor.loginandbody)
- Run:
Analyze the issue:
- Read the title, body, and all comments thoroughly.
- Identify the issue type:
- Bug — something is broken; labels like
bug,defect,regression - Feature — new capability; labels like
enhancement,feature request - Chore / Maintenance — tech debt, refactor, CI, docs; labels like
chore,docs,refactor - Question / Investigation — needs research before coding
- Bug — something is broken; labels like
- Identify the scope and complexity:
- Simple (1 developer) — isolated fix or small addition, touches ≤2 files, no API or schema changes
- Medium (2 developers) — moderate feature or bug with multiple moving parts; may touch frontend and backend separately
- Complex (3 developers) — large feature, architectural change, cross-cutting concern, or multiple independent workstreams
- Note any ambiguities or missing information that the PM should clarify in requirements.
Determine team composition:
- Always spawn exactly 1 PM.
- Spawn 1, 2, or 3 developers based on the complexity assessment above.
- No designers or testers are spawned by this skill (developers are expected to include tests in their implementation).
Create the team:
- Use
TeamCreatewith a short kebab-case name derived from the issue title or number (e.g.,issue-42,fix-login-crash,add-dark-mode). - Use
TaskCreateto create one task per role before spawning agents:- PM task: "Write requirements and acceptance criteria for issue #"
- One developer task per developer: "Implement for issue #"
- Use
Spawn the PM (
subagent_type: general-purpose):- Provide:
- The full issue content (title, body, all comments, URL)
- The issue type and complexity assessment
- The team name
- The PM's job:
- Read the issue thoroughly, including all comments
- Write detailed requirements and acceptance criteria to address the issue, resolving any ambiguities using the comments and their knowledge of the codebase
- Structure the requirements as:
## Issue #<number>: <title> **Type:** <Bug / Feature / Chore> | **URL:** <url> ## Context <Brief summary of the issue and why it matters> ## Requirements <Numbered list of concrete, testable requirements> ## Acceptance Criteria <Checklist of conditions that must be true when the issue is resolved> ## Developer Workstreams <If multiple developers: describe each workstream clearly with its scope and any shared interfaces or contracts they need to agree on> ## Out of Scope <Anything explicitly excluded from this issue> - Check for a project lore file (
LORE.md,docs/lore.md,.agent/lore.md, or similar) and update it with any relevant context this issue introduces - Mark their task as completed via
TaskUpdate - Message the team lead when done
- Provide:
Wait for the PM to finish and retrieve the requirements from the completed task or PM message.
Spawn developers (
subagent_type: general-purpose) in parallel, one per workstream:- Provide each developer with:
- The original issue content (title, body, comments, URL)
- The PM's requirements document
- Their specific workstream scope (if multiple developers)
- The issue type for context (bug fix → write a regression test; feature → write unit/integration tests; etc.)
- Each developer's job:
- Explore the relevant parts of the codebase
- Implement the changes required by their workstream
- Write tests covering their changes (unit tests at minimum; integration tests if applicable)
- Mark their task as completed via
TaskUpdate - Message the team lead when done
- Provide each developer with:
Wait for all developers to finish.
Verify no conflicts:
- If multiple developers were spawned, check whether any two agents modified the same files
- If conflicts exist, resolve them by reading both sets of changes and merging intelligently
- Run a quick sanity check: ensure the codebase compiles and lints cleanly after all changes are applied (use the project's existing lint/build scripts if available)
Present a final summary to the user:
## Issue #<number> Addressed **Issue:** <title> **URL:** <url> ### What was done - <Bullet summary of changes made> ### Tests added - <List of test files added or updated> ### Developers - <Developer 1>: <what they implemented> - <Developer 2>: <what they implemented> (if applicable) ### Recommended next steps - Review the changes with `/review-changes` - Create a PR with `/create-pr` - Link the PR to the issue on GitHub: `gh issue develop <number> --repo <owner/repo>`Shut down the team gracefully:
- Send a
shutdown_requestto each teammate viaSendMessage - Once all have confirmed, call
TeamDelete
- Send a