Skip to content

Skills

A skill is a folder with a SKILL.md file that teaches Claude Code a procedure or body of knowledge. Claude applies it automatically when it's relevant, or you invoke it by hand with /skill-name.

Claude Code skills follow the Agent Skills open standard, so the same SKILL.md works across tools. Custom commands have been merged into skills: an existing .claude/commands/deploy.md and a .claude/skills/deploy/SKILL.md both create /deploy.

SKILL.md format

The directory name becomes the command name (deploy//deploy). Each file is YAML frontmatter plus a Markdown body. Only description is required.

markdown
---
description: Run our release checklist and tag a version. Use when cutting a release.
allowed-tools: Bash(git tag *), Bash(git push *)
---

# Release

1. Confirm the working tree is clean.
2. Bump the version in `package.json`.
3. Tag and push: `git tag v$ARGUMENTS && git push --tags`.
FieldRequiredPurpose
descriptionYesWhat the skill does and when to use it. Claude reads this to decide auto-invocation.
disable-model-invocationNotrue means only you can trigger it with /name. Default false.
allowed-toolsNoTools Claude may use without prompting while the skill is active. Does not restrict other tools.

NOTE

Changes are detected live — edit a SKILL.md and the new version applies on the next turn. No restart needed.

Arguments and dynamic context

The body can pull in live data and user input before Claude ever sees it:

  • $ARGUMENTS expands to everything typed after the command. $0, $1, … access positional args.
  • !`command` runs a shell command and inlines its output. Example: !`git diff HEAD` injects the current diff.
markdown
---
description: Summarize a pull request from live GitHub data.
allowed-tools: Bash(gh *)
---

Summarize this PR for the changelog:

!`gh pr diff $ARGUMENTS`

Locations

ScopePath
Personal~/.claude/skills/<name>/SKILL.md
Project.claude/skills/<name>/SKILL.md (commit to share with the team)
Plugin<plugin>/skills/<name>/SKILL.md (invoked namespaced as /plugin:skill)

Auto-invocation vs manual

By default a skill is model-invoked: Claude reads the description, and when a task matches, it loads the body and applies it — no command needed. Write descriptions that name the trigger ("Use when reviewing a PR").

Set disable-model-invocation: true for manual-only skills. Use it for side-effecting workflows — /commit, /deploy, /send-slack — where you don't want Claude deciding to act on its own.

SettingAuto-invokedManual /nameIn context
(default)YesYesdescription always loaded; body loads on use
disable-model-invocation: trueNoYesBody loads only when you invoke

Skill vs slash command vs CLAUDE.md

  • Skill beats a slash command when it should fire autonomously based on context. A plain command only runs when you type it; a skill can do both.
  • Skill beats CLAUDE.md for knowledge that's only relevant sometimes. CLAUDE.md loads on every turn and costs context continuously. A skill's body loads only when used, so long reference material is free until needed. Move a CLAUDE.md section into a skill once it grows from a fact into a procedure.

Bundled skills

Claude Code ships several: /code-review, /debug, /loop, /run, /verify.

See ready-to-copy examples in assets/commands/ and assets/skills/, plus the workflow guides.

Source: code.claude.com/docs/en/skills

Released under the MIT License.