skills/address-pr-comments/SKILL.md
Use this skill when addressing, responding to, or resolving PR review comments on GitHub pull requests. Triggers on "address PR comments", "respond to review", "handle review feedback", "reply to PR comments", "fix review comments", or when the user wants to process open review threads on their PR. Uses the gh CLI to fetch unresolved comments, make code changes where agreed, and post batch replies with a humble, thankful tone.
npx skillsauth add absolutelyskilled/absolutelyskilled address-pr-commentsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
4 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When this skill is activated, always start your first response with the :speech_balloon: emoji.
Automates the workflow of reading open PR review comments, understanding each one,
making code changes where the feedback is valid, and posting thoughtful replies to
every comment - all via the gh CLI. The agent exercises judgment on which comments
to accept vs. respectfully defer, and batches all replies for user review before posting.
Trigger this skill when the user:
Do NOT trigger this skill for:
The gh CLI must be authenticated. Verify with:
gh auth status
The user should be on the branch associated with the PR, or provide a PR number/URL.
Determine the PR number. If the user doesn't specify one:
gh pr view --json number,title,url -q '.number'
Gotcha: This only works if the current branch has an open PR. If it fails, ask the user for the PR number or URL.
Fetch all review comments (not issue comments) on the PR:
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments --paginate
Each comment object contains:
id - unique comment IDbody - the reviewer's comment textpath - file path the comment is online / original_line - line number in the diffdiff_hunk - surrounding diff contextin_reply_to_id - if this is a reply to another comment (threaded)user.login - who left the commentAlso fetch review-level comments (top-level review bodies):
gh api repos/{owner}/{repo}/pulls/{pr_number}/reviews --paginate
A comment is "unaddressed" if:
To check threads, group comments by in_reply_to_id. A root comment (no in_reply_to_id)
that has no reply from the PR author's login is unaddressed.
Gotcha: The
in_reply_to_idfield links replies to their parent comment. Comments without this field are root comments. Always check the full thread before deciding a comment is unaddressed.
For each unaddressed comment:
pathAgreement criteria:
Defer criteria (respectfully):
For each agreed comment, make the code change. Track what was changed:
Gotcha: Multiple comments may affect the same file or even the same lines. Process them carefully to avoid conflicting edits. Read the file fresh before each edit if multiple comments target the same file.
Draft replies for ALL comments before posting any. Present them to the user for review.
Reply tone guidelines:
Reply templates:
For agreed comments where changes were made:
Good catch! Updated [brief description of change]. Thanks for the review!
Thanks for flagging this - you're right. Fixed in the latest push.
Great suggestion! Refactored to [what was done]. Appreciate the feedback.
For deferred comments:
Thanks for the suggestion! I considered this, but went with [current approach] because [reason]. Happy to discuss further if you see issues with this approach.
Appreciate the review! The current implementation is intentional here - [brief reason]. Let me know if you think there's still a concern.
Before posting, present a summary table:
| # | File | Comment (summary) | Action | Reply (draft) |
|---|------|-------------------|--------|---------------|
| 1 | src/api.ts:42 | Missing null check | Agreed - Fixed | "Good catch! Added null check..." |
| 2 | src/utils.ts:15 | Use lodash instead | Deferred | "Thanks! Kept native impl because..." |
Ask the user to approve, edit, or skip specific replies.
Post each reply using the GitHub API:
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments \
-method POST \
-f body="Good catch! Updated the null check. Thanks for the review!" \
-F in_reply_to={parent_comment_id}
Gotcha: Use
in_reply_toto thread the reply under the original comment. Do NOT create a new top-level review comment - always reply in the existing thread. Thein_reply_tovalue should be theidof the root comment in the thread.
| Error | Cause | Resolution |
|---|---|---|
| gh: not found | gh CLI not installed | Ask user to install: brew install gh |
| HTTP 401 | gh not authenticated | Run gh auth login |
| HTTP 404 on PR | Wrong repo or PR doesn't exist | Verify PR number and repo |
| HTTP 422 on reply | Invalid in_reply_to ID | Verify the comment ID exists and belongs to the PR |
| No unaddressed comments | All comments already replied to | Inform the user - nothing to do |
| Mistake | Why it's wrong | What to do instead |
|---|---|---|
| Agreeing with everything | Wastes effort, may introduce bad changes | Exercise judgment - defer when current approach is better |
| Being defensive in replies | Creates friction, poor collaboration | Stay humble: "Thanks for the suggestion" even when deferring |
| Posting replies before user approval | User loses control over what's posted | Always batch and present for approval first |
| Replying as top-level comments | Breaks the review thread structure | Always use in_reply_to to thread replies |
| Ignoring diff context | May misunderstand what the reviewer is pointing at | Always read diff_hunk and the full file before deciding |
For detailed information on specific topics, read the relevant file from references/:
references/gh-api-reference.md - Full GitHub API endpoints for PR reviews and commentsdevelopment
Diátaxis-driven documentation writing, improvement, and auditing for AI agents. Writes public-facing product docs (tutorials, how-to guides, reference, explanation) and repo developer docs (README, CONTRIBUTING, ARCHITECTURE, ADRs, changelogs, runbooks), improves existing pages to their quadrant's standard, and audits whole doc sites against the Diátaxis map. Detects the docs stack (Fumadocs, Docusaurus, Starlight, MkDocs, VitePress, Mintlify, plain Markdown) and follows its conventions. Triggers on "write docs", "document this", "write a tutorial", "write a README", "improve this doc", "audit our docs", "restructure the documentation", or "absolute-documentations this".
development
End-to-end, phase-gated software development lifecycle for AI agents. Turns a ticket, task, plan, or migration into a validated design, a dependency-graphed task board, and verified code. Triggers on "build this end-to-end", "plan and build", "break this into tasks", "pick up this ticket", "grill me on this", "run this migration", "absolute-work this", or any multi-step development task. Relentlessly interviews to a shared design, writes a reviewed spec, decomposes into atomic tasks on a persistent markdown board, then peels tasks one safe wave at a time with test-first verification. Handles features, bugs, refactors, greenfield projects, planning breakdowns, and migrations.
development
Use this skill when building user interfaces that need to look polished, modern, and intentional - not like AI-generated slop. Triggers on UI design tasks including component styling, layout decisions, color choices, typography, spacing, responsive design, dark mode, accessibility, animations, landing pages, onboarding flows, data tables, navigation patterns, and any question about making a UI look professional. Covers CSS, Tailwind, and framework-agnostic design principles.
development
Autonomously simplifies code in your working changes or targeted files. Detects staged or unstaged git changes, analyzes for simplification opportunities following clean code and clean architecture principles, applies improvements directly, runs tests to verify nothing broke, and shows a structured summary with reasoning. Triggers on "simplify this", "refactor this", "clean up my changes", "absolute-simplify", "simplify my code", "make this cleaner", "tidy this up", "reduce complexity", "flatten this", "remove dead code", or when code needs clarity improvements, nesting reduction, or redundancy removal. Language-agnostic at base with deep opinions for JS/TS/React, Python, and Go.