This skill should be used when the user wants to review, audit, or sanity-check an existing agent skill in this repo against authoring conventions. Common triggers include "review the X skill", "audit this skill", "check skill X against repo conventions", "is this skill any good", "second opinion on skill X", "sanity check skill X", and "review skill X before publishing". Produces a severity-tiered report (error / warn / info) with a Clean section even on pass, audits evals.json assertion shapes, and hands off behavioral validation to skill-eval. Skip when authoring a brand-new skill (use skill-creator) or running general code review (use code-reviewer).
Installation
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
This skill should be used when the user wants to review, audit, or sanity-check an existing agent skill in this repo against authoring conventions. Common triggers include "review the X skill", "audit this skill", "check skill X against repo conventions", "is this skill any good", "second opinion on skill X", "sanity check skill X", and "review skill X before publishing". Produces a severity-tiered report (error / warn / info) with a Clean section even on pass, audits evals.json assertion shapes, and hands off behavioral validation to skill-eval. Skip when authoring a brand-new skill (use skill-creator) or running general code review (use code-reviewer).
argument-hint
[<skill-name>]
user-invocable
true
model-invocable
true
skill-reviewer
Reviews an existing skill in this repo against authoring conventions. Produces a severity-tiered report (error / warn / info) plus a Clean section, classifies the skill type, audits evals.json assertion shapes, and offers a behavioral handoff via skill-eval.
When to use
Verbatim trigger phrases:
"review the X skill"
"audit this skill"
"check skill X against repo conventions"
"is this skill any good?"
"second opinion on skill X"
"review skill X before publishing"
"sanity check skill X"
When NOT to use
Authoring a brand-new skill → use /skill-creator
Re-running baselines on an existing skill → use /skill-eval
Reviewing source code, diffs, or PRs → use /code-reviewer
Fixing the skill body — just edit SKILL.md directly
Inputs
$ARGUMENTS — one of:
A skill name (ts-best-practices) — looks under skills/<name>/ then .agents/skills/<name>/
A path (skills/foo/SKILL.md or skills/foo)
Empty — ask: "Which skill should I review?"
Workflow
1. Resolve target + run lint baseline
Locate the skill directory. Confirm SKILL.md and evals.json exist. Run:
pnpm skill-tools lint <skill-name>
Capture the lint output verbatim — it's the floor, not the ceiling. Lint passing means mechanical rules pass; it does not mean the skill is well-authored.
Empty severity sections render as ## ERRORS\n(none) — keeps the shape comparable across runs. A pass verdict is 0 error / 0 warn / 0 info plus a populated Clean section.
Anti-patterns (don't do these)
"Looks solid, ship it."
No grounding. The pass verdict carries no information the user can act on or revisit later. Use a Clean section listing specific rules.
"Lint passes, looks fine."
Lint is the floor. This is the lazy-reviewer failure mode — see step 3.
Manufactured nits because the skill seemed *too* clean and the reviewer wanted to look thorough.
If a skill genuinely has 0 findings, say so in the Clean section. Inventing critique to look thorough is worse than missing real issues.
Recommended `/skill-eval` without checking whether it was actually loaded in the session.
The user has to chase down whether the recommendation was even runnable. Step 7 is explicit about this: check first, state the result.
Examples
"review skills/ts-best-practices — does it still hold up against our conventions?"
1. Resolve: `skills/ts-best-practices/`. Run `pnpm skill-tools lint ts-best-practices` → clean.
2. Classify: **discipline skill** (rules like "use *Params for ≥2-arg fns", "JSDoc on exports").
3. Read deep references: `description.md`, `pressure-scenarios.md`, `evals-json.md`, `tdd-for-skills.md`.
4. Frontmatter audit: trigger parity drift — `SKILL.md` has 6 triggers, `description` and `README.md` have 5. Description missing `"audit this ts file"`.
5. Body audit: rationalization table present (good — discipline skill). `@pkg/fp` in conditionals table leaks an internal-monorepo assumption.
6. evals.json audit: eval #0 assertion `^(?!.*:\s*any\b).*$` is a per-line negative regex — passes if any single line lacks `any`. Same shape on eval #1's "no else-if" / "no ternary".
7. Behavioral handoff: `skills/skill-eval/SKILL.md` present + `/skill-eval` loaded → propose `/skill-eval ts-best-practices`.
8. Emit:
SUMMARY: 4 findings (1 error / 2 warn / 1 info) — discipline skill
## ERRORS
✗ evals.json:29 three negative-regex assertions match per-line — pass when bad pattern appears on another line
Replace `^(?!.*:\s*any\b).*$` with a `not_contains` pattern or anchor with `(?s)` so the whole transcript is one match.
## WARNS
⚠ description (SKILL.md:5) trigger parity drift vs. README.md (5 vs 6 triggers; missing "audit this ts file")
Add the missing trigger to description and README — the description is the dispatcher's surface.
⚠ SKILL.md:184 `@pkg/fp` reference leaks a private-monorepo assumption into a public skill
Replace with "ternary helper" or add a one-line reference link.
## INFOS
ℹ description (SKILL.md:11) Skip-when bundles two cases with an em dash
Split the framework case (React/Vue/Svelte) from the functional-refactor redirect.
## Clean
- Description has Use-when phrase + 5 verbatim triggers in double quotes (description.md:38)
- Frontmatter has all Claude Code extension fields (argument-hint, user-invocable, model-invocable)
- Body has 2 <example> blocks (xml-usage.md ≥ 1 required)
- Rationalization table present — appropriate for a discipline skill (skill-creator step 7.5)
- pnpm skill-tools lint ts-best-practices — 0 error / 0 warn / 0 info
- Behavioral handoff: /skill-eval is loaded; recommended `/skill-eval ts-best-practices`
"sanity-check skills/skill-portability — i think it's fine"
Lint clean. Classified as a **technique skill** (replaces ad-hoc provider knowledge with a structured providers.mjs lookup).
SUMMARY: 0 findings (0 error / 0 warn / 0 info) — technique skill
## ERRORS
(none)
## WARNS
(none)
## INFOS
(none)
## Clean
- Description: 720 chars, has Use-when, 5 verbatim triggers, explicit Skip-when (description.md ✓)
- Frontmatter: argument-hint, user-invocable, model-invocable all set
- evals.json: 5 pressure scenarios (≥ 3 required), mix includes a clean-skill recognition test (the false-positive guard most skills miss)
- Body: ≥ 3 `## ` sections, ≥ 1 `<example>` block, no TODO/FIXME
- Companions: README.md, LICENSE, references/, scripts/ all present
- Single-source-of-truth in providers.mjs reflects the skill's own thesis
- pnpm skill-tools lint skill-portability — 0/0/0
- Behavioral handoff: /skill-eval is loaded; propose `/skill-eval skill-portability`
Nothing manufactured. If you want depth beyond the structural review, run node skills/skill-portability/scripts/providers.mjs --check to confirm the docUrls are still 200 — that's the skill's own staleness check.
Rationalization table
Captured from RED-baseline transcripts where reviewers without this skill skipped rules. Future reviewers: recognize your own pattern.
Lint enforces mechanical rules; these refs cover assertion shape, scenario-vs-skill-type fit, and the RED→GREEN cycle that lint cannot check
Classify the skill type (discipline / technique / pattern / reference)
(omitted entirely)
Different types need different audits — discipline skills require a rationalization table and 3-pressure scenarios; technique skills need variation tests; without classification you're applying the wrong lens
Use severity-tiered output (error / warn / info) even on a pass
"used numbered findings" / "prose verdict"
Comparable output across runs; numbered lists drift in shape; prose ("looks solid") invites manufactured-nits or vague-pass failure modes
Include a Clean section listing what specifically passes
"said 'looks solid' / 'ship it'"
Pass verdicts without specifics rot — six months later nobody knows what was actually checked. Clean sections force grounding in specific rules
Check whether skill-eval is invocable before recommending it
"I located the tooling" without checking if it's loadable in the session
Pushes work onto the user to verify the recommendation. Step 7 requires explicit availability check + result statement
Run the static review without offering the behavioral handoff
"the static review covered the structural concerns"
Static review can't catch "skill doesn't actually change agent behavior" — that's exactly what skill-eval exists for. Skipping it leaves the second half of the request undone