Skill validation
Skill blakebauman/skillist-validator/skills/skill-validation
Validate agent skills against the Agent Skills specification (agentskills.io) — SKILL.md frontmatter, name and description rules, character limits, directory layout, bundled file references, and progressive disclosure. Use when the user asks to validate, lint, check, or verify a skill or a directory of skills; when they ask whether a SKILL.md is spec-compliant or why a skill fails to load; before publishing or packaging skills; or when they are debugging a skill that an agent will not pick up. Applies to skills for any client — Claude Code, Cursor, Codex CLI, Gemini CLI — not just Claude.From its SKILL.md
npx -y skills add blakebauman/skillist-validator --skill skill-validationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 16 days oldThe repository was created 16 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
6.5 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
Check skills against the Agent Skills specification and report what to fix.
Run the validator first, then interpret its findings. Do not review a
SKILL.md by eye when the script can answer the mechanical questions — reading
by eye misses character limits, silent YAML coercions, and broken bundled
paths, which are the failures that actually break skills at load time.
1. Locate the skills
A skill is any directory containing a SKILL.md. Common locations:
| Location | What lives there |
|---|---|
.claude/skills/<name>/ | Project-local skills |
~/.claude/skills/<name>/ | Personal skills |
skills/<name>/ | Skills shipped inside a plugin or repo |
<anywhere>/<name>/SKILL.md | A single skill under development |
If the user named a path, use it. Otherwise check the project's skills/ and
.claude/skills/ directories. Ask which to check only when several exist and
the request is ambiguous.
2. Run the validator
python3 scripts/validate_skill.py <path>
It accepts one skill directory or a tree containing many, and discovers every skill beneath the path.
| Flag | Use it when |
|---|---|
--format json | You need to filter or count findings, or feed them into a fix loop |
--strict | The user wants warnings to fail too (CI, pre-publish gates) |
--errors-only | The user only wants hard specification violations |
--list-rules | The user asks what is checked |
Exit codes: 0 clean, 1 violations found, 2 bad path or no skill there.
Exit 1 is the normal result for a skill with problems — report the findings,
do not treat it as a tool failure.
3. Interpret the findings
Every finding carries a rule ID, a level, a location and a fix hint. The three levels mean different things and must be reported differently:
- ERROR — a specification violation. The skill is non-conformant and may fail to load. Always report these and offer to fix them.
- WARN — a specification recommendation or an authoring guideline from agentskills.io. Real, but a judgment call. Report with the reasoning, and say when ignoring one is defensible.
- NOTE — portability information, not a defect. Mention only if relevant to where the skill will run.
The full rule catalog, with the specification clause behind each rule and what
a good fix looks like, is in references/rule-catalog.md. Read it when a
finding needs explaining, when the user asks why a rule exists, or when you are
deciding whether a warning is worth acting on.
The specification's own limits and field definitions are summarized in
references/spec-rules.md. Read it when you need the authoritative constraint
rather than the validator's phrasing — for example when a user disputes a
finding.
4. Report
Lead with the verdict, then the findings grouped by skill, errors first. Use
the format in references/report-format.md when the user asks for a written
report, a review of many skills at once, or output to paste elsewhere. For a
quick single-skill check, a short summary plus the findings is enough.
State counts honestly. "3 errors, 5 warnings across 4 skills" is the report; "mostly fine" is not.
5. Fix
Only after reporting. Fix errors first, then warnings the user accepts.
- Never rename a skill directory or
namefield without asking. Callers, documentation, and/skill-nameinvocations depend on it. AS106 has two valid fixes — rename the directory or the field — and only the user knows which is correct. - Never invent content to satisfy a warning. A thin description (AS203) is fixed by learning what the skill actually does, not by padding it. If you cannot tell, ask.
- Re-run the validator after fixing and report the new counts. A fix that introduces a different violation is not a fix.
For description findings (AS203, AS204, AS205, AS206), rewriting well enough to
change triggering behavior is its own task — hand off to the
skill-description-tuning skill rather than guessing at wording.
Gotchas
These are the failures that recur, and the reasons the validator exists:
metadata: version: 1.0is a number, not a string. YAML parses unquoted1.0as a float, and the specification requires metadata values to be strings. Quote it:version: "1.0".allowed-toolsis space-separated, not a YAML list and not comma-separated.allowed-tools: Read Bash(git:*)is correct. A list silently changes the value's type.namemust match the parent directory exactly. This is the single most common hard violation, and it usually appears after a directory rename.- Character limits are on the field, not the line. A folded
>description is measured after folding — 1024 characters of prose, not 1024 per line. - Frontmatter must be the very first thing in the file. A leading blank
line, a BOM, or a comment above
---means no frontmatter is found at all, and the skill will not load. - A missing bundled file is an error, not a warning. A
references/<file>.mdthat does not exist fails at runtime, in the middle of a task, after the agent has already committed to the approach. - Write illustrative paths as placeholders. A literal-looking bundled path
in prose reads as a real reference to the validator — and to an agent. Use
angle brackets (
references/<name>.md) for examples; the validator skips them. - Paths into the user's project are not bundled files. The validator
deliberately does not check
.workspace/INDEX.mdor~/Downloads/data.csvfor existence. Do not "fix" those by creating files.
Validating this plugin's own skills
python3 scripts/validate_skill.py --strict ../
The validator is covered by fixtures with known defects. If you change it, run
python3 tests/run_tests.py from the repository root before reporting success.
What ships with it: 4 files
57.4 KB alongside SKILL.md, 1 of them executable
references/
- report-format.md3.7 KB
- rule-catalog.md13.1 KB
- spec-rules.md4.3 KB
scripts/
- validate_skill.pyruns36.2 KB
Gives 0 of the 12 instructions most quality gates skills give in ~1.4k tokens
Counted across 1,195 of the 2,094 authors here whose files we hold, read 2026-08-07
- Read the output and check the exit codein 54 of 1195, across 14 files
- Verify requirements using a line-by-line checklistin 53 of 1195, across 12 files
- Identify the verification command proving the claimin 51 of 1195, across 12 files
- Run the full verification commandin 50 of 1195, across 11 files
- Verify output confirms the claimin 49 of 1195, across 12 files
- Check version control diff after agent delegationin 46 of 1195, across 6 files
- State claim with evidencein 44 of 1195, across 4 files
- Run the test suitein 33 of 1195, across 26 files
- Keep state in memory by defaultin 27 of 1195, across 6 files
- Make prototype runnable with one commandin 26 of 1195, across 5 files
- Produce a verification reportin 25 of 1195, across 14 files
- Detect the package manager from lockfilesin 24 of 1195, across 5 files
Said here and by no other author read
- run the validator before manual review
- ask which skill to check when ambiguous
- treat exit code 1 as found violations
- read the rule catalog to explain findings
- read specification summaries for authoritative constraints
- group findings by skill with errors first
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.