[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KX0K488T0PTBQWWVBH94T4":3,"skill-same:01M6KX0K488T0PTBQWWVBH94T4":94},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6KX0K488T0PTBQWWVBH94T4","review-pr",null,"Reviews a pull request with two code-reviewer passes, standards and spec (on your own PR, as the gate before merge: fix the findings and record them), or works through unresolved review feedback on an existing PR: fix, commit, push, and reply in thread. Use when the user asks to review a PR or address review comments, and whenever the open-pr skill reaches its agent review or its outside reviews, or finds an open PR already exists.","dougborg\u002Fharness-kit","dougborg","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1261222?v=4","01M6KWS4PB51EYD4ZDJJSGNGB2","Doug Borg","01M6KWS4T8ZZW6SX5QZS9B5BN2",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Freview-pr\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"review pr","review","pr","address review","number","reviews","URL","shared","show","log","fix","fetch","reviewer","gh pr","Bash","open","api","code","merge","commit","2026-11-10 10:12:30",false,"---\nname: review-pr\ndescription: >-\n  Reviews a pull request with two code-reviewer passes, standards and spec (on\n  your own PR, as the gate before merge: fix the findings and record them), or\n  works through unresolved review feedback on an existing PR: fix, commit,\n  push, and reply in thread. Use when the user asks to review a PR or address\n  review comments, and whenever the open-pr skill reaches its agent review or\n  its outside reviews, or finds an open PR already exists.\nargument-hint: \"[PR number or URL]\"\nallowed-tools: Bash(gh pr *), Bash(gh api *), Bash(gh repo *), Bash(gh issue *), Bash(git status), Bash(git rev-parse *), Bash(git switch *), Bash(git diff *), Bash(git log *), Bash(git show *), Bash(git add *), Bash(git commit *), Bash(git push *), Bash(git rebase *), Bash(git stash *), Bash(git fetch *), Bash(git merge *), Bash(\u003Cskill-dir>\u002F*), Bash(\u003Cshared-scripts-dir>\u002F*), Read\n---\n\n# Review PR\n\nReview a PR with a standards pass and a spec pass, or work through its\nunresolved review feedback until every comment has a reply.\n\nThese hold for both modes:\n\n- **Every finding and comment gets an outcome:** fixed, deferred to a tracked\n  GitHub issue, or discussed with the reviewer. Review concerns are the point\n  of review, so \"not blocking\", \"acceptable given dataset size\", or \"good for\n  future refinement\" is not an outcome, and green CI or passing tests do not\n  override a finding. If you think a finding is wrong, reply saying why.\n  Merge only when every comment is resolved.\n- **Leave automated findings to the automation.** Codecov, linters, type\n  checkers, and CI already flag style, type, and coverage issues; mention one\n  only to add context they lack.\n- **Explain the impact, not just the change.** \"This cuts the loop from O(n²)\n  to O(n)\" or \"isolating the mutation makes it testable\", not \"break this\n  into a function\".\n- **Fix checks at the cause.** `--no-verify`, `# noqa`, and `type: ignore`\n  are not fixes.\n- **Stage specific files by name**, never `git add -A` or `git add .`, and\n  pass commit messages through a HEREDOC.\n\n## 1. Pick the mode\n\nRead the reviews and the unresolved inline threads; `gh pr view --json`\nshows review states but not the threads:\n\n```bash\ngh pr view \u003CPR#> --json number,state,reviews    # no number: the current branch's PR\n\u003Cshared-scripts-dir>\u002Fpr-threads.sh \u003CPR#> unresolved\n```\n\nTake the first that matches:\n\n- **The caller asked for the agent review** (the open-pr skill does once CI\n  passes) → [Agent review](#2-agent-review).\n- **The caller asked to address feedback** (open-pr does when outside reviews\n  arrive), or the script returns **unresolved comments**, or a **changes-requested**\n  review (including one with only a body) →\n  [Address feedback](#3-address-feedback).\n- **Overall review only**: a reviewer's review is `COMMENTED` with no inline\n  comments (`poll-review.sh` reports `summary-only`). Read the body with the\n  command in step 3.1, surface it to the user, and stop; there is nothing to\n  fix in a loop.\n- **No reviews at all** → [Agent review](#2-agent-review).\n\nDone when you have named the mode.\n\n## 2. Agent review\n\nDispatch the `code-reviewer` agent twice, in parallel: a **standards pass**\n(six dimensions, documented standards, smells, complexity) and a **spec pass**\nagainst the issues the PR closes. Present the two reports side by side under\n`## Standards` and `## Spec`, never merged or reranked: a change can follow\nevery standard and still build the wrong thing, or build exactly the right\nthing badly.\n\n- **Your own PR** (author matches `gh api user --jq .login`): this is the gate\n  before merge. Fix or defer every finding, re-run the pass whose findings you\n  fixed, and post an `## Agent review` comment with each finding's outcome.\n- **Someone else's PR**: post one `gh pr review`, requesting changes if\n  either axis has a BLOCKING finding.\n\nFollow [agent-review.md](agent-review.md) for the fetch commands, the prompt\ntemplates, the report layout, severity rules, the fix loop, and large PRs.\nDone when neither report has an open BLOCKING finding and every finding has\nan outcome (your own PR), or the review is posted (someone else's).\n\n## 3. Address feedback\n\nFix, push, then reply to every comment, as one sequence: the replies are what\nclose the loop for reviewers. Never report done at \"pushed\"; replying to\nevery comment is part of the same step. If the PR\nhas merge conflicts or failing CI, sort those out first with\n[recovery.md](recovery.md); merging the base can make comments obsolete.\n\n### 3.0 Branch guard\n\nRun this before fetching any comments: every later step assumes the working\ntree is the PR's, and skipping it can push correct-looking fixes to the wrong\nPR.\n\n```bash\npr_branch=$(gh pr view \u003CPR#> --json headRefName --jq .headRefName)\ncurrent=$(git rev-parse --abbrev-ref HEAD)\n```\n\n- **Same branch:** go on.\n- **Different, working tree clean** (`git status --porcelain` empty): say\n  `Switching from '\u003Ccurrent>' to '\u003Cpr_branch>' to address PR #\u003CPR#>`, then:\n\n  ```bash\n  git switch \"$pr_branch\"\n  # if it doesn't exist locally:\n  git fetch origin \"$pr_branch\" && git switch -c \"$pr_branch\" --track \"origin\u002F$pr_branch\"\n  ```\n\n- **Different, working tree dirty:** stop without switching, stashing, or\n  fetching comments, and tell the user:\n\n  ```text\n  PR #\u003CPR#> is on branch '\u003Cpr_branch>' but you're on '\u003Ccurrent>' with uncommitted changes.\n  Commit or stash them, then run 'git switch \u003Cpr_branch>' (or re-run \u002Freview-pr \u003CPR#>).\n  ```\n\n- **PR from a fork** (`gh pr view \u003CPR#> --json headRepositoryOwner` differs\n  from the repo owner): the flow above can't check it out; stop and tell the\n  user to check it out explicitly (`gh pr checkout \u003CPR#>`).\n\nDone when the current branch is the PR's head branch.\n\n### 3.1 Fetch unresolved comments\n\n```bash\n\u003Cshared-scripts-dir>\u002Fpr-threads.sh \u003CPR#> unresolved\n```\n\nIt returns a JSON array of unresolved comments (id, path, line, body,\nauthor); resolved threads are already filtered out. Check that `\u003CPR#>` is the\nPR you're working on before taking comment IDs from it: when fixes live in a\nfollow-up PR, the comments to answer are that PR's.\n\nAn empty array alongside review activity means a summary-only review: an\noverall `COMMENTED` review with no inline action items. That isn't an error\nor a fix loop. Read the body:\n\n```bash\ngh api \"repos\u002F\u003Cowner>\u002F\u003Crepo>\u002Fpulls\u002F\u003CPR#>\u002Freviews\" \\\n  --jq '[.[] | select(.state == \"COMMENTED\" and .body != \"\")] | last | .body'\n```\n\nPresent it to the user, decide together whether anything needs action (file\nissues for deferred items), and stop there.\n\nDone when you hold the list of unresolved comments.\n\n### 3.2 Triage\n\nRead the code each comment points at and classify it: **fix needed**,\n**already fixed** in an earlier commit, or **acknowledge** (valid but\ndeferred, which needs a GitHub issue; call the Skill tool with\n\"issue-create\", which reuses an existing issue when one already covers it).\nDone when every comment has a class and every deferral has an issue.\n\n### 3.3 Fix\n\nMake the changes, then discover the verification command and run what it\nprints as a **separate** Bash call (`eval` in the same call defeats\n`allowed-tools` matching and prompts):\n\n```bash\n\u003Cshared-scripts-dir>\u002Fdiscover-verification-cmd.sh\n```\n\nDone when verification passes in full.\n\n### 3.4 Commit and push\n\n`fixup-and-push.sh` stages only the files you pass, creates a `fixup!`\ncommit, autosquash-rebases onto the base, and force-pushes with a lease that\nsurvives a GitHub \"Update branch\" merge. That keeps history clean, with no\n\"address review\" commits. First apply the commit skill's uv.lock drift check:\nif `uv.lock` has drifted, add it to the file list and warn the user, as that\nskill prescribes. Inference targets the latest non-merge, non-fixup commit;\nwhen the fix belongs to an earlier one, pass that commit's exact subject from\n`git log --no-merges --format=%s origin\u002F\u003Cbase>..HEAD | grep -v '^fixup!'`,\nnever the PR title.\n\n```bash\n# subject inferred from the latest non-merge, non-fixup commit in origin\u002F\u003Cbase>..HEAD\n\u003Cskill-dir>\u002Ffixup-and-push.sh \u003CbaseRefName> \u003Cfile1> \u003Cfile2> ...\n# or explicit:\n\u003Cskill-dir>\u002Ffixup-and-push.sh \u003CbaseRefName> --subject \"\u003Cexact target subject>\" \u003Cfile1> \u003Cfile2> ...\n```\n\nIf it reports `fixup!` commits that didn't squash, recover with\n[recovery.md](recovery.md). Done when the script exits 0.\n\n### 3.5 Reply to every comment\n\nReply on the PR where the fix landed: when fixes go in a follow-up PR, reply\non that PR's comments, and check the PR number before replying (a reply on\nthe wrong PR is invisible to reviewers). Reply only after the push, so each\nreply confirms a live fix. The script checks that the comment belongs to the\nPR before posting:\n\n```bash\n\u003Cshared-scripts-dir>\u002Fpr-threads.sh \u003CPR#> reply \u003Ccomment_id> 'Fixed — [explanation]'\n```\n\nUse the shape that fits:\n\n```text\nFixed — [what changed]. [If tests added: Also added tests for X.]\nThis was addressed in [commit hash] — [brief explanation].\nAcknowledged — [reason for deferral]. Tracked in #NNN.\nI wasn't able to reproduce this. Can you clarify [specific question]?\n```\n\nDone when every comment from 3.1 has a reply.\n\n### 3.6 Resolve threads\n\nResolving clears the \"changes requested\" status:\n\n```bash\nresolved=$(\u003Cshared-scripts-dir>\u002Fpr-threads.sh \u003CPR#> resolve-all)\necho \"Resolved $resolved review threads\"\n```\n\nDone when the script reports the threads resolved.\n\n### 3.7 Summary\n\nReport comments fixed, acknowledged, and already fixed; threads resolved;\nthe verification result; and anything left unaddressed. Done when the report\nis printed.\n\n## Related\n\n- `\u002Fcode-reviewer` — the standards pass as a standalone review\n- `\u002Fpr-comments` — a reply-only pass, the alternative to address feedback\n- `\u002Fcommit` — quality-gated conventional commits\n- `code-reviewer` agent — runs both passes, spawned by this skill\n","# Review PR\n\nReview a PR with a standards pass and a spec pass, or work through its\nunresolved review feedback until every comment has a reply.\n\nThese hold for both modes:\n\n- **Every finding and comment gets an outcome:** fixed, deferred to a tracked\n  GitHub issue, or discussed with the reviewer. Review concerns are the point\n  of review, so \"not blocking\", \"acceptable given dataset size\", or \"good for\n  future refinement\" is not an outcome, and green CI or passing tests do not\n  override a finding. If you think a finding is wrong, reply saying why.\n  Merge only when every comment is resolved.\n- **Leave automated findings to the automation.** Codecov, linters, type\n  checkers, and CI already flag style, type, and coverage issues; mention one\n  only to add context they lack.\n- **Explain the impact, not just the change.** \"This cuts the loop from O(n²)\n  to O(n)\" or \"isolating the mutation makes it testable\", not \"break this\n  into a function\".\n- **Fix checks at the cause.** `--no-verify`, `# noqa`, and `type: ignore`\n  are not fixes.\n- **Stage specific files by name**, never `git add -A` or `git add .`, and\n  pass commit messages through a HEREDOC.\n\n## 1. Pick the mode\n\nRead the reviews and the unresolved inline threads; `gh pr view --json`\nshows review states but not the threads:\n\n```bash\ngh pr view \u003CPR#> --json number,state,reviews    # no number: the current branch's PR\n\u003Cshared-scripts-dir>\u002Fpr-threads.sh \u003CPR#> unresolved\n```\n\nTake the first that matches:\n\n- **The caller asked for the agent review** (the open-pr skill does once CI\n  passes) → [Agent review](#2-agent-review).\n- **The caller asked to address feedback** (open-pr does when outside reviews\n  arrive), or the script returns **unresolved comments**, or a **changes-requested**\n  review (including one with only a body) →\n  [Address feedback](#3-address-feedback).\n- **Overall review only**: a reviewer's review is `COMMENTED` with no inline\n  comments (`poll-review.sh` reports `summary-only`). Read the body with the\n  command in step 3.1, surface it to the user, and stop; there is nothing to\n  fix in a loop.\n- **No reviews at all** → [Agent review](#2-agent-review).\n\nDone when you have named the mode.\n\n## 2. Agent review\n\nDispatch the `code-reviewer` agent twice, in parallel: a **standards pass**\n(six dimensions, documented standards, smells, complexity) and a **spec pass**\nagainst the issues the PR closes. Present the two reports side by side under\n`## Standards` and `## Spec`, never merged or reranked: a change can follow\nevery standard and still build the wrong thing, or build exactly the right\nthing badly.\n\n- **Your own PR** (author matches `gh api user --jq .login`): this is the gate\n  before merge. Fix or defer every finding, re-run the pass whose findings you\n  fixed, and post an `## Agent review` comment with each finding's outcome.\n- **Someone else's PR**: post one `gh pr review`, requesting changes if\n  either axis has a BLOCKING finding.\n\nFollow [agent-review.md](agent-review.md) for the fetch commands, the prompt\ntemplates, the report layout, severity rules, the fix loop, and large PRs.\nDone when neither report has an open BLOCKING finding and every finding has\nan outcome (your own PR), or the review is posted (someone else's).\n\n## 3. Address feedback\n\nFix, push, then reply to every comment, as one sequence: the replies are what\nclose the loop for reviewers. Never report done at \"pushed\"; replying to\nevery comment is part of the same step. If the PR\nhas merge conflicts or failing CI, sort those out first with\n[recovery.md](recovery.md); merging the base can make comments obsolete.\n\n### 3.0 Branch guard\n\nRun this before fetching any comments: every later step assumes the working\ntree is the PR's, and skipping it can push correct-looking fixes to the wrong\nPR.\n\n```bash\npr_branch=$(gh pr view \u003CPR#> --json headRefName --jq .headRefName)\ncurrent=$(git rev-parse --abbrev-ref HEAD)\n```\n\n- **Same branch:** go on.\n- **Different, working tree clean** (`git status --porcelain` empty): say\n  `Switching from '\u003Ccurrent>' to '\u003Cpr_branch>' to address PR #\u003CPR#>`, then:\n\n  ```bash\n  git switch \"$pr_branch\"\n  # if it doesn't exist locally:\n  git fetch origin \"$pr_branch\" && git switch -c \"$pr_branch\" --track \"origin\u002F$pr_branch\"\n  ```\n\n- **Different, working tree dirty:** stop without switching, stashing, or\n  fetching comments, and tell the user:\n\n  ```text\n  PR #\u003CPR#> is on branch '\u003Cpr_branch>' but you're on '\u003Ccurrent>' with uncommitted changes.\n  Commit or stash them, then run 'git switch \u003Cpr_branch>' (or re-run \u002Freview-pr \u003CPR#>).\n  ```\n\n- **PR from a fork** (`gh pr view \u003CPR#> --json headRepositoryOwner` differs\n  from the repo owner): the flow above can't check it out; stop and tell the\n  user to check it out explicitly (`gh pr checkout \u003CPR#>`).\n\nDone when the current branch is the PR's head branch.\n\n### 3.1 Fetch unresolved comments\n\n```bash\n\u003Cshared-scripts-dir>\u002Fpr-threads.sh \u003CPR#> unresolved\n```\n\nIt returns a JSON array of unresolved comments (id, path, line, body,\nauthor); resolved threads are already filtered out. Check that `\u003CPR#>` is the\nPR you're working on before taking comment IDs from it: when fixes live in a\nfollow-up PR, the comments to answer are that PR's.\n\nAn empty array alongside review activity means a summary-only review: an\noverall `COMMENTED` review with no inline action items. That isn't an error\nor a fix loop. Read the body:\n\n```bash\ngh api \"repos\u002F\u003Cowner>\u002F\u003Crepo>\u002Fpulls\u002F\u003CPR#>\u002Freviews\" \\\n  --jq '[.[] | select(.state == \"COMMENTED\" and .body != \"\")] | last | .body'\n```\n\nPresent it to the user, decide together whether anything needs action (file\nissues for deferred items), and stop there.\n\nDone when you hold the list of unresolved comments.\n\n### 3.2 Triage\n\nRead the code each comment points at and classify it: **fix needed**,\n**already fixed** in an earlier commit, or **acknowledge** (valid but\ndeferred, which needs a GitHub issue; call the Skill tool with\n\"issue-create\", which reuses an existing issue when one already covers it).\nDone when every comment has a class and every deferral has an issue.\n\n### 3.3 Fix\n\nMake the changes, then discover the verification command and run what it\nprints as a **separate** Bash call (`eval` in the same call defeats\n`allowed-tools` matching and prompts):\n\n```bash\n\u003Cshared-scripts-dir>\u002Fdiscover-verification-cmd.sh\n```\n\nDone when verification passes in full.\n\n### 3.4 Commit and push\n\n`fixup-and-push.sh` stages only the files you pass, creates a `fixup!`\ncommit, autosquash-rebases onto the base, and force-pushes with a lease that\nsurvives a GitHub \"Update branch\" merge. That keeps history clean, with no\n\"address review\" commits. First apply the commit skill's uv.lock drift check:\nif `uv.lock` has drifted, add it to the file list and warn the user, as that\nskill prescribes. Inference targets the latest non-merge, non-fixup commit;\nwhen the fix belongs to an earlier one, pass that commit's exact subject from\n`git log --no-merges --format=%s origin\u002F\u003Cbase>..HEAD | grep -v '^fixup!'`,\nnever the PR title.\n\n```bash\n# subject inferred from the latest non-merge, non-fixup commit in origin\u002F\u003Cbase>..HEAD\n\u003Cskill-dir>\u002Ffixup-and-push.sh \u003CbaseRefName> \u003Cfile1> \u003Cfile2> ...\n# or explicit:\n\u003Cskill-dir>\u002Ffixup-and-push.sh \u003CbaseRefName> --subject \"\u003Cexact target subject>\" \u003Cfile1> \u003Cfile2> ...\n```\n\nIf it reports `fixup!` commits that didn't squash, recover with\n[recovery.md](recovery.md). Done when the script exits 0.\n\n### 3.5 Reply to every comment\n\nReply on the PR where the fix landed: when fixes go in a follow-up PR, reply\non that PR's comments, and check the PR number before replying (a reply on\nthe wrong PR is invisible to reviewers). Reply only after the push, so each\nreply confirms a live fix. The script checks that the comment belongs to the\nPR before posting:\n\n```bash\n\u003Cshared-scripts-dir>\u002Fpr-threads.sh \u003CPR#> reply \u003Ccomment_id> 'Fixed — [explanation]'\n```\n\nUse the shape that fits:\n\n```text\nFixed — [what changed]. [If tests added: Also added tests for X.]\nThis was addressed in [commit hash] — [brief explanation].\nAcknowledged — [reason for deferral]. Tracked in #NNN.\nI wasn't able to reproduce this. Can you clarify [specific question]?\n```\n\nDone when every comment from 3.1 has a reply.\n\n### 3.6 Resolve threads\n\nResolving clears the \"changes requested\" status:\n\n```bash\nresolved=$(\u003Cshared-scripts-dir>\u002Fpr-threads.sh \u003CPR#> resolve-all)\necho \"Resolved $resolved review threads\"\n```\n\nDone when the script reports the threads resolved.\n\n### 3.7 Summary\n\nReport comments fixed, acknowledged, and already fixed; threads resolved;\nthe verification result; and anything left unaddressed. Done when the report\nis printed.\n\n## Related\n\n- `\u002Fcode-reviewer` — the standards pass as a standalone review\n- `\u002Fpr-comments` — a reply-only pass, the alternative to address feedback\n- `\u002Fcommit` — quality-gated conventional commits\n- `code-reviewer` agent — runs both passes, spawned by this skill\n",{"name":5,"description":7,"allowed-tools":49,"argument-hint":50},"Bash(gh pr *), Bash(gh api *), Bash(gh repo *), Bash(gh issue *), Bash(git status), Bash(git rev-parse *), Bash(git switch *), Bash(git diff *), Bash(git log *), Bash(git show *), Bash(git add *), Bash(git commit *), Bash(git push *), Bash(git rebase *), Bash(git stash *), Bash(git fetch *), Bash(git merge *), Bash(\u003Cskill-dir>\u002F*), Bash(\u003Cshared-scripts-dir>\u002F*), Read","[PR number or URL]","main","023b01bfb4a86fbf1e38a749f1044cce3e5da67d","skills\u002Fengineering\u002Freview-pr",1,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit","https:\u002F\u002Fgithub.com\u002Fdougborg","http:\u002F\u002Fdougborg.org","Platforms and Infrastructure Software Engineer","2026-11-13 07:43:37",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add dougborg\u002Fharness-kit --skill review-pr",{"tool":66,"command":67},"bunx","bunx skills add dougborg\u002Fharness-kit --skill review-pr",{"tool":69,"command":70},"pnpm","pnpm dlx skills add dougborg\u002Fharness-kit --skill review-pr","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Freview-pr\u002FSKILL.md",true,[74,80,84,90],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"agent-review.md","REFERENCE","参考文档",4151,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Freview-pr\u002Fagent-review.md",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"agents\u002Fopenai.yaml",114,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Freview-pr\u002Fagents\u002Fopenai.yaml",{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"fixup-and-push.sh","SCRIPT","脚本",7918,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Freview-pr\u002Ffixup-and-push.sh",{"path":91,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":92,"sourceHtmlUrl":93},"recovery.md",4554,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Freview-pr\u002Frecovery.md",[95,114,133,165,189,206],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":106,"publishedAt":44},"01M6KX4J65S5FZKMSN5DQNPSZM","teach","Teach yourself a topic over several sessions, with lessons, references, and a record of what you've learned.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fteach\u002FSKILL.md",[101],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[97,107,108,109,110,111,112,113],"lessons","you","with","learned","record","references","sessions",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":123,"publishedAt":44},"01M6KX4FSSG7MHF00JDT5QT0BQ","svg-logo-designer","Generate SVG logos with multiple concepts, layouts, and color variations.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fsvg-logo-designer\u002FSKILL.md",[120],{"categoryNo":121,"categoryName":122,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[124,125,126,127,128,129,109,130,131,132],"logo","designer","svg logo designer","SVG","color","concepts","write","read","generate",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":145,"publishedAt":44},"01M6KX4BD3J9MZPPSH4MENH7FP","documentation-writer","Writes and revises human-facing documentation — READMEs, contributor and setup guides, reference pages, architecture notes, CLAUDE.md, and changelog entries. Covers picking the right document type for the question being asked, structuring for skimming, writing examples that actually run, and keeping docs from going stale. Use when creating or rewriting docs, when a README has drifted from the code, or when deciding where a piece of information belongs. For SKILL.md and agent files, use \u002Fskill-writer instead.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fdocumentation-writer\u002FSKILL.md",[139,142],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":143,"categoryName":144,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000036","内容创作者",[146,147,148,149,150,151,152,153,154,155,156,157,41,158,159,160,161,162,163,164],"writer","documentation writer","documentation","entries","changelog","architecture","document","files","use","question","README","notes","examples","pages","for","information","guides","type","writing",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":44},"01M6KX47ZJ4ZWHDN3MY8SYAWZZ","adhd-mode","Shapes every response for a reader with ADHD: the next action first, numbered steps, progress restated each turn, tangents held back, concrete time estimates, wins made visible. Stays on for the rest of the session until the reader says \"stop adhd mode\". On Claude Code, the harness-kit:adhd output style does the same without invoking this skill.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fadhd-mode\u002FSKILL.md",[],[172,173,174,175,160,176,177,109,178,179,180,181,182,183,184,185,186,187,188,41],"adhd","mode","adhd mode","next","action","kit","output","style","progress","time","back","stop","session","reader","first","REST","harness",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":44},"01M6KX463Z6E18EPDW873GDHKB","wait-what","That last message didn't land: re-explain it with the missing context.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fthinking\u002Fwait-what\u002FSKILL.md",[],[196,197,198,109,199,200,201,202,203,204,205],"wait","wait what","re","it","missing","message","context","explain","land","last",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":212,"publishedAt":44},"01M6KX43NE1NB0Y2HECY515730","to-questionnaire","Turn a decision you can't make alone into a questionnaire for the one person who can answer it, filled in async or together in a meeting.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fthinking\u002Fto-questionnaire\u002FSKILL.md",[],[213,214,160,215,216,217,218,108,219,199,220,221],"to questionnaire","questionnaire","person","can","answer","meeting","make","async","decision"]