Process and resolve GitHub Copilot automated PR review comments. Use when the user says "check copilot review", "handle copilot comments", "resolve copilot feedback", "address copilot suggestions", or mentions Copilot PR comments. Also use after PR creation when Copilot has left automated review comments.
/plugin marketplace add fx/cc/plugin install fx-dev@fx-ccThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Process and resolve GitHub Copilot's automated PR review comments systematically.
NEVER leave comments directly on GitHub PRs. This is strictly forbidden:
gh pr review --comment - FORBIDDENgh pr comment - FORBIDDENThis skill ONLY processes GitHub Copilot threads. Never interact with threads created by human reviewers.
Permitted operations:
addPullRequestReviewThreadReplyresolveReviewThreadAfter fixing any Copilot feedback, you MUST:
git push)Addressing feedback without resolving the thread is INCOMPLETE WORK.
The thread resolution is NOT optional - it's the primary deliverable of this skill. Code changes alone are insufficient.
IMPORTANT: Use inline values, NOT $variable syntax. The $ character causes shell escaping issues (Expected VAR_SIGN, actual: UNKNOWN_CHAR).
# Replace THREAD_ID with actual thread ID (e.g., PRRT_kwDONZ...)
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "THREAD_ID"}) {
thread { isResolved }
}
}'
You MUST call this mutation for EVERY thread you address.
When Copilot feedback is categorized as INCORRECT (conflicts with project conventions/patterns), you MUST:
.github/copilot-instructions.md to document the correct patternFailure to update copilot-instructions.md = INCOMPLETE WORK for Incorrect category feedback.
Copilot only reads the first ~4000 characters for PR reviews. Therefore:
## PR Review Checklist (CRITICAL) as the first sectionhead -c 4000 .github/copilot-instructions.md | wc -cExample structure:
# GitHub Copilot Instructions
## PR Review Checklist (CRITICAL)
<!-- KEEP THIS SECTION UNDER 4000 CHARS - Copilot only reads first ~4000 -->
- **Pattern X**: Intentional, do not flag
- **Pattern Y**: Required for Z reason
## Code Style
<!-- Less critical sections go below -->
After updating, verify: head -c 4000 .github/copilot-instructions.md | tail -5 should show content from the review section, not unrelated sections.
CRITICAL: Load the fx-dev:github skill FIRST before running any GitHub API operations. This skill provides essential patterns and error handling for gh CLI commands.
USE THIS SKILL PROACTIVELY when ANY of the following occur:
pr-reviewer agent completesInvocation: Use the Skill tool with skill="fx-dev:copilot-feedback-resolver"
ONLY process UNRESOLVED comments. NEVER touch, modify, or re-process already resolved comments. Skip them entirely.
Query review threads using GraphQL.
IMPORTANT: Use inline values, NOT $variable syntax. The $ character causes shell escaping issues.
# Replace OWNER, REPO, PR_NUMBER with actual values
gh api graphql -f query='
query {
repository(owner: "OWNER", name: "REPO") {
pullRequest(number: PR_NUMBER) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 10) {
nodes {
author { login }
body
}
}
}
}
}
}
}'
Filter for: isResolved: false AND author is Copilot (github-actions bot or copilot signature)
For each unresolved Copilot comment:
| Category | Indicator | Action |
|---|---|---|
| Nitpick | Contains [nitpick] prefix | Auto-resolve immediately |
| Outdated | Refers to code that no longer exists | Reply with explanation, resolve |
| Incorrect | Misunderstands project conventions | Reply with explanation, resolve, update copilot-instructions.md |
| Valid | Current, actionable concern | Delegate to coder agent to fix |
Use GraphQL mutation to resolve.
IMPORTANT: Use inline values, NOT $variable syntax.
# Replace THREAD_ID with actual thread ID (e.g., PRRT_kwDONZ...)
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "THREAD_ID"}) {
thread { isResolved }
}
}'
[nitpick] prefix)CRITICAL: Reply directly to the Copilot review thread, NOT to the PR.
Use GraphQL to add a reply to the specific Copilot thread.
IMPORTANT: Use inline values, NOT $variable syntax.
# Replace THREAD_ID and message with actual values
gh api graphql -f query='
mutation {
addPullRequestReviewThreadReply(input: {
pullRequestReviewThreadId: "PRRT_xxx",
body: "Your explanation here"
}) {
comment { id }
}
}'
⛔ FORBIDDEN COMMANDS - NEVER USE:
gh pr review <PR_NUMBER> --comment - adds PR-level comments, not thread repliesgh pr comment - adds PR-level comments.github/copilot-instructions.md to prevent recurrence:
.sr-only classes - required accessibility utilities"git pushFor outdated comments:
This comment refers to code that has been refactored in commit [hash]. The issue is no longer applicable.
For incorrect/convention conflicts:
This suggestion conflicts with our [convention name] convention. [Brief explanation of why]. See [reference file] for project guidelines.
Task is INCOMPLETE until ALL of these are done:
.github/copilot-instructions.md updated to prevent recurrenceisResolved: true for all processed threadsYou MUST output this table after processing all threads:
| Thread ID | File:Line | Category | Action Taken | Status |
|-----------|-----------|----------|--------------|--------|
| PRRT_xxx | src/foo.ts:42 | Nitpick | Auto-resolved | ✅ Resolved |
| PRRT_yyy | src/bar.ts:15 | Valid | Fixed null check | ✅ Resolved |
| PRRT_zzz | lib/util.js:8 | Outdated | Code refactored | ✅ Resolved |
Column definitions:
Common failure mode: Fixing code but forgetting to resolve the threads. This leaves the PR with unresolved conversations even though the issues are fixed. ALWAYS run the resolution mutation after pushing code.