Skill Quality Reviewer
ASecurityReview ONE library skill''s quality — the judgment layer above scripts/validate-skills.py. Runs the mechanical validator first (structure/lengths/registration/name collisions are its job — never re-checked), judges what it cannot: description trigger-oriented ("use when <situation>") vs merely descriptive; trigger collision with shipped skills, colliders NAMED (the main failure mode across the full shipped skill corpus); duplication better shipped as an EXTENSION (the LLM04/ASI04 pattern); ev...
- 4 stars
- 0 votes
- 0 copies
- 1 view
- Added September 11, 2026
Security analysis
100/100Pro scans all 4 files and shows the line behind each finding
npx -y skills add ModernNomad-98/Project-Aegis --skill skill-quality-reviewer --agent claude-codeAre you the author of Skill Quality Reviewer?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/modernnomad-98-skill-quality-reviewer)---
name: skill-quality-reviewer
description: 'Review ONE library skill''s quality — the judgment layer above scripts/validate-skills.py. Runs the mechanical validator first (structure/lengths/registration/name collisions are its job — never re-checked), judges what it cannot: description trigger-oriented ("use when <situation>") vs merely descriptive; trigger collision with shipped skills, colliders NAMED (the main failure mode across the full shipped skill corpus); duplication better shipped as an EXTENSION (the LLM04/ASI04 pattern); evals that test real boundaries vs hollow filler; section substance (Stop Conditions that actually refuse); scope (one job); invocation posture (per the standard''s §5 side-effect rule). Per-check PASS/CONCERN/FAIL with evidence; verdict ship/revise/reject/make-it-an-extension. Use when a skill is drafted, revised, or quality-audited. Do NOT use for a change''s process compliance (agent-governance-audit), product code (code-reviewer, full-codebase-auditor), or a whole skill-adding PR (library-diff-reviewer).'
---
# Skill Quality Reviewer
## Purpose
Give one skill — newly drafted or already shipped — the review the mechanical
validator cannot perform. `scripts/validate-skills.py` proves a skill is
structurally VALID; this skill judges whether it is GOOD: whether an artificial intelligence (AI)
matching a user request against the full shipped corpus of descriptions
would pick it at the right moment and yield at the wrong one, whether it
earns a place in the library instead of duplicating one, and whether its
evals would actually catch it misbehaving. The deliverable is a per-check
verdict with cited evidence and one overall recommendation a maintainer can
act on: ship, revise, reject, or make-it-an-extension of a named existing
skill.
## Use When
- Use when: a new skill has been drafted and needs quality review before it
enters the library.
- Use when: asked to audit an existing shipped skill's quality — trigger
precision, overlap with newer skills, eval honesty, scope creep.
- Use when: a skill-adding change is in flight and the question is "is this
skill good enough and distinct enough to ship?"
- Do NOT use when: the question is whether an agent CHANGE followed process —
classification, approvals, merge authority, closeout — that is
`agent-governance-audit` (different target: a change's process trail, not a
skill definition's quality).
- Do NOT use when: reviewing product code — a diff is `code-reviewer`,
whole-repo health is `full-codebase-auditor`. This skill's only target is a
skill definition under `.claude/skills/`.
- Do NOT use when: auditing a skill-adding PR end-to-end (CI validator run,
catalog integrity, branch/merge discipline) — that is `library-diff-reviewer`
(D13, built D22). This skill is that review's inner loop: it judges ONE
skill's quality; the PR-level mechanics belong to that skill.
- Do NOT use to re-run what the validator enforces: a validator FAIL goes
back to the author against the standard — quality review never starts from
a structurally invalid skill.
## Inputs to Inspect
1. The target skill's full directory: `SKILL.md` (frontmatter and every
section), `references/*`, `evals/evals.json`, and `evals/trigger-evals.json`
when present.
2. [`docs/skill-generation-standard.md`](../../../docs/skill-generation-standard.md)
— the standard this review judges against (all eight sections).
3. Fresh output of `python scripts/validate-skills.py` — the mechanical gate
this review builds on and never re-implements.
4. Every shipped skill's frontmatter `description` (`.claude/skills/*/SKILL.md`)
— the corpus for the overlap sweep; the nearest neighbors read in full,
not just their descriptions.
5. [`docs/skills-catalog.md`](../../../docs/skills-catalog.md) — which overlap
cluster the skill claims and which discrimination its neighbors already
ship in their trigger-evals.
6. `RESERVED_BUNDLED_NAMES` in `scripts/validate-skills.py` — the validator
blocks exact collisions; judgment must also catch confusably-close names.
## Workflow
1. **Gate on the mechanical validator.** Run
`python scripts/validate-skills.py` (or confirm a fresh pass on the exact
revision under review). If it fails, stop and return the output — structure
precedes judgment. Everything the validator enforces (frontmatter parse,
name==directory, description present and < 1024 chars, no broad
allowed-tools, < 500 lines, all nine sections present, evals JSON parse,
catalog + README registration, duplicate and reserved-name collisions) is
settled by that run and is NOT re-checked or re-scored below: a mechanical
PASS is this review's entry ticket, never part of its verdict.
2. **Check 1 — trigger quality.** Is the description trigger-ORIENTED — does
it state the situations that should invoke it ("use when …") and the
near-misses that should not ("do NOT use …") — rather than merely
descriptive ("this skill does X")? Trigger-oriented descriptions are what
make auto-invocation work; a feature list with no situation is a FAIL even
at 900 well-formed characters.
3. **Check 2 — trigger overlap/collision (highest-value check).** Sweep every
shipped description and ask, per plausible user request: would an AI know
which skill wins? NAME each colliding skill and quote the request that
confuses them. Overlap without shipped discrimination (trigger-evals
naming that exact neighbor) is a CONCERN at best, a FAIL when the loser
would fire on the winner's core case.
4. **Check 3 — duplication / extension.** Does the skill substantially restate
a shipped skill's job? When the genuinely new content would fit as a
scoped additive diff to an existing skill, recommend make-it-an-extension
and name the base — the library's precedent: LLM04 (large language model supply-chain risk; 2026 ID, LLM03 in 2025) and ASI04 (agentic supply-chain risk) both landed
as extensions of `supply-chain-security-reviewer`, not as clone skills.
5. **Check 4 — eval integrity.** Do `evals/evals.json` cases test the
BOUNDARY: a real happy path, a genuine edge (not a happy path with an
adjective), a should-not-trigger case a neighbor would actually contest,
and a should-not-do/refusal case with teeth? Does `trigger-evals.json`
discriminate against the RIGHT neighbors — the ones check 2 found, not a
convenient strawman?
6. **Check 5 — section substance.** Are the nine sections filled or merely
present to satisfy the validator? Especially: Stop Conditions are real
halt/refusal conditions (who is refused, what triggers the halt), Use When
is specific with counter-examples, Gotchas are earned failure modes rather
than platitudes.
7. **Check 6 — scope discipline.** One job done well, or a catch-all that
should split? Count the distinct jobs a stranger would say it performs.
8. **Check 7 — invocation posture.** `disable-model-invocation: true` iff the
skill has side effects (edits files/config outside scratch, runs
state-changing commands, calls networks, deploys, spends money); pure
review/design/report skills stay auto-invocable — with the standard's
§5 Exception 1 for bounded documentary writes. Check its full current
definition: authorized ordinary create/append, immutable human-decision
transcription, or exactly six named projection refreshes. Preserve existing
grants without repeat consent; excluded files/actions remain manual-only.
Task-Authorized Local Implementation (TALI) adoption alone never
activates an execution route.
Manual-only skills must name the irreversible step in Stop Conditions.
9. **Deliver the verdict.** Per check PASS / CONCERN / FAIL, each citing
evidence (quoted description phrases, the named colliding skill, the
hollow eval case id), then ONE overall recommendation: ship | revise |
reject | make-it-an-extension (with the named base skill), plus the
specific revisions required before ship.
Per-check criteria, the trigger-oriented-description rubric, the overlap
sweep procedure, hollow-eval patterns, and the posture decision table:
[references/quality-review-checklist.md](references/quality-review-checklist.md).
## Output Format
```
SKILL QUALITY REVIEW — <skill-name>
Validator: PASS (<run output line>) | FAIL → review stopped, output returned
Standard: docs/skill-generation-standard.md; corpus swept: <N> shipped skills
Checks:
1 Trigger quality PASS | CONCERN | FAIL — <quoted description evidence>
2 Overlap/collision PASS | CONCERN | FAIL — <colliding skill(s) + the request that confuses them | "none found">
3 Duplication/extension PASS | CONCERN | FAIL — <overlapped skill + what an extension diff would contain>
4 Eval integrity PASS | CONCERN | FAIL — <hollow/missing case types, by case id>
5 Section substance PASS | CONCERN | FAIL — <present-but-empty sections, quoted>
6 Scope discipline PASS | CONCERN | FAIL — <the distinct jobs found, if more than one>
7 Invocation posture PASS | CONCERN | FAIL — <side effects found vs posture declared>
Recommendation: ship | revise | reject | make-it-an-extension of <base skill>
Colliding skills: <named list | none>
Required before ship: <specific revisions, each mapped to a check>
Not inspected: <what this review did not read, and why>
```
## Validation Checklist
- [ ] Mechanical validator ran fresh (or a fresh pass was confirmed) BEFORE
any judgment; no validator check was re-implemented or re-scored here.
- [ ] Every non-PASS verdict cites concrete evidence — quoted text, a named
skill, an eval case id; no vibes-only CONCERN.
- [ ] The overlap sweep covered ALL shipped descriptions, not only the
skill's own cluster or phase.
- [ ] Colliding skills are NAMED wherever check 2 or 3 is non-PASS.
- [ ] The recommendation is exactly one of the four verdicts;
make-it-an-extension names its base skill.
- [ ] Nowhere does the report treat the mechanical PASS as evidence of
quality.
- [ ] Not-inspected list present and honest.
## Gotchas
- The rubber-stamp trap: "the validator passed" answers structure, not
quality. The failure populations barely overlap — a perfectly structured
skill can still be unpickable, colliding, hollow, or a duplicate.
- Descriptions written to impress rather than to trigger: capability lists
with no situation. The working test: from this description alone, would a
model know when this skill WINS a request and when it must YIELD?
- Overlap hides across phases: the confusable neighbor is often in a
different pack (agent authority vs end-user RBAC; LLM05 model (LLM04 in 2025) vs ASI06 memory
poisoning; evidence-policy vs manual-QA evidence). Same-cluster-only
sweeps miss exactly these.
- Hollow evals look full: assertions that restate the Workflow verbatim, a
should-not-trigger prompt nothing would ever route here anyway, an "edge"
that is the happy path with a twist adjective, refusal cases the skill
text never actually promises to refuse.
- Present-but-empty sections satisfy the validator: "Stop Conditions: ask
the user when unsure" is a filled header with no refusal in it.
- A CONCERN pile-up is itself a verdict: several small concerns across
trigger + evals + substance normally roll up to revise, not
ship-with-nits.
- Invocation posture drifts on revision: a review skill that gains a "then
apply the fix" step becomes side-effecting and must flip to manual-only —
re-check posture on every re-review, not just at birth.
- Near-miss names pass the collision check: the validator blocks only EXACT
reserved/duplicate names; `code-review-helper` next to the bundled
`code-review` is a judgment finding, not a validator error.
## Stop Conditions
- Asked to approve or ship a skill BECAUSE the mechanical validator passed →
refuse the shortcut: mechanical pass is necessary, never sufficient. Run
the judgment checks or return no verdict.
- Asked to soften or flip an evidence-backed FAIL, or to unname a colliding
skill → refuse; the report states what the evidence states.
- The target skill's directory or SKILL.md is missing or unreadable → stop;
there is no quality review of a skill from its description or from memory.
- The mechanical validator FAILS on the target revision → stop the quality
review and return the validator output; structure precedes judgment.
- Asked to EDIT the skill to fix the findings → out of scope: this skill
reviews and changes nothing. Hand the required-before-ship list to the
author (or a build session) and re-review the revision.
- The standard and the validator disagree on a rule (one demands what the
other ignores) → surface the discrepancy to a human; do not silently pick
a side.
## Supporting Files
- [references/quality-review-checklist.md](references/quality-review-checklist.md)
— per-check PASS/CONCERN/FAIL criteria, the trigger-oriented-description
rubric with examples, the full-corpus overlap sweep procedure, the
hollow-eval pattern catalog, and the invocation-posture decision table.
- `evals/evals.json` — behavior cases, including the
descriptive-description-plus-collision → revise case and the
no-rubber-stamp-on-mechanical-pass refusal.
- `evals/trigger-evals.json` — discrimination against
`agent-governance-audit`, `full-codebase-auditor`, `code-reviewer`, and
the `library-diff-reviewer` seam (built D22; owned from both sides).
Files in this skill
- SKILL.md
- evals/evals.json
- evals/trigger-evals.json
- references/quality-review-checklist.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.