From skillz
Respond to PR review feedback. Process every unresolved comment, suggestion, review summary, and CI annotation on a PR — react, reply, resolve threads, and dismiss CHANGES_REQUESTED reviews only when fully addressed.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skillz:respond-to-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Process every unresolved comment, suggestion, review summary, top-level
Process every unresolved comment, suggestion, review summary, top-level
comment, and CI annotation on the current PR. Every item gets a reaction
(when reactable) and a written reply. Threads get resolved when the work is
done. CHANGES_REQUESTED reviews get dismissed only when fully addressed.
Repo is always teamclara/clara_v1 for all MCP and gh calls.
If the user passed a PR number as an argument, use it. Otherwise:
gh pr view --json number,headRefName,baseRefName,url 2>/dev/null
Stop with a clear message if no PR is open for this branch.
There are four distinct sources. Fetch in parallel:
| Source | Fetch with | Resolvable? | How to reply |
|---|---|---|---|
review_thread | mcp__github_extensions__get_review_comments (carries thread_node_id) | yes, via resolve_review_thread | gh api repos/teamclara/Clara_V1/pulls/{PR}/comments/{id}/replies --method POST -f body=... |
review_body | gh api repos/teamclara/Clara_V1/pulls/{PR}/reviews (state: APPROVED, CHANGES_REQUESTED, COMMENTED, DISMISSED) | dismissable for CHANGES_REQUESTED | gh pr comment {PR} --body ... |
issue_comment | gh pr view {PR} --json comments --repo teamclara/Clara_V1 | no | gh pr comment {PR} --body ... |
check_annotation | gh api repos/teamclara/Clara_V1/commits/{HEAD_SHA}/check-runs | no (re-run check) | Fix the underlying code |
Deduplicate by (source, id). Skip anything already RESOLVED, already replied
to by the current user, or authored by the current user.
Print the categorized summary table:
PR #N — Annotations
──────────────────────────────
Review bodies: N (APPROVED: N, CHANGES_REQUESTED: N, COMMENTED: N, DISMISSED: N)
Inline threads: N (SUGGESTION: N, CHANGE_REQUEST: N, QUESTION: N, NITPICK: N, PRAISE: N)
Top-level comments: N
CI check failures: N
Already resolved: N (skipped)
──────────────────────────────
To process: N
Inline-thread categories:
```suggestion block? or asks for clarificationnit: or nit - (optional)Process items one at a time. Never batch these steps across items - finish one completely before starting the next. The six steps apply uniformly to all four sources; only step 3.6 (resolve) varies by source.
hipaa, backend, frontend,
html-security, database, logging, testing, toolchain, CLAUDE.md).
Invoke the relevant skill before deciding.Decide ACCEPT or REJECT based on current code + project conventions. Stale suggestions against already-fixed code count as ACCEPT with "already addressed".
Post a reaction on the originating comment via mcp__github_extensions__add_reaction:
+1-1eyesReactions attach to individual comments. For a review_body, react on the
review summary comment. For issue_comment and review_thread, react on the
comment itself. check_annotation items have nothing to react to - skip the
reaction and proceed.
The reaction is the first signal so the reviewer sees your stance immediately, before any code changes land.
mcp__github_extensions__apply_suggestion
(or apply_suggestions_batch for adjacent suggestions from the same
reviewer).Honor project rules while editing:
HIPAALogger.advance(), never navigate().hk check on changed files. Do not run the full
test suite unless the comment explicitly asks.review_thread: reply on the thread via
gh api repos/teamclara/Clara_V1/pulls/{PR}/comments/{comment_id}/replies --method POST -f body="..."
so the reply is threaded.review_body: post a new PR-level comment via gh pr comment {PR} --body "..." referencing the review author (e.g. `Re: @reviewer's review ({state})
issue_comment: same as review_body - new PR-level comment. A single PR
comment addressing each concern is enough for bot summaries.check_annotation: no reply needed - the fix itself + a reference in the
follow-up commit message is sufficient. If the failure was a flake, note
that in the final report.Keep the body to one or two sentences:
review_thread + ACCEPT (applied, edited, or already-addressed): call
mcp__github_extensions__resolve_review_thread with the thread_node_id
(PRRT_...).review_thread + REJECT: leave unresolved so the reviewer can close it
after reading your reasoning.review_body with state = CHANGES_REQUESTED: if every concern raised is
addressed, dismiss via
gh api repos/teamclara/Clara_V1/pulls/{PR}/reviews/{review_id}/dismissals --method PUT -f message="Addressed in {sha}; see reply above." -f event=DISMISS.
If any concern is rejected or pending, leave the review as-is.review_body with state = APPROVED / COMMENTED: nothing to resolve -
the reply + reaction is the full response.issue_comment and check_annotation: no thread state - the reply (or the
fix itself) is the full response.Log one line per item as you go:
[thread] [ACCEPT + APPLIED + RESOLVED] path/to/file.py:42 - short summary
[thread] [ACCEPT + EDITED + RESOLVED] path/to/file.py:42 - short summary
[thread] [REJECT + REPLIED] path/to/file.py:42 - reason
[thread] [STALE + REPLIED + RESOLVED] path/to/file.py:42 - addressed in <sha>
[review] [ACCEPT + EDITED + DISMISSED] CHANGES_REQUESTED by @alice - short summary
[review] [REJECT + REPLIED] COMMENTED by @bob - reason
[issue] [REJECT + REPLIED] @bot's CI summary - out of scope
[check] [ACCEPT + EDITED] Test Frontend run #123 - fixed selector
After all items are processed, if any files changed:
commit-commands:commit-push-pr (or commit-commands:commit if a PR
already exists for the branch) to create a single focused commit like
chore(review): address PR #N feedback.mcp__github_extensions__edit_review_comment.Re-fetch all four sources. Any unresolved thread, un-dismissed
CHANGES_REQUESTED review, unanswered comment, or still-failing check that
isn't intentionally left open gets processed now.
Address PR Comments - PR #N
────────────────────────────
Items processed: N
- review threads: N
- review bodies: N
- issue comments: N
- check annotations: N
Accepted + applied: N
Accepted + edited: N
Rejected: N
Already addressed: N
Resolved on GitHub: N (threads)
Reviews dismissed: N
Left open: N
────────────────────────────
Left open intentionally:
- [thread] path/to/file.py:42 - reason
- [review] CHANGES_REQUESTED by @alice - waiting on clarification
CHANGES_REQUESTED reviews only when every concern in the review
body is addressed - partial fixes get a reply but not a dismissal.hipaa, backend, frontend, etc.) when the item
touches their area.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub northisup/skillz --plugin skillz