HomeLearn › SKILL.md frontmatter reference

SKILL.md frontmatter reference

Every YAML frontmatter field a Claude Code SKILL.md recognizes — what each does, when you need it, and how the ClaudSkills registry indexes it. Two fields are required (name, description); everything else is optional metadata that improves discovery and behavior.

Quick reference

FieldTypeRequiredUsed by
namestringYesClaude Code, registry
descriptionstringYesClaude Code (auto-trigger), registry, SERP snippet
modelstringOptionalClaude Code (model selection hint)
allowed-toolslistOptionalClaude Code (tool whitelist)
user-invokableboolOptionalClaude Code (slash-command exposure)
tagslistOptionalRegistry (tag landing pages, related-skill ranking)
categorystringOptionalRegistry (overridden if classifier disagrees)
versionstringOptionalRegistry (display only)
licensestringOptionalRegistry (attribution display)
authorstringOptionalRegistry (display only)
argument-hintstringOptionalClaude Code (slash-command UI)
metadata.*nestedOptionalSkill-specific (free-form)

Required fields

name

Short identifier — typically matches the directory slug. Used as the canonical handle in Claude Code's skill list and as the H1 on the registry page. Convention: lowercase, hyphen-separated, under 40 chars. Examples: commit-push-pr, fabric, pre-mortem, osint.

Avoid spaces, capital letters, underscores, and slashes. The registry slugifies whatever you write (so "My Cool Skill" becomes my-cool-skill) but it's cleaner if your value is already slug-shaped.

description

The most important field — drives Claude Code's auto-activation matching AND becomes the meta description on the registry page (which becomes the SERP snippet). Two responsibilities, both critical:

YAML supports both inline strings and multi-line block scalars:

description: One-line description here.

Or for longer content:

description: |
  Multi-line description block.
  Useful when you need 2-3 sentences without escaping quotes.
  Keeps the YAML readable.

Behavior fields (Claude Code)

model

Hints which Claude model the skill should run on. Most skills don't need this — Claude Code uses the user's session default. Useful for:

Acceptable values are model family aliases (opus, sonnet, haiku) or explicit model IDs (claude-opus-4-7, etc.). Aliases are more durable across model releases.

allowed-tools

List of Claude Code tools the skill is permitted to use. When set, Claude limits itself to this whitelist while the skill is active — useful for security-sensitive skills that should never write files or shell out.

allowed-tools:
  - Read
  - Grep
  - Bash
  - WebFetch

Common tool names: Read, Write, Edit, Bash, Grep, Glob, WebFetch, WebSearch, Agent. Omit the field entirely if your skill needs the default unrestricted toolset.

user-invokable

Boolean (default false). When true, the skill becomes available as an explicit slash command in Claude Code (e.g., /my-skill) — the user can invoke it directly even if their prompt doesn't match the description.

user-invokable: true
argument-hint: "[topic to research]"

Pair with argument-hint when the skill expects a parameter. Most skills leave this unset — auto-activation handles 90% of use cases.

argument-hint

String shown to the user in Claude Code's slash-command UI as a placeholder. Only meaningful when user-invokable: true. Examples: "[file path]", "[topic to research]", "[start date] [end date]".

Registry / discovery fields

tags

List of strings the registry uses to build tag landing pages and rank related skills. The ClaudSkills tag taxonomy follows a namespaced convention:

Mix freely — most skills carry 3-8 tags spanning multiple namespaces. Untyped tags (no namespace prefix) work too but don't get rolled up into the topic taxonomy.

category

One of the 10 ClaudSkills top-level categories: security, engineering, growth, sales, content, science, product, tools, ads, general. The registry's classifier overrides this field if it disagrees (the classifier is more reliable than author self-declaration across 56k mined skills) — so this field is more a hint than an authority.

version

Semver-ish string. Display only — Claude Code doesn't enforce versioning between sessions. Common values: 1.0.0, 2024.11.0, v3.2-beta.

license

SPDX identifier or freeform string. The registry preserves whatever you set; common values include MIT, Apache-2.0, BSD-3-Clause, UNLICENSE. If your skill ships embedded prompts or example data with a different license, mention it in the body — the frontmatter field captures the primary license.

author

Display string — usually a name or handle. The registry derives attribution from the source GitHub repo's owner; this field is for cases where the repo owner differs from the actual author (e.g., contributions to a monorepo).

Free-form metadata

metadata.*

Anything under a top-level metadata: map is preserved verbatim by the registry but not interpreted. Use it for skill-specific config that the body references:

metadata:
  api_base: https://api.example.com/v1
  rate_limit: 60
  default_model: claude-sonnet-4-6

The body can then reference these values: "Use the api_base from frontmatter for all calls." This is the cleanest way to make config visible at the top of the file rather than buried in body prose.

Complete example

---
name: cold-email-writer
description: |
  Generates cold outreach emails in the user's brand voice from a
  prospect description and value proposition. Use when the user mentions
  cold email, outbound, prospecting, or sales outreach.
model: sonnet
allowed-tools:
  - Read
  - Bash
  - WebFetch
user-invokable: true
argument-hint: "[prospect description]"
tags:
  - type:generator
  - lang:python
  - tool:salesforce
  - ai:claude
category: sales
version: 2.1.0
license: MIT
author: Adam Lankamer
metadata:
  brand_voice_path: ~/.config/cold-email/brand-voice.md
  default_max_words: 120
  default_cta: "Book a 15-min intro call"
---

# Cold Email Writer

[skill body starts here...]

Now you know every field. The next question is usually "when do I use a skill versus an MCP server?" — see Claude Code skills vs MCP servers.

Found a missing field or schema change? Email acreatorstore@translatea.com.