Use when you have PR review comments to address and want to evaluate each comment's validity before deciding to fix, reply, or skip
Interactive workflow: analyze PR review comment validity, recommend action, let user decide (fix/reply/skip).
digraph pr_review_flow {
"Fetch PR comments" [shape=box];
"More comments?" [shape=diamond];
"Show comment + file context" [shape=box];
"Analyze validity" [shape=box];
"Recommend action" [shape=box];
"Ask user: Fix/Reply/Skip/Quit?" [shape=diamond];
"Make code changes" [shape=box];
"Draft reply" [shape=box];
"Track as skipped" [shape=box];
"Show summary" [shape=box];
"Fetch PR comments" -> "More comments?";
"More comments?" -> "Show comment + file context" [label="yes"];
"More comments?" -> "Show summary" [label="no"];
"Show comment + file context" -> "Analyze validity";
"Analyze validity" -> "Recommend action";
"Recommend action" -> "Ask user: Fix/Reply/Skip/Quit?";
"Ask user: Fix/Reply/Skip/Quit?" -> "Make code changes" [label="Fix"];
"Ask user: Fix/Reply/Skip/Quit?" -> "Draft reply" [label="Reply"];
"Ask user: Fix/Reply/Skip/Quit?" -> "Track as skipped" [label="Skip"];
"Ask user: Fix/Reply/Skip/Quit?" -> "Show summary" [label="Quit"];
"Make code changes" -> "More comments?";
"Draft reply" -> "More comments?";
"Track as skipped" -> "More comments?";
}
CRITICAL: Do NOT use gh api --jq directly - it truncates comment bodies.
Use the included script:
# summary with counts and titles
python .claude/skills/address-pr-review/scripts/fetch_comments.py <PR> --summary
# show unresolved comments (default)
python .claude/skills/address-pr-review/scripts/fetch_comments.py <PR>
# single comment by ID
python .claude/skills/address-pr-review/scripts/fetch_comments.py <PR> --id <ID>
# all comments including resolved
python .claude/skills/address-pr-review/scripts/fetch_comments.py <PR> --all
Critical principle: Reviewer may be wrong - analyze validity before recommending action.
| Phase | Actions |
|---|---|
| Fetch | Run --summary first to see countsOnly process unresolved comments — resolved ones are already closed, skip them Then --id <ID> for each unresolved comment to analyzeExit if no unresolved comments |
| Per Comment | Show: file:line, author, comment, ±10 lines context Analyze: Valid/Nitpick/Disagree/Question Recommend: Fix/Reply/Skip with reasoning |
| Fix | Minimal changes per llm/rules-*.md Do NOT reply — just fix the code |
| Reply | Draft based on type: Question/Suggestion/Disagreement Wait 2 minutes between each reply Post with: gh api --method POST repos/{owner}/{repo}/pulls/{PR}/comments -f body="..." -F in_reply_to=<ID>(never auto-post without user confirmation) |
| Summary | Processed X/N: Fixed Y, Replied Z, Skipped W List: files modified, reply drafts, next steps |
| Principle | Violation Pattern |
|---|---|
| Unresolved only | Processing already-resolved comments — the script default filters to unresolved; never re-open resolved threads |
| Analyze first | Accepting all feedback as valid without critical analysis |
| Never auto-post | Posting replies automatically without user confirmation or skipping 2-minute wait between replies |
| No reply on fix | Replying to comments that were addressed with a code fix — fixes speak for themselves |
| One at a time | Batch processing all comments without individual analysis |
| Show context | Making changes without displaying ±10 lines around code |
| Minimal changes | Large refactors in response to small comments |
| Follow standards | Ignoring llm/rules-*.md when fixing |
| Respectful honesty | Being defensive/dismissive when reviewer is wrong |
| User control | Posting drafts without letting user edit first |
Fixed: [what]. [why]Updated: [what][explanation]Good catch, [action/reason][respectful reasoning]Requires: gh CLI authenticated, GitHub remote configured
# Start session
"use address-pr-review for PR <number>"
# Or list PRs first
"use address-pr-review"