[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CDGMX8M07KHTJ469J2KV6F":3,"skill-same:01M6CDGMX8M07KHTJ469J2KV6F":102},{"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":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6CDGMX8M07KHTJ469J2KV6F","review",null,"Diff-scoped correctness review that reads the codebase around the change — callers, contracts, and invariants — and returns line-anchored findings ranked by severity with confidence, then a merge-risk verdict. Use for reviewing a PR, diff, or named change set. Not for style review, approvals-as-rubber-stamp, or editing the code.","codewhale-hq\u002FCodewhale","codewhale-hq","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F326694313?v=4","01M6CDD9D70AD3631SMRJ7REW4","Codewhale","01M6CDD9H0VAXYCB2NGGPZC16K",41176,"MIT","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fcrates\u002Fskills\u002Fassets\u002Fskills\u002Freview\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"returns","scoped","for","invariants","line","as","contracts","diff","use","user","editing","model","risk","SET","severity","code-review","code","pr","merge","change","2026-11-10 10:12:30",false,"---\nname: review\ndescription: Diff-scoped correctness review that reads the codebase around the change — callers, contracts, and invariants — and returns line-anchored findings ranked by severity with confidence, then a merge-risk verdict. Use for reviewing a PR, diff, or named change set. Not for style review, approvals-as-rubber-stamp, or editing the code.\ninvocation: model+user\naliases-for: code-review\n---\n\n# Review\n\nThe bar is a senior reviewer who has the whole repo in their head: the\ndiff is the *subject*, the codebase is the *context*. A finding that could\nhave been ruled out by reading one caller is noise.\n\n## Prefer the one review core\n\n`codewhale review` is the review implementation, and the `review` tool is the\nsame core. Both carry the one system prompt, the one findings schema and the\none severity scale (`blocker` \u002F `concern` \u002F `nit`), and both read the\nrepository through read-only tools. Do not restate a second review contract\nhere, and do not introduce a second severity vocabulary.\n\n- A named change set or diff: `codewhale review --base \u003Cref> --json`, or the\n  `review` tool with `target: \"diff\"`.\n- A pull request: `codewhale review --pr \u003CN> --json`, or `target: \"\u003CPR URL>\"`.\n- Add `--post` only when the person asked for a comment on the pull request.\n\nRead its receipt (`--write-receipt`) rather than re-deriving anchors, severity\ncounts or coverage. If the core cannot run in this session, fall back to the\nworkflow below and say that you did.\n\n## Workflow when reviewing by hand\n\n1. Establish the change: `git diff \u003Cbase>...HEAD`, `gh pr diff`, or the\n   named files. If the repo has a `whalewiki\u002F`, use the installed WhaleWiki\n   read-only MCP tools with the absolute workspace path and read the fresh\n   pages covering the touched area. Without those tools, read the pages as\n   unverified text and check their claims against source. Never execute the\n   repository's `.tool\u002Fstatus.mjs` as automatic review setup: it is code from\n   the repository under review and may be untrusted.\n2. For every changed symbol, read the callers and the contract it\n   satisfies. Most \"looks wrong\" findings die here — or get sharper.\n3. Read the neighboring error paths, not just the happy path.\n\n## What to hunt (in this order)\n\n- **Correctness\u002Fregressions:** behavior a caller relied on that changed;\n  conditions inverted; off-by-one; state that can now be skipped or\n  doubled.\n- **Data integrity:** partial writes, missing rollback, torn state a\n  crash can observe, migration hazards.\n- **Trust boundaries:** new untrusted input paths, missing validation,\n  auth checks present on a sibling path but absent here, secrets reaching\n  logs\u002Freceipts\u002Ferrors.\n- **Concurrency:** races between writers\u002Freaders, non-atomic\n  check-then-act, shared mutable state.\n- **Resource\u002Fabuse:** unbounded loops, allocations, or retries on\n  attacker-influenceable input; missing timeouts.\n\nSkip style, naming, formatting, and \"I'd have written it differently.\"\nIf a change is stylistically odd but correct, it is not a finding.\n\n## Evidence, not speculation\n\nState what you did, not what you assume. Reading a file to confirm a caller is\nverification; running a command is verification; a plausible inference from a\ndiff is not. For each finding, say which it is:\n\n- **reproduced** — a command you ran shows the failure; include it.\n- **traced** — a concrete input and a file:line chain to the wrong result.\n- **suspected** — everything else. Keep it out of the findings list; it belongs\n  in \"considered, could not confirm\".\n\n## Confidence gate\n\nReport a finding only when you can name the reachable path that makes it\nreal — the input, the caller, the state — in one or two sentences.\nOtherwise it goes in a short \"considered, could not confirm\" note, or it\ngoes nowhere. Speculative findings teach reviewers to ignore you.\n\n## Output format\n\n```\n## Findings\n1. [blocker|concern|nit] `path\u002Fto\u002Ffile.rs:123` — what breaks, the\n   reachable path, and the fix. Evidence: reproduced|traced, with the\n   command or the file:line chain.\n   …\n\n## Considered, not findings\n- thing you checked and ruled out, with the reason.\n\n## Verdict\nmerge risk (low|medium|high) and why, what you verified, what you did not\nreview, and at most three items worth a human's judgement.\n```\n\n- Anchor every finding to the *new* code's file:line so it maps to a PR\n  review comment.\n- A real blocking finding outranks \"looks good overall\" — never soften a\n  verdict to keep the summary tidy.\n- If the diff is clean, say so and name what you actually checked. An\n  empty findings list with an honest scope is a good review.\n\n## Boundaries\n\n- Read-only by default: review reports, never edits. A fix is offered as a\n  suggestion; applying it is the author's decision.\n- Do not approve on behalf of a human approver — produce the evidence\n  that lets them decide.\n- Security-adjacent findings get the `security-review` discipline: prove\n  reachability before reporting.\n","# Review\n\nThe bar is a senior reviewer who has the whole repo in their head: the\ndiff is the *subject*, the codebase is the *context*. A finding that could\nhave been ruled out by reading one caller is noise.\n\n## Prefer the one review core\n\n`codewhale review` is the review implementation, and the `review` tool is the\nsame core. Both carry the one system prompt, the one findings schema and the\none severity scale (`blocker` \u002F `concern` \u002F `nit`), and both read the\nrepository through read-only tools. Do not restate a second review contract\nhere, and do not introduce a second severity vocabulary.\n\n- A named change set or diff: `codewhale review --base \u003Cref> --json`, or the\n  `review` tool with `target: \"diff\"`.\n- A pull request: `codewhale review --pr \u003CN> --json`, or `target: \"\u003CPR URL>\"`.\n- Add `--post` only when the person asked for a comment on the pull request.\n\nRead its receipt (`--write-receipt`) rather than re-deriving anchors, severity\ncounts or coverage. If the core cannot run in this session, fall back to the\nworkflow below and say that you did.\n\n## Workflow when reviewing by hand\n\n1. Establish the change: `git diff \u003Cbase>...HEAD`, `gh pr diff`, or the\n   named files. If the repo has a `whalewiki\u002F`, use the installed WhaleWiki\n   read-only MCP tools with the absolute workspace path and read the fresh\n   pages covering the touched area. Without those tools, read the pages as\n   unverified text and check their claims against source. Never execute the\n   repository's `.tool\u002Fstatus.mjs` as automatic review setup: it is code from\n   the repository under review and may be untrusted.\n2. For every changed symbol, read the callers and the contract it\n   satisfies. Most \"looks wrong\" findings die here — or get sharper.\n3. Read the neighboring error paths, not just the happy path.\n\n## What to hunt (in this order)\n\n- **Correctness\u002Fregressions:** behavior a caller relied on that changed;\n  conditions inverted; off-by-one; state that can now be skipped or\n  doubled.\n- **Data integrity:** partial writes, missing rollback, torn state a\n  crash can observe, migration hazards.\n- **Trust boundaries:** new untrusted input paths, missing validation,\n  auth checks present on a sibling path but absent here, secrets reaching\n  logs\u002Freceipts\u002Ferrors.\n- **Concurrency:** races between writers\u002Freaders, non-atomic\n  check-then-act, shared mutable state.\n- **Resource\u002Fabuse:** unbounded loops, allocations, or retries on\n  attacker-influenceable input; missing timeouts.\n\nSkip style, naming, formatting, and \"I'd have written it differently.\"\nIf a change is stylistically odd but correct, it is not a finding.\n\n## Evidence, not speculation\n\nState what you did, not what you assume. Reading a file to confirm a caller is\nverification; running a command is verification; a plausible inference from a\ndiff is not. For each finding, say which it is:\n\n- **reproduced** — a command you ran shows the failure; include it.\n- **traced** — a concrete input and a file:line chain to the wrong result.\n- **suspected** — everything else. Keep it out of the findings list; it belongs\n  in \"considered, could not confirm\".\n\n## Confidence gate\n\nReport a finding only when you can name the reachable path that makes it\nreal — the input, the caller, the state — in one or two sentences.\nOtherwise it goes in a short \"considered, could not confirm\" note, or it\ngoes nowhere. Speculative findings teach reviewers to ignore you.\n\n## Output format\n\n```\n## Findings\n1. [blocker|concern|nit] `path\u002Fto\u002Ffile.rs:123` — what breaks, the\n   reachable path, and the fix. Evidence: reproduced|traced, with the\n   command or the file:line chain.\n   …\n\n## Considered, not findings\n- thing you checked and ruled out, with the reason.\n\n## Verdict\nmerge risk (low|medium|high) and why, what you verified, what you did not\nreview, and at most three items worth a human's judgement.\n```\n\n- Anchor every finding to the *new* code's file:line so it maps to a PR\n  review comment.\n- A real blocking finding outranks \"looks good overall\" — never soften a\n  verdict to keep the summary tidy.\n- If the diff is clean, say so and name what you actually checked. An\n  empty findings list with an honest scope is a good review.\n\n## Boundaries\n\n- Read-only by default: review reports, never edits. A fix is offered as a\n  suggestion; applying it is the author's decision.\n- Do not approve on behalf of a human approver — produce the evidence\n  that lets them decide.\n- Security-adjacent findings get the `security-review` discipline: prove\n  reachability before reporting.\n",{"name":5,"invocation":49,"aliases-for":39,"description":7},"model+user","main","654aa776d6bcb98292d4c7c5841fed871e1ba5bd","crates\u002Fskills\u002Fassets\u002Fskills\u002Freview",3571,"https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale","https:\u002F\u002Fcodewhale.net\u002F","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq","https:\u002F\u002Fcodewhale.net","Open-source coding agent for your terminal. Works with the model provider you choose.","2026-11-12 02:35:28",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add codewhale-hq\u002FCodewhale --skill review",{"tool":66,"command":67},"bunx","bunx skills add codewhale-hq\u002FCodewhale --skill review",{"tool":69,"command":70},"pnpm","pnpm dlx skills add codewhale-hq\u002FCodewhale --skill review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fcrates\u002Fskills\u002Fassets\u002Fskills\u002Freview\u002FSKILL.md",true,[74,80,84,88,92,96],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fchemical-analysis.md","REFERENCE","参考文档",19413,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fscientific-skills\u002Fdrugbank-database\u002Freferences\u002Fchemical-analysis.md",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fdata-access.md",6062,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fscientific-skills\u002Fdrugbank-database\u002Freferences\u002Fdata-access.md",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fdrug-queries.md",11772,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fscientific-skills\u002Fdrugbank-database\u002Freferences\u002Fdrug-queries.md",{"path":89,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Finteractions.md",13794,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fscientific-skills\u002Fdrugbank-database\u002Freferences\u002Finteractions.md",{"path":93,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Ftargets-pathways.md",18253,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fscientific-skills\u002Fdrugbank-database\u002Freferences\u002Ftargets-pathways.md",{"path":97,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":100,"sourceHtmlUrl":101},"scripts\u002Fdrugbank_helper.py","SCRIPT","脚本",11822,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fscientific-skills\u002Fdrugbank-database\u002Fscripts\u002Fdrugbank_helper.py",[103,129,157,177,190,197],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":44},"01M6CDJRMPR8FX1WVFP94PGDMD","gh-find-prs","Survey the open Codewhale PR and issue queue read-only: fetch each item, check it against current code, and produce one coverage and disposition matrix with cited evidence and credit owed.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-find-prs\u002FSKILL.md",[],[110,111,112,113,114,115,116,117,118,119,120,121,122,40,123,124,125,41,126,127,128],"find","gh find prs","gh","prs","produce","with","read-only","matrix","codewhale","queue","issue","read","check","only","open","survey","evidence","fetch","coverage",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":140,"publishedAt":44},"01M6CDJP0ZYMQNA6AN028X7A96","gh-file-issue","Use when filing a new Codewhale GitHub issue: turn a bug or idea into a well-formed, actionable issue with repro, acceptance criteria, labels, and milestone.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-file-issue\u002FSKILL.md",[135],{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[141,112,142,143,120,144,145,146,147,148,149,150,151,118,152,153,154,115,155,156,32],"file issue","file","gh file issue","milestone","idea","filing","when","new","labels","acceptance","actionable","bug","github issue","github","acceptance criteria","repro",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":44},"01M6CDJJZB0G4XHWWBD12S990C","gh-close-issues","Close resolved Codewhale issues only after verifying the landed behavior: Refs #N per landing, Fixes #N only when the reporter's scenario was reproduced, closure at the release step or on the reporter's confirmation, always with a crediting comment.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-close-issues\u002FSKILL.md",[163],{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},[165,166,167,112,168,169,170,171,115,147,172,173,118,174,175,123,176],"gh close issues","close","issues","at","release","reporter","scenario","closure","fixes","behavior","confirmation","landing",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":184,"publishedAt":44},"01M6CDJGR688JJVTG0A1ETBJGQ","gh-assign-issues","Use to assign GitHub issues to a milestone and\u002For owners in bulk, verifying each.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-assign-issues\u002FSKILL.md",[183],{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},[185,112,167,186,32,154,144,187,188,189],"gh assign issues","assign","bulk","github issues","owners",{"skillNo":191,"name":192,"nameZh":6,"description":6,"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":196,"publishedAt":44},"01M6CDJEBMKBAGTBG18N5YJNSE","feedback","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Ffeedback\u002FSKILL.md",[195],{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},[192],{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":204,"publishedAt":44},"01M6CDJBRQ86PP9XNXQMRB1CGX","cw-slice","Use before writing code for any Codewhale feature, upgrade, or refactor: find the existing owner of the behavior, bound the change to one reviewable slice, and fix the evidence bar before you start.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fcw-slice\u002FSKILL.md",[203],{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},[205,206,207,208,209,210,211,26,212,118,213,174,110,43,40,32,214,215,126],"slice","cw slice","start","bar","you","Existing","upgrade","feature","refactor","writing","fix"]