[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ADASYWYYDAC1W505KZKCHQ":3,"skill-same:01M6ADASYWYYDAC1W505KZKCHQ":90},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":66,"commitSha":67,"skillDirectory":68,"forksCount":69,"repositoryHtmlUrl":70,"repositoryHomepageUrl":71,"ownerHtmlUrl":72,"ownerBlogUrl":73,"ownerDescription":74,"updatedAt":75,"install":76,"resources":89},"01M6ADASYWYYDAC1W505KZKCHQ","pr-review-response",null,"Teaches agents to reply to PR review comment threads after fixing issues, making resolutions traceable","github\u002Fgh-aw","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6AD3VCZ4WKQSFSRTPN7N9DN",5625,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fpr-review-response\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"pr review","review","pr review response","pr","review response","feedback","read","request","threads","mcp-server","api","fix","which","code-review","code","pull-requests","MCP","issues","server","pull","2026-11-10 10:12:30",false,"---\nname: \"pr-review-response\"\ndescription: \"Teaches agents to reply to PR review comment threads after fixing issues, making resolutions traceable\"\ndomain: \"pull-requests, code-review, traceability\"\nconfidence: \"low\"\nsource: \"observed (agents fix review feedback silently — reviewers can't tell which comments were addressed)\"\ntools:\n  - name: \"github-mcp-server-pull_request_read\"\n    description: \"Read PR review threads and comments\"\n    when: \"Step 1 — fetching review comments to understand what needs fixing\"\n  - name: \"gh api (REST)\"\n    description: \"Reply to review comment threads and resolve threads via GraphQL\"\n    when: \"Step 3 — posting reply to each comment thread after fixing\"\n---\n\n## Context\n\nWhen an agent fixes code in response to PR review comments (from Copilot, a human reviewer, or any GitHub reviewer), the fix alone is not enough. The reviewer needs to see — on the PR thread itself — which comments were addressed and how. Without replies, comments stay visually unresolved, reviewers must re-read the entire diff to verify fixes, and there's no traceable link between feedback and resolution.\n\nUse this skill whenever:\n- You are fixing code based on PR review feedback\n- You are addressing Copilot review suggestions\n- You are responding to reviewer-requested changes on a PR\n- A squad member hands you review comments to resolve\n\n## SCOPE\n\n✅ THIS SKILL PRODUCES:\n- Reply comments on each review thread explaining the fix\n- Optionally resolved threads (via GraphQL when appropriate)\n- Commit messages that reference the PR and review context\n\n❌ THIS SKILL DOES NOT PRODUCE:\n- The code fixes themselves (that's the agent's domain work)\n- New review comments or reviews\n- PR descriptions or summaries\n\n## Patterns\n\n### Step 1: Read the review comments\n\n**Using MCP tools (preferred when available):**\n\n```\ngithub-mcp-server-pull_request_read\n  method: \"get_review_comments\"\n  owner: \"{owner}\"\n  repo: \"{repo}\"\n  pullNumber: {pr_number}\n```\n\nThis returns review threads with metadata: `isResolved`, `isOutdated`, `isCollapsed`, and their associated comments. Each comment has an `id` you'll need for replies.\n\n**Using gh CLI (fallback):**\n\n```bash\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr_number}\u002Fcomments --paginate\n```\n\nEach comment object contains `id`, `body`, `path`, `line`, and `in_reply_to_id`. Top-level comments have no `in_reply_to_id` — those are the ones you reply to.\n\n### Step 2: Fix the code\n\nMake the actual code changes. This is your normal domain work — the skill doesn't prescribe how to fix, only how to communicate the fix.\n\n**Track what you changed.** For each review comment, note:\n- The comment `id` (top-level, not a reply)\n- The file and line referenced\n- What you actually changed (brief description)\n- The commit SHA after pushing (if available)\n\n### Step 3: Reply to each review thread\n\nAfter fixing and committing, reply to **each** review comment thread individually.\n\n**REST API call (via gh CLI):**\n\n```bash\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr_number}\u002Fcomments\u002F{comment_id}\u002Freplies \\\n  -f body=\"Fixed in {sha_short} — {brief description of what was changed}\"\n```\n\n**Important:** `{comment_id}` must be the ID of the **top-level** comment in the thread. You cannot reply to a reply — only to the original review comment.\n\n**Example replies:**\n\n```bash\n# Specific and traceable\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F42\u002Fcomments\u002F18234\u002Freplies \\\n  -f body=\"Fixed in a1b2c3d — switched to path.dirname(squadDirInfo.path) for worktree consistency\"\n\n# When applying a suggested code change\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F42\u002Fcomments\u002F18235\u002Freplies \\\n  -f body=\"Applied suggestion — updated error message to include the file path for debuggability\"\n\n# When pushing back on a suggestion\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F42\u002Fcomments\u002F18236\u002Freplies \\\n  -f body=\"Considered but not applied — this path needs to stay absolute because worktree resolution depends on it. See detectSquadDir() in detect-squad-dir.ts.\"\n```\n\n### Step 4: Resolve threads (optional, GraphQL only)\n\nThread resolution is only available via the GitHub GraphQL API. Use this when your fix fully addresses the comment and no further discussion is needed.\n\n**First, get the thread IDs** (they're different from comment IDs):\n\n```bash\ngh api graphql -f query='\n  query {\n    repository(owner: \"{owner}\", name: \"{repo}\") {\n      pullRequest(number: {pr_number}) {\n        reviewThreads(first: 100) {\n          nodes {\n            id\n            isResolved\n            comments(first: 1) {\n              nodes { body databaseId }\n            }\n          }\n        }\n      }\n    }\n  }\n'\n```\n\nMatch thread IDs to comment IDs using `databaseId`, then resolve:\n\n```bash\ngh api graphql -f query='\n  mutation {\n    resolveReviewThread(input: {threadId: \"{thread_node_id}\"}) {\n      thread { id isResolved }\n    }\n  }\n'\n```\n\n**When to resolve vs. leave open:**\n- ✅ Resolve: You fixed exactly what was requested, no ambiguity\n- ❌ Don't resolve: You pushed back, applied a different fix, or the comment needs further discussion\n- ❌ Don't resolve: The reviewer is a human — let them confirm and resolve themselves\n\n**Rule of thumb:** Agent-to-agent threads (e.g., Copilot review → agent fix) can be resolved by the fixer. Human reviewer threads should be left for the human to resolve.\n\n### Step 5: Commit message traceability\n\nCommit messages should reference the PR context:\n\n```\nfix: address review feedback on PR #{pr_number}\n\n- Switched to path.dirname() for worktree path resolution (comment #18234)\n- Updated error message to include file path (comment #18235)\n\nCo-authored-by: Copilot \u003C223556219+Copilot@users.noreply.github.com>\n```\n\nFor single-comment fixes, a shorter format works:\n\n```\nfix: use path.dirname() for worktree consistency (PR #{pr_number} review)\n\nCo-authored-by: Copilot \u003C223556219+Copilot@users.noreply.github.com>\n```\n\n## AGENT WORKFLOW (Summary)\n\n1. **READ** — Fetch review threads using MCP tool or `gh api`\n2. **FIX** — Make code changes, tracking comment ID → change mapping\n3. **COMMIT** — Push with traceable commit message referencing PR and comments\n4. **REPLY** — Post individual reply to each thread via `gh api ...\u002Freplies`\n5. **RESOLVE** — (Optional) Resolve agent-to-agent threads via GraphQL\n6. **STOP** — Do not batch-reply, do not skip threads, do not resolve human threads\n\n## Examples\n\n### Example: Copilot flags a potential null dereference\n\n**Review comment (id: 55123):**\n> `squadDir` could be undefined here. Consider adding a null check.\n\n**Agent workflow:**\n1. Read the comment via `get_review_comments`\n2. Add the null check in `src\u002Fcli\u002Fcore\u002Fdetect-squad-dir.ts`\n3. Commit: `fix: add null check for squadDir (PR #99 review)`\n4. Reply:\n   ```bash\n   gh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55123\u002Freplies \\\n     -f body=\"Fixed in f4e5d6c — added early return when squadDir is undefined, matching the pattern in loadConfig()\"\n   ```\n5. Resolve the thread (Copilot → agent, safe to resolve)\n\n### Example: Multiple review comments on one PR\n\n**Comments:**\n- id: 55123 — \"Null check needed\" on `detect-squad-dir.ts:42`\n- id: 55124 — \"Consider using path.join()\" on `detect-squad-dir.ts:58`\n- id: 55125 — \"This log message is too verbose\" on `output.ts:15`\n\n**Agent handles each individually:**\n```bash\n# Fix all three, commit\ngit add packages\u002Fsquad-cli\u002Fsrc\u002Fcli\u002Fcore\u002Fdetect-squad-dir.ts packages\u002Fsquad-cli\u002Fsrc\u002Fcli\u002Fcore\u002Foutput.ts\ngit commit -m \"fix: address 3 review comments on PR #99\n\n- Added null check for squadDir (comment #55123)\n- Switched to path.join() for cross-platform paths (comment #55124)\n- Reduced log verbosity to debug level (comment #55125)\"\n\ngit push\n\n# Reply to each thread individually\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55123\u002Freplies \\\n  -f body=\"Fixed — added early return when squadDir is undefined\"\n\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55124\u002Freplies \\\n  -f body=\"Fixed — switched to path.join(squadDir, 'config.json') for cross-platform consistency\"\n\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55125\u002Freplies \\\n  -f body=\"Fixed — changed from console.log to debug() so it only shows with --verbose flag\"\n```\n\n### Example: Handling Copilot suggestion blocks\n\nCopilot sometimes provides `suggestion` blocks with exact code to apply:\n\n**Review comment (id: 55130):**\n````\nConsider using optional chaining:\n```suggestion\nconst name = config?.agent?.name ?? 'default';\n```\n````\n\n**Reply format when applying:**\n```bash\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55130\u002Freplies \\\n  -f body=\"Applied suggestion — using optional chaining with nullish coalescing\"\n```\n\n**Reply format when not applying:**\n```bash\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55130\u002Freplies \\\n  -f body=\"Not applied — config is guaranteed non-null at this point (validated on line 12). Optional chaining would mask errors.\"\n```\n\n### Example: Pushing back on a review comment\n\nNot every review comment should be accepted. When a suggestion is incorrect or doesn't apply:\n\n```bash\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55140\u002Freplies \\\n  -f body=\"Considered but not applied — this file is in the zero-dependency bootstrap set (see copilot-instructions.md § Protected Files). Adding path.join() would require importing from the SDK, which breaks the bootstrap constraint.\"\n```\n\nDo NOT resolve the thread when pushing back. Leave it open for the reviewer to confirm.\n\n## Anti-Patterns\n\n- ❌ **Fixing silently** — Making code changes without replying to the review thread. The reviewer has no way to know which comments were addressed.\n- ❌ **Batch-replying \"all fixed\"** — A single comment saying \"Addressed all review feedback\" on the PR. Each thread needs its own reply so reviewers can verify individually.\n- ❌ **Resolving without explaining** — Marking threads resolved without posting a reply first. The resolution gives no context on what was done.\n- ❌ **Resolving human reviewer threads** — Only resolve threads from automated reviewers (Copilot, bots). Let human reviewers confirm and resolve their own threads.\n- ❌ **Vague replies** — \"Fixed\" or \"Done\" without saying what was changed. The reply should be specific enough that the reviewer doesn't need to re-read the diff.\n- ❌ **Replying before pushing** — Reply after your fix is committed and pushed, not before. The reply should reference actual committed code.\n- ❌ **Ignoring comments you disagree with** — If you don't apply a suggestion, reply explaining why. Silence looks like you missed it.\n- ❌ **Replying to replies** — The REST API only supports replying to top-level review comments. Attempting to reply to a reply will fail with a 404.\n","## Context\n\nWhen an agent fixes code in response to PR review comments (from Copilot, a human reviewer, or any GitHub reviewer), the fix alone is not enough. The reviewer needs to see — on the PR thread itself — which comments were addressed and how. Without replies, comments stay visually unresolved, reviewers must re-read the entire diff to verify fixes, and there's no traceable link between feedback and resolution.\n\nUse this skill whenever:\n- You are fixing code based on PR review feedback\n- You are addressing Copilot review suggestions\n- You are responding to reviewer-requested changes on a PR\n- A squad member hands you review comments to resolve\n\n## SCOPE\n\n✅ THIS SKILL PRODUCES:\n- Reply comments on each review thread explaining the fix\n- Optionally resolved threads (via GraphQL when appropriate)\n- Commit messages that reference the PR and review context\n\n❌ THIS SKILL DOES NOT PRODUCE:\n- The code fixes themselves (that's the agent's domain work)\n- New review comments or reviews\n- PR descriptions or summaries\n\n## Patterns\n\n### Step 1: Read the review comments\n\n**Using MCP tools (preferred when available):**\n\n```\ngithub-mcp-server-pull_request_read\n  method: \"get_review_comments\"\n  owner: \"{owner}\"\n  repo: \"{repo}\"\n  pullNumber: {pr_number}\n```\n\nThis returns review threads with metadata: `isResolved`, `isOutdated`, `isCollapsed`, and their associated comments. Each comment has an `id` you'll need for replies.\n\n**Using gh CLI (fallback):**\n\n```bash\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr_number}\u002Fcomments --paginate\n```\n\nEach comment object contains `id`, `body`, `path`, `line`, and `in_reply_to_id`. Top-level comments have no `in_reply_to_id` — those are the ones you reply to.\n\n### Step 2: Fix the code\n\nMake the actual code changes. This is your normal domain work — the skill doesn't prescribe how to fix, only how to communicate the fix.\n\n**Track what you changed.** For each review comment, note:\n- The comment `id` (top-level, not a reply)\n- The file and line referenced\n- What you actually changed (brief description)\n- The commit SHA after pushing (if available)\n\n### Step 3: Reply to each review thread\n\nAfter fixing and committing, reply to **each** review comment thread individually.\n\n**REST API call (via gh CLI):**\n\n```bash\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr_number}\u002Fcomments\u002F{comment_id}\u002Freplies \\\n  -f body=\"Fixed in {sha_short} — {brief description of what was changed}\"\n```\n\n**Important:** `{comment_id}` must be the ID of the **top-level** comment in the thread. You cannot reply to a reply — only to the original review comment.\n\n**Example replies:**\n\n```bash\n# Specific and traceable\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F42\u002Fcomments\u002F18234\u002Freplies \\\n  -f body=\"Fixed in a1b2c3d — switched to path.dirname(squadDirInfo.path) for worktree consistency\"\n\n# When applying a suggested code change\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F42\u002Fcomments\u002F18235\u002Freplies \\\n  -f body=\"Applied suggestion — updated error message to include the file path for debuggability\"\n\n# When pushing back on a suggestion\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F42\u002Fcomments\u002F18236\u002Freplies \\\n  -f body=\"Considered but not applied — this path needs to stay absolute because worktree resolution depends on it. See detectSquadDir() in detect-squad-dir.ts.\"\n```\n\n### Step 4: Resolve threads (optional, GraphQL only)\n\nThread resolution is only available via the GitHub GraphQL API. Use this when your fix fully addresses the comment and no further discussion is needed.\n\n**First, get the thread IDs** (they're different from comment IDs):\n\n```bash\ngh api graphql -f query='\n  query {\n    repository(owner: \"{owner}\", name: \"{repo}\") {\n      pullRequest(number: {pr_number}) {\n        reviewThreads(first: 100) {\n          nodes {\n            id\n            isResolved\n            comments(first: 1) {\n              nodes { body databaseId }\n            }\n          }\n        }\n      }\n    }\n  }\n'\n```\n\nMatch thread IDs to comment IDs using `databaseId`, then resolve:\n\n```bash\ngh api graphql -f query='\n  mutation {\n    resolveReviewThread(input: {threadId: \"{thread_node_id}\"}) {\n      thread { id isResolved }\n    }\n  }\n'\n```\n\n**When to resolve vs. leave open:**\n- ✅ Resolve: You fixed exactly what was requested, no ambiguity\n- ❌ Don't resolve: You pushed back, applied a different fix, or the comment needs further discussion\n- ❌ Don't resolve: The reviewer is a human — let them confirm and resolve themselves\n\n**Rule of thumb:** Agent-to-agent threads (e.g., Copilot review → agent fix) can be resolved by the fixer. Human reviewer threads should be left for the human to resolve.\n\n### Step 5: Commit message traceability\n\nCommit messages should reference the PR context:\n\n```\nfix: address review feedback on PR #{pr_number}\n\n- Switched to path.dirname() for worktree path resolution (comment #18234)\n- Updated error message to include file path (comment #18235)\n\nCo-authored-by: Copilot \u003C223556219+Copilot@users.noreply.github.com>\n```\n\nFor single-comment fixes, a shorter format works:\n\n```\nfix: use path.dirname() for worktree consistency (PR #{pr_number} review)\n\nCo-authored-by: Copilot \u003C223556219+Copilot@users.noreply.github.com>\n```\n\n## AGENT WORKFLOW (Summary)\n\n1. **READ** — Fetch review threads using MCP tool or `gh api`\n2. **FIX** — Make code changes, tracking comment ID → change mapping\n3. **COMMIT** — Push with traceable commit message referencing PR and comments\n4. **REPLY** — Post individual reply to each thread via `gh api ...\u002Freplies`\n5. **RESOLVE** — (Optional) Resolve agent-to-agent threads via GraphQL\n6. **STOP** — Do not batch-reply, do not skip threads, do not resolve human threads\n\n## Examples\n\n### Example: Copilot flags a potential null dereference\n\n**Review comment (id: 55123):**\n> `squadDir` could be undefined here. Consider adding a null check.\n\n**Agent workflow:**\n1. Read the comment via `get_review_comments`\n2. Add the null check in `src\u002Fcli\u002Fcore\u002Fdetect-squad-dir.ts`\n3. Commit: `fix: add null check for squadDir (PR #99 review)`\n4. Reply:\n   ```bash\n   gh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55123\u002Freplies \\\n     -f body=\"Fixed in f4e5d6c — added early return when squadDir is undefined, matching the pattern in loadConfig()\"\n   ```\n5. Resolve the thread (Copilot → agent, safe to resolve)\n\n### Example: Multiple review comments on one PR\n\n**Comments:**\n- id: 55123 — \"Null check needed\" on `detect-squad-dir.ts:42`\n- id: 55124 — \"Consider using path.join()\" on `detect-squad-dir.ts:58`\n- id: 55125 — \"This log message is too verbose\" on `output.ts:15`\n\n**Agent handles each individually:**\n```bash\n# Fix all three, commit\ngit add packages\u002Fsquad-cli\u002Fsrc\u002Fcli\u002Fcore\u002Fdetect-squad-dir.ts packages\u002Fsquad-cli\u002Fsrc\u002Fcli\u002Fcore\u002Foutput.ts\ngit commit -m \"fix: address 3 review comments on PR #99\n\n- Added null check for squadDir (comment #55123)\n- Switched to path.join() for cross-platform paths (comment #55124)\n- Reduced log verbosity to debug level (comment #55125)\"\n\ngit push\n\n# Reply to each thread individually\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55123\u002Freplies \\\n  -f body=\"Fixed — added early return when squadDir is undefined\"\n\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55124\u002Freplies \\\n  -f body=\"Fixed — switched to path.join(squadDir, 'config.json') for cross-platform consistency\"\n\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55125\u002Freplies \\\n  -f body=\"Fixed — changed from console.log to debug() so it only shows with --verbose flag\"\n```\n\n### Example: Handling Copilot suggestion blocks\n\nCopilot sometimes provides `suggestion` blocks with exact code to apply:\n\n**Review comment (id: 55130):**\n````\nConsider using optional chaining:\n```suggestion\nconst name = config?.agent?.name ?? 'default';\n```\n````\n\n**Reply format when applying:**\n```bash\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55130\u002Freplies \\\n  -f body=\"Applied suggestion — using optional chaining with nullish coalescing\"\n```\n\n**Reply format when not applying:**\n```bash\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55130\u002Freplies \\\n  -f body=\"Not applied — config is guaranteed non-null at this point (validated on line 12). Optional chaining would mask errors.\"\n```\n\n### Example: Pushing back on a review comment\n\nNot every review comment should be accepted. When a suggestion is incorrect or doesn't apply:\n\n```bash\ngh api repos\u002Fgithub\u002Fsquad\u002Fpulls\u002F99\u002Fcomments\u002F55140\u002Freplies \\\n  -f body=\"Considered but not applied — this file is in the zero-dependency bootstrap set (see copilot-instructions.md § Protected Files). Adding path.join() would require importing from the SDK, which breaks the bootstrap constraint.\"\n```\n\nDo NOT resolve the thread when pushing back. Leave it open for the reviewer to confirm.\n\n## Anti-Patterns\n\n- ❌ **Fixing silently** — Making code changes without replying to the review thread. The reviewer has no way to know which comments were addressed.\n- ❌ **Batch-replying \"all fixed\"** — A single comment saying \"Addressed all review feedback\" on the PR. Each thread needs its own reply so reviewers can verify individually.\n- ❌ **Resolving without explaining** — Marking threads resolved without posting a reply first. The resolution gives no context on what was done.\n- ❌ **Resolving human reviewer threads** — Only resolve threads from automated reviewers (Copilot, bots). Let human reviewers confirm and resolve their own threads.\n- ❌ **Vague replies** — \"Fixed\" or \"Done\" without saying what was changed. The reply should be specific enough that the reviewer doesn't need to re-read the diff.\n- ❌ **Replying before pushing** — Reply after your fix is committed and pushed, not before. The reply should reference actual committed code.\n- ❌ **Ignoring comments you disagree with** — If you don't apply a suggestion, reply explaining why. Silence looks like you missed it.\n- ❌ **Replying to replies** — The REST API only supports replying to top-level review comments. Attempting to reply to a reply will fail with a 404.\n",{"name":5,"tools":54,"domain":63,"source":64,"confidence":65,"description":7},[55,59],{"name":56,"when":57,"description":58},"github-mcp-server-pull_request_read","Step 1 — fetching review comments to understand what needs fixing","Read PR review threads and comments",{"name":60,"when":61,"description":62},"gh api (REST)","Step 3 — posting reply to each comment thread after fixing","Reply to review comment threads and resolve threads via GraphQL","pull-requests, code-review, traceability","observed (agents fix review feedback silently — reviewers can't tell which comments were addressed)","low","main","1a8585c0e5c7600aa6daf6091c5d24752041d57f",".squad\u002Ftemplates\u002Fskills\u002Fpr-review-response",625,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw","https:\u002F\u002Fgh.io\u002Fgh-aw","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-13 03:17:57",{"source":8,"skillName":5,"commands":77,"prompt":87,"zipAvailable":88},[78,81,84],{"tool":79,"command":80},"npx","npx skills add github\u002Fgh-aw --skill pr-review-response",{"tool":82,"command":83},"bunx","bunx skills add github\u002Fgh-aw --skill pr-review-response",{"tool":85,"command":86},"pnpm","pnpm dlx skills add github\u002Fgh-aw --skill pr-review-response","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fpr-review-response\u002FSKILL.md",true,[],[91,116,134,158,184,202],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":101,"publishedAt":49},"01M6ADC942STTXHFV410J4DH0X","GitHub Agentic Workflows","GitHub Agentic Workflows (`gh-aw`) is a GitHub CLI extension for writing Agentic Workflows in markdown and compiling them to GitHub Actions.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002FSKILL.md",[97,100],{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[9,102,103,104,105,106,107,108,109,110,111,112,113,114,115],"agentic","agentic workflows","github agentic workflows","workflows","github cli","gh","extension","for","compiling","cli","writing","actions","github actions","markdown",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":49},"01M6ADC6ZXSA46N9XD6VNAP1MS","windows-compatibility","Cross-platform path handling and command patterns","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fwindows-compatibility\u002FSKILL.md",[],[123,124,125,126,127,128,129,130,131,132,133],"windows","windows compatibility","compatibility","bugs","path","high","platform","cross-platform","patterns","command","git",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":49},"01M6ADC44957SVQF96R5YY247P","versioning-policy","Semver versioning rules for Squad SDK and CLI — prevents prerelease version incidents","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fversioning-policy\u002FSKILL.md",[],[141,142,143,144,145,146,147,148,149,32,150,151,152,153,154,155,109,156,111,157],"policy","versioning policy","versioning","incident","gate","implementation","version","Rules","workspace","ci","npm","semver","release","squad","resolution","incidents","sdk",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":168,"publishedAt":49},"01M6ADC1PHMEAEVR87F8PDR89X","tiered-memory","Three-tier agent memory model (hot\u002Fcold\u002Fwiki) for context reduction per spawn","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Ftiered-memory\u002FSKILL.md",[164,167],{"categoryNo":165,"categoryName":166,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[169,170,171,172,109,173,174,175,176,177,178,179,180,181,182,183],"tiered memory","memory","memory-management","model","cold","proposal","runtime","three","spawn","management","context","wiki","agent memory","performance","design",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":193,"publishedAt":49},"01M6ADBZTDGFM0E25EWRQEMYEH","test-discipline","Update tests when changing APIs — no exceptions","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Ftest-discipline\u002FSKILL.md",[190],{"categoryNo":191,"categoryName":192,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[194,195,196,197,198,128,199,144,200,201],"test discipline","discipline","test","sync","when","tests","quality","update",{"skillNo":203,"name":154,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":207,"publishedAt":49},"01M6ADBX5MJP4Z7CG4XTV8ZVT8","Squad's command catalog and interactive menu. Invoke via \u002Fsquad (slash command) or natural language (\"squad commands\", \"what can squad do\", \"show me squad options\"). Presents categorized operations (Install & Upgrade, Team Management, Issues & PRs, Plugins & Skills, Model & Cost, Sessions & State) as an interactive picker. Routes to the right squad CLI command or the Squad coordinator agent.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fsquad\u002FSKILL.md",[],[154,208,209,210,211,212,213,214,215,216,217,218,219,132,172,220,221,222,46,223,224,225,111],"show","interactive menu","invoke","coordinator","as","commands","upgrade","options","me","natural language","do","install","team","show me","plugins","state","squad commands","sessions"]