SKILL.md validator
Paste a SKILL.md or open a skill folder, and this tool checks it against the Agent Skills specification and Anthropic's skill docs. Each problem comes with its fix and the doc it comes from. It runs in your browser and sends nothing.
The check runs in your browser. Nothing is sent or saved.
Fails the spec
1 error, 3 warnings, 3 hints. 6 checks passed.
Errors (1)
These break the Agent Skills spec. Some clients will not load the skill.
- Error
Warnings (3)
The spec allows these, but a client or the reference validator rejects or changes them.
- Warning
metadata has values that are not strings
version (a number). The spec wants string values. Put them in quotes, for example version: "1.0". Unquoted, 1.0 reads as the number 1.
Source: Agent Skills specification - Warning
1 field only Claude Code reads: argument-hint
Claude Code accepts these. claude.ai uploads, the Skills API and package_skill.py fail with "Unexpected key(s) in SKILL.md frontmatter". Remove them if you share the skill outside Claude Code.
Source: Claude Code docs: Skills - Warning
allowed_tools looks like a typo for allowed-tools
Clients read allowed-tools and ignore allowed_tools, so this setting has no effect. Rename it to allowed-tools.
Source: Agent Skills specification
Hints (3)
Best practice from the spec and Anthropic's authoring guide.
- Hint
description does not say when to use the skill
The spec says the description should cover what the skill does and when to use it. Add a sentence such as: Use when the user mentions PDFs or forms.
Source: Agent Skills specification - Hint
description is not in the third person
Anthropic's guide says to write descriptions in the third person, because they go into the system prompt. Write "Processes Excel files", not "I can help you".
Source: Claude docs: Skill authoring best practices - Hint
The body uses Windows-style paths
Found references\forms.md. Anthropic's guide says to use forward slashes, which work on every platform: references/forms.md.
Source: Claude docs: Skill authoring best practices
---
name: pdf-tools
description: I can help you with PDFs.
license: Apache-2.0
allowed-tools: Read Bash(python:*)
metadata:
author: example-org
version: "1.0"
argument-hint: "[file]"
---- name: PDF-Tools becomes pdf-tools.
- allowed_tools: renamed to allowed-tools.
- metadata: every value is now a quoted string.
Where to save it
- Claude Code, all your projects docs
~/.claude/skills/pdf-tools/SKILL.md- Claude Code, this project docs
.claude/skills/pdf-tools/SKILL.md- Codex, all your projects docs
~/.agents/skills/pdf-tools/SKILL.md- Codex, this repository docs
.agents/skills/pdf-tools/SKILL.md- OpenClaw, this workspace docs
<workspace>/skills/pdf-tools/SKILL.md
6 checks passed
- Pass
Starts with YAML frontmatter between --- lines
Source: Agent Skills specification - Pass
The frontmatter YAML parses
Source: Agent Skills specification - Pass
name has no reserved words (anthropic, claude)
Source: Claude docs: Agent Skills - Pass
description is 1-1,024 characters (25)
Source: Agent Skills specification - Pass
description has no XML tags
Source: Claude docs: Agent Skills - Pass
SKILL.md is under 500 lines (16)
Source: Agent Skills specification
How to use it
- 1
Paste or open your skill
Paste the SKILL.md text, open the file, or open the whole skill folder. With the folder, the tool also checks that name matches the folder and that every linked file exists.
- 2
Fix errors, then warnings
Errors break the spec, so some clients will not load the skill. Warnings are rules from one client, such as claude.ai or Claude Code. Hints are best practice. Copy the corrected frontmatter if the tool offers one.
- 3
Install it and test the trigger
Save the folder at the path shown for your agent. Then ask for the task in plain words and check that the agent loads the skill. If it does not, put the words people use into the description.
Questions
What fields can SKILL.md frontmatter have?
The Agent Skills spec defines six fields: name and description are required, and license, compatibility, metadata and allowed-tools are optional. Claude Code reads more fields, such as when_to_use, disable-model-invocation, model and paths. claude.ai uploads and the Skills API accept only the six spec fields and fail on any other key.
What are the rules for a skill name?
A name is 1 to 64 characters of lowercase letters, numbers and hyphens. It cannot start or end with a hyphen or contain two hyphens in a row, and it must match the skill's folder name. Claude's docs also say it cannot contain the words anthropic or claude.
How long can a skill description be?
The description can be 1 to 1,024 characters. It should say what the skill does and when to use it, in the third person. Claude Code also cuts the description plus when_to_use at 1,536 characters in its skill list, so put the main use case first.
Why is my Claude skill not triggering?
Check two things first: the description must hold the words people use when they ask for the task, and the YAML frontmatter must parse. When the YAML breaks, Claude Code loads the skill with no fields, so Claude cannot match it by its description. A colon and a space inside an unquoted description break the YAML. Paste the file here to find the line.
Where do I put a SKILL.md file?
Put it in a folder named after the skill. For Claude Code, use ~/.claude/skills/name/SKILL.md for all projects or .claude/skills/name/SKILL.md for one project. Codex reads ~/.agents/skills and .agents/skills in the repository. OpenClaw reads the skills folder in its workspace.
Why does claude.ai say Unexpected key(s) in SKILL.md frontmatter?
The frontmatter has a field outside the six in the Agent Skills spec, often a Claude Code field such as argument-hint. claude.ai uploads, the Skills API and package_skill.py reject those keys. Remove them, or keep a separate copy of the skill for Claude Code.
How long should SKILL.md be?
Keep SKILL.md under 500 lines. The agent loads the whole file when the skill starts. Move long reference material into files under references/ and link each one directly from SKILL.md, one level deep.
Sources
Every path, key and command comes from the vendor docs below. We checked them on 2026-10-30.
Related playbooks
- Map an unfamiliar codebase into a checked architecture document before you change it
- Upgrade a framework across a repo with a coding agent and the test suite as the gate
- Turn small tracker issues into reviewed pull requests with cloud coding agents
- Test your local web app in a real browser and fix console errors in one loop
More free tools
- MCP Config GeneratorWrite the MCP config file, path and install command for Claude, Codex, VS Code and Cursor.
- AGENTS.md GeneratorWrite a lean AGENTS.md for Codex, Cursor, Copilot and Claude Code, or check the one you have.
- CLAUDE.md GeneratorWrite a CLAUDE.md for Claude Code, share it with AGENTS.md, or check the one you have.
- Claude Code Permissions BuilderBuild the permissions block of Claude Code's settings.json, with presets, plain rules and risk checks.
- Claude Code Cost CalculatorCompare Claude Code on the API with Pro, Max 5x and Max 20x, from your real token counts or an estimate.
- AI Agent FinderType a job and see which AI agents our sourced playbooks use for it, ranked by evidence.