[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M72WDTPH32KAB6KEJ77CESPP":3,"skill-same:01M72WDTPH32KAB6KEJ77CESPP":75},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M72WDTPH32KAB6KEJ77CESPP","skill-smith",null,"Lint and structure-check a SKILL.md — frontmatter, line budget, trigger clause, reference depth. Use when the user asks to write a new skill, review this skill, lint a SKILL.md, check skill frontmatter, or after editing any file under a skills\u002F*\u002FSKILL.md path.","raisedadead\u002Fclaude-code-plugins","raisedadead","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1884376?v=4","01M72WC4WYRJGZ2CXMCSF7B6VG","Mrugesh Mohapatra","01M72WC4XJTNHQ0D89QPG2H0W4",3,"ISC","https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwhetstone\u002Fskills\u002Fskill-smith\u002FSKILL.md",[],[],"2026-11-10 22:39:42",false,"---\nname: skill-smith\ndescription: Lint and structure-check a SKILL.md — frontmatter, line budget, trigger clause, reference depth. Use when the user asks to write a new skill, review this skill, lint a SKILL.md, check skill frontmatter, or after editing any file under a skills\u002F*\u002FSKILL.md path.\n---\n\n# skill-smith — lint a SKILL.md\n\nA skill lives or dies on its routing and its shape. The script judges the deterministic half — frontmatter, line budget, reference depth — and hands you a checklist for the half it cannot.\n\n## When to use\n\n- Authoring a new skill — run it before calling the skill done.\n- Reviewing or editing an existing `SKILL.md`.\n- After any edit under a `skills\u002F*\u002FSKILL.md` path.\n\n## Run the lint\n\n```bash\n\"${CLAUDE_PLUGIN_ROOT}\"\u002Fbin\u002Flint-skill \u003Cpath-to-SKILL.md>\n```\n\nPass a single `SKILL.md`, or a `skills\u002F` directory to lint every skill under it. Exit 1 when any `FAIL` is present; `WARN` alone exits 0.\n\nWhat it checks, deterministically:\n\n- **name** — present, matches the parent directory, and uses the kebab charset (lowercase \u002F digits \u002F single hyphens, no leading, trailing, or doubled hyphen).\n- **description** — present, ≤ 1024 chars, carries a `Use when` \u002F `Invoke when` trigger clause, and reads third-person (a first-person `I …` is flagged).\n- **body** — under the 500-line budget (a warning fires past 400).\n- **reference depth** — every bundled file (`reference\u002F…`, `scripts\u002F…`) stays one level deep; a file nested deeper is a `WARN`, so the run still exits 0 and the rule is yours to hold.\n\n## The loop\n\nFix the reported `FAIL`s, re-run, repeat — cap at **3 rounds**. Findings still standing after the third round go to the operator as a residual list. The exit criterion is `lint-skill` exiting 0, judged by the script.\n\n`WARN`s exit 0 and are still worth reading — a first-person description or a body creeping toward the budget is cheapest to fix while you are here.\n\n## Manual pass (what the script cannot judge)\n\nThree things stay judgement calls. Before you write, read `reference\u002Fwriting-for-agents.md`; after the lint is clean, read the change against the other two:\n\n- `reference\u002Fwriting-for-agents.md` — the rubric for any document an agent reads: context pointers, the information hierarchy, completion criteria, leading words and pruning. A skill also reads `reference\u002Fskill-mechanics.md`.\n- `reference\u002Fanatomy.md` — the canonical section order and the frontmatter contract. Diff a new skill's shape against it.\n- `reference\u002Ffailure-modes.md` — the six ways a skill rots (premature completion, duplication, sediment, sprawl, no-op, negation). Use it as a read-through checklist.\n\n## Verification\n\nDone = `lint-skill \u003Cpath>` exits 0 **and** you have read the change against all three references. The exit code is the gate; the checklists are the judgement.\n\n## Dossier breadcrumb\n\nIn a repo with a live dossier ledger, record the verdict as one §S line through the dossier plugin's append tooling (the host session reminds when applicable; the first live row is the current dossier). No dossier → skip: this skill has no dossier dependency. After an Edit or Write of a `skills\u002F\u003Cname>\u002FSKILL.md`, whetstone's PostToolUse hook runs the lint without the nesting-depth check and adds its lines as a reminder.\n\n## Claim check\n\n`claim-check --stdin | \u003Cpath>...` (also `node ${CLAUDE_PLUGIN_ROOT}\u002Fhooks\u002Fclaim-check-cli.ts`) reads shipped prose for a narrower defect than structure: a sentence asserting that something of ours **blocks**, **enforces**, **gates**, **denies**, **prevents** or **refuses**, while naming nothing a reader could check.\n\n`--stdin` lints text that is not a file yet — a turn's own output, a commit message, a draft. It takes no paths: one input surface per invocation, so a clean file can never vouch for dirty stdin. Empty input is clean.\n\n| exit | line                        | meaning                                                              |\n| ---- | --------------------------- | -------------------------------------------------------------------- |\n| 0    | `CLAIMS: CLEAN \u003Cn> file(s)` | every claim names an exit code, a citation, or a label               |\n| 0    | `CLAIMS: CLEAN stdin`       | same verdict, reading stdin                                          |\n| 1    | `CLAIMS: FLAGGED \u003Cn>`       | `\u003Cn>` claims name none of those                                      |\n| 64   | —                           | no paths given, a path that does not exist, or `--stdin` with a path |\n\nRead the `CLAIMS:` line before the exit code. A missing `node`, or a `node` older than 22.18, exits 1 with no `CLAIMS:` line, and 1 is also the flagged code.\n\nA claim passes by naming an exit code, carrying a citation, or labelling itself advisory \u002F model-judgment \u002F opt-in \u002F a nag. It decides **shape, never fact**: whether the exit code named is the real one stays a reader's question. That is the mechanical half of a defect class this repo keeps shipping (`RESEARCH.md` F25).\n\nDeliberately narrow. The subject is a backticked name or a definite machinery noun (`the runner`, `this hook`, `the script`, `the gate`, `the check`\u002F`checker`, `the guard`, `the linter`) followed by a finite verb; a verb trailed by a past participle reads as a noun and is left alone. Matching the bare verbs instead flagged 113 lines here, nearly all nouns and adjectives — \"doubt gate\", \"env-gated backstops\", \"the three write-time gates\". The narrowing trades misses for false positives on purpose: a lint that flags honest prose gets deleted, and then it catches nothing.\n","# skill-smith — lint a SKILL.md\n\nA skill lives or dies on its routing and its shape. The script judges the deterministic half — frontmatter, line budget, reference depth — and hands you a checklist for the half it cannot.\n\n## When to use\n\n- Authoring a new skill — run it before calling the skill done.\n- Reviewing or editing an existing `SKILL.md`.\n- After any edit under a `skills\u002F*\u002FSKILL.md` path.\n\n## Run the lint\n\n```bash\n\"${CLAUDE_PLUGIN_ROOT}\"\u002Fbin\u002Flint-skill \u003Cpath-to-SKILL.md>\n```\n\nPass a single `SKILL.md`, or a `skills\u002F` directory to lint every skill under it. Exit 1 when any `FAIL` is present; `WARN` alone exits 0.\n\nWhat it checks, deterministically:\n\n- **name** — present, matches the parent directory, and uses the kebab charset (lowercase \u002F digits \u002F single hyphens, no leading, trailing, or doubled hyphen).\n- **description** — present, ≤ 1024 chars, carries a `Use when` \u002F `Invoke when` trigger clause, and reads third-person (a first-person `I …` is flagged).\n- **body** — under the 500-line budget (a warning fires past 400).\n- **reference depth** — every bundled file (`reference\u002F…`, `scripts\u002F…`) stays one level deep; a file nested deeper is a `WARN`, so the run still exits 0 and the rule is yours to hold.\n\n## The loop\n\nFix the reported `FAIL`s, re-run, repeat — cap at **3 rounds**. Findings still standing after the third round go to the operator as a residual list. The exit criterion is `lint-skill` exiting 0, judged by the script.\n\n`WARN`s exit 0 and are still worth reading — a first-person description or a body creeping toward the budget is cheapest to fix while you are here.\n\n## Manual pass (what the script cannot judge)\n\nThree things stay judgement calls. Before you write, read `reference\u002Fwriting-for-agents.md`; after the lint is clean, read the change against the other two:\n\n- `reference\u002Fwriting-for-agents.md` — the rubric for any document an agent reads: context pointers, the information hierarchy, completion criteria, leading words and pruning. A skill also reads `reference\u002Fskill-mechanics.md`.\n- `reference\u002Fanatomy.md` — the canonical section order and the frontmatter contract. Diff a new skill's shape against it.\n- `reference\u002Ffailure-modes.md` — the six ways a skill rots (premature completion, duplication, sediment, sprawl, no-op, negation). Use it as a read-through checklist.\n\n## Verification\n\nDone = `lint-skill \u003Cpath>` exits 0 **and** you have read the change against all three references. The exit code is the gate; the checklists are the judgement.\n\n## Dossier breadcrumb\n\nIn a repo with a live dossier ledger, record the verdict as one §S line through the dossier plugin's append tooling (the host session reminds when applicable; the first live row is the current dossier). No dossier → skip: this skill has no dossier dependency. After an Edit or Write of a `skills\u002F\u003Cname>\u002FSKILL.md`, whetstone's PostToolUse hook runs the lint without the nesting-depth check and adds its lines as a reminder.\n\n## Claim check\n\n`claim-check --stdin | \u003Cpath>...` (also `node ${CLAUDE_PLUGIN_ROOT}\u002Fhooks\u002Fclaim-check-cli.ts`) reads shipped prose for a narrower defect than structure: a sentence asserting that something of ours **blocks**, **enforces**, **gates**, **denies**, **prevents** or **refuses**, while naming nothing a reader could check.\n\n`--stdin` lints text that is not a file yet — a turn's own output, a commit message, a draft. It takes no paths: one input surface per invocation, so a clean file can never vouch for dirty stdin. Empty input is clean.\n\n| exit | line                        | meaning                                                              |\n| ---- | --------------------------- | -------------------------------------------------------------------- |\n| 0    | `CLAIMS: CLEAN \u003Cn> file(s)` | every claim names an exit code, a citation, or a label               |\n| 0    | `CLAIMS: CLEAN stdin`       | same verdict, reading stdin                                          |\n| 1    | `CLAIMS: FLAGGED \u003Cn>`       | `\u003Cn>` claims name none of those                                      |\n| 64   | —                           | no paths given, a path that does not exist, or `--stdin` with a path |\n\nRead the `CLAIMS:` line before the exit code. A missing `node`, or a `node` older than 22.18, exits 1 with no `CLAIMS:` line, and 1 is also the flagged code.\n\nA claim passes by naming an exit code, carrying a citation, or labelling itself advisory \u002F model-judgment \u002F opt-in \u002F a nag. It decides **shape, never fact**: whether the exit code named is the real one stays a reader's question. That is the mechanical half of a defect class this repo keeps shipping (`RESEARCH.md` F25).\n\nDeliberately narrow. The subject is a backticked name or a definite machinery noun (`the runner`, `this hook`, `the script`, `the gate`, `the check`\u002F`checker`, `the guard`, `the linter`) followed by a finite verb; a verb trailed by a past participle reads as a noun and is left alone. Matching the bare verbs instead flagged 113 lines here, nearly all nouns and adjectives — \"doubt gate\", \"env-gated backstops\", \"the three write-time gates\". The narrowing trades misses for false positives on purpose: a lint that flags honest prose gets deleted, and then it catches nothing.\n",{"name":5,"description":7},"main","cc36ccdbea6f51d75171834269d4c944ea22fbe1","plugins\u002Fwhetstone\u002Fskills\u002Fskill-smith",0,"https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins","https:\u002F\u002Fgithub.com\u002Fraisedadead","https:\u002F\u002Fmrugesh.dev","dad • dev\u002F\u002Fops • open-source","2026-11-12 02:38:04",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add raisedadead\u002Fclaude-code-plugins --skill skill-smith",{"tool":39,"command":40},"bunx","bunx skills add raisedadead\u002Fclaude-code-plugins --skill skill-smith",{"tool":42,"command":43},"pnpm","pnpm dlx skills add raisedadead\u002Fclaude-code-plugins --skill skill-smith","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwhetstone\u002Fskills\u002Fskill-smith\u002FSKILL.md",true,[47,53,57,61,65,71],{"path":48,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":51,"sourceHtmlUrl":52},"reference\u002Fanatomy.md","REFERENCE","参考文档",2435,"https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwhetstone\u002Fskills\u002Fskill-smith\u002Freference\u002Fanatomy.md",{"path":54,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":55,"sourceHtmlUrl":56},"reference\u002Ffailure-modes.md",2205,"https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwhetstone\u002Fskills\u002Fskill-smith\u002Freference\u002Ffailure-modes.md",{"path":58,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":59,"sourceHtmlUrl":60},"reference\u002Fskill-mechanics.md",2681,"https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwhetstone\u002Fskills\u002Fskill-smith\u002Freference\u002Fskill-mechanics.md",{"path":62,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":63,"sourceHtmlUrl":64},"reference\u002Fwriting-for-agents.md",10761,"https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwhetstone\u002Fskills\u002Fskill-smith\u002Freference\u002Fwriting-for-agents.md",{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"scripts\u002Flint-skill-cli.ts","SCRIPT","脚本",2362,"https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwhetstone\u002Fskills\u002Fskill-smith\u002Fscripts\u002Flint-skill-cli.ts",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"scripts\u002Flint-skill.ts",5701,"https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwhetstone\u002Fskills\u002Fskill-smith\u002Fscripts\u002Flint-skill.ts",[76,83],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":19},"01M72WCS4GPRSH73CZR81JB6EP","status","The dossier driver + read-only sit-rep. Default session-open action. Invoke when the user says \"ds:status\", \"ds\", \"dossier status\", \"where are we\", \"sit-rep\", \"what's next\", \"check dossier\", or session-start before any other ds:* verb.","https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fdossier\u002Fskills\u002Fstatus\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"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":86,"categories":87,"keywords":88,"publishedAt":19},"01M72WCPES9DCSYA53FGHN2JHE","new","https:\u002F\u002Fgithub.com\u002Fraisedadead\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fdossier\u002Fskills\u002Fnew\u002FSKILL.md",[],[]]