[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DCBB6K56SWD794C9FKKYCB":3,"skill-same:01M6DCBB6K56SWD794C9FKKYCB":79},{"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":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6DCBB6K56SWD794C9FKKYCB","manage-pull-requests",null,"Manage Harness Code pull requests via MCP. List, create, update, and merge PRs; add reviewers and submit review decisions (approve \u002F request changes); post, update, and delete comments; read the discussion timeline; and check CI status. Use when asked to open a PR, merge a PR, approve a PR, leave a code review comment, request changes, assign reviewers, or inspect PR checks and activity. Trigger phrases: pull request, PR review, merge PR, approve PR, request changes, add reviewer, PR comments, PR checks, PR activity, code review.","zapabob\u002FSkills","zapabob","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130830376?v=4","01M6DBMYZAGRTFQDSQYW3W764P","峯岸 亮","01M6DBMZ3GKDSJ01NZ9XTZD7JD",2,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F10\u002F108524ee93f1620fd00bf7480460e84e2d7838104e5c82ade292f323c575e8b7\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"manage pull requests","manage","pull requests","pull","code","list","read","reviewer","open","ci","server","code review","update","delete","create","status","merge","mcp server","review","MCP","2026-11-10 10:12:30",false,"---\r\nname: manage-pull-requests\r\ndescription: >-\r\n  Manage Harness Code pull requests via MCP. List, create, update, and merge PRs; add reviewers and\r\n  submit review decisions (approve \u002F request changes); post, update, and delete comments; read the\r\n  discussion timeline; and check CI status. Use when asked to open a PR, merge a PR, approve a PR,\r\n  leave a code review comment, request changes, assign reviewers, or inspect PR checks and activity.\r\n  Trigger phrases: pull request, PR review, merge PR, approve PR, request changes, add reviewer,\r\n  PR comments, PR checks, PR activity, code review.\r\nmetadata:\r\n  author: Harness\r\n  version: 1.0.0\r\n  mcp-server: harness-mcp-v2\r\nlicense: Apache-2.0\r\ncompatibility: Requires Harness MCP server (harness-mcp-v2)\r\n---\r\n\r\n# Manage Pull Requests\r\n\r\nManage Harness Code pull requests, reviewers, comments, checks, and activity via MCP.\r\n\r\n## MCP Tools Used\r\n\r\n| Tool | Resource Type | Purpose |\r\n|------|---------------|---------|\r\n| `harness_list` | `pull_request` | List PRs in a repo, filter by state |\r\n| `harness_get` | `pull_request` | Get PR details by number |\r\n| `harness_create` | `pull_request` | Open a new PR |\r\n| `harness_update` | `pull_request` | Update PR title \u002F description \u002F state |\r\n| `harness_execute` (action: `merge`) | `pull_request` | Merge a PR (merge\u002Fsquash\u002Frebase\u002Ffast-forward) |\r\n| `harness_list` | `pr_reviewer` | List reviewers on a PR |\r\n| `harness_create` | `pr_reviewer` | Add a reviewer to a PR |\r\n| `harness_execute` (action: `submit_review`) | `pr_reviewer` | Submit an `approved` or `changereq` review |\r\n| `harness_create` | `pr_comment` | Post a top-level or inline code comment |\r\n| `harness_update` | `pr_comment` | Edit a comment |\r\n| `harness_delete` | `pr_comment` | Delete a comment |\r\n| `harness_list` | `pr_activity` | Read the discussion timeline — **the only way to READ comments** |\r\n| `harness_list` | `pr_check` | List CI status checks on a PR |\r\n| `harness_schema` | any of the above | Exact JSON Schema for `create` \u002F `update` body fields |\r\n\r\nAll pull-request resources are **repo-scoped**. Every call needs `repo_id` and `pr_number` (except `harness_list` for `pull_request`, which only needs `repo_id`). `org_id` \u002F `project_id` are optional (the server infers them from the repo).\r\n\r\n**URL shortcut:** the MCP server auto-extracts `repo_id` and `pr_number` if you pass a Harness PR URL via the `url` parameter — e.g. `harness_get(resource_type=\"pull_request\", url=\"https:\u002F\u002Fapp.harness.io\u002Fng\u002Faccount\u002F...\u002Fpulls\u002F42\")`.\r\n\r\n## Instructions\r\n\r\n### Step 1: List or find the PR\r\n\r\n```\r\nCall MCP tool: harness_list\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  repo_id: \"\u003Crepository_identifier>\"\r\n  state: \"open\"        # optional: open | closed | merged\r\n  query: \"\u003Ckeyword>\"   # optional: full-text search\r\n```\r\n\r\nOr fetch a specific PR:\r\n\r\n```\r\nCall MCP tool: harness_get\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  repo_id: \"\u003Crepository_identifier>\"\r\n  pr_number: \u003Cnumber>\r\n```\r\n\r\n### Step 2: Open a PR\r\n\r\n```\r\nCall MCP tool: harness_create\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  repo_id: \"\u003Crepository_identifier>\"\r\n  body:\r\n    title: \"Fix race condition in scheduler\"\r\n    source_branch: \"fix\u002Fscheduler-race\"\r\n    target_branch: \"main\"\r\n    description: \"Resolves HAR-1234. Adds mutex around queue access.\"\r\n```\r\n\r\n`title`, `source_branch`, `target_branch` are required. `description` supports markdown.\r\n\r\n### Step 3: Update PR metadata\r\n\r\n```\r\nCall MCP tool: harness_update\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    title: \"Updated title\"\r\n    description: \"Updated description\"\r\n    state: \"closed\"     # optional: open | closed\r\n```\r\n\r\nAll body fields are optional — only include what you want to change.\r\n\r\n### Step 4: Add reviewers\r\n\r\n```\r\nCall MCP tool: harness_create\r\nParameters:\r\n  resource_type: \"pr_reviewer\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    reviewer_id: \u003Cnumeric_user_id>\r\n```\r\n\r\nList current reviewers with `harness_list(resource_type=\"pr_reviewer\", repo_id, pr_number)`.\r\n\r\n### Step 5: Submit a review decision\r\n\r\n```\r\nCall MCP tool: harness_execute\r\nParameters:\r\n  resource_type: \"pr_reviewer\"\r\n  action: \"submit_review\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    decision: \"approved\"          # approved | changereq\r\n    commit_sha: \"\u003Csha>\"           # optional — the commit you reviewed\r\n```\r\n\r\n### Step 6: Post a comment\r\n\r\n**Top-level comment:**\r\n\r\n```\r\nCall MCP tool: harness_create\r\nParameters:\r\n  resource_type: \"pr_comment\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    text: \"LGTM with one nit — see inline.\"\r\n```\r\n\r\n**Inline code comment:**\r\n\r\n```\r\nCall MCP tool: harness_create\r\nParameters:\r\n  resource_type: \"pr_comment\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    text: \"This loop can leak if the context is cancelled.\"\r\n    path: \"scheduler\u002Fqueue.go\"\r\n    line_new: 142\r\n    source_commit_sha: \"\u003Csource_sha>\"\r\n    target_commit_sha: \"\u003Ctarget_sha>\"\r\n```\r\n\r\nUse `line_old` for comments on removed lines.\r\n\r\n### Step 7: Read comments — use `pr_activity`, not `pr_comment`\r\n\r\nThe Harness Code API does **not** expose `GET` on `\u002Fcomments`. To read the discussion, list PR activity filtered by kind:\r\n\r\n```\r\nCall MCP tool: harness_list\r\nParameters:\r\n  resource_type: \"pr_activity\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  kind: \"comment\"        # just comments (general + code)\r\n  # or type: \"code-comment\" for inline code review comments only\r\n```\r\n\r\nOther useful `type` filters: `review-submit`, `reviewer-add`, `state-change`, `merge`, `title-change`.\r\n\r\n### Step 8: Edit or delete a comment\r\n\r\n```\r\nCall MCP tool: harness_update\r\nParameters:\r\n  resource_type: \"pr_comment\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  comment_id: \u003Cnumeric_comment_id>\r\n  body:\r\n    text: \"Updated comment body\"\r\n```\r\n\r\n```\r\nCall MCP tool: harness_delete\r\nParameters:\r\n  resource_type: \"pr_comment\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  comment_id: \u003Cnumeric_comment_id>\r\n```\r\n\r\n### Step 9: Inspect CI checks\r\n\r\n```\r\nCall MCP tool: harness_list\r\nParameters:\r\n  resource_type: \"pr_check\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n```\r\n\r\nReturns the status of each status check (pipeline, test run, external check) associated with the PR head commit. Use this before merging to confirm required checks are green.\r\n\r\n### Step 10: Merge\r\n\r\n```\r\nCall MCP tool: harness_execute\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  action: \"merge\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    method: \"squash\"               # merge | squash | rebase | fast-forward\r\n    delete_source_branch: true\r\n    dry_run: false\r\n    source_sha: \"\u003Cexpected_sha>\"   # optional optimistic lock\r\n```\r\n\r\nSet `dry_run: true` first to preview the merge without executing — useful before destructive merges.\r\n\r\n## Examples\r\n\r\n### Open a PR and request a review\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nOpen a PR from feat\u002Fnew-auth into main titled \"Add OAuth device flow\" on repo platformUI,\r\nand add user 12345 as a reviewer.\r\n```\r\n\r\n### Read all unresolved comments on a PR\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nShow me every inline code comment on PR 182 in repo harness-core so I can address them.\r\n```\r\n\r\n### Approve and merge\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nApprove PR 47 in repo mcp-server with a \"LGTM\" comment, then squash-merge it and delete the branch.\r\n```\r\n\r\n### Check CI before merging\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nList the checks on PR 99 in repo harness-cli. If they're all green, merge it with a squash.\r\n```\r\n\r\n### Close a stale PR\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nClose PR 22 in repo harness-skills with a comment explaining we're going in a different direction.\r\n```\r\n\r\n## Performance Notes\r\n\r\n- **Always pass `repo_id` + `pr_number` together** except for `harness_list(pull_request)` which only needs `repo_id`. Missing `pr_number` on per-PR calls returns a helpful 400 from the server.\r\n- **Read comments via `pr_activity`, never `pr_comment`.** The comments endpoint is POST-only. Use `kind=comment` for all discussion, `type=code-comment` for inline only.\r\n- **Use `dry_run: true` on merge** before destructive squash\u002Frebase merges — especially on main branches with required checks.\r\n- **Prefer the URL shortcut** when the user pastes a PR link. `url=\"\u003CPR URL>\"` auto-extracts `org_id`, `project_id`, `repo_id`, and `pr_number` — fewer args to get wrong.\r\n- **`pr_reviewer.submit_review`** records a review independently of the reviewer list. You don't need to call `harness_create(pr_reviewer)` first to submit a review — any user with access can review.\r\n- **Cross-scope search**: `harness_search(query=\"\u003Ctext>\", resource_types=[\"pull_request\"])` finds PRs across repos when you don't know which repo contains it.\r\n\r\n## Troubleshooting\r\n\r\n### \"repo_id is required\"\r\n\r\nAll PR operations are repo-scoped. Pass the repo identifier (not the repo name) — list repos first with `harness_list(resource_type=\"repository\")` if you're unsure.\r\n\r\n### Comments don't show up when I list them\r\n\r\n`pr_comment` has no `list`\u002F`get` operations. Use `harness_list(resource_type=\"pr_activity\", kind=\"comment\")` to read the discussion timeline.\r\n\r\n### \"GET \u002Fcomments not found\" \u002F 404 on reading a comment\r\n\r\nSame cause as above — the Harness Code API is POST-only for `\u002Fcomments`. Read via `pr_activity`.\r\n\r\n### Review decision rejected\r\n\r\nCheck the `decision` value — it must be exactly `\"approved\"` or `\"changereq\"`. The API does not accept `\"approve\"` (no `d`) or `\"request_changes\"`.\r\n\r\n### Merge fails with \"source SHA mismatch\"\r\n\r\nYou passed `source_sha` and it no longer matches the branch head (someone pushed after you computed it). Drop `source_sha` or re-fetch the PR to get the current `source_sha`.\r\n\r\n### Inline comment has no diff context\r\n\r\nInline code comments need both `source_commit_sha` and `target_commit_sha` in the body — without them the comment appears as a top-level comment. Get the SHAs from `harness_get(pull_request)` → `source_sha` \u002F `target_sha`.\r\n\r\n### Required checks aren't passing but merge succeeded anyway\r\n\r\n`harness_execute(action=merge)` bypasses branch protection if the caller has admin rights. Use `harness_list(resource_type=\"pr_check\")` first and fail fast in automation if any check is not `success`.\r\n","# Manage Pull Requests\r\n\r\nManage Harness Code pull requests, reviewers, comments, checks, and activity via MCP.\r\n\r\n## MCP Tools Used\r\n\r\n| Tool | Resource Type | Purpose |\r\n|------|---------------|---------|\r\n| `harness_list` | `pull_request` | List PRs in a repo, filter by state |\r\n| `harness_get` | `pull_request` | Get PR details by number |\r\n| `harness_create` | `pull_request` | Open a new PR |\r\n| `harness_update` | `pull_request` | Update PR title \u002F description \u002F state |\r\n| `harness_execute` (action: `merge`) | `pull_request` | Merge a PR (merge\u002Fsquash\u002Frebase\u002Ffast-forward) |\r\n| `harness_list` | `pr_reviewer` | List reviewers on a PR |\r\n| `harness_create` | `pr_reviewer` | Add a reviewer to a PR |\r\n| `harness_execute` (action: `submit_review`) | `pr_reviewer` | Submit an `approved` or `changereq` review |\r\n| `harness_create` | `pr_comment` | Post a top-level or inline code comment |\r\n| `harness_update` | `pr_comment` | Edit a comment |\r\n| `harness_delete` | `pr_comment` | Delete a comment |\r\n| `harness_list` | `pr_activity` | Read the discussion timeline — **the only way to READ comments** |\r\n| `harness_list` | `pr_check` | List CI status checks on a PR |\r\n| `harness_schema` | any of the above | Exact JSON Schema for `create` \u002F `update` body fields |\r\n\r\nAll pull-request resources are **repo-scoped**. Every call needs `repo_id` and `pr_number` (except `harness_list` for `pull_request`, which only needs `repo_id`). `org_id` \u002F `project_id` are optional (the server infers them from the repo).\r\n\r\n**URL shortcut:** the MCP server auto-extracts `repo_id` and `pr_number` if you pass a Harness PR URL via the `url` parameter — e.g. `harness_get(resource_type=\"pull_request\", url=\"https:\u002F\u002Fapp.harness.io\u002Fng\u002Faccount\u002F...\u002Fpulls\u002F42\")`.\r\n\r\n## Instructions\r\n\r\n### Step 1: List or find the PR\r\n\r\n```\r\nCall MCP tool: harness_list\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  repo_id: \"\u003Crepository_identifier>\"\r\n  state: \"open\"        # optional: open | closed | merged\r\n  query: \"\u003Ckeyword>\"   # optional: full-text search\r\n```\r\n\r\nOr fetch a specific PR:\r\n\r\n```\r\nCall MCP tool: harness_get\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  repo_id: \"\u003Crepository_identifier>\"\r\n  pr_number: \u003Cnumber>\r\n```\r\n\r\n### Step 2: Open a PR\r\n\r\n```\r\nCall MCP tool: harness_create\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  repo_id: \"\u003Crepository_identifier>\"\r\n  body:\r\n    title: \"Fix race condition in scheduler\"\r\n    source_branch: \"fix\u002Fscheduler-race\"\r\n    target_branch: \"main\"\r\n    description: \"Resolves HAR-1234. Adds mutex around queue access.\"\r\n```\r\n\r\n`title`, `source_branch`, `target_branch` are required. `description` supports markdown.\r\n\r\n### Step 3: Update PR metadata\r\n\r\n```\r\nCall MCP tool: harness_update\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    title: \"Updated title\"\r\n    description: \"Updated description\"\r\n    state: \"closed\"     # optional: open | closed\r\n```\r\n\r\nAll body fields are optional — only include what you want to change.\r\n\r\n### Step 4: Add reviewers\r\n\r\n```\r\nCall MCP tool: harness_create\r\nParameters:\r\n  resource_type: \"pr_reviewer\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    reviewer_id: \u003Cnumeric_user_id>\r\n```\r\n\r\nList current reviewers with `harness_list(resource_type=\"pr_reviewer\", repo_id, pr_number)`.\r\n\r\n### Step 5: Submit a review decision\r\n\r\n```\r\nCall MCP tool: harness_execute\r\nParameters:\r\n  resource_type: \"pr_reviewer\"\r\n  action: \"submit_review\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    decision: \"approved\"          # approved | changereq\r\n    commit_sha: \"\u003Csha>\"           # optional — the commit you reviewed\r\n```\r\n\r\n### Step 6: Post a comment\r\n\r\n**Top-level comment:**\r\n\r\n```\r\nCall MCP tool: harness_create\r\nParameters:\r\n  resource_type: \"pr_comment\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    text: \"LGTM with one nit — see inline.\"\r\n```\r\n\r\n**Inline code comment:**\r\n\r\n```\r\nCall MCP tool: harness_create\r\nParameters:\r\n  resource_type: \"pr_comment\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    text: \"This loop can leak if the context is cancelled.\"\r\n    path: \"scheduler\u002Fqueue.go\"\r\n    line_new: 142\r\n    source_commit_sha: \"\u003Csource_sha>\"\r\n    target_commit_sha: \"\u003Ctarget_sha>\"\r\n```\r\n\r\nUse `line_old` for comments on removed lines.\r\n\r\n### Step 7: Read comments — use `pr_activity`, not `pr_comment`\r\n\r\nThe Harness Code API does **not** expose `GET` on `\u002Fcomments`. To read the discussion, list PR activity filtered by kind:\r\n\r\n```\r\nCall MCP tool: harness_list\r\nParameters:\r\n  resource_type: \"pr_activity\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  kind: \"comment\"        # just comments (general + code)\r\n  # or type: \"code-comment\" for inline code review comments only\r\n```\r\n\r\nOther useful `type` filters: `review-submit`, `reviewer-add`, `state-change`, `merge`, `title-change`.\r\n\r\n### Step 8: Edit or delete a comment\r\n\r\n```\r\nCall MCP tool: harness_update\r\nParameters:\r\n  resource_type: \"pr_comment\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  comment_id: \u003Cnumeric_comment_id>\r\n  body:\r\n    text: \"Updated comment body\"\r\n```\r\n\r\n```\r\nCall MCP tool: harness_delete\r\nParameters:\r\n  resource_type: \"pr_comment\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  comment_id: \u003Cnumeric_comment_id>\r\n```\r\n\r\n### Step 9: Inspect CI checks\r\n\r\n```\r\nCall MCP tool: harness_list\r\nParameters:\r\n  resource_type: \"pr_check\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n```\r\n\r\nReturns the status of each status check (pipeline, test run, external check) associated with the PR head commit. Use this before merging to confirm required checks are green.\r\n\r\n### Step 10: Merge\r\n\r\n```\r\nCall MCP tool: harness_execute\r\nParameters:\r\n  resource_type: \"pull_request\"\r\n  action: \"merge\"\r\n  repo_id: \"\u003Crepo>\"\r\n  pr_number: \u003Cnumber>\r\n  body:\r\n    method: \"squash\"               # merge | squash | rebase | fast-forward\r\n    delete_source_branch: true\r\n    dry_run: false\r\n    source_sha: \"\u003Cexpected_sha>\"   # optional optimistic lock\r\n```\r\n\r\nSet `dry_run: true` first to preview the merge without executing — useful before destructive merges.\r\n\r\n## Examples\r\n\r\n### Open a PR and request a review\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nOpen a PR from feat\u002Fnew-auth into main titled \"Add OAuth device flow\" on repo platformUI,\r\nand add user 12345 as a reviewer.\r\n```\r\n\r\n### Read all unresolved comments on a PR\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nShow me every inline code comment on PR 182 in repo harness-core so I can address them.\r\n```\r\n\r\n### Approve and merge\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nApprove PR 47 in repo mcp-server with a \"LGTM\" comment, then squash-merge it and delete the branch.\r\n```\r\n\r\n### Check CI before merging\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nList the checks on PR 99 in repo harness-cli. If they're all green, merge it with a squash.\r\n```\r\n\r\n### Close a stale PR\r\n\r\n```\r\n\u002Fmanage-pull-requests\r\nClose PR 22 in repo harness-skills with a comment explaining we're going in a different direction.\r\n```\r\n\r\n## Performance Notes\r\n\r\n- **Always pass `repo_id` + `pr_number` together** except for `harness_list(pull_request)` which only needs `repo_id`. Missing `pr_number` on per-PR calls returns a helpful 400 from the server.\r\n- **Read comments via `pr_activity`, never `pr_comment`.** The comments endpoint is POST-only. Use `kind=comment` for all discussion, `type=code-comment` for inline only.\r\n- **Use `dry_run: true` on merge** before destructive squash\u002Frebase merges — especially on main branches with required checks.\r\n- **Prefer the URL shortcut** when the user pastes a PR link. `url=\"\u003CPR URL>\"` auto-extracts `org_id`, `project_id`, `repo_id`, and `pr_number` — fewer args to get wrong.\r\n- **`pr_reviewer.submit_review`** records a review independently of the reviewer list. You don't need to call `harness_create(pr_reviewer)` first to submit a review — any user with access can review.\r\n- **Cross-scope search**: `harness_search(query=\"\u003Ctext>\", resource_types=[\"pull_request\"])` finds PRs across repos when you don't know which repo contains it.\r\n\r\n## Troubleshooting\r\n\r\n### \"repo_id is required\"\r\n\r\nAll PR operations are repo-scoped. Pass the repo identifier (not the repo name) — list repos first with `harness_list(resource_type=\"repository\")` if you're unsure.\r\n\r\n### Comments don't show up when I list them\r\n\r\n`pr_comment` has no `list`\u002F`get` operations. Use `harness_list(resource_type=\"pr_activity\", kind=\"comment\")` to read the discussion timeline.\r\n\r\n### \"GET \u002Fcomments not found\" \u002F 404 on reading a comment\r\n\r\nSame cause as above — the Harness Code API is POST-only for `\u002Fcomments`. Read via `pr_activity`.\r\n\r\n### Review decision rejected\r\n\r\nCheck the `decision` value — it must be exactly `\"approved\"` or `\"changereq\"`. The API does not accept `\"approve\"` (no `d`) or `\"request_changes\"`.\r\n\r\n### Merge fails with \"source SHA mismatch\"\r\n\r\nYou passed `source_sha` and it no longer matches the branch head (someone pushed after you computed it). Drop `source_sha` or re-fetch the PR to get the current `source_sha`.\r\n\r\n### Inline comment has no diff context\r\n\r\nInline code comments need both `source_commit_sha` and `target_commit_sha` in the body — without them the comment appears as a top-level comment. Get the SHAs from `harness_get(pull_request)` → `source_sha` \u002F `target_sha`.\r\n\r\n### Required checks aren't passing but merge succeeded anyway\r\n\r\n`harness_execute(action=merge)` bypasses branch protection if the caller has admin rights. Use `harness_list(resource_type=\"pr_check\")` first and fail fast in automation if any check is not `success`.\r\n",{"name":5,"license":15,"metadata":52,"description":7,"compatibility":56},{"author":53,"version":54,"mcp-server":55},"Harness","1.0.0","harness-mcp-v2","Requires Harness MCP server (harness-mcp-v2)","main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002F10\u002F108524ee93f1620fd00bf7480460e84e2d7838104e5c82ade292f323c575e8b7",0,"https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills","https:\u002F\u002Fgithub.com\u002Fzapabob","The Open University of JAPAN　2019-now\r\n\r\nTokyo University of Science　2007-2010","2026-10-26 16:29:01",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add zapabob\u002FSkills --skill manage-pull-requests",{"tool":71,"command":72},"bunx","bunx skills add zapabob\u002FSkills --skill manage-pull-requests",{"tool":74,"command":75},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill manage-pull-requests","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F10\u002F108524ee93f1620fd00bf7480460e84e2d7838104e5c82ade292f323c575e8b7\u002FSKILL.md",true,[],[80,115,148,175,202,219],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":96,"publishedAt":47},"01M6GJTE1GESGGF9K028Y7753E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","MIT","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fxurl\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[87,90,91],{"categoryNo":88,"categoryName":89,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[82,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,57,112,113,114],"openclaw","macos","cli","github","linux","windows","official","search","https","social-media","api","Media","hermes","hermes agent","twitter","social","via","post",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":132,"publishedAt":47},"01M6GJT8S1PXQ8WPXT1HSNBWH2","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwriting-plans\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[121,124,127,128,129],{"categoryNo":122,"categoryName":123,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":125,"categoryName":126,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},{"categoryNo":130,"categoryName":131,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000036","内容创作者",[133,134,135,136,98,45,101,137,102,138,139,140,31,141,142,143,144,145,146,147],"writing","writing plans","plans","design","workflow","documentation","tasks","development","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":157,"publishedAt":47},"01M6GJST0H5X7WHBJ3BZK0DVKH","whisper","OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwhisper\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[154],{"categoryNo":155,"categoryName":156,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[150,98,101,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":184,"publishedAt":47},"01M6GJSMRQ8EETZTYMG72P70EA","weights-and-biases","W&B: log ML experiments, sweeps, model registry, dashboards.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fweights-and-biases\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[181],{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",[185,98,186,187,102,188,189,190,191,192,193,165,194,195,196,197,198,199,200,201],"weights and biases","tensorflow","experiments","pytorch","visualization","registry","real-time","tuning","dashboards","experiment","log","time","Experiment Tracking","Model Registry","Hyperparameter Tuning","WandB","Real-Time Visualization",{"skillNo":203,"name":204,"nameZh":6,"description":205,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":6,"sourceHtmlUrl":206,"categories":207,"keywords":209,"publishedAt":47},"01M6GJS19KDPRY112JTR326S06","watchers","Poll RSS, JSON APIs, and GitHub with watermark dedup.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwatchers\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[208],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[204,98,210,100,101,211,212,213,214,215,216,109,110,217,218],"terminal","automation","http","monitoring","cron","json","rss","devops","with",{"skillNo":220,"name":221,"nameZh":6,"description":222,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":6,"sourceHtmlUrl":223,"categories":224,"keywords":227,"publishedAt":47},"01M6GJRHJD2A6Q830SWF9W48BC","serving-llms-vllm","vLLM: high-throughput LLM serving, OpenAI API, quantization.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fvllm\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[225,226],{"categoryNo":88,"categoryName":89,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},[228,229,230,101,231,158,232,233,234,161,235,107,236,237,238,239,240,241,242,243],"llms","vLLM","serving llms vllm","research","openai api","tensor","Inference Serving","Production","llm serving","High Throughput","PagedAttention","Continuous Batching","Quantization","Tensor Parallelism","high-throughput","throughput"]