[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71F9A6KV7YBDECC7S1F9S8Y":3,"skill-same:01M71F9A6KV7YBDECC7S1F9S8Y":64},{"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":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M71F9A6KV7YBDECC7S1F9S8Y","caveman-commit",null,"Use when the user asks for a commit message, wants a Conventional Commit, or wants a terse commit subject that fits in fifty characters and focuses on why over what.","Wizarck\u002Fai-playbook","Wizarck","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F23051550?v=4","01M71B3AAVR67GRWFV5ZXXZP31","arturo6ramirez","01M71F5FHXDSX3G2F52R1YS77J",6,"MIT","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fcaveman-commit\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32],"caveman","caveman commit","commit","characters","message","for","why","conventional commit","playbook","use","commit message","when","terse","user","2026-11-10 10:12:30",false,"---\nname: caveman-commit\ndescription: Use when the user asks for a commit message, wants a Conventional Commit, or wants a terse commit subject that fits in fifty characters and focuses on why over what.\nlicense: MIT\nmetadata:\n  author: ai-playbook (ported from JuliusBrussee\u002Fcaveman, MIT)\n  version: \"1.0\"\n---\n\n# caveman-commit — terse Conventional Commit messages\n\nWrite commit messages that are short, conventional, and focused on intent.\n\n## When to fire\n\nUser intent triggers (any of):\n- \"\u002Fcaveman-commit\"\n- \"write the commit message\", \"draft a commit\", \"commit this\"\n- \"give me a Conventional Commit\"\n\n## Output contract\n\nAlways emit a Conventional Commit. Shape:\n\n```\n\u003Ctype>(\u003Cscope>): \u003Csubject>\n\n\u003Cbody — optional, only if subject does not capture the why>\n```\n\nRules:\n- `\u003Ctype>` ∈ `feat` | `fix` | `refactor` | `perf` | `docs` | `test` | `chore` | `build` | `ci` | `style`.\n- `\u003Cscope>` ≤ 14 chars, kebab-case, optional. Drop the parentheses if no scope.\n- `\u003Csubject>` ≤ 50 chars, lowercase, no trailing period. Imperative voice (\"add\", not \"added\"\u002F\"adds\").\n- `\u003Cbody>` only when the subject cannot fit the why. Wrap at 72 chars. Caveman style: drop articles, fragments OK.\n- No \"Generated with Claude\" footer unless the user explicitly asks for it.\n- No emoji in subject. Body may use them sparingly if the user's repo style allows.\n\n## Steps\n\n1. **Read the diff.** Run `git diff --cached` (staged) or `git diff` (unstaged) — whichever the user pointed at. If both are empty, refuse with `Nothing staged or modified to commit.`\n\n2. **Identify intent.** What is the user trying to accomplish? Look at:\n   - Added\u002Fremoved lines, not just file count.\n   - Renamed identifiers vs new logic vs deleted code.\n   - Whether tests changed alongside production code.\n\n3. **Pick the type.**\n   - New user-visible behavior → `feat`.\n   - Bug fix → `fix`.\n   - Internal restructure, no behavior change → `refactor`.\n   - Performance improvement → `perf`.\n   - Documentation only → `docs`.\n   - Tests only → `test`.\n   - Build\u002FCI\u002Fdeps → `build`\u002F`ci`\u002F`chore`.\n\n4. **Pick the scope.** Usually a directory or module name from the changed paths. Drop if scope spans multiple unrelated areas.\n\n5. **Write the subject — why over what.**\n   - Bad: `fix(auth): change `\u003C` to `\u003C=` in token expiry check`\n   - Good: `fix(auth): close one-second token expiry gap`\n   - Bad: `feat: add new endpoint`\n   - Good: `feat(api): support batch user lookup`\n\n6. **Add a body only if needed.** If the subject explains the why, skip the body. Otherwise add a 1-2 sentence caveman-style paragraph.\n\n## Trust boundary\n\n- Never commit the message. The skill drafts it; the user runs `git commit`.\n- Never include secrets, tokens, file contents from `.env`, or large diffs in the body.\n- If the diff is empty, refuse — do not invent intent.\n\n## Examples\n\n```\nfeat(toggle): per-project caveman state at .ai-playbook\u002Fcaveman.json\n```\n\n```\nfix(mcp): guard against missing caveman-shrink binary\n\nnpx caveman-shrink absent on offline machines. Wrap call in\ntry\u002Fexcept, warn once, fall through to un-wrapped command.\n```\n\n```\nrefactor(scripts): single source of truth for skill descriptions\n```\n\n## See also\n\n- [docs\u002Frules\u002Ferror-message-standard.rule.md](..\u002F..\u002Fdocs\u002Frules\u002Ferror-message-standard.rule.md) — verdict + commit conventions on this repo.\n- [skills\u002Fcaveman\u002FSKILL.md](..\u002Fcaveman\u002FSKILL.md) — base caveman ruleset.\n","# caveman-commit — terse Conventional Commit messages\n\nWrite commit messages that are short, conventional, and focused on intent.\n\n## When to fire\n\nUser intent triggers (any of):\n- \"\u002Fcaveman-commit\"\n- \"write the commit message\", \"draft a commit\", \"commit this\"\n- \"give me a Conventional Commit\"\n\n## Output contract\n\nAlways emit a Conventional Commit. Shape:\n\n```\n\u003Ctype>(\u003Cscope>): \u003Csubject>\n\n\u003Cbody — optional, only if subject does not capture the why>\n```\n\nRules:\n- `\u003Ctype>` ∈ `feat` | `fix` | `refactor` | `perf` | `docs` | `test` | `chore` | `build` | `ci` | `style`.\n- `\u003Cscope>` ≤ 14 chars, kebab-case, optional. Drop the parentheses if no scope.\n- `\u003Csubject>` ≤ 50 chars, lowercase, no trailing period. Imperative voice (\"add\", not \"added\"\u002F\"adds\").\n- `\u003Cbody>` only when the subject cannot fit the why. Wrap at 72 chars. Caveman style: drop articles, fragments OK.\n- No \"Generated with Claude\" footer unless the user explicitly asks for it.\n- No emoji in subject. Body may use them sparingly if the user's repo style allows.\n\n## Steps\n\n1. **Read the diff.** Run `git diff --cached` (staged) or `git diff` (unstaged) — whichever the user pointed at. If both are empty, refuse with `Nothing staged or modified to commit.`\n\n2. **Identify intent.** What is the user trying to accomplish? Look at:\n   - Added\u002Fremoved lines, not just file count.\n   - Renamed identifiers vs new logic vs deleted code.\n   - Whether tests changed alongside production code.\n\n3. **Pick the type.**\n   - New user-visible behavior → `feat`.\n   - Bug fix → `fix`.\n   - Internal restructure, no behavior change → `refactor`.\n   - Performance improvement → `perf`.\n   - Documentation only → `docs`.\n   - Tests only → `test`.\n   - Build\u002FCI\u002Fdeps → `build`\u002F`ci`\u002F`chore`.\n\n4. **Pick the scope.** Usually a directory or module name from the changed paths. Drop if scope spans multiple unrelated areas.\n\n5. **Write the subject — why over what.**\n   - Bad: `fix(auth): change `\u003C` to `\u003C=` in token expiry check`\n   - Good: `fix(auth): close one-second token expiry gap`\n   - Bad: `feat: add new endpoint`\n   - Good: `feat(api): support batch user lookup`\n\n6. **Add a body only if needed.** If the subject explains the why, skip the body. Otherwise add a 1-2 sentence caveman-style paragraph.\n\n## Trust boundary\n\n- Never commit the message. The skill drafts it; the user runs `git commit`.\n- Never include secrets, tokens, file contents from `.env`, or large diffs in the body.\n- If the diff is empty, refuse — do not invent intent.\n\n## Examples\n\n```\nfeat(toggle): per-project caveman state at .ai-playbook\u002Fcaveman.json\n```\n\n```\nfix(mcp): guard against missing caveman-shrink binary\n\nnpx caveman-shrink absent on offline machines. Wrap call in\ntry\u002Fexcept, warn once, fall through to un-wrapped command.\n```\n\n```\nrefactor(scripts): single source of truth for skill descriptions\n```\n\n## See also\n\n- [docs\u002Frules\u002Ferror-message-standard.rule.md](..\u002F..\u002Fdocs\u002Frules\u002Ferror-message-standard.rule.md) — verdict + commit conventions on this repo.\n- [skills\u002Fcaveman\u002FSKILL.md](..\u002Fcaveman\u002FSKILL.md) — base caveman ruleset.\n",{"name":5,"license":15,"metadata":38,"description":7},{"author":39,"version":40},"ai-playbook (ported from JuliusBrussee\u002Fcaveman, MIT)","1.0","main","08fe7aa0f06bc1a3f592ec82360e46b854846968","skills\u002Fcaveman-commit",1,"https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook","https:\u002F\u002Fgithub.com\u002FWizarck","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Framirezarturo\u002F","Geek by birth, with not much to say but plenty to talk about.","2026-11-09 19:34:21",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add Wizarck\u002Fai-playbook --skill caveman-commit",{"tool":56,"command":57},"bunx","bunx skills add Wizarck\u002Fai-playbook --skill caveman-commit",{"tool":59,"command":60},"pnpm","pnpm dlx skills add Wizarck\u002Fai-playbook --skill caveman-commit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fcaveman-commit\u002FSKILL.md",true,[],[65,88,107,131,150,163],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":33},"01M71FATTWS9W3BME3S94SA1QR","sweep","Use when the user wants to find code that has quietly stopped being used — types \u002Fsweep, asks for a \"dead code sweep\", \"repo entropy\", \"what can we delete\", \"orphan files\", \"unused code\", or asks to review a sweep ledger. Adjudicates candidates a deterministic scanner already produced; it never deletes anything and never re-derives findings from raw source. Pairs with ponytail, which gates what gets written rather than what rots.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fsweep\u002FSKILL.md",[],[67,72,73,74,75,76,24,77,78,79,80,81,82,28,30,83,84,85,86,87],"deterministic","which","never","entropy","types","repo","re","ponytail","orphan","files","unused","code","can","gates","review","candidates",{"skillNo":89,"name":79,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":33},"01M71FAQKVDA209G7G5NMY9H1E","Use when the user wants the laziest solution that actually works — types \u002Fponytail, says \"be lazy\", \"lazy mode\", \"simplest solution\", \"minimal solution\", \"yagni\", \"do less\", or \"shortest path\", or complains about over-engineering, bloat, boilerplate, or unnecessary dependencies. Supports intensity levels lite, full, ultra (default). Pairs with caveman, which compresses prose, not code.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fponytail\u002FSKILL.md",[],[79,94,95,73,96,76,97,98,99,100,28,30,83,101,102,103,104,105,27,106],"notice","do","lazy","mode","default","minimal","intensity","with","yagni","about","dependencies","2026","boilerplate",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":118,"publishedAt":33},"01M71FAMS250NKNF1PET9KNBBV","ponytail-review","Use when the user wants a code review focused exclusively on over-engineering — says \"review for over-engineering\", \"what can we delete\", \"is this over-engineered\", \"simplify review\", or invokes \u002Fponytail-review. Complements correctness\u002Fsecurity review; this one only hunts complexity in the current diff. Gated by the ponytail review_ponytail component.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fponytail-review\u002FSKILL.md",[113],{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[119,79,86,120,121,24,122,123,28,30,124,125,83,126,84,127,128,129,130,27],"ponytail review","complexity","diff","code review","only","simplify","correctness","one","delete","component","security review","gated",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":33},"01M71FAG53ZPCSWE272P6S9JFN","ponytail-debt","Use when the user wants to harvest every `ponytail:` comment in the codebase into a tracked debt ledger — says \"ponytail debt\", \"\u002Fponytail-debt\", \"what did ponytail defer\", \"list the shortcuts\", \"ponytail ledger\", or \"what did we mark to do later\". One-shot report, changes nothing. Gated by the ponytail debt_ponytail component.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fponytail-debt\u002FSKILL.md",[],[138,79,139,140,95,141,142,128,143,144,130,145,146,27,147,148,28,30,149,126],"ponytail debt","debt","shortcuts","mark","to do","changes","later","report","codebase","harvest","list","ledger",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":33},"01M71FACJW88WCS2JGX3MQ3KV9","ponytail-audit","Use when the user wants a whole-repo audit for over-engineering — says \"audit this codebase\", \"audit for over-engineering\", \"what can I delete from this repo\", \"find bloat\", or invokes \u002Fponytail-audit. Like ponytail-review but scans the entire tree, not a diff. One-shot report, applies no fixes. Gated by the ponytail audit_ponytail component.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fponytail-audit\u002FSKILL.md",[],[157,79,158,159,121,160,24,77,28,30,161,126,84,86,127,128,130,162,145,146],"ponytail audit","audit","tree","fixes","entire","find",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":33},"01M71FA9THHXDX79PQTJ9CZX9E","openspec-propose","Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fopenspec-propose\u002FSKILL.md",[],[170,171,101,172,173,174,175,176,177,24,178,179,180,181,182,183,28,30,184,185],"openspec","openspec propose","ready","proposal","change","cli","get","build","complete","design","new","implementation","generated","describe","artifacts","tasks"]