npx skills add ...
npx skills add antjanus/skillbox --skill rate-skill
Use this skill to grade a SKILL.md whenever the user wants to rate, audit, or score one. Triggers include "rate this skill", "grade this skill", "give my skill a letter grade", "audit my SKILL.md", "score this skill against best practices", or "is this SKILL.md up to spec", even if they don't use the word "rate". Returns a letter grade A-F, weighted category scores, and prioritized paste-ready patches. Do NOT use this skill for code review (see code-review) or for authoring a new skill (see generate-skill).
npx skills add antjanus/skillbox --skill rate-skill
Grades one SKILL.md and returns a letter, weighted category scores, named strengths, prioritized findings with paste-ready patches, and a projected grade after fixes. Score against the rubric text below, not memory — sources in references/SOURCES.md.
| Load | When |
|---|---|
| references/EXAMPLES.md | ✅/❌ pairs for descriptions, frontmatter and verification scaffolding; a full sample report; retired rules |
| references/SOURCES.md | A user disputes a rule and you need to cite the spec |
SKILL.md inside it. Nothing passed — ask once: "Which SKILL.md should I rate?"---, blank lines included (the blank line directly after it counts too) — the number generate-skill/scripts/measure.py reports — and body tokens are chars / 4.generate-skill uses, so a generated skill is graded against the profile it was built from. When two profiles fit (reference vs technical, methodology vs auditing, automation vs technical), pick the one whose required sections the body already names; never choose the profile that penalizes a heading name. A per-turn conduct skill with no phases satisfies "Workflow (phased)" with any section that states the turn's order. State the type and the tie-break in the report.EVAL.md in references/ or legacy reference/, or evals/evals.json) against Eval set check. Missing is a standing P1.python3 <generate-skill>/scripts/measure.py score <7 scores in rubric order> for the weighted table and letter. Project the grade with P0 and P1 applied the same way.| # | Category | Weight |
|---|---|---|
| 1 | Description quality | 25 |
| 2 | Frontmatter validity | 20 |
| 3 | Length & progressive disclosure | 15 |
| 4 | Structure fit for type | 15 |
| 5 | Examples | 10 |
| 6 | Conciseness / context economy | 10 |
| 7 | Anti-patterns & calibration | 5 |
A 90–100, B 80–89, C 70–79, D 60–69, F <60. B is production ready, not a near-failure.
Magnitudes are anchored so one violation is recoverable and repeated ones aren't: −15 floors a category at four occurrences, −20 at three, −10 marks soft issues a skill can absorb several of. A cap (40/50/70/80) means that defect alone sets the ceiling.
Full marks require all five:
Caps: >1024 chars → 50 (spec hard cap). Vague triggers ("helps with documents", "use for tasks") → 50. A documented validation miss in the eval set (a should-trigger at or below 0.5 on a run the file itself records) is −5 here and a P2 naming the query, since the text can meet every criterion and still under-fire. Official sizing is "a few sentences to a short paragraph" — note verbosity, never deduct by character count below the cap. YAML scalar style is not scored (see Retired rules).
Accepted top-level: name, description, license, compatibility, when_to_use, argument-hint, arguments, disable-model-invocation, user-invocable, model, effort, agent, hooks, paths, shell, allowed-tools, metadata.
−15 each: top-level version/author/tags (belong in metadata); category (not a field); argument-hint nested under metadata (must be top-level); name with uppercase, consecutive hyphens, or the reserved words anthropic/claude. −10: compatibility over its 500-char cap.
references/ dir. Crossing the cap with no disclosure is the worst case and must score below every case under it — never a cap that rescues it.head -100s files and misses content.reference/ vs plural: style note, no deduction. Plural is spec-documented but nothing validates directory names — prefer it for new dirs, never force a rename.The shared section spec, identical to the one generate-skill emits.
| Type | Job | Required sections | Optional |
|---|---|---|---|
| methodology | Enforces a multi-step workflow | Overview, Workflow (phased), Examples, Gotchas | Quality Signals / Anti-Patterns |
| technical | Wraps an API, format, or tool | Overview, Quick Start / Setup, Quick Reference or API surface, Examples, Gotchas | Troubleshooting |
| auditing | Grades or inspects an artifact | Overview, Workflow, Rubric, Output Format, Examples, Gotchas | — |
| reference | Schemas, conventions, lookup tables | Overview, Navigation (load-when table), Gotchas | Core Concepts |
| automation | Wraps a script or external command | Overview, Command Surface, Sample Invocation, Failure Modes, Gotchas | Troubleshooting |
## Integration section containing nothing concrete: −10.## Verification Checklist is not a spec section for any type. Don't deduct its absence, don't credit its presence — judge its content under §7. Checklists remain an official pattern; only self-re-check content is penalized.## Anti-Pattern: headers: +15.references/EXAMPLES.md behind a pointer count in full. That is progressive disclosure, not an omission — read the file before scoring this category. §6 penalizes keeping them in both places.<Good>/<Bad> XML tags: −10 — zero of 8 surveyed top skills use them. This targets the labels; <example>/<examples> as structural delimiters are officially recommended and score fine.Apply the official cut test to every instruction: "Would the agent get this wrong without this?" If no, it's bloat.
−10 per distinct occurrence, floor 40 — one rule copied N times is one occurrence; restatement within SKILL.md counts the same as SKILL.md-to-references; a symptom-keyed troubleshooting index over the Gotchas is a different lookup direction, not a duplicate; one gotcha may deliberately restate a workflow step when it adds the symptom the step lacks: paragraphs restating general programming knowledge; "why this matters" prose longer than the rule it precedes; a verbose intro before the workflow; inconsistent terminology for one thing; menus where a default should be picked; instance-specific outputs where a procedure would generalize; payload duplicated between SKILL.md and a references/ file (a table two skills share by declaration, like the section spec generate-skill and rate-skill both carry, is intended sharing, not duplication); text the Claude Code harness already injects every session, because the model then reconciles two wordings of one rule — the current list of injected blocks is in references/EXAMPLES.md § Harness-injected text.
−20 each. The category is weight 5, so the score barely moves — the finding is the deliverable. Emit one per occurrence at P1 or higher.
Authoring
README.md, INSTALLATION.md, QUICK_REFERENCE.md, CHANGELOG.md)."if before August 2025…") outside an "old patterns" section. The same rot, no deduction, recommend a fix: provenance stamps in emitted templates (# verified 2026-09-02 inside a YAML block the agent copies); generation-relative wording repeated through a body ("current models" ×N — name the generation once, say "the model" elsewhere); references to a skill scheduled for deletion; model-tier cost comparisons; verbatim quotes of harness prompt text.Agentic over-prompting — behavior the model already performs, so restating it compounds and costs tokens with no quality gain.
reasoning_extraction refusal — always also emit a P0. A hard failure mode, not a style issue.Every rated skill should ship one. Missing → standing P1 (include a starter set in the patch), never a deduction or bonus. Present but the shipped description has no validation row → also P1: compare the newest Results row against the description's last edit (git log -L on the frontmatter, or the CHANGELOG); a variant with no validation score is unselected by the loop's own rule. Present but never run, or run with the protocol inverted (train never measured, iteration or selection keyed on validation queries) → P1 too. Other gaps in a present, validated set (query count, split ratio, a dead near-neighbor) → P2. A disable-model-invocation: true skill is exempt from trigger-rate measurement: its set checks that natural-language phrasings do not invoke it and that the mode holds once invoked. When present, verify against the official loop:
Caveat (official): agents consult skills for tasks beyond what they handle alone, so a low trigger rate on a trivially simple query ("read this PDF") is not automatically a description defect.
Match report length to what the skill needs — findings carry the value, so no filler sections and no closing summary of what the report just said.
Every report names at least one strength, even on F-tier skills — users abandon purely negative reports. Every finding ships a patch the user can paste, never "improve the description".
✅/❌ pairs for description quality, frontmatter cleanup, and domain verification vs. self-re-check scaffolding, plus a full sample report and the retired rules: references/EXAMPLES.md.
description + when_to_use at a combined 1,536 chars for the listing (skillListingMaxDescChars), and skillListingBudgetFraction defaults to ~1% of context. Neither is the 1024-char spec cap in §1.tags does nothing at top level — no discovery system consumes it. Demote to metadata.tags rather than deleting; that preserves user intent.argument-hint, hooks, paths, when_to_use run fine in Claude Code but are rejected by Anthropic's packaging validator (quick_validate.py) and absent from the universal spec. Don't penalize — raise the caveat only if the skill targets anthropics/skills.skills-ref validate <path> as the structural validator. Never npx skills lint or npx skills validate — vercel-labs/skills ships no validation command.