A skill is a folder with a SKILL.md file inside it. The file starts with YAML frontmatter between --- lines, followed by Markdown instructions. Claude Code puts the name and description of each skill in a short listing up front and loads the full body only when the skill is needed. This tool builds that file for you and checks files you already have.
How do I use this tool?
- Pick a target: portable (Agent Skills spec fields only, safe for claude.ai uploads and the Skills API) or Claude Code (all Claude Code fields).
- Enter a name, such as
pdf-processing. It must match the folder name. - Write a description that says what the skill does and when to use it.
- Set optional fields, then write the instructions in the body. Leave the body empty to start from a template with steps, examples and edge cases.
- Copy or download the file and save it as
.claude/skills/<name>/SKILL.mdin your project, or~/.claude/skills/<name>/SKILL.mdfor all projects.
To validate, switch to the validator tab and paste a full SKILL.md. It checks that the frontmatter starts on the first line, parses as YAML, uses known fields with the right types and stays within length limits.
What are the frontmatter rules?
The Agent Skills specification defines six fields. Claude Code accepts these and adds its own, listed in the Claude Code skills docs.
| Field | Required (spec) | Rule |
|---|---|---|
name | Yes | 1 to 64 characters. Lowercase letters, numbers and hyphens only. No hyphen at the start or end, no --. Must match the parent folder name. |
description | Yes | 1 to 1024 characters. Say what the skill does and when to use it. |
license | No | A license name or a bundled license file. |
compatibility | No | 1 to 500 characters. Environment needs, such as required packages. |
metadata | No | A map of string keys to string values. |
allowed-tools | No | Space-separated list of pre-approved tools. Marked experimental. |
In Claude Code, every field is optional: name defaults to the folder name and description defaults to the first line of the body. Claude Code adds fields such as when_to_use, disable-model-invocation, user-invocable, argument-hint, arguments, model, effort, context, agent, paths, hooks and shell. Unknown field names are ignored in Claude Code, but outside it (claude.ai uploads, the Skills API) only the six spec fields are allowed and any other key causes a hard error. The validator flags this.
How long can the description be?
The spec caps description at 1024 characters. Claude Code also truncates the combined description and when_to_use text at 1,536 characters in the skill listing by default (the skillListingMaxDescChars setting changes this). If you have many skills, Claude Code can drop some descriptions to fit the listing budget, so put the most important trigger words first.
Worked example
--- name: changelog-writer description: Writes a changelog entry from the staged git diff. Use when the user asks for release notes, a changelog line or a summary of changes. license: MIT metadata: author: example-team version: "1.0" --- ## Steps 1. Read the staged diff. 2. Group changes into Added, Changed and Fixed. 3. Write one line per change in plain English. ## Edge cases - If nothing is staged, say so and stop.
This file passes both the portable and Claude Code checks. Save it in a folder named changelog-writer.
What are the common mistakes?
- Name does not match the folder. The spec requires them to match.
- Capital letters or underscores in the name.
PDF_Toolsfails;pdf-toolspasses. - A vague description. “Helps with PDFs” gives Claude nothing to match on. Name the tasks and the words users say.
- Frontmatter not on line one. The opening
---must be the first line of the file. - Unquoted version numbers in metadata. Write
version: "1.0"so it stays a string. - Claude Code fields in a portable skill. Fields like
contextorpathsbreak uploads to claude.ai.
Tips
- Keep
SKILL.mdunder 500 lines and move long reference material into files underreferences/, linked with relative paths one level deep. - Use
disable-model-invocation: truefor actions with side effects, such as deploys, so only you can start them. - Use
$ARGUMENTSin the body to receive text typed after/skill-name. - Check the result with the official
skills-ref validate ./my-skillcommand before you share it.
For a longer walkthrough, read our guide to Claude Code skills and the basics in what is Claude Code. If you need custom skills built for your team, see our AI automation service.
Last updated: October 19, 2026