Skip to content
Claudekit.ai

The Agent Skills Standard Explained (SKILL.md, 2026)

What the Agent Skills open standard is, the SKILL.md fields the spec allows, how progressive disclosure works, and what Claude Code adds on top of the standard.

By Claudekit Team Published 9 min read

A skill you write for Claude Code can also run in Codex, Copilot, Cursor and a long list of other agents, because they all read the same SKILL.md format. That format is the Agent Skills open standard. This guide explains what the spec actually requires, how it keeps context small, and where Claude Code goes beyond it, so you know which skills will travel and which won’t.

Everything here is checked against the specification at agentskills.io and the official Claude Code skills docs as of October 2026.

Where the standard came from

Anthropic introduced Agent Skills in an engineering post in October 2025 and, per an update to that post dated 18 December 2025, published the format as an open standard “for cross-platform portability”. The specification and reference code now live at agentskills.io and the agentskills GitHub organisation, which the site describes as open to community contributions.

Anthropic’s own skills, such as the document skills behind pdf, docx and xlsx, live in the anthropics/skills repository, whose README points to agentskills.io for the standard itself.

Who supports it

The clients page lists dozens of products, including Claude Code and claude.ai, OpenAI Codex, GitHub Copilot in VS Code, Cursor, Gemini CLI, Goose, Amp, OpenCode, Roo Code and OpenHands. The list changes often, so check it rather than relying on a count.

Anatomy of a skill

A skill is a directory. Only SKILL.md is required:

pdf-report/
├── SKILL.md          # required: frontmatter + instructions
├── scripts/          # optional: code the agent can run
├── references/       # optional: docs loaded only when needed
└── assets/           # optional: templates, images, data

A minimal SKILL.md:

---
name: pdf-report
description: Builds a branded PDF report from a CSV. Use when the user asks for a report, summary PDF or export of tabular data.
license: MIT
---

# PDF report

1. Read the CSV and summarise each column.
2. Run scripts/build_report.py with the summary as JSON.
3. If the brand guide is needed, read references/brand.md.

The spec recommends keeping SKILL.md under 500 lines and referencing other files with relative paths one level deep.

The frontmatter fields the spec allows

FieldRequiredRules
nameYes1–64 chars; lowercase a-z, digits and -; no leading, trailing or double hyphen; must match the folder name
descriptionYes1–1024 chars; say what the skill does and when to use it
licenseNoLicense name or a bundled license file
compatibilityNo1–500 chars on environment needs; the spec notes most skills don’t need it
metadataNoString-to-string map for anything else
allowed-toolsNoExperimental; space-separated tools, e.g. Bash(git:*) Read

The description is the most important line you’ll write. Agents decide whether to load a skill from it, so put the trigger (“Use when the user asks for…”) in plain words.

Progressive disclosure: why skills are cheap

The standard is built around loading as little as possible:

TierWhat loadsWhenBudget the spec suggests
Metadataname + descriptionAt startup, for every skillAbout 100 tokens per skill
InstructionsSKILL.md bodyWhen the skill is activatedUnder 5,000 tokens recommended
Resourcesscripts/, references/, assets/Only when the instructions call for themNo fixed limit

Anthropic’s post compares this to a manual: table of contents first, then the chapter, then the appendix. In practice, it means you can install many skills without filling the context window. Our context management guide shows how to check what’s loaded in Claude Code.

Validating a skill

The reference library, skills-ref, has a validator:

git clone https://github.com/agentskills/agentskills
cd agentskills/skills-ref
pip install -e .        # or: uv sync
skills-ref validate ./path/to/pdf-report

It also offers read-properties and to-prompt. Its README says it is “intended for demonstration purposes only” and not for production, so treat it as a lint pass, not a gate. It isn’t published as a package; install from source as above.

What Claude Code adds on top

Claude Code follows the standard and, in its docs’ words, extends it with “invocation control, subagent execution, and dynamic context injection”. The extra frontmatter includes:

Claude Code fieldWhat it does
disable-model-invocationOnly you can run the skill (as /name), Claude won’t auto-load it
user-invocableHide it from the / menu but let Claude use it
argument-hint, argumentsDocument and name arguments for /name arg
context: fork, agentRun the skill in a forked subagent context
model, effortOverride model or effort for the skill
pathsOnly offer the skill when matching files are involved
hooksAttach hooks scoped to the skill
when_to_use, disallowed-tools, background, shellExtra routing and tool control

The body can use $ARGUMENTS, $0/$1, ${CLAUDE_SKILL_DIR} and !`command` injection. In Claude Code every field is optional; if name is missing, the folder name is used. The full walkthrough is in our Claude Code skills guide, and custom commands are covered in the slash commands cheatsheet.

The portability trap

Those extensions are where cross-tool sharing breaks. Claude Code’s docs note that when you upload a skill to claude.ai or the Skills API, only the six spec fields are accepted, and an unknown key fails with an error like:

Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name

Other clients may silently ignore fields they don’t know, which can be worse: a skill you marked disable-model-invocation could auto-load elsewhere.

Writing skills that travel

  1. Stick to spec fields in skills you publish. Keep Claude Code extras in a separate, Claude-only skill if you need them.
  2. Name the folder and name identically, lowercase with hyphens.
  3. Put the trigger in description, not just a summary.
  4. Avoid tool-specific instructions like “use the Task tool”. Describe the outcome (“delegate the search to a subagent if available”).
  5. Make scripts self-contained: state dependencies in compatibility, and fail with clear messages.
  6. Validate with skills-ref validate before you share.

Where to find standard skills

Skills in your Claude kit

Skills are the most portable layer of a Claude kit: CLAUDE.md and hooks are Claude Code-specific, but a spec-clean skill moves with you to Codex or Copilot. That’s why multi-runtime kits are built mostly from skills; our Claude Code vs Codex comparison covers how the two tools load them.

Frequently asked questions

What is the Agent Skills standard?

It is an open format for packaging instructions, scripts and resources that AI agents load on demand. A skill is a folder with a SKILL.md file containing YAML frontmatter and Markdown instructions. Anthropic developed the format and published it as an open standard at agentskills.io.

Which fields are required in SKILL.md?

The specification requires name and description. name is 1-64 characters of lowercase letters, digits and hyphens and must match the folder name; description is 1-1024 characters. license, compatibility, metadata and the experimental allowed-tools field are optional.

Do skills written for Claude Code work in other tools?

Usually, if they stick to the spec fields and plain instructions. Claude Code adds its own frontmatter such as disable-model-invocation, argument-hint and context: fork; other clients may ignore those, and claude.ai rejects unknown keys when you upload a skill.

How do I validate a skill against the spec?

The reference library skills-ref includes a validate command: skills-ref validate ./my-skill. Its README says it is for demonstration and not meant for production, and it installs from the source repository rather than a package registry.

Get the weekly Claude digest

New skills, MCP servers, prompts and Claude updates — one short email a week. No spam, unsubscribe anytime.

The newsletter is launching soon. Follow the RSS feed in the meantime.