The directory the SKILL.md sits in, e.g. .claude/skills/release-notes/
Result
0 errors · 0 warnings · 7 body lines- Valid for Claude Code.
- allowed-tools is space-separated and a rule contains a space. That is fine, but a comma-separated list or YAML list is easier to read.
Parsed frontmatter
- name
- release-notes
- description
- Writes release notes from merged pull requests since the last tag. Use when the user asks for a changelog, release notes or a summary of what shipped.
- allowed-tools
- Bash(git log *) Bash(git tag *) Read
Every SKILL.md frontmatter field
nameCommand name shown in the / menu. Defaults to the directory name. See How a skill gets its command name for how the field interacts with the name you type to invoke the skill.descriptionWhat the skill does and when to use it. Claude uses this to decide when to apply the skill. If omitted, uses the first non-empty line of the markdown content. Put the key use case first: the combined description and when_to_use text is truncated at 1,536 characters in the skill listing to reduce context usage. Angle brackets in the text show as < and >.when_to_useAdditional context for when Claude should invoke the skill, such as trigger phrases or example requests. Appended to description in the skill listing and counts toward the 1,536-character cap.argument-hintHint shown during autocomplete to indicate expected arguments. Example: [issue-number] or [filename] [format].argumentsNamed positional arguments for $name substitution in the skill content. Accepts a space-separated string or a YAML list. Names map to argument positions in order.disable-model-invocationSet to true to prevent Claude from automatically loading this skill. Use for workflows you want to trigger manually with /name. Also prevents the skill from being preloaded into subagents and from running when a session-scoped scheduled task fires with the skill as its prompt. Default: false.user-invocableSet to false when only Claude should invoke the skill: Claude Code hides it from the / menu and doesn't run it when you type /name. Use for background knowledge users shouldn't invoke directly. Default: true.allowed-toolsTools Claude can use without asking permission during the turn that invokes this skill. The grant clears when you send your next message. Accepts a space- or comma-separated string, or a YAML list. See Pre-approve tools for a skill.disallowed-toolsTools removed from Claude's available pool while this skill is active. Use for autonomous skills that should never call certain tools, such as AskUserQuestion for a background loop. Accepts a space- or comma-separated string, or a YAML list. The restriction clears when you send your next message. Like deny rules, the field can't remove EndConversation while any other tool remains.modelModel to use when this skill is active. The override applies for the rest of the current turn and isn't saved to settings. The session model resumes when you send your next prompt. Accepts the same values as /model, or inherit to keep the active model. A value excluded by your organization's availableModels allowlist isn't used, and the session keeps its current model. In auto mode, and in plan mode while the classifier reviews commands, a model that auto mode doesn't support also isn't used, and the session keeps its current model. With context: fork, the value sets the forked subagent's model instead, and an excluded value follows the same rules as a subagent model override.effortEffort level for the rest of the current turn. Overrides the session effort level, but not the CLAUDE_CODE_EFFORT_LEVEL environment variable. With context: fork, the value sets the forked subagent's effort level instead. When you omit it, the level comes from the effort resolution order. Options: low, medium, high, xhigh, max; available levels depend on the model.contextSet to fork to run in a forked subagent context. See Run skills in a subagent.agentWhich subagent type to use when context: fork is set.backgroundOnly applies with context: fork. Set to false to wait for the forked subagent's result in the turn that invoked the skill, instead of running it in the background. Default: true.hooksHooks that Claude Code registers when the skill is invoked and keeps running for the rest of the session. See Hooks in skills and agents for the configuration format, the once option, and the limits on skill hooks.pathsGlob patterns that limit when this skill is activated. Accepts a comma-separated string or a YAML list. When set, Claude loads the skill automatically only when working with files matching the patterns. Patterns are relative to Claude's current working directory, and files outside that directory don't match. Uses the same glob format as path-specific rules.shellShell to use for ` !command and ``! blocks in this skill. Accepts bash (default) or powershell. Setting powershell runs inline shell commands via PowerShell when the PowerShell tool is enabled: it's on by default on Windows without Git Bash, on by default with Git Bash for claude.ai and Console accounts, and needs CLAUDE_CODE_USE_POWERSHELL_TOOL=1 in Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry sessions and on macOS, Linux, and WSL. Set it to 0 to turn the tool off.metadataFree-form YAML map for your own key-value data, such as entitlement or catalog fields, read by your own tooling from SKILL.md. Claude Code doesn't act on its contents, and drops a value that isn't a map. Don't reuse frontmatter field names such as paths as keys.licenseLicense covering the skill. Part of the Agent Skills spec; see Using skill frontmatter outside Claude Code. Claude Code accepts the field but doesn't act on it.compatibilityEnvironment requirements for the skill, such as intended products or system prerequisites, as defined by the Agent Skills spec; see Using skill frontmatter outside Claude Code. Accepts a string of up to 500 characters. Claude Code accepts the field but doesn't act on it.Need a skill from scratch? Try the skills generator, or browse thousands of working examples in the skills directory.
Frequently asked questions
What is the SKILL.md format?
A SKILL.md file starts with YAML frontmatter between two --- lines, holding at least a name and a description, followed by Markdown instructions. It lives in its own folder, for example .claude/skills/release-notes/SKILL.md, alongside any scripts or reference files it uses.
Which frontmatter fields are required?
In Claude Code nothing is strictly required, but a description is strongly recommended because Claude uses it to decide when to load the skill. For claude.ai uploads and the Skills API, name and description are required and only name, description, license, compatibility, metadata and allowed-tools are accepted.
How long can a skill description be?
Claude Code truncates description plus when_to_use at 1,536 characters in the skill listing. The Agent Skills spec used by claude.ai and the API caps description at 1,024 characters. Put the main use case in the first sentence either way.
Why is my skill not being used?
Usually the description is too vague. Say what the skill does and when to use it, with the words a user would actually type ("Use when the user asks for release notes or a changelog"). Also check disable-model-invocation is not set to true.
Is my SKILL.md sent anywhere?
No. The validator runs entirely in your browser; nothing you paste is uploaded.
Sources: Claude Code skills docs, Agent Skills spec. Claude Code Agents is an independent site, not affiliated with Anthropic.