The anatomy
Frontmatter
| Field | Constraint |
|---|---|
name | Required. ≤64 chars, lowercase a-z0-9 + hyphens. Must match the folder name. |
description | Required. ≤1024 chars. Decides whether your skill ever fires. |
license | Optional. SPDX name or bundled file reference. Required for a Solid State listing. |
compatibility | Optional. ≤500 chars of environment requirements. |
The description is the product
Agents load two things at startup: name and description. ~100 tokens. Everything else loads only on match. So the description does all the triggering work. It needs:- Specific verbs. “Extract financial data from PDFs” beats “help with documents.”
- Concrete triggers. Name the situations: “when the user uploads bank statements.”
- Explicit boundaries. “Not for scanned images.” Negative triggers prevent false fires.
The body
Structure for scanning: overview → prerequisites → steps → examples → error handling → limitations. KeepSKILL.md under 500 lines. Under 5,000 tokens is the recommendation.
Need more? Use the menu approach: SKILL.md lists what’s available, relative paths point to separate files. The agent reads only what the task needs. That’s progressive disclosure — the spec’s three load tiers (metadata → instructions → resources) exist so your skill costs nothing until it’s used.
Test before you ship
Three scenario classes:- Normal operations. Typical requests. Must work.
- Edge cases. Missing data, odd formats. Degrade gracefully or say what’s needed.
- Out-of-scope. Related-but-wrong requests. The skill must stay dormant.

