skills/resolve-pr-comments/SKILL.md
Evaluate, fix, answer, and reply to GitHub pull request review comments and conversation comments. Handles both change requests (fix or skip) and reviewer questions (explain using reasoning recalled from past Claude Code transcripts). Use when the user asks to "resolve PR comments", "fix review comments", "address PR feedback", "handle review comments", "address review feedback", "respond to PR comments", "answer review questions", or "address code review".
npx skillsauth add tobihagemann/turbo resolve-pr-commentsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Fetch unresolved review comments from a GitHub PR (inline threads, review-body observations, and issue-comment observations from the PR conversation), evaluate each one, fix or skip based on confidence, answer reviewer questions using recalled implementation reasoning, and reply. Inline threads are answered with thread replies; issue-comment findings are answered with new PR conversation comments. Review-body findings flow through the same evaluate-and-fix pipeline; their outcomes land in the summary because a review body has no destination to post to.
At the start, use TaskCreate to create a task for each step:
/interpret-feedback skill/evaluate-findings skill/resolve-findings skill/answer-reviewer-questions skill/reply-to-pr-threads skill/reply-to-pr-conversation skillAuto-detect owner, repo, and PR number from current branch if not provided. Then run scripts/fetch-pr-data.sh, which handles full pagination (reviews, review threads, inner comment pages for long threads, issue comments, commits) and emits a single merged JSON document:
bash <skill-dir>/scripts/fetch-pr-data.sh <owner> <repo> <pr_number>
Output shape:
{
"meta": { "title", "url", "headRefName", "baseRefName" },
"reviewThreads": [ { "id", "isResolved", "isOutdated", "comments": { "nodes": [ { "author", "body", "path", "line", "originalLine", "diffHunk" } ] } } ],
"reviews": [ { "author", "body", "state", "submittedAt" } ],
"issueComments": [ { "author", "body", "createdAt", "url" } ],
"commits": [ { "commit": { "oid", "abbreviatedOid", "message", "committedDate" } } ]
}
Filter review threads to unresolved only. Filter reviews to those with a non-empty body, excluding PENDING state (unsubmitted drafts). Filter issue comments to those with a non-empty body.
Review bodies and PR conversation comments (issue comments) often pack multiple distinct concerns into one comment. Split each non-empty, non-PENDING review body and each non-empty issue comment into atomic observations, one per paragraph or bullet, so each can be evaluated on its own merits.
For every observation, check whether a subsequent commit already addresses it. Compare the source timestamp (submittedAt for review bodies, createdAt for issue comments) against each commit's committedDate; only commits after the source was posted can address it. Start with commit messages; read git show <oid> only when the message is ambiguous. A commit addresses an observation when its changes clearly resolve that specific concern. Touching the same area is not enough.
Classify each observation:
source (review-body or issue-comment), the author, the observation text, and (for review bodies) the review state.Review-body and issue-comment findings have no diffHunk, file path, or line reference. The downstream pipeline handles findings without a code location.
/interpret-feedback SkillRun the /interpret-feedback skill on the union of:
Skip AI-reviewer accounts — match by known login (e.g., coderabbitai, copilot-pull-request-reviewer[bot]), not the [bot] suffix alone. Their structured feedback routes directly to /evaluate-findings.
For inline threads, include the diffHunk so the interpreters can see the code the reviewer was looking at. For outdated comments where line is null, use originalLine. For review-body and issue-comment findings, provide the observation text and the PR's changed-file list as context.
Tag each item with its source (inline-thread, review-body, or issue-comment) so later steps can route replies correctly.
Classify each interpreted item as either a question or a change request based on the reconciled intent from Step 3.
When in doubt, treat the item as a change request. The verdict from /evaluate-findings in Step 5 will catch genuine non-issues.
Produce two lists. Each entry retains the source tag, identifier (thread id for inline threads; a generated id for review-body and issue-comment findings), file path and line (use originalLine when line is null; omit for review-body and issue-comment findings), the reviewer's original text, and the reconciled intent from Step 3. Questions skip Step 5 and feed Step 9. Change requests feed Step 5.
/evaluate-findings SkillRun the /evaluate-findings skill on the change requests from Step 4 to triage each one. Questions are not evaluated here.
Review-body and issue-comment findings have no file or line reference. Scope their assessment to the PR's changed files as a whole, and do not treat the absent code location as a "code has diverged" early exit.
Collect items assigned an Escalate verdict by /evaluate-findings. If there are none, skip to Step 7.
Output all escalated items as a numbered list. For each item, show:
Then use AskUserQuestion to ask how to handle them. Per item, the options are:
/resolve-findings SkillIf there are no accepted findings to implement, skip to Step 9.
Run the /resolve-findings skill on the accepted findings from Step 5, including any items reclassified in Step 6. /finalize commits and pushes as part of its normal flow; Steps 10 and 11 replies reference the already-pushed commit SHA.
For each finding that was fixed in Step 7, verify the fix actually addresses the reviewer's concern:
diffHunk when available).If the fix did not address the concern (wrong location, incomplete change, or the issue is still present), downgrade the item to Skip. Record the reason (the attempted fix did not resolve the reviewer's concern, with a brief explanation of what remains) so Step 10 (for inline threads), Step 11 (for issue-comment findings), and Step 12 (for review-body findings) report it correctly.
/answer-reviewer-questions SkillRun the /answer-reviewer-questions skill on question items whose source is inline-thread. It produces raw answer text per thread.
Issue-comment questions are composed during Step 11's assembly and posted by /reply-to-pr-conversation. They have no file and line to ground with /recall-reasoning, so the composition draws on the reconciled intent and the PR's changed code. Review-body questions have no destination to post to and are listed for manual follow-up in Step 12.
If there are no inline-thread questions, skip the skill invocation.
/reply-to-pr-threads SkillAssemble the processed-thread list from inline-thread items only:
/evaluate-findings, plus any downgraded in Step 8. Payload: the skip reasoning.Issue-comment findings go to Step 11; review-body findings have no destination to post to and surface only in Step 12.
Run the /reply-to-pr-threads skill with the assembled list.
/reply-to-pr-conversation SkillAssemble the processed-item list from issue-comment items only. Each entry includes the generated id, the author, the original comment body (for quoting), the category, and the per-category payload:
/evaluate-findings, plus any downgraded in Step 8. Payload: the skip reasoning.Review-body findings have no destination to post to. Exclude them from this list; their triage status is reported in Step 12.
If there are no issue-comment items to reply to, skip the skill invocation.
Run the /reply-to-pr-conversation skill with the assembled list.
After processing all items, present a summary grouped by source.
Inline threads:
Review-body findings:
Issue-comment findings:
Overall: list of files modified.
/evaluate-findings skill.tools
Teach the user to deeply understand a change through interactive tutoring: restating understanding, drilling into why/what/how, and quizzing until mastery. The active counterpart to a one-shot explanation. Use when the user asks to "understand this change", "teach me this change", "help me understand what changed", "walk me through this change", "make sure I understand this", "quiz me on this", or "teach me what we did".
tools
Teach the user to deeply understand a change through interactive tutoring: restating understanding, drilling into why/what/how, and quizzing until mastery. The active counterpart to a one-shot explanation. Use when the user asks to "understand this change", "teach me this change", "help me understand what changed", "walk me through this change", "make sure I understand this", "quiz me on this", or "teach me what we did".
tools
Update an existing GitHub pull request's title and description to reflect the current state of the branch. Use when the user asks to "update the PR", "update PR description", "update PR title", "refresh PR description", or "sync PR with changes".
tools
Execute an approved split plan by creating separate branches, commits, and PRs for each change group. Use when the user asks to "split and ship", "ship the split plan", "create separate PRs", or "split changes into branches".