[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71J66A4PXTXB13QYBE97XG5":3,"skill-same:01M71J66A4PXTXB13QYBE97XG5":125},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":13,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":68},"01M71J66A4PXTXB13QYBE97XG5","review",null,"Reviews code changes or PRs across 11 perspectives, reporting via JSON structured output plus a human-readable report. Supports switching between quick and deep modes. Takes a PR number or working-tree diff as input.","ozzy-labs\u002Fskills","ozzy-labs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F246109093?v=4","01M6H0M2K2PZXHWNHJJTWY20FY","01M71J2B6FZ5KPEXPR5VS1TX7Z",0,"MIT","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"structured output","prs","modes","for","true","tree","number","reviews","quick","output","as","switching","deep","across","diff","Bash","code","pr","workflow","2026-11-10 10:12:30",false,"---\ndescription: Reviews code changes or PRs across 11 perspectives, reporting via JSON structured output plus a human-readable report. Supports switching between quick and deep modes. Takes a PR number or working-tree diff as input.\nargument-hint: \u003C#PR-number | (blank for working tree changes)> [--axes=\u003Caxis,...>] [--deep]\ndisable-model-invocation: true\nallowed-tools: Bash, Read, Edit, Write, Grep, Glob, Agent, AskUserQuestion, Workflow\n---\n\n# review\n\nRead `.agents\u002Fskills\u002Freview\u002FSKILL.md` and follow its workflow steps.\n\n## Claude Code-specific additions\n\n### Argument parsing\n\nParse `$ARGUMENTS`:\n\n- A number or `#N` → treated as a PR number\n- `--axes=\u003Caxis,...>` → explicit specification of perspectives to apply\n- `--deep` → run in deep mode (launch `Agent({subagent_type: \"code-reviewer\"})` per perspective in parallel, via **multiple tool calls in the same message**)\n\n### Parallel launch in deep mode\n\nIn deep mode, launch a worker per perspective in parallel. **Prefer the Workflow approach when the Workflow tool is available**, falling back to the Agent tool approach when it is not.\n\n#### Workflow approach (recommended)\n\nPass the perspectives via `args.axes`, and structurally validate findings with `schema` (mismatches are automatically retried, so there is no dropped output from parse failures):\n\n```js\nexport const meta = {\n  name: 'review-deep',\n  description: 'review: 観点別 worker を並列起動して findings を収集する',\n  phases: [{ title: 'Review' }],\n}\n\n\u002F\u002F canonical の findings JSON schema（Schema v1）を JSON Schema 化したもの\nconst FINDINGS_SCHEMA = { \u002F* axis \u002F findings[]: {file, line, severity, message, ...} *\u002F }\n\nconst results = await parallel(args.axes.map(axis => () =>\n  agent(\n    `axis: ${axis}\\nmode: deep\\ncontext:\\n  base: ${args.base}\\n  head: ${args.head}\\n  pr_number: ${args.pr_number ?? ''}\\n\\n${args.diff}`,\n    { label: axis, phase: 'Review', agentType: 'code-reviewer', schema: FINDINGS_SCHEMA }\n  )\n))\nreturn { findings: results.filter(Boolean) }\n```\n\n- Reuse the existing subagent definition via `agentType: 'code-reviewer'`\n- Aggregation (duplicate merging, cross-perspective conflicts, grouping) is not done inside the workflow; after return, the caller passes the findings to `review.mjs render` and leaves it to the engine (canonical step 3). Do not add an aggregation agent inside the workflow\n- Pass the diff via `args` (do not have the worker fetch it)\n\n#### Agent tool approach (fallback)\n\n```text\nAgent({\n  subagent_type: \"code-reviewer\",\n  prompt: \"axis: \u003Caxis>\\nmode: deep\\ncontext:\\n  base: \u003Cbase>\\n  head: \u003Chead>\\n  pr_number: \u003CN>\\n\\n\u003Cdiff>\"\n})\n```\n\n- Independent subagents within the same wave are launched in parallel via **multiple tool calls in a single message**\n- Aggregation is done by the caller passing findings to `review.mjs render` (do not add an LLM call)\n- Merge the subagents' return values (JSON) and push them into `findings[]`\n\n### After the completion report\n\nCall AskUserQuestion immediately after the completion report (do not set the `answers` parameter).\n\n**When there are findings:**\n\n- **\"Fix the findings\"** → Fix the code based on Critical \u002F Warning findings (Info is out of scope)\n- **\"Proceed as-is\"** → exit\n\n**When there are no findings:**\n\n- **\"Run through commit and PR in one go\"** → Read `.claude\u002Fskills\u002Fship\u002FSKILL.md` and follow its steps\n- **\"Proceed as-is\"** → exit\n","# review\n\nRead `.agents\u002Fskills\u002Freview\u002FSKILL.md` and follow its workflow steps.\n\n## Claude Code-specific additions\n\n### Argument parsing\n\nParse `$ARGUMENTS`:\n\n- A number or `#N` → treated as a PR number\n- `--axes=\u003Caxis,...>` → explicit specification of perspectives to apply\n- `--deep` → run in deep mode (launch `Agent({subagent_type: \"code-reviewer\"})` per perspective in parallel, via **multiple tool calls in the same message**)\n\n### Parallel launch in deep mode\n\nIn deep mode, launch a worker per perspective in parallel. **Prefer the Workflow approach when the Workflow tool is available**, falling back to the Agent tool approach when it is not.\n\n#### Workflow approach (recommended)\n\nPass the perspectives via `args.axes`, and structurally validate findings with `schema` (mismatches are automatically retried, so there is no dropped output from parse failures):\n\n```js\nexport const meta = {\n  name: 'review-deep',\n  description: 'review: 観点別 worker を並列起動して findings を収集する',\n  phases: [{ title: 'Review' }],\n}\n\n\u002F\u002F canonical の findings JSON schema（Schema v1）を JSON Schema 化したもの\nconst FINDINGS_SCHEMA = { \u002F* axis \u002F findings[]: {file, line, severity, message, ...} *\u002F }\n\nconst results = await parallel(args.axes.map(axis => () =>\n  agent(\n    `axis: ${axis}\\nmode: deep\\ncontext:\\n  base: ${args.base}\\n  head: ${args.head}\\n  pr_number: ${args.pr_number ?? ''}\\n\\n${args.diff}`,\n    { label: axis, phase: 'Review', agentType: 'code-reviewer', schema: FINDINGS_SCHEMA }\n  )\n))\nreturn { findings: results.filter(Boolean) }\n```\n\n- Reuse the existing subagent definition via `agentType: 'code-reviewer'`\n- Aggregation (duplicate merging, cross-perspective conflicts, grouping) is not done inside the workflow; after return, the caller passes the findings to `review.mjs render` and leaves it to the engine (canonical step 3). Do not add an aggregation agent inside the workflow\n- Pass the diff via `args` (do not have the worker fetch it)\n\n#### Agent tool approach (fallback)\n\n```text\nAgent({\n  subagent_type: \"code-reviewer\",\n  prompt: \"axis: \u003Caxis>\\nmode: deep\\ncontext:\\n  base: \u003Cbase>\\n  head: \u003Chead>\\n  pr_number: \u003CN>\\n\\n\u003Cdiff>\"\n})\n```\n\n- Independent subagents within the same wave are launched in parallel via **multiple tool calls in a single message**\n- Aggregation is done by the caller passing findings to `review.mjs render` (do not add an LLM call)\n- Merge the subagents' return values (JSON) and push them into `findings[]`\n\n### After the completion report\n\nCall AskUserQuestion immediately after the completion report (do not set the `answers` parameter).\n\n**When there are findings:**\n\n- **\"Fix the findings\"** → Fix the code based on Critical \u002F Warning findings (Info is out of scope)\n- **\"Proceed as-is\"** → exit\n\n**When there are no findings:**\n\n- **\"Run through commit and PR in one go\"** → Read `.claude\u002Fskills\u002Fship\u002FSKILL.md` and follow its steps\n- **\"Proceed as-is\"** → exit\n",{"description":7,"allowed-tools":47,"argument-hint":48,"disable-model-invocation":49},"Bash, Read, Edit, Write, Grep, Glob, Agent, AskUserQuestion, Workflow","\u003C#PR-number | (blank for working tree changes)> [--axes=\u003Caxis,...>] [--deep]",true,"main","db212a47efe751fa1c42bd76e61dbfd8328e5b10",".claude\u002Fskills\u002Freview","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills","https:\u002F\u002Fgithub.com\u002Fozzy-labs","2026-07-13 06:49:42",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":49},[58,61,64],{"tool":59,"command":60},"npx","npx skills add ozzy-labs\u002Fskills --skill review",{"tool":62,"command":63},"bunx","bunx skills add ozzy-labs\u002Fskills --skill review",{"tool":65,"command":66},"pnpm","pnpm dlx skills add ozzy-labs\u002Fskills --skill review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002FSKILL.md",[69,75,79,83,87,91,95,99,103,107,111,115,119],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"perspectives\u002Farchitecture.md","REFERENCE","参考文档",2348,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Farchitecture.md",{"path":76,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":77,"sourceHtmlUrl":78},"perspectives\u002Fcompatibility.md",2209,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fcompatibility.md",{"path":80,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":81,"sourceHtmlUrl":82},"perspectives\u002Fconventions.md",2030,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fconventions.md",{"path":84,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":85,"sourceHtmlUrl":86},"perspectives\u002Fcorrectness.md",1900,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fcorrectness.md",{"path":88,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":89,"sourceHtmlUrl":90},"perspectives\u002Fdocumentation.md",2190,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fdocumentation.md",{"path":92,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":93,"sourceHtmlUrl":94},"perspectives\u002Fmaintainability.md",2081,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fmaintainability.md",{"path":96,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":97,"sourceHtmlUrl":98},"perspectives\u002Fobservability.md",2131,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fobservability.md",{"path":100,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":101,"sourceHtmlUrl":102},"perspectives\u002Fperformance.md",2089,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fperformance.md",{"path":104,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":105,"sourceHtmlUrl":106},"perspectives\u002FREADME.md",3650,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002FREADME.md",{"path":108,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":109,"sourceHtmlUrl":110},"perspectives\u002Fsecurity.md",2084,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fsecurity.md",{"path":112,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":113,"sourceHtmlUrl":114},"perspectives\u002Ftesting.md",2171,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Ftesting.md",{"path":116,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":117,"sourceHtmlUrl":118},"perspectives\u002Fusability.md",2279,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Fperspectives\u002Fusability.md",{"path":120,"resourceType":121,"resourceTypeDesc":122,"sizeBytes":123,"sourceHtmlUrl":124},"review.mjs","SCRIPT","脚本",18926,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freview\u002Freview.mjs",[126,151,175,196,223,245],{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":42},"01M71J6R63H4E6ZE6KMDM4CT85","verify","An integrated skill that runs the combined validation of build \u002F typecheck \u002F test \u002F lint in one shot. The `verify.mjs` engine auto-discovers validation commands via a discovery chain (AGENTS.md's 「検証」 section → package.json scripts → justfile\u002FMakefile\u002Flefthook → language heuristics), executes them serially with their source attached, and returns a result summary. If a higher-priority stage produces a hit, only that stage is executed (no crossing stages).","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fverify\u002FSKILL.md",[],[128,133,134,135,136,137,138,139,140,141,142,143,38,144,145,146,147,148,149,150],"combined","heuristics","chain","repo","discovery","section","lefthook","only","auto","package","stage","one","lint","dry","engine","with","test","typecheck",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":42},"01M71J6JW7SAY9PDKAWHG3SJCR","usage-guard","Monitors Claude Code's Usage Limit (5-hour = Current \u002F weekly = Weekly), pauses work when it exceeds 95%, and automatically resumes once the reset restores headroom. Bundles an engine form that a caller such as drive Reads at a checkpoint, and a standalone form, `\u002Fusage-guard \"\u003Ccontinuation command>\"`, that guards arbitrary work. Claude-only (depends on the OAuth usage-rate endpoint + ScheduleWakeup).","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fusage-guard\u002FSKILL.md",[],[158,159,160,161,162,140,163,164,39,165,166,167,168,169,170,171,33,172,173,174],"usage","usage guard","guard","weekly","standalone","guards","when","reset","work","command","at","rate","status","endpoint","continuation","form","limit",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":181,"publishedAt":42},"01M71J6FRG119REA1G0S99Q4GZ","topics","Selects GitHub topic candidates by having the `topics.mjs` engine perform constraint validation, popularity measurement, broad+narrow \u002F singular-plural comparison, and hardcoded ozzy-labs conventions, then applies them via `gh repo edit --add-topic` following the policy's `externally-visible` gate (default batch-confirm). Scope is limited to use within ozzy-labs.","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftopics\u002FSKILL.md",[],[177,182,183,136,184,185,27,186,187,188,189,38,190,191,192,146,147,193,194,195],"measurement","scope","policy","default","gh","plural","use","comparison","apply","candidate","batch","candidates","github","via",{"skillNo":197,"name":198,"nameZh":6,"description":199,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":200,"categories":201,"keywords":208,"publishedAt":42},"01M71J6DC27P4FDSP10SDT2PSN","skill-observability","Defines the skill observability event contract (event.schema.json) and emit substrate (obs-emit.mjs). The SSOT for the measurement layer of the skill improvement loop. Referenced by other skills and hooks.","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskill-observability\u002FSKILL.md",[202,203],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":204,"categoryName":205,"taxonomyType":206,"taxonomyTypeDesc":207},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[209,210,182,211,212,26,213,214,215,216,217,218,219,220,221,222],"observability","skill observability","improvement","skill improvement","event","hooks","contract","schema","loop","false","substrate","json","improvement loop","layer",{"skillNo":224,"name":225,"nameZh":6,"description":226,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":227,"categories":228,"keywords":230,"publishedAt":42},"01M71J6AYECH1J94RAZ49QZ19Y","skill-metrics","Aggregates the local observability event log (~\u002F.agents\u002Fobservability\u002Fevents.jsonl) and presents, read-only, per-skill invocation counts and notable events (fallback \u002F HITL rejection \u002F loop cap reached \u002F abort). Fires on \"show me the skill metrics,\" \"aggregate the observability results,\" \"which skills get used the most?\" Does not send anything.","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskill-metrics\u002FSKILL.md",[229],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[231,232,209,233,234,235,236,237,213,238,239,240,241,27,140,217,242,38,243,244],"skill metrics","metrics","event log","which","show","get","read-only","iso","aggregates","send","local","show me","log","jsonl",{"skillNo":246,"name":247,"nameZh":6,"description":248,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":249,"categories":250,"keywords":251,"publishedAt":42},"01M71J68TD0QFATGW3BBZVCWA2","ship","Runs verification, commit, and PR creation all at once. An integrated pipeline that runs verify (build + type + test + lint) → commit → PR creation in sequence against the changes.","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fship\u002FSKILL.md",[],[247,252,253,149,254,40,128,255,256,257,168,258,259,260,27,261,38,262,145],"type","verification","changes","creation","build","pipeline","read","sequence","grep","pr creation","commit"]