Reviewing Skills
Review a skill against Anthropic's skill-authoring best practices and report what could be
improved. This is advisory: produce recommendations, never edit the skill unless the
user explicitly asks. Nothing here blocks a commit.
The rubric you score against lives at
references/skill-best-practices.md — a vendored,
version-pinned copy of the upstream guidance. Read it before reviewing.
When to run this
- The user is creating or editing a
SKILL.md, meta.yml, or a skill directory.
- The user asks "does this skill follow best practices?", "review my skill", or similar.
- Proactively, when you notice you're helping author a skill — offer a quick review.
Keep it lightweight and opt-in. Offer the review; don't force it, and don't gate the user's
work on it.
Review workflow
Identify the target skill directory (the folder containing SKILL.md). If the user
didn't name one, ask or infer from the file being edited.
Run the deterministic checks and capture the output:
node scripts/review-skill.js <skill-dir>
This reports the mechanical findings (body length, name/description rules,
Windows-style paths, nested references, missing table-of-contents, rubric staleness). It
is advisory and always exits 0. Fold its findings into your report rather than repeating
the work by hand.
Read the rubric: references/skill-best-practices.md.
Assess the judgment calls the script can't — these are where you add value:
- Is the
description genuinely specific, or just superficially detailed? Would a
different skill trigger instead?
- Is the body concise, or does it explain things Claude already knows?
- Is the degree of freedom right (prose vs. exact commands) for how fragile the task
is?
- Is progressive disclosure used well — overview inline, detail in linked files?
- Are examples concrete (input/output pairs) where output style matters?
- Is terminology consistent? Any time-sensitive content that will rot?
- For skills with scripts: do they solve rather than punt, avoid magic constants, declare
dependencies, and make execute-vs-read intent clear?
- Is the naming clear (gerund form preferred, but noun-phrase and action-oriented are
fine)? Only flag a name that is vague or genuinely confusing.
Emit the report using the template below.
Report template
Group findings by rubric area. Tag each as Pass, Suggestion, or Issue, and give
a one-line concrete fix. End with a short, prioritized list. Keep it scannable.
# Skill review: <skill-name>
## Frontmatter
- [Issue] description is first-person — rewrite in third person: "Generates …".
- [Pass] name is valid and matches the directory.
## Conciseness & structure
- [Suggestion] SKILL.md body is 540 lines — move the API table into reference/api.md.
## Progressive disclosure
- [Pass] Detail files are linked one level deep from SKILL.md.
## Content & examples
- [Suggestion] The commit-message section would benefit from input/output example pairs.
## Scripts (if any)
- [Issue] scripts/run.py uses TIMEOUT = 47 with no rationale — document or derive it.
## Top recommendations
1. Rewrite the description in third person with explicit triggers.
2. Split the SKILL.md body below 500 lines.
3. Add two concrete examples to the commit-message section.
If there are no findings, say so plainly and note anything the skill does well.
Refresh mode
The vendored rubric carries a last_synced: date. When it's stale (the deterministic check
flags it after 30 days), or when the user asks to update the best practices:
WebFetch the canonical URL recorded at the top of
references/skill-best-practices.md.
- Compare the fetched guidance against the vendored rubric and the checks in
scripts/review-skill.js.
- Propose edits to the rubric (and, if a mechanical rule changed, to
review-skill.js)
for the user to approve.
- Update the
last_synced: date in the rubric header.
Don't refresh silently — show the diff and let the user accept it.
Boundaries
- Advisory only. Do not edit the reviewed skill unless the user asks you to apply a fix.
- This skill complements, and never replaces, the blocking structural gate in
scripts/validate-skills.js.
1---2name: reviewing-skills3description: Reviews a Claude Code skill against skill-authoring best practices and produces a prioritized, non-blocking report. Use when creating, editing, or reviewing a SKILL.md, a skill's meta.yml, or a skill directory, or when asked whether a skill follows best practices.4---56# Reviewing Skills78Review a skill against Anthropic's skill-authoring best practices and report what could be9improved. This is **advisory**: produce recommendations, never edit the skill unless the10user explicitly asks. Nothing here blocks a commit.1112The rubric you score against lives at13[references/skill-best-practices.md](references/skill-best-practices.md) — a vendored,14version-pinned copy of the upstream guidance. Read it before reviewing.1516## When to run this1718- The user is creating or editing a `SKILL.md`, `meta.yml`, or a skill directory.19- The user asks "does this skill follow best practices?", "review my skill", or similar.20- Proactively, when you notice you're helping author a skill — offer a quick review.2122Keep it lightweight and opt-in. Offer the review; don't force it, and don't gate the user's23work on it.2425## Review workflow26271. **Identify the target skill directory** (the folder containing `SKILL.md`). If the user28 didn't name one, ask or infer from the file being edited.29302. **Run the deterministic checks** and capture the output:3132 ```bash33 node scripts/review-skill.js <skill-dir>34 ```3536 This reports the mechanical findings (body length, `name`/`description` rules,37 Windows-style paths, nested references, missing table-of-contents, rubric staleness). It38 is advisory and always exits 0. Fold its findings into your report rather than repeating39 the work by hand.40413. **Read the rubric**: [references/skill-best-practices.md](references/skill-best-practices.md).42434. **Assess the judgment calls** the script can't — these are where you add value:44 - Is the `description` genuinely specific, or just superficially detailed? Would a45 different skill trigger instead?46 - Is the body **concise**, or does it explain things Claude already knows?47 - Is the **degree of freedom** right (prose vs. exact commands) for how fragile the task48 is?49 - Is **progressive disclosure** used well — overview inline, detail in linked files?50 - Are **examples concrete** (input/output pairs) where output style matters?51 - Is **terminology consistent**? Any **time-sensitive** content that will rot?52 - For skills with scripts: do they solve rather than punt, avoid magic constants, declare53 dependencies, and make execute-vs-read intent clear?54 - Is the **naming** clear (gerund form preferred, but noun-phrase and action-oriented are55 fine)? Only flag a name that is vague or genuinely confusing.56575. **Emit the report** using the template below.5859## Report template6061Group findings by rubric area. Tag each as **Pass**, **Suggestion**, or **Issue**, and give62a one-line concrete fix. End with a short, prioritized list. Keep it scannable.6364```65# Skill review: <skill-name>6667## Frontmatter68- [Issue] description is first-person — rewrite in third person: "Generates …".69- [Pass] name is valid and matches the directory.7071## Conciseness & structure72- [Suggestion] SKILL.md body is 540 lines — move the API table into reference/api.md.7374## Progressive disclosure75- [Pass] Detail files are linked one level deep from SKILL.md.7677## Content & examples78- [Suggestion] The commit-message section would benefit from input/output example pairs.7980## Scripts (if any)81- [Issue] scripts/run.py uses TIMEOUT = 47 with no rationale — document or derive it.8283## Top recommendations841. Rewrite the description in third person with explicit triggers.852. Split the SKILL.md body below 500 lines.863. Add two concrete examples to the commit-message section.87```8889If there are no findings, say so plainly and note anything the skill does well.9091## Refresh mode9293The vendored rubric carries a `last_synced:` date. When it's stale (the deterministic check94flags it after 30 days), or when the user asks to update the best practices:95961. `WebFetch` the canonical URL recorded at the top of97 [references/skill-best-practices.md](references/skill-best-practices.md).982. Compare the fetched guidance against the vendored rubric and the checks in99 `scripts/review-skill.js`.1003. Propose edits to the rubric (and, if a *mechanical* rule changed, to `review-skill.js`)101 for the user to approve.1024. Update the `last_synced:` date in the rubric header.103104Don't refresh silently — show the diff and let the user accept it.105106## Boundaries107108- **Advisory only.** Do not edit the reviewed skill unless the user asks you to apply a fix.109- This skill complements, and never replaces, the blocking structural gate in110 `scripts/validate-skills.js`.