Claude Code Plugins

Community-maintained marketplace

Feedback

copilot-feedback-resolver

@fx/cc
1
0

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.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name copilot-feedback-resolver
description 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.

Copilot Feedback Resolver

Process and resolve GitHub Copilot's automated PR review comments systematically.

⛔ PR Comments Prohibition (CRITICAL)

NEVER leave comments directly on GitHub PRs. This is strictly forbidden:

  • gh pr review --comment - FORBIDDEN
  • gh pr comment - FORBIDDEN
  • ❌ Any GraphQL mutation that creates new reviews or PR-level comments - FORBIDDEN
  • ❌ Responding to human review comments - FORBIDDEN

This skill ONLY processes GitHub Copilot threads. Never interact with threads created by human reviewers.

Permitted operations:

  • ✅ Reply to EXISTING Copilot threads using addPullRequestReviewThreadReply
  • ✅ Resolve Copilot threads using resolveReviewThread

⚠️ CRITICAL REQUIREMENTS ⚠️

YOU MUST RESOLVE THREADS AFTER ADDRESSING THEM

After fixing any Copilot feedback, you MUST:

  1. Push the code changes (git push)
  2. Resolve EACH thread using the GraphQL mutation (see below)
  3. Verify resolution by re-querying the PR

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.

Thread Resolution Mutation (USE THIS!)

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.

YOU MUST UPDATE COPILOT-INSTRUCTIONS.MD FOR INCORRECT FEEDBACK

When Copilot feedback is categorized as INCORRECT (conflicts with project conventions/patterns), you MUST:

  1. Update .github/copilot-instructions.md to document the correct pattern
  2. This prevents Copilot from flagging the same or similar things in future PRs
  3. The update should be concise and explain why the pattern is intentional

Failure to update copilot-instructions.md = INCOMPLETE WORK for Incorrect category feedback.

CRITICAL: File Structure Requirements

Copilot only reads the first ~4000 characters for PR reviews. Therefore:

  1. Review instructions MUST go at the TOP of the file, in a dedicated section
  2. Use a specific review-targeted section like ## PR Review Checklist (CRITICAL) as the first section
  3. Keep the review section under 4000 characters - measure with head -c 4000 .github/copilot-instructions.md | wc -c
  4. If exceeding 4000 chars, COMPRESS the section:
    • Remove redundant words
    • Use terse bullet points
    • Combine related items
    • Move non-review guidance below the 4000 char threshold

Example 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.


Prerequisites

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.

WHEN TO USE THIS SKILL

USE THIS SKILL PROACTIVELY when ANY of the following occur:

  • User says "check copilot review" / "handle copilot comments" / "resolve copilot feedback"
  • User mentions "copilot" and "PR" or "comments" in the same context
  • After PR creation when you notice Copilot has reviewed the PR
  • User says "address copilot suggestions" / "deal with copilot"
  • As part of the PR workflow after pr-reviewer agent completes
  • When PR checks show Copilot has left review comments

Invocation: Use the Skill tool with skill="fx-dev:copilot-feedback-resolver"

Processing Rules

ONLY process UNRESOLVED comments. NEVER touch, modify, or re-process already resolved comments. Skip them entirely.

Core Workflow

1. Fetch Unresolved Copilot Threads

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)

2. Categorize Each Comment

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

3. Resolve Threads

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 }
  }
}'

4. Handle Each Category

Nitpicks ([nitpick] prefix)

  • Resolve immediately without changes
  • Optional brief acknowledgment reply

Outdated/Incorrect Copilot Comments

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 replies
  • gh pr comment - adds PR-level comments
  • Any interaction with human reviewer threads
  1. Reply to the thread with professional explanation:
    • Outdated: "This comment refers to code refactored in commit abc123. The issue is no longer applicable."
    • Incorrect: "This conflicts with our [convention name] convention. [Brief explanation]. See [reference file] for project guidelines."
  2. Resolve the thread using the mutation from section 3
  3. Update .github/copilot-instructions.md to prevent recurrence:
    • Add to "## Code Reviews" section
    • Example: "- Do not suggest removing .sr-only classes - required accessibility utilities"
    • If symlink: Follow it and edit target file

Valid Concerns

  1. Delegate to coder agent with:
    • PR number and title
    • File and line number
    • Copilot comment text
    • Thread ID for resolution after fix
  2. Ensure coder pushes changes and resolves thread

5. Verify Completion

  1. Push any changes: git push
  2. Re-query PR to confirm ALL Copilot threads resolved
  3. Report summary of actions taken

Reply Templates

For 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.

Success Criteria

Task is INCOMPLETE until ALL of these are done:

  1. ✅ All code changes pushed to the PR branch
  2. EVERY addressed thread resolved via GraphQL mutation (not just code fixed!)
  3. For INCORRECT feedback: .github/copilot-instructions.md updated to prevent recurrence
  4. ✅ Re-query confirms isResolved: true for all processed threads
  5. ✅ Output summary table (see format below)

Required Output: Thread Summary Table

You 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:

  • Thread ID: GraphQL thread ID (truncated for readability)
  • File:Line: Location of the comment
  • Category: Nitpick, Valid, Outdated, or Incorrect
  • Action Taken: Brief description of resolution (10 words max)
  • Status: ✅ Resolved, ❌ Failed, or ⏳ Pending

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.

Error Handling

  • API failures: Retry with proper auth
  • Thread ID issues: Use alternative queries
  • Delegation failures: Attempt simple fixes directly
  • Partial resolution is better than none