[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71VAADAPSNQN394XHAFB9TH":3,"skill-same:01M71VAADAPSNQN394XHAFB9TH":69},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M71VAADAPSNQN394XHAFB9TH","eval-skills",null,"Audit all skills in .claude\u002Fskills\u002F for frontmatter completeness, effort level appropriateness, allowed-tools scoping, and content quality. Produces a scored report with effort-level recommendations for each skill. Use when onboarding, reviewing skill quality before shipping, or adding effort fields to an existing skill library.","FlorianBruniaux\u002Fctxharness","FlorianBruniaux","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F3902606?v=4","01M71VA3JB0M2XMP2VHSG5FFBQ","Florian BRUNIAUX","01M71VA3KBBW4EY7T1TRDDQ2ZR",27,"MIT","https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Feval-skills\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"eval skills","eval","completeness","with","Existing","use","for","effort","existing skill","Tools","scoping","frontmatter","library","read","recommendations","audit","skill library","shipping","Bash","when","2026-11-10 13:02:02",false,"---\nname: eval-skills\ndescription: \"Audit all skills in .claude\u002Fskills\u002F for frontmatter completeness, effort level appropriateness, allowed-tools scoping, and content quality. Produces a scored report with effort-level recommendations for each skill. Use when onboarding, reviewing skill quality before shipping, or adding effort fields to an existing skill library.\"\nallowed-tools: Read, Glob, Bash\neffort: medium\n---\n\n# Skill Evaluator\n\nDiscover all skills, score them across 6 criteria, and infer the appropriate `effort` level based on content analysis.\n\n## When to Use\n\n- After adding new skills to ctxharness `.claude\u002Fskills\u002F`\n- Before cutting a release (quality gate)\n- After bulk-importing skills from another project\n- When adding `effort` fields for the first time\n\n## Scoring Criteria (14 pts per skill)\n\n| # | Criterion | Max | What is checked |\n|---|-----------|-----|-----------------|\n| 1 | **name** | 1 | Present, lowercase, hyphens only, matches directory name |\n| 2 | **description** | 2 | Present + has \"Use when\" \u002F trigger phrasing |\n| 3 | **allowed-tools** | 2 | Present + not overly broad (Bash without scoping when read-only) |\n| 4 | **effort** | 3 | Present (1pt) + appropriate for content (2pt based on inference) |\n| 5 | **content structure** | 4 | Has Purpose\u002FWhen section (1), has examples\u002Fusage (1), has clear workflow (1), no placeholder text (1) |\n| 6 | **bonus** | +2 | argument-hint present (1), version\u002Fauthor metadata (1) |\n\n**Thresholds:**\n- ✅ Good: ≥11\u002F14 (≥80%)\n- ⚠️ Needs work: 8–10\u002F14 (60–79%)\n- ❌ Fix: \u003C8\u002F14 (\u003C60%)\n\n## Effort Level Inference\n\n### `low` — Mechanical execution, no design decisions\nSignals: commit, scaffold, generate, format, sync. No sub-agents. Short workflow (\u003C5 steps).\n\n### `medium` — Analysis with bounded scope\nSignals: review, triage, analyze, evaluate (single file or bounded scope). May spawn 1-2 sub-agents with predefined scope.\n\n### `high` — Design decisions, adversarial reasoning, cross-system analysis\nSignals: architect, threat-model, audit (security), orchestrate (multi-agent). Broad tool access. Spawns multiple sub-agents.\n\nIf a skill has `effort:` already set but the inferred level differs, flag it:\n> ⚠️ Effort mismatch: declared `low`, inferred `high`\n\n## Execution Instructions\n\n### Step 1 — Discovery\n\n```bash\nfind .claude\u002Fskills -name \"SKILL.md\" 2>\u002Fdev\u002Fnull\nfind .claude\u002Fskills -maxdepth 1 -name \"*.md\" ! -name \"README*\" 2>\u002Fdev\u002Fnull\n```\n\n### Step 2 — Parse each skill\n\nFor each skill file:\n1. Read the full file\n2. Extract YAML frontmatter\n3. Parse: name, description, allowed-tools, effort, argument-hint\n4. Read body for structure analysis\n\n### Step 3 — Score and infer\n\nApply scoring criteria. Infer effort from content. Compare vs declared effort if set.\n\n### Step 4 — Output report\n\n```\n# Skills Audit — ctxharness\nDate: [today] | Scanned: N skills\n\n## Summary\n| Status | Count |\n|--------|-------|\n| ✅ Good (≥80%) | N |\n| ⚠️ Needs work (60–79%) | N |\n| ❌ Fix (\u003C60%) | N |\n\nEffort coverage: N\u002FN skills have effort field set\n\n---\n\n## Per-Skill Results\n\n### [skill-name] — [score]\u002F14 [✅\u002F⚠️\u002F❌]\n\n| Criterion | Score | Notes |\n|-----------|-------|-------|\n| name | ✅ 1\u002F1 | — |\n| description | ⚠️ 1\u002F2 | Missing \"Use when\" phrasing |\n| effort | ❌ 0\u002F3 | Missing — Recommended: medium |\n```\n\nEnd with a **Fix Summary** — all missing\u002Fmismatched effort fields ready to copy-paste.\n","# Skill Evaluator\n\nDiscover all skills, score them across 6 criteria, and infer the appropriate `effort` level based on content analysis.\n\n## When to Use\n\n- After adding new skills to ctxharness `.claude\u002Fskills\u002F`\n- Before cutting a release (quality gate)\n- After bulk-importing skills from another project\n- When adding `effort` fields for the first time\n\n## Scoring Criteria (14 pts per skill)\n\n| # | Criterion | Max | What is checked |\n|---|-----------|-----|-----------------|\n| 1 | **name** | 1 | Present, lowercase, hyphens only, matches directory name |\n| 2 | **description** | 2 | Present + has \"Use when\" \u002F trigger phrasing |\n| 3 | **allowed-tools** | 2 | Present + not overly broad (Bash without scoping when read-only) |\n| 4 | **effort** | 3 | Present (1pt) + appropriate for content (2pt based on inference) |\n| 5 | **content structure** | 4 | Has Purpose\u002FWhen section (1), has examples\u002Fusage (1), has clear workflow (1), no placeholder text (1) |\n| 6 | **bonus** | +2 | argument-hint present (1), version\u002Fauthor metadata (1) |\n\n**Thresholds:**\n- ✅ Good: ≥11\u002F14 (≥80%)\n- ⚠️ Needs work: 8–10\u002F14 (60–79%)\n- ❌ Fix: \u003C8\u002F14 (\u003C60%)\n\n## Effort Level Inference\n\n### `low` — Mechanical execution, no design decisions\nSignals: commit, scaffold, generate, format, sync. No sub-agents. Short workflow (\u003C5 steps).\n\n### `medium` — Analysis with bounded scope\nSignals: review, triage, analyze, evaluate (single file or bounded scope). May spawn 1-2 sub-agents with predefined scope.\n\n### `high` — Design decisions, adversarial reasoning, cross-system analysis\nSignals: architect, threat-model, audit (security), orchestrate (multi-agent). Broad tool access. Spawns multiple sub-agents.\n\nIf a skill has `effort:` already set but the inferred level differs, flag it:\n> ⚠️ Effort mismatch: declared `low`, inferred `high`\n\n## Execution Instructions\n\n### Step 1 — Discovery\n\n```bash\nfind .claude\u002Fskills -name \"SKILL.md\" 2>\u002Fdev\u002Fnull\nfind .claude\u002Fskills -maxdepth 1 -name \"*.md\" ! -name \"README*\" 2>\u002Fdev\u002Fnull\n```\n\n### Step 2 — Parse each skill\n\nFor each skill file:\n1. Read the full file\n2. Extract YAML frontmatter\n3. Parse: name, description, allowed-tools, effort, argument-hint\n4. Read body for structure analysis\n\n### Step 3 — Score and infer\n\nApply scoring criteria. Infer effort from content. Compare vs declared effort if set.\n\n### Step 4 — Output report\n\n```\n# Skills Audit — ctxharness\nDate: [today] | Scanned: N skills\n\n## Summary\n| Status | Count |\n|--------|-------|\n| ✅ Good (≥80%) | N |\n| ⚠️ Needs work (60–79%) | N |\n| ❌ Fix (\u003C60%) | N |\n\nEffort coverage: N\u002FN skills have effort field set\n\n---\n\n## Per-Skill Results\n\n### [skill-name] — [score]\u002F14 [✅\u002F⚠️\u002F❌]\n\n| Criterion | Score | Notes |\n|-----------|-------|-------|\n| name | ✅ 1\u002F1 | — |\n| description | ⚠️ 1\u002F2 | Missing \"Use when\" phrasing |\n| effort | ❌ 0\u002F3 | Missing — Recommended: medium |\n```\n\nEnd with a **Fix Summary** — all missing\u002Fmismatched effort fields ready to copy-paste.\n",{"name":5,"effort":44,"description":7,"allowed-tools":45},"medium","Read, Glob, Bash","main","3e6c35b1a7f2102b725738506412ea442d0190d2",".claude\u002Fskills\u002Feval-skills",4,"https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness","https:\u002F\u002Fgithub.com\u002FFlorianBruniaux","https:\u002F\u002Fwww.florian.bruniaux.com\u002F","Hands-on Fractional Chief AI Officer. Harness & context engineering. RTK’s first contributor. Claude Code Ultimate Guide author.","2026-10-16 14:43:12",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add FlorianBruniaux\u002Fctxharness --skill eval-skills",{"tool":61,"command":62},"bunx","bunx skills add FlorianBruniaux\u002Fctxharness --skill eval-skills",{"tool":64,"command":65},"pnpm","pnpm dlx skills add FlorianBruniaux\u002Fctxharness --skill eval-skills","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Feval-skills\u002FSKILL.md",true,[],[70,77,89,99,110,120],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":39},"01M71VB808H3VZ0E5BHQC950XR","review","Review safely","https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness\u002Fblob\u002Fmain\u002Fpackages\u002Fcore\u002Fsrc\u002Fagent-config\u002F__tests__\u002Ffixtures\u002Fshared-release\u002Foutputs\u002Fskills\u002Fcommon\u002Freview\u002FSKILL.md",[],[72],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":39},"01M71VB6WXST14H564778MTB6F","claude-helper","Claude-only fixture skill","https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness\u002Fblob\u002Fmain\u002Fpackages\u002Fcore\u002Fsrc\u002Fagent-config\u002F__tests__\u002Ffixtures\u002Fshared-release\u002Foutputs\u002Fskills\u002Fclaude-only\u002Fclaude-helper\u002FSKILL.md",[],[84,85,86,87,88],"claude helper","helper","only","fixture skill","fixture",{"skillNo":90,"name":72,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":39},"01M71VB4R1CQS9NJ64CJYKV18A","Review a change for correctness and missing tests.","https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness\u002Fblob\u002Fmain\u002Fpackages\u002Fcore\u002Fsrc\u002Fagent-config\u002F__tests__\u002Ffixtures\u002Fscanner-project\u002F.claude\u002Fskills\u002Freview\u002FSKILL.md",[],[72,95,96,97,98,25],"change","tests","missing","correctness",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":39},"01M71VB2JXKNY5YF92HW85GRZ1","parent-reference","Demonstrate a parent traversal reference escape.","https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness\u002Fblob\u002Fmain\u002Fpackages\u002Fcore\u002Fsrc\u002Fagent-config\u002F__tests__\u002Ffixtures\u002Fscanner-project\u002F.claude\u002Fskills\u002Fparent-reference\u002FSKILL.md",[],[106,107,108,109],"parent reference","parent","reference","escape",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":39},"01M71VB05TGB385F92FX3KB2TY","broken-reference","Demonstrate a missing local reference.","https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness\u002Fblob\u002Fmain\u002Fpackages\u002Fcore\u002Fsrc\u002Fagent-config\u002F__tests__\u002Ffixtures\u002Fscanner-project\u002F.claude\u002Fskills\u002Fbroken-reference\u002FSKILL.md",[],[117,108,118,97,119],"broken reference","broken","local",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":39},"01M71VAYCTGX4S4D870FZQPP62","absolute-reference","Demonstrate an absolute reference escape.","https:\u002F\u002Fgithub.com\u002FFlorianBruniaux\u002Fctxharness\u002Fblob\u002Fmain\u002Fpackages\u002Fcore\u002Fsrc\u002Fagent-config\u002F__tests__\u002Ffixtures\u002Fscanner-project\u002F.claude\u002Fskills\u002Fabsolute-reference\u002FSKILL.md",[],[108,127,109],"absolute reference"]