with one click
triage
// Pick the next GitHub issue to work on. Reads PRD/roadmap, assesses project phase (early vs. mature), recommends one concrete starting point.
// Pick the next GitHub issue to work on. Reads PRD/roadmap, assesses project phase (early vs. mature), recommends one concrete starting point.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | triage |
| description | Pick the next GitHub issue to work on. Reads PRD/roadmap, assesses project phase (early vs. mature), recommends one concrete starting point. |
Decide what's worth doing next based on project phase + issue priority, recommend a single concrete starting point, then implement on the current branch.
Don't favor bugs by default. Whether to recommend a feature or a bug depends on where the project is in its lifecycle. An early-stage project missing core MVP features should usually push features forward; a mature project with users should usually fix meaningful bugs first. Make this judgment yourself from the available evidence — don't ask the user to declare the phase.
Don't create a worktree. Work on the current branch unless the user explicitly asks for a worktree (e.g., "use a worktree", "wtree this"). Never set one up as a default step.
The user may pass a GitHub URL as an argument. Supported formats:
| URL pattern | What to fetch |
|---|---|
github.com/owner/repo/milestone/N | Issues in milestone N |
github.com/owner/repo/issues?labels=X | Issues matching label filter |
github.com/owner/repo/issues?q=... | Issues matching search query |
github.com/owner/repo/issues | All open issues |
github.com/owner/repo | All open issues |
github.com/orgs/owner/projects/N | Items from project board N |
If no URL is provided, default to the current working directory's GitHub remote:
gh repo view --json nameWithOwner -q .nameWithOwner to get owner/repo~/.claude/followups/<project>.md — items logged there from prior sessions are additional candidates alongside GitHub issuesdocs/PRD.md or docs/roadmap.md existIf no argument was passed, detect the current repo:
gh repo view --json nameWithOwner -q .nameWithOwnerdocs/PRD.md / docs/roadmap.md — if present, you can still recommend roadmap work even without an issue trackerIf a URL was passed, parse it:
https:// prefix if presentowner/repolabels, q, milestone, assignee)Issues — build and run the appropriate gh command:
gh issue list --repo owner/repo --milestone <N> --state open --json number,title,labels,body,createdAt,comments,assignees --limit 100gh issue list --repo owner/repo --label <label> --state open --json number,title,labels,body,createdAt,comments,assignees --limit 100gh issue list --repo owner/repo --search "<query>" --json number,title,labels,body,createdAt,comments,assignees --limit 100gh issue list --repo owner/repo --state open --json number,title,labels,body,createdAt,comments,assignees --limit 100gh project item-list <N> --owner <owner> --format json --limit 100If the command fails (auth error, repo not found), report the error and stop.
Docs — if working in a local repo, also read whichever of these exist:
docs/PRD.md — product spec; tells you what the project is supposed to bedocs/roadmap.md — Now / Next / Later / Deferred sections; tells you where the project is heading and what's actively in flightIf neither docs nor issues are available, stop. If only one is available, use it alone. If both are available, use both as inputs to phase detection.
Phase determines how much weight to give features vs. bugs. There are three buckets:
Roadmap is the strongest signal when present. Read docs/roadmap.md:
Issue-tracker fallbacks (when roadmap is absent or thin):
enhancement / feature issues to open bug issues, especially when features describe foundational capability → earlyWhen signals conflict: prefer the roadmap. The issue tracker reflects what's been filed, the roadmap reflects what's been planned. Note the conflict in your final summary so the user can correct you.
If you genuinely can't tell, set phase to unclear and apply no tilt.
Apply these heuristics in order to cluster issues:
Label clusters — Find issues that share the same area/component labels (ignore generic labels like bug, enhancement, good-first-issue). Group issues with 2+ shared specific labels.
Title prefixes — Look for common prefixes before :, —, or - in titles (e.g., "Dashboard: fix X" and "Dashboard: add Y" both belong to the "Dashboard" group).
Cross-references — Scan issue bodies for #N mentions. If issue A references issue B and both are in the set, group them together.
Merge overlapping groups — If two groups share 50%+ of their issues, merge them.
Ungrouped — Issues that don't cluster into any group are kept individually for the ranking step.
Per-issue score — type-agnostic. No bonus for being a bug or a feature.
| Signal | Points |
|---|---|
priority:critical label | +3 |
priority:high label | +2 |
priority:medium label | +1 |
| Age > 30 days | +1 |
| Active discussion (>3 comments) | +1 |
Referenced in docs/roadmap.md "Now" section | +2 |
Referenced in docs/roadmap.md "Next" section | +1 |
good-first-issue label | -1 |
Group score = sum of member issue scores.
Phase tilt at group ranking — applied after raw scores, before sorting:
| Phase | Group composition | Multiplier |
|---|---|---|
| early | majority-feature group (≥50% feature/enhancement issues) | × 1.3 |
| mature | majority-bug group (≥50% bug issues) | × 1.3 |
| unclear | any | × 1.0 |
Critical/high-priority issues still float on raw score — the tilt nudges the long tail, it doesn't bury urgent items. A group containing any priority:critical issue should be ranked at least as high as the top-tilted group.
Sort groups descending by tilted score. Ungrouped issues are ranked alongside groups using the same scoring (just with a group of one).
Lead with one concrete starting point. Pick the top-ranked group, then decide the scope within that group:
Surface up to two also-worth-attention items below the recommendation: the next-highest group, and any priority:critical items the tilt may have pushed below the top pick.
Show a tight summary leading with one recommendation:
## Triage: owner/repo (N open issues)
Phase: <early | mature | unclear>
Signal: <one-line evidence — roadmap section, ratio, etc.>
### Recommendation
<Group name or issue title> — <issue numbers + titles>
Scope: <e.g., "1 feature", "3 small bugs", "~2 hours">
Why: <one sentence — fits phase, top score, etc.>
### Also worth attention
- <next group/issue> — <reason>
- <critical bug if not in top pick> — <reason>
Start on the recommendation? (or name another group/issue)
Wait for the user to confirm or pick something else.
gh issue view <N> for each~/.claude/plans/)When working on a group, mention all related issue numbers in commit messages (e.g., "Relates to #12, #15, #18") so the PR links them.
wtree add <number> — never run git worktree manuallygh auth fails, suggest the user run gh auth login