[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RSRC1R84EPSQ07X66CXJ0W":3,"skill-same:01M6RSRC1R84EPSQ07X66CXJ0W":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6RSRC1R84EPSQ07X66CXJ0W","caveman-review",null,"Ultra-compressed code review comments. Cuts noise from PR feedback while preserving the actionable signal. Each comment is one line: location, problem, fix. Use when user says \"review this PR\", \"code review\", \"review the diff\", \"\u002Freview\", or invokes \u002Fcaveman-review. Auto-triggers when reviewing pull requests.","az9713\u002Fcaveman-tutorial","az9713","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F565379?v=4","01M6RSN0FC5PEEB11N9FESSN63","01M6RSN0KGXF86PTGPC246BF2D",1,"MIT","https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial\u002Fblob\u002Fmain\u002Fskills\u002Fcaveman-review\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"review","caveman","caveman review","when","code review","signal","comments","actionable","problem","triggers","auto","diff","use","fix","feedback","pr feedback","pull","code","pr","pull requests","2026-11-10 10:12:30",false,"---\nname: caveman-review\ndescription: >\n  Ultra-compressed code review comments. Cuts noise from PR feedback while preserving\n  the actionable signal. Each comment is one line: location, problem, fix. Use when user\n  says \"review this PR\", \"code review\", \"review the diff\", \"\u002Freview\", or invokes\n  \u002Fcaveman-review. Auto-triggers when reviewing pull requests.\n---\n\nWrite code review comments terse and actionable. One line per finding. Location, problem, fix. No throat-clearing.\n\n## Rules\n\n**Format:** `L\u003Cline>: \u003Cproblem>. \u003Cfix>.` — or `\u003Cfile>:L\u003Cline>: ...` when reviewing multi-file diffs.\n\n**Severity prefix (optional, when mixed):**\n- `? bug:` — broken behavior, will cause incident\n- `? risk:` — works but fragile (race, missing null check, swallowed error)\n- `? nit:` — style, naming, micro-optim. Author can ignore\n- `❓ q:` — genuine question, not a suggestion\n\n**Drop:**\n- \"I noticed that...\", \"It seems like...\", \"You might want to consider...\"\n- \"This is just a suggestion but...\" — use `nit:` instead\n- \"Great work!\", \"Looks good overall but...\" — say it once at the top, not per comment\n- Restating what the line does — the reviewer can read the diff\n- Hedging (\"perhaps\", \"maybe\", \"I think\") — if unsure use `q:`\n\n**Keep:**\n- Exact line numbers\n- Exact symbol\u002Ffunction\u002Fvariable names in backticks\n- Concrete fix, not \"consider refactoring this\"\n- The *why* if the fix isn't obvious from the problem statement\n\n## Examples\n\n❌ \"I noticed that on line 42 you're not checking if the user object is null before accessing the email property. This could potentially cause a crash if the user is not found in the database. You might want to add a null check here.\"\n\n✅ `L42: ? bug: user can be null after .find(). Add guard before .email.`\n\n❌ \"It looks like this function is doing a lot of things and might benefit from being broken up into smaller functions for readability.\"\n\n✅ `L88-140: ? nit: 50-line fn does 4 things. Extract validate\u002Fnormalize\u002Fpersist.`\n\n❌ \"Have you considered what happens if the API returns a 429? I think we should probably handle that case.\"\n\n✅ `L23: ? risk: no retry on 429. Wrap in withBackoff(3).`\n\n## Auto-Clarity\n\nDrop terse mode for: security findings (CVE-class bugs need full explanation + reference), architectural disagreements (need rationale, not just a one-liner), and onboarding contexts where the author is new and needs the \"why\". In those cases write a normal paragraph, then resume terse for the rest.\n\n## Boundaries\n\nReviews only — does not write the code fix, does not approve\u002Frequest-changes, does not run linters. Output the comment(s) ready to paste into the PR. \"stop caveman-review\" or \"normal mode\": revert to verbose review style.","Write code review comments terse and actionable. One line per finding. Location, problem, fix. No throat-clearing.\n\n## Rules\n\n**Format:** `L\u003Cline>: \u003Cproblem>. \u003Cfix>.` — or `\u003Cfile>:L\u003Cline>: ...` when reviewing multi-file diffs.\n\n**Severity prefix (optional, when mixed):**\n- `? bug:` — broken behavior, will cause incident\n- `? risk:` — works but fragile (race, missing null check, swallowed error)\n- `? nit:` — style, naming, micro-optim. Author can ignore\n- `❓ q:` — genuine question, not a suggestion\n\n**Drop:**\n- \"I noticed that...\", \"It seems like...\", \"You might want to consider...\"\n- \"This is just a suggestion but...\" — use `nit:` instead\n- \"Great work!\", \"Looks good overall but...\" — say it once at the top, not per comment\n- Restating what the line does — the reviewer can read the diff\n- Hedging (\"perhaps\", \"maybe\", \"I think\") — if unsure use `q:`\n\n**Keep:**\n- Exact line numbers\n- Exact symbol\u002Ffunction\u002Fvariable names in backticks\n- Concrete fix, not \"consider refactoring this\"\n- The *why* if the fix isn't obvious from the problem statement\n\n## Examples\n\n❌ \"I noticed that on line 42 you're not checking if the user object is null before accessing the email property. This could potentially cause a crash if the user is not found in the database. You might want to add a null check here.\"\n\n✅ `L42: ? bug: user can be null after .find(). Add guard before .email.`\n\n❌ \"It looks like this function is doing a lot of things and might benefit from being broken up into smaller functions for readability.\"\n\n✅ `L88-140: ? nit: 50-line fn does 4 things. Extract validate\u002Fnormalize\u002Fpersist.`\n\n❌ \"Have you considered what happens if the API returns a 429? I think we should probably handle that case.\"\n\n✅ `L23: ? risk: no retry on 429. Wrap in withBackoff(3).`\n\n## Auto-Clarity\n\nDrop terse mode for: security findings (CVE-class bugs need full explanation + reference), architectural disagreements (need rationale, not just a one-liner), and onboarding contexts where the author is new and needs the \"why\". In those cases write a normal paragraph, then resume terse for the rest.\n\n## Boundaries\n\nReviews only — does not write the code fix, does not approve\u002Frequest-changes, does not run linters. Output the comment(s) ready to paste into the PR. \"stop caveman-review\" or \"normal mode\": revert to verbose review style.",{"name":5,"description":7},"main","d2eaee2857f8a2f7991cc1cbe21c10e27c2d3927","skills\u002Fcaveman-review",0,"https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial","https:\u002F\u002Fgithub.com\u002Faz9713","2026-04-13 04:56:48",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add az9713\u002Fcaveman-tutorial --skill caveman-review",{"tool":61,"command":62},"bunx","bunx skills add az9713\u002Fcaveman-tutorial --skill caveman-review",{"tool":64,"command":65},"pnpm","pnpm dlx skills add az9713\u002Fcaveman-tutorial --skill caveman-review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial\u002Fblob\u002Fmain\u002Fskills\u002Fcaveman-review\u002FSKILL.md",true,[],[70,76,97,117,139,158],{"skillNo":71,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":43},"01M6RSRN35QAKPCMBVYAAF7CZQ","compress","https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial\u002Fblob\u002Fmain\u002Fskills\u002Fcompress\u002FSKILL.md",[],[72],{"skillNo":77,"name":24,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":43},"01M6RSRGNMWW3GVPMHZKS9JX3M","Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra, wenyan-lite, wenyan-full, wenyan-ultra. Use when user says \"caveman mode\", \"talk like caveman\", \"use caveman\", \"less tokens\", \"be brief\", or invokes \u002Fcaveman. Also auto-triggers when token efficiency is requested.","https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial\u002Fblob\u002Fmain\u002Fskills\u002Fcaveman\u002FSKILL.md",[],[24,82,26,83,84,85,86,87,88,89,32,90,91,92,33,35,93,94,95,96],"tokens","Caveman Mode","token efficiency","accuracy","ultra","mode","usage","intensity","token","full","default","user","technical","brief","communication",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":43},"01M6RSQHPSC3Q0DSX8RHFAWG6R","caveman-help","Quick-reference card for all caveman modes, skills, and commands. One-shot display, not a persistent mode. Trigger: \u002Fcaveman-help, \"caveman help\", \"what caveman commands\", \"how do I use caveman\".","https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial\u002Fblob\u002Fmain\u002Fskills\u002Fcaveman-help\u002FSKILL.md",[],[104,105,24,35,106,107,87,108,109,110,111,112,113,114,115,116],"caveman help","help","for","display","quick","card","trigger","commands","quick-reference","do","reference","modes","how",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":43},"01M6RSQCAMX4TNK3N94EZR31H8","caveman-commit","Ultra-compressed commit message generator. Cuts noise from commit messages while preserving intent and reasoning. Conventional Commits format. Subject ≤50 chars, body only when \"why\" isn't obvious. Use when user says \"write a commit\", \"commit message\", \"generate commit\", \"\u002Fcommit\", or invokes \u002Fcaveman-commit. Auto-triggers when staging changes.","https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial\u002Fblob\u002Fmain\u002Fskills\u002Fcaveman-commit\u002FSKILL.md",[],[124,24,125,26,126,127,32,128,129,130,131,132,33,35,133,134,135,136,137,138],"caveman commit","commit","changes","generator","message","intent","conventional commits","generate","only","write","format","commits","why","messages","commit message",{"skillNo":140,"name":72,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":43},"01M6RSQ7YFFCRXVYSBDK00NJB1","Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: \u002Fcaveman:compress \u003Cfilepath> or \"compress memory file\"","https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial\u002Fblob\u002Fmain\u002Fplugins\u002Fcaveman\u002Fskills\u002Fcompress\u002FSKILL.md",[],[72,24,145,146,147,94,134,148,149,150,40,151,152,153,154,110,155,82,156,157],"language","files","version","preferences","backup","file","natural language","memory","saved","input","as","human","structure",{"skillNo":159,"name":24,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":43},"01M6RSPH4GK6EA0JNAWMKKYBCA","https:\u002F\u002Fgithub.com\u002Faz9713\u002Fcaveman-tutorial\u002Fblob\u002Fmain\u002Fplugins\u002Fcaveman\u002Fskills\u002Fcaveman\u002FSKILL.md",[],[24,94,93,35,96,95,90,26,83,84,85,86,87,88,89,32,33,82,92,91]]