Pull review comments on a PR and triage each one. Figure out what's substantive, what's bikeshedding, and what's noise.
Get the comments
Default source: GitHub via the gh CLI.
If the user gives a PR number or URL, use it. Otherwise list their open PRs and ask which one.
gh pr view <number-or-url> --json reviews,reviewThreads,comments
gh api repos/{owner}/{repo}/pulls/{number}/comments
Pull both review-level comments and inline thread comments. For each, capture: author, body, file + line (if inline), thread resolution status, and the commit SHA the comment was made against. Where possible, note whether the code at that line has changed since the comment was posted.
Classify each comment
Apply labels. Multiple can apply.
Substantive
bug— real correctness, security, or data-integrity issuedesign— concrete maintainability/readability point with specific reasoningdomain— surfaces context the author may be missing (constraint, prior decision, downstream impact)
Noise
bikeshed— style/naming/formatting preference, especially where a linter or formatter would settle itstale— code at that line has changed since the comment; may no longer applymisread— reviewer misunderstood what the code doesvague— "feels off", "have you considered", no concrete issueai-slop— pattern-matched suggestion that ignores context (often verbose, hedged, generic, or restates the diff)scope-creep— asks for changes outside the PR's stated goalunfounded— performance/security concern with no measurement or threat model
A comment is noise unless it survives this question: if I made the change they're asking for, would the code be meaningfully better, or just different?
The classification is a draft, not a verdict. The user knows their reviewer, codebase, and team norms — defer to their judgment when they push back.
Triage action
For each comment, recommend one:
- Address — make the change
- Push back — explain why not
- Defer — file an issue, out of scope for this PR
- Clarify — ask the reviewer for the missing context (concrete example, threat model, measurement)
- Ignore — already resolved or stale; mark resolved without responding
Output
Per comment:
- Reviewer + location (
file:lineor "review-level") - Comment quote (trimmed if long)
- Labels
- Recommended action + one-line reasoning
- If push back or clarify: draft response — direct, no apologetic preamble, no "great point!", no "you're absolutely right"
Group by recommended action so the user can work Address items first, then send drafts.
End with a tally: e.g. "12 comments → 4 address, 5 push back, 2 defer, 1 ignore."
Do not apply code changes or post responses. This skill triages and drafts only.