SKILL.md Fundamentals

The required and optional frontmatter fields, the naming rules, and what makes a skill valid.

🔰 beginner
⏱️ 45 minutes
👤 SuperML Team

· Agentic AI · 5 min read

📋 Prerequisites

  • What Are Agent Skills? (previous lesson)

🎯 What You'll Learn

  • Write valid SKILL.md frontmatter, including all required and optional fields
  • Apply the naming rules for the name field without triggering validation errors
  • Explain why the description field matters more than any other part of the file

Two Parts, One File

Every skill centers on one file: SKILL.md. It has exactly two parts — YAML frontmatter, then a Markdown body:

---
name: skill-name
description: A description of what this skill does and when to use it.
---

Markdown instructions go here.

This lesson covers the frontmatter — the metadata block between the --- lines. What goes in the body, and how the surrounding folder is organized, is the next lesson, Skill Anatomy. For now: two fields are required, and everything else is optional.

The Frontmatter Fields

FieldRequiredConstraints
nameYesMax 64 characters. Lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen.
descriptionYesMax 1024 characters. Non-empty. Describes what the skill does and when to use it.
licenseNoLicense name or reference to a bundled license file.
compatibilityNoMax 500 characters. Environment requirements (intended product, system packages, network access).
metadataNoArbitrary key-value mapping for additional, client-specific metadata.
allowed-toolsNoSpace-separated string of pre-approved tools the skill may use. Experimental.

Only two fields are required. Here’s the minimum valid skill:

---
name: skill-name
description: A description of what this skill does and when to use it.
---

And a more complete example using the optional fields:

---
name: pdf-processing
description: Extract PDF text, fill forms, merge files. Use when handling PDFs.
license: Apache-2.0
metadata:
  author: example-org
  version: "1.0"
---

The name Field, in Detail

This is the field most likely to trip up a first skill, because it’s more constrained than a typical Markdown title:

  • 1–64 characters
  • Only unicode lowercase alphanumeric characters (a-z, 0-9) and hyphens (-)
  • Must not start or end with a hyphen
  • Must not contain consecutive hyphens (--)
  • Must match the parent directory name — a skill at pdf-processing/SKILL.md must have name: pdf-processing

Valid:

name: pdf-processing
name: data-analysis
name: code-review

Invalid, and why:

name: PDF-Processing    # uppercase not allowed
name: -pdf                # cannot start with a hyphen
name: pdf--processing    # consecutive hyphens not allowed

The description Field Matters More Than Any Other

Here’s the fact that makes description worth slowing down for: it’s the only thing an agent reads before deciding whether to use your skill at all. At session start, an agent scans every installed skill and loads just its name and description — not the body, not the scripts, nothing else. If a user’s request doesn’t match what the description says, the skill never activates, no matter how good the instructions inside it are.

That gives description two jobs at once, and good ones do both:

  • What the skill does
  • When to use it
# Good — covers both what and when
description: Extracts text and tables from PDF files, fills PDF forms, and merges multiple PDFs. Use when working with PDF documents or when the user mentions PDFs, forms, or document extraction.

# Poor — technically valid, practically useless
description: Helps with PDFs.

The poor version doesn’t tell the agent when to reach for it. “Helps with PDFs” could mean anything from OCR to form-filling to page rotation — an agent matching against it has no real signal to go on. Some rules of thumb:

  • 1–1024 characters (the format’s hard limit)
  • Include specific keywords a user might actually type — the exact nouns and verbs of the task, not a vague summary
  • Say when to use the skill, not just what it does

You’ll get real practice at this in the testing lesson later in the course, where you’ll check whether a description actually triggers on the prompts it should.

Optional Fields, Briefly

Most skills you write early on won’t need these — they exist for cases that come up as skills get more sophisticated.

license — keep it short: either a license identifier or a pointer to a bundled file.

license: Apache-2.0
license: Proprietary. LICENSE.txt has complete terms

compatibility — only include this if your skill has real environment requirements. Most skills don’t need it.

compatibility: Designed for Claude Code (or similar products)
compatibility: Requires git, docker, jq, and access to the internet
compatibility: Requires Python 3.14+ and uv

metadata — a free-form string-to-string map for anything a specific client wants to track that isn’t part of the core spec.

metadata:
  author: example-org
  version: "1.0"

allowed-tools — experimental, and support varies by client. Pre-approves specific tools so the agent doesn’t need to ask permission for each one during execution.

allowed-tools: Bash(git:*) Bash(jq:*) Read

Validating a Skill

The skills-ref reference library checks that your frontmatter is valid and follows the naming conventions above:

skills-ref validate ./my-skill

Run this before you consider a skill finished — it catches the kind of naming mistake (uppercase in name, a missing description) that’s invisible until an agent silently fails to load the skill.

Summary

  • SKILL.md is YAML frontmatter, then a Markdown body — this lesson covered the frontmatter
  • name and description are the only required fields, but name has strict formatting rules and must match the directory name
  • description is the single most important field in the whole file — it’s the only thing an agent sees before deciding to use your skill, so it needs to say both what the skill does and when to reach for it
  • Optional fields (license, compatibility, metadata, allowed-tools) exist for cases most early skills won’t need
  • skills-ref validate catches formatting mistakes before they cause silent failures

Next, you’ll zoom out from the frontmatter to the whole skill folder — what goes in it, and how the pieces work together.

Part of a structured course

Agent Skills Mastery: Create and Use SKILL.md

Learn Agent Skills from zero — the open SKILL.md format for packaging expertise into portable capabilities for Claude, Claude Code, and any compatible AI agent. Free beginner course.

Lesson 2 of 10 ⏱ 4 weeks beginner Free

Related Tutorials

🔰beginner ⏱️ 240 minutes

Capstone: Build Five Real Skills

Design, build, and test five small, genuinely useful skills covering five different jobs a skill can do.

Agentic AI5 min read
agent skillscapstoneproject +1
🔰beginner ⏱️ 90 minutes

Creating Your First Skill

Write, install, and trigger a working skill end to end — from an empty folder to an agent using it correctly.

Agentic AI6 min read
agent skillsclaude codetutorial +2
🔰beginner ⏱️ 90 minutes

Files & Resources

Ship executable code and reference docs alongside SKILL.md, and design scripts an agent can run reliably in a non-interactive shell.

Agentic AI7 min read
agent skillsscriptsreferences +2
🔰beginner ⏱️ 45 minutes

Progressive Loading

The three-tier loading model in depth — what loads when, and why it keeps agents context-efficient at scale.

Agentic AI5 min read
agent skillsprogressive disclosurecontext management +1