Skill Reviewer
Reviews a SKILL.md against the Agent Skills spec at https://agentskills.io/specification, then against authoring judgment the spec does not encode.
Target: all skills under skills/ when none is named. Say which you picked, do not ask.
1. Spec conformance (hard rules)
These are pass/fail. Everything in this section comes from the spec, quote it when reporting a failure.
| Field |
Rule |
name |
Required. 1-64 chars. Lowercase a-z, 0-9, hyphens only. No leading, trailing or consecutive hyphens. Must match the parent directory name. |
description |
Required. 1-1024 chars. States what the skill does and when to use it. |
allowed-tools |
Optional, experimental. Spec format is a space-separated string, e.g. Bash(git:*) Read Grep. Claude Code also accepts commas or a YAML list; prefer spaces, they work everywhere. Flag commas as portability, not as a spec failure. |
license |
Optional. Short: a licence name or a bundled file name. |
compatibility |
Optional. 1-500 chars. Only when the skill has real environment requirements. |
metadata |
Optional. Map of string keys to string values. |
Parse the frontmatter, do not eyeball it. An unquoted YAML scalar cannot contain : or start with [, {, &, *, #; a description holding one is a hard failure even though it reads fine.
Body rules:
- SKILL.md body under 500 lines, ideally under ~5000 tokens.
- File references are relative to the skill root and one level deep:
references/REFERENCE.md, scripts/extract.py.
- Extra files belong in
references/ (docs read on demand), scripts/ (executables), assets/ (templates, data).
Do not invent thresholds the spec does not state. A 400-character description is legal and often better than a 120-character one; judge it on content, not length.
2. Authoring judgment (soft)
Description
- Carries the words a user would actually say. A skill about splitting commits that never says "split" will not trigger.
- Says when not to fire if a sibling skill overlaps.
- Functional tone, no marketing.
Progressive disclosure
- Only the name and description load at startup; the body loads on activation;
references/ load on demand.
- Reference material consulted in a minority of runs (API cookbooks, flag tables, platform specifics) belongs in
references/, not in the body.
Content
- One well-defined purpose.
- Operational: instructions the agent executes, not commentary about the skill's development.
- No changelog, version history, timestamps or "validated on ..." notes.
- No duplication: repeated verbatim lines, or content that restates docs the skill could link instead.
- Every declared mode, branch or option has a rule saying when it applies.
- Steps appear in the order they are executed, and each step has what it needs by the time it runs.
Self-consistency
- The skill obeys its own rules. A skill banning em dashes must not contain one.
allowed-tools, when present, covers every tool the skill's own process requires.
- Every URL it cites resolves. Check them.
3. Security and portability
Grep the skill and its reference files:
grep -rniE 'password=|api_key|API_KEY|secret|Bearer |postgres(ql)?://[^ ]*:|mysql -u' <skill-dir>
grep -rnE '/home/[a-z]|/Users/[A-Za-z]|C:' <skill-dir>
Hits inside a skill's own detection patterns or anti-pattern lists are not findings, read the line before reporting it.
| Found |
Fix |
| Real credential |
Move to .env, reference as $VAR, gitignore the file |
| Absolute path |
~/, a relative path, or a {{PLACEHOLDER}} |
| Platform-locked path or command |
Give both forms, or state the requirement in compatibility |
4. Report
Lead with the single worst finding. Then:
## Skill review: <name>
<one line: the worst problem, or "conforms, N soft findings">
| Skill | dir=name | desc chars | lines | YAML | Creds | Abs. paths |
|---|---|---|---|---|---|---|
| <name> | ok/FAIL | <n> | <n> | valid/FAIL | none/FAIL | none/FAIL |
### Issues
| # | Issue | Severity |
|---|---|---|
### Fixes, in order
1. ...
Rules for the report:
- Every claim carries a confidence tag.
- Measure, never estimate:
wc -m on the description, wc -l on the file.
- Cite
file:line for each finding.
- Severity: High breaks the spec or stops the skill working. Medium degrades triggering or maintenance. Low is style.
- A spec violation and a judgment call are different things. Label which one you are making.
Reference
1---2name: skill-reviewer3description: Use when asked to review, validate, audit or check a Claude skill (SKILL.md) against the Agent Skills specification and authoring best practices, or after creating or editing a skill.4---56# Skill Reviewer78Reviews a SKILL.md against the Agent Skills spec at <https://agentskills.io/specification>, then against authoring judgment the spec does not encode.910Target: all skills under `skills/` when none is named. Say which you picked, do not ask.1112## 1. Spec conformance (hard rules)1314These are pass/fail. Everything in this section comes from the spec, quote it when reporting a failure.1516| Field | Rule |17|---|---|18| `name` | Required. 1-64 chars. Lowercase `a-z`, `0-9`, hyphens only. No leading, trailing or consecutive hyphens. Must match the parent directory name. |19| `description` | Required. 1-1024 chars. States what the skill does **and** when to use it. |20| `allowed-tools` | Optional, experimental. Spec format is a **space-separated** string, e.g. `Bash(git:*) Read Grep`. Claude Code also accepts commas or a YAML list; prefer spaces, they work everywhere. Flag commas as portability, not as a spec failure. |21| `license` | Optional. Short: a licence name or a bundled file name. |22| `compatibility` | Optional. 1-500 chars. Only when the skill has real environment requirements. |23| `metadata` | Optional. Map of string keys to string values. |2425Parse the frontmatter, do not eyeball it. An unquoted YAML scalar cannot contain `: ` or start with `[`, `{`, `&`, `*`, `#`; a description holding one is a hard failure even though it reads fine.2627Body rules:2829- SKILL.md body under 500 lines, ideally under ~5000 tokens.30- File references are relative to the skill root and one level deep: `references/REFERENCE.md`, `scripts/extract.py`.31- Extra files belong in `references/` (docs read on demand), `scripts/` (executables), `assets/` (templates, data).3233Do not invent thresholds the spec does not state. A 400-character description is legal and often better than a 120-character one; judge it on content, not length.3435## 2. Authoring judgment (soft)3637**Description**38- Carries the words a user would actually say. A skill about splitting commits that never says "split" will not trigger.39- Says when **not** to fire if a sibling skill overlaps.40- Functional tone, no marketing.4142**Progressive disclosure**43- Only the name and description load at startup; the body loads on activation; `references/` load on demand.44- Reference material consulted in a minority of runs (API cookbooks, flag tables, platform specifics) belongs in `references/`, not in the body.4546**Content**47- One well-defined purpose.48- Operational: instructions the agent executes, not commentary about the skill's development.49- No changelog, version history, timestamps or "validated on ..." notes.50- No duplication: repeated verbatim lines, or content that restates docs the skill could link instead.51- Every declared mode, branch or option has a rule saying when it applies.52- Steps appear in the order they are executed, and each step has what it needs by the time it runs.5354**Self-consistency**55- The skill obeys its own rules. A skill banning em dashes must not contain one.56- `allowed-tools`, when present, covers every tool the skill's own process requires.57- Every URL it cites resolves. Check them.5859## 3. Security and portability6061Grep the skill and its reference files:6263```sh64grep -rniE 'password=|api_key|API_KEY|secret|Bearer |postgres(ql)?://[^ ]*:|mysql -u' <skill-dir>65grep -rnE '/home/[a-z]|/Users/[A-Za-z]|C:' <skill-dir>66```6768Hits inside a skill's own detection patterns or anti-pattern lists are not findings, read the line before reporting it.6970| Found | Fix |71|---|---|72| Real credential | Move to `.env`, reference as `$VAR`, gitignore the file |73| Absolute path | `~/`, a relative path, or a `{{PLACEHOLDER}}` |74| Platform-locked path or command | Give both forms, or state the requirement in `compatibility` |7576## 4. Report7778Lead with the single worst finding. Then:7980```81## Skill review: <name>8283<one line: the worst problem, or "conforms, N soft findings">8485| Skill | dir=name | desc chars | lines | YAML | Creds | Abs. paths |86|---|---|---|---|---|---|---|87| <name> | ok/FAIL | <n> | <n> | valid/FAIL | none/FAIL | none/FAIL |8889### Issues90| # | Issue | Severity |91|---|---|---|9293### Fixes, in order941. ...95```9697Rules for the report:98- Every claim carries a confidence tag.99- Measure, never estimate: `wc -m` on the description, `wc -l` on the file.100- Cite `file:line` for each finding.101- Severity: **High** breaks the spec or stops the skill working. **Medium** degrades triggering or maintenance. **Low** is style.102- A spec violation and a judgment call are different things. Label which one you are making.103104## Reference105106- Spec: <https://agentskills.io/specification>107- Template and examples: <https://github.com/anthropics/skills> (`template/SKILL.md`, `skills/`)108- Validator: `skills-ref validate ./my-skill`