Skill Review
One skill, two modes. Use --scope=all for an ecosystem-wide bulk scan; use --scope=<skill-name> for a thorough single-skill deep dive. Both modes produce a structured markdown report plus a JSON sidecar that skill-update can consume to generate fix plans.
When to Use
- Periodic health check across the skill ecosystem (
--scope=all)
- After bulk edits or a new batch of skills lands (
--scope=all)
- Reviewing a single skill before publishing (
--scope=<name>)
- Investigating why one skill won't trigger or produces poor output (
--scope=<name>)
- Quality-gating a skill before it enters the ecosystem (
--scope=<name>)
Inputs
The skill takes a single positional argument:
all — bulk scan across skills/**/SKILL.md
<skill-name> — deep dive on skills/**/<skill-name>/SKILL.md
Optional follow-on context:
- Focus — narrow the run to specific checks ("just ownership", "just descriptions")
- Why-now — what prompted the review (e.g., "it never triggers", "outputs are wrong")
Process
Phase 0: Parse the Argument
- Read the argument. If it equals
all (case-insensitive), enter Mode A.
- Otherwise treat the argument as a skill name. Glob for
skills/**/<arg>/SKILL.md. If exactly one match, enter Mode B. If zero matches, return a list of fuzzy candidates and stop. If multiple matches, ask the user to disambiguate.
Mode A — Bulk Scan (--scope=all)
Optimize for speed. Score quickly, flag issues, move on. Use subagents to parallelize check categories where available.
A1. Discovery
- Glob
skills/**/SKILL.md
- Parse frontmatter from each
- Build a skill inventory table with columns: Skill, Category, Version, Description Length, Body Lines, Refs Count
A2. Bulk Checks
Run these check categories. Full checklist lives in references/audit-checklist.md.
- Frontmatter consistency — required fields present, name matches directory, version is valid semver, description starts with action verb and is ≤200 chars
- Spec compliance (FAIL) — no
< or > in frontmatter field values (security rule); description ≤1024 chars (hard ceiling)
- Spec compliance (WARN) — reserved-prefix name (
claude-* / anthropic-*). Acceptable as a documented exception when the skill targets the corresponding Anthropic product. Verify the documented exception exists in the skill body.
- Tool field naming —
allowed-tools (hyphen) is canonical; allowed_tools (underscore) accepted as deprecated alias (warn but don't fail)
- Ownership conflict detection — collect every
owns.directories and owns.patterns across agent roles. Flag overlaps. Validate against the v1.1 resolved conflicts table in frontmatter-spec.md
- Description quality scoring — has action verb, ≥3 trigger contexts, keyword variants, states exclusions if ambiguous, estimated "pushiness" (low/medium/high)
- Progressive disclosure — SKILL.md body line + word count, references linked from body, body >5,000 words OR >500 lines flagged (soft warning), references >300 lines without TOC flagged
- Cross-skill consistency —
composes_with and spawned_by point to real skills, no circular composes_with chains, no orphan reference files
- Coverage gaps — compare inventory against
docs/architecture.md, CLAUDE.md, and the orchestrator's File Ownership Map; flag roles or workflows referenced but not implemented
A3. Triage
Highlight the top 3–5 most impactful issues. Suggest which skills warrant a single-skill follow-up (re-run with --scope=<name>). Note which issues skill-update can address directly.
Mode B — Deep Dive (--scope=<skill-name>)
Take time. Read every file in the skill's directory tree. Score each rubric dimension 1–5 with specific evidence.
B1. Structural Analysis
Read SKILL.md and every file in references/. Score these dimensions against references/deep-review-rubric.md:
- Frontmatter compliance — required fields, types, semver, optional fields used appropriately
- Description quality — action verb, trigger contexts, keyword variants, length, "pushiness"
- Progressive disclosure — body ≤5,000 words (soft warning past 500 lines), references used appropriately, clear pointers
- Instruction clarity — imperative voice, logical flow, no ambiguity, explains "why" not just "what"
- Coordination — ownership declarations,
composes_with accuracy, no overlaps
- Completeness — referenced files exist, no dead links, validation checklists where needed
- Anti-patterns — see the anti-pattern checklist in
references/audit-checklist.md, including the model-adaptation checks (reasoning-extraction refusal risk, prior-model over-prescription) that flag a skill written for a superseded model, and the writing-craft checks (leading-word anchor, no-op-sentence deletion, positive-prompting lint). When a skill scores poorly there or "worked before and got worse," hand off to the model-adaptation skill's migration audit.
B2. Live Trigger Testing
First, check the skill carries a triggering test — at least one example phrasing that must activate it (ideally one near-miss that must not). Flag its absence as an issue. Then verify it actually holds.
If /skill-creator is available, use its eval infrastructure to test whether the skill actually triggers:
- Generate 3–5 realistic prompts that should trigger this skill
- Generate 2–3 near-miss prompts that should not trigger it
- Run trigger evaluation via skill-creator's description optimization tooling
- Report should-trigger hit rate and false-positive rate. List any problem triggers.
If /skill-creator is unavailable, skip this phase and note it in the report.
B3. Output Quality Sampling
For skills that produce structured output (reports, files, configs):
- Pick 2 representative test prompts
- Run them through the skill (or skill-creator's test harness)
- Compare actual output against the skill's stated format
- Note gaps between promised and actual output
Optionally (recommended for non-trivial skills), run one prompt with and without the skill and compare — if the skill doesn't measurably improve the output, flag that it may not earn its context cost.
Phase 4: Report
Both modes write the report following references/report-format.md. Output two artifacts:
skill-review-report.md — structured markdown for humans
skill-review-report.json — sidecar consumable by skill-update
In Mode A, save to the repo root or a user-specified path. In Mode B, save to {skill-path}/skill-review-report.{md,json}.
Output Handoff
The report is designed to feed directly into skill-update, which consumes the JSON sidecar and produces a prioritized edit plan. After writing the report, tell the user:
"Review complete. [X] issues found. Feed the JSON sidecar into /skill-update to generate a fix plan, or re-run me with --scope=<skill-name> for a deeper look at [specific skills]."
Guidelines
- Be constructive — every issue gets a concrete suggestion
- Score honestly but explain reasoning, especially for low scores. Don't nitpick style if the skill is functionally sound
- Weight trigger testing heavily — a skill that doesn't trigger is useless regardless of how well-written it is
- When recommending fixes, expect them applied one focused change at a time with re-validation between — don't bundle many unrelated edits into one pass
- In Mode A, don't read reference file contents unless checking for orphans or broken links. Frontmatter + body line count is enough for most checks
- In Mode B, if the user supplied context (e.g., "it never triggers"), lead with that complaint
- If scope is filtered in Mode A, still validate cross-skill references against the full inventory
- Use subagents to parallelize independent check categories when available
Data source
Before recommending changes, consult real usage signal: run
scripts/skill-health.sh report --json (P2-C skill-health telemetry). It returns
per-skill total invocations, 7-day/30-day success rates, a declining flag, and
version drift (recorded vs current SKILL.md frontmatter version). The math is
deterministic in code, never a prompt. Treat the signal as coarse and
best-effort: the emitter can only attribute a skill on a Skill-tool call and
records outcome:unknown, so a skill reported as no-data means "unobserved",
not "broken". Use it to prioritize which skills to deep-review and to back up
declining-quality verdicts — never as the sole basis for a low score. See
contracts/installer/skill-health.md.
Reference Files
references/audit-checklist.md — checklist of every per-skill and ecosystem-level check, plus the anti-pattern list
references/deep-review-rubric.md — 1–5 scoring criteria for each of the seven deep-review dimensions, with verdict thresholds (SHIP / NEEDS WORK / MAJOR REWORK)
references/report-format.md — exact shape of the markdown report and JSON sidecar
1---2name: skill-review3description: Review skills for quality, consistency, triggering accuracy, and adherence to the 5000-word / 500-line body guideline. Two modes: 'all' (bulk ecosystem-wide scan for ownership conflicts, length outliers, weak triggers, dead xrefs) or a single skill name (deep dive on description quality, body structure, anti-pattern naming, cross-references). Outputs a structured markdown report plus JSON sidecar consumable by skill-update. Trigger on "audit skills", "review this skill", "health check skills", "bulk review", "deep review", "what needs fixing".4---56# Skill Review78One skill, two modes. Use `--scope=all` for an ecosystem-wide bulk scan; use `--scope=<skill-name>` for a thorough single-skill deep dive. Both modes produce a structured markdown report plus a JSON sidecar that `skill-update` can consume to generate fix plans.910## When to Use1112- Periodic health check across the skill ecosystem (`--scope=all`)13- After bulk edits or a new batch of skills lands (`--scope=all`)14- Reviewing a single skill before publishing (`--scope=<name>`)15- Investigating why one skill won't trigger or produces poor output (`--scope=<name>`)16- Quality-gating a skill before it enters the ecosystem (`--scope=<name>`)1718## Inputs1920The skill takes a single positional argument:2122- `all` — bulk scan across `skills/**/SKILL.md`23- `<skill-name>` — deep dive on `skills/**/<skill-name>/SKILL.md`2425Optional follow-on context:2627- **Focus** — narrow the run to specific checks ("just ownership", "just descriptions")28- **Why-now** — what prompted the review (e.g., "it never triggers", "outputs are wrong")2930## Process3132### Phase 0: Parse the Argument33341. Read the argument. If it equals `all` (case-insensitive), enter Mode A.352. Otherwise treat the argument as a skill name. Glob for `skills/**/<arg>/SKILL.md`. If exactly one match, enter Mode B. If zero matches, return a list of fuzzy candidates and stop. If multiple matches, ask the user to disambiguate.3637### Mode A — Bulk Scan (`--scope=all`)3839Optimize for speed. Score quickly, flag issues, move on. Use subagents to parallelize check categories where available.4041#### A1. Discovery42431. Glob `skills/**/SKILL.md`442. Parse frontmatter from each453. Build a skill inventory table with columns: Skill, Category, Version, Description Length, Body Lines, Refs Count4647#### A2. Bulk Checks4849Run these check categories. Full checklist lives in `references/audit-checklist.md`.5051- **Frontmatter consistency** — required fields present, name matches directory, version is valid semver, description starts with action verb and is ≤200 chars52- **Spec compliance (FAIL)** — no `<` or `>` in frontmatter field values (security rule); description ≤1024 chars (hard ceiling)53- **Spec compliance (WARN)** — reserved-prefix name (`claude-*` / `anthropic-*`). Acceptable as a documented exception when the skill targets the corresponding Anthropic product. Verify the documented exception exists in the skill body.54- **Tool field naming** — `allowed-tools` (hyphen) is canonical; `allowed_tools` (underscore) accepted as deprecated alias (warn but don't fail)55- **Ownership conflict detection** — collect every `owns.directories` and `owns.patterns` across agent roles. Flag overlaps. Validate against the v1.1 resolved conflicts table in `frontmatter-spec.md`56- **Description quality scoring** — has action verb, ≥3 trigger contexts, keyword variants, states exclusions if ambiguous, estimated "pushiness" (low/medium/high)57- **Progressive disclosure** — SKILL.md body line + word count, references linked from body, body >5,000 words OR >500 lines flagged (soft warning), references >300 lines without TOC flagged58- **Cross-skill consistency** — `composes_with` and `spawned_by` point to real skills, no circular `composes_with` chains, no orphan reference files59- **Coverage gaps** — compare inventory against `docs/architecture.md`, `CLAUDE.md`, and the orchestrator's File Ownership Map; flag roles or workflows referenced but not implemented6061#### A3. Triage6263Highlight the top 3–5 most impactful issues. Suggest which skills warrant a single-skill follow-up (re-run with `--scope=<name>`). Note which issues `skill-update` can address directly.6465### Mode B — Deep Dive (`--scope=<skill-name>`)6667Take time. Read every file in the skill's directory tree. Score each rubric dimension 1–5 with specific evidence.6869#### B1. Structural Analysis7071Read `SKILL.md` and every file in `references/`. Score these dimensions against `references/deep-review-rubric.md`:72731. **Frontmatter compliance** — required fields, types, semver, optional fields used appropriately742. **Description quality** — action verb, trigger contexts, keyword variants, length, "pushiness"753. **Progressive disclosure** — body ≤5,000 words (soft warning past 500 lines), references used appropriately, clear pointers764. **Instruction clarity** — imperative voice, logical flow, no ambiguity, explains "why" not just "what"775. **Coordination** — ownership declarations, `composes_with` accuracy, no overlaps786. **Completeness** — referenced files exist, no dead links, validation checklists where needed797. **Anti-patterns** — see the anti-pattern checklist in `references/audit-checklist.md`, including the model-adaptation checks (reasoning-extraction refusal risk, prior-model over-prescription) that flag a skill written for a superseded model, and the writing-craft checks (leading-word anchor, no-op-sentence deletion, positive-prompting lint). When a skill scores poorly there or "worked before and got worse," hand off to the `model-adaptation` skill's migration audit.8081#### B2. Live Trigger Testing8283First, check the skill carries a **triggering test** — at least one example phrasing that must activate it (ideally one near-miss that must not). Flag its absence as an issue. Then verify it actually holds.8485If `/skill-creator` is available, use its eval infrastructure to test whether the skill actually triggers:86871. Generate 3–5 realistic prompts that **should** trigger this skill882. Generate 2–3 near-miss prompts that should **not** trigger it893. Run trigger evaluation via skill-creator's description optimization tooling904. Report should-trigger hit rate and false-positive rate. List any problem triggers.9192If `/skill-creator` is unavailable, skip this phase and note it in the report.9394#### B3. Output Quality Sampling9596For skills that produce structured output (reports, files, configs):97981. Pick 2 representative test prompts992. Run them through the skill (or skill-creator's test harness)1003. Compare actual output against the skill's stated format1014. Note gaps between promised and actual output102103Optionally (recommended for non-trivial skills), run one prompt with and without the skill and compare — if the skill doesn't measurably improve the output, flag that it may not earn its context cost.104105### Phase 4: Report106107Both modes write the report following `references/report-format.md`. Output two artifacts:108109- `skill-review-report.md` — structured markdown for humans110- `skill-review-report.json` — sidecar consumable by `skill-update`111112In Mode A, save to the repo root or a user-specified path. In Mode B, save to `{skill-path}/skill-review-report.{md,json}`.113114## Output Handoff115116The report is designed to feed directly into **skill-update**, which consumes the JSON sidecar and produces a prioritized edit plan. After writing the report, tell the user:117118> "Review complete. [X] issues found. Feed the JSON sidecar into `/skill-update` to generate a fix plan, or re-run me with `--scope=<skill-name>` for a deeper look at [specific skills]."119120## Guidelines121122- Be constructive — every issue gets a concrete suggestion123- Score honestly but explain reasoning, especially for low scores. Don't nitpick style if the skill is functionally sound124- Weight trigger testing heavily — a skill that doesn't trigger is useless regardless of how well-written it is125- When recommending fixes, expect them applied one focused change at a time with re-validation between — don't bundle many unrelated edits into one pass126- In Mode A, don't read reference file contents unless checking for orphans or broken links. Frontmatter + body line count is enough for most checks127- In Mode B, if the user supplied context (e.g., "it never triggers"), lead with that complaint128- If scope is filtered in Mode A, still validate cross-skill references against the full inventory129- Use subagents to parallelize independent check categories when available130131## Data source132133Before recommending changes, consult real usage signal: run134`scripts/skill-health.sh report --json` (P2-C skill-health telemetry). It returns135per-skill total invocations, 7-day/30-day success rates, a `declining` flag, and136version drift (recorded vs current `SKILL.md` frontmatter `version`). The math is137deterministic in code, never a prompt. Treat the signal as coarse and138best-effort: the emitter can only attribute a skill on a Skill-tool call and139records `outcome:unknown`, so a skill reported as `no-data` means "unobserved",140not "broken". Use it to prioritize which skills to deep-review and to back up141declining-quality verdicts — never as the sole basis for a low score. See142`contracts/installer/skill-health.md`.143144## Reference Files145146- `references/audit-checklist.md` — checklist of every per-skill and ecosystem-level check, plus the anti-pattern list147- `references/deep-review-rubric.md` — 1–5 scoring criteria for each of the seven deep-review dimensions, with verdict thresholds (SHIP / NEEDS WORK / MAJOR REWORK)148- `references/report-format.md` — exact shape of the markdown report and JSON sidecar