SKILL.md file with instructions, and Claude adds it to its toolkit. Claude uses skills when relevant, or you can invoke one directly with /skill-name.
Create a skill when you keep pasting the same instructions, checklist, or multi-step procedure into chat, or when a section of CLAUDE.md has grown into a procedure rather than a fact. Unlike CLAUDE.md content, a skill’s body loads only when it’s used, so long reference material costs almost nothing until you need it.
For built-in commands like
/help and /compact, and bundled skills like /debug and /code-review, see the commands reference.Custom commands have been merged into skills. A file at .claude/commands/deploy.md and a skill at .claude/skills/deploy/SKILL.md both create /deploy and work the same way. Your existing .claude/commands/ files keep working. Skills add optional features: a directory for supporting files, frontmatter to control whether you or Claude invokes them, and the ability for Claude to load them automatically when relevant.Bundled skills
Claude Code includes a set of bundled skills, such as/doctor, /code-review, /batch, /debug, /loop, and /claude-api. Bundled skills are prompt-based: they give Claude detailed instructions and let it orchestrate the work using its tools. Most built-in commands instead execute fixed logic directly.
You invoke a bundled skill the same way as any other skill, by typing / followed by the skill name. Claude invokes some bundled skills automatically when relevant; others, including /verify, run only when you invoke them, which keeps you in control of when these longer-running checks spend time and tokens.
Bundled skills are available in every session. To turn them off, use the disableBundledSkills setting, which disables every bundled skill except /doctor.
The
/doctor setup checkup stays typable when disableBundledSkills is on, in Claude Code v2.1.205 and later. To hide it, set the DISABLE_DOCTOR_COMMAND environment variable or a skillOverrides entry of "doctor": "off". Before v2.1.205, /doctor was a built-in command rather than a bundled skill.Run and verify your app
Three bundled skills work together to launch your app and confirm changes against the running app instead of just tests:
All three skills require Claude Code v2.1.145 or later. Check your version with
claude --version or the /status command.
/run and /verify work without setup. They infer the launch from your project type (CLI, server, TUI, browser-driven) and from what’s in your README, package.json, or Makefile. That inference gets unreliable for projects that need anything beyond a standard launch: a database, an env file, a graphical session, a multi-step build.
/run-skill-generator records the recipe instead. It gets your app running from a clean environment, captures what worked (the install commands, the env vars, the launch script), and commits it as a per-project skill at .claude/skills/run-<name>/. After that, /run, /verify, and any other agent in the repo follow the recorded recipe instead of rediscovering it. Run /run-skill-generator once per project, and again if the build or launch process changes.
/verify can also record its own recipe. When it has to build and drive your app without a recorded recipe, it writes what worked to .claude/skills/verify/SKILL.md at the repo root, or in the touched package directory in a monorepo, so later runs and other agents follow the same steps. At the repo root, the recorded skill replaces the bundled /verify. This requires Claude Code v2.1.200 or later.
Claude edits the recorded file only when it steered a run wrong, such as a command that failed or a missing step, so you can commit the file without per-session diffs. Before v2.1.205, the bundled skill told Claude to fold in anything a run learned, which caused frequent merge conflicts.
Getting started
Create your first skill
This example creates a skill that summarizes the uncommitted changes in your git repository and flags anything risky. It pulls the live diff into the prompt before Claude reads it, so the response is grounded in your actual working tree rather than what Claude can guess from open files. Claude loads the skill automatically when you ask about your changes, or you can invoke it directly with/summarize-changes.
1
Create the skill directory
Create a directory for the skill in your personal skills folder. Personal skills are available across all your projects.
2
Write SKILL.md
Every skill needs a The
SKILL.md file with two parts: YAML frontmatter between --- markers that tells Claude when to use the skill, and markdown content with the instructions Claude follows when the skill runs. The directory name becomes the command you type, and the description helps Claude decide when to load the skill automatically.Save this to ~/.claude/skills/summarize-changes/SKILL.md:!`git diff HEAD` line uses dynamic context injection: Claude Code runs the command and replaces the line with its output before Claude sees the skill content, so the instructions arrive with the current diff already inlined.3
Test the skill
Open a git project, make a small edit to any file, and start Claude Code by running Or invoke it directly with the skill name:Either way, Claude should respond with a short summary of your edit and a list of risks.
claude. You can test the skill two ways.Let Claude invoke it automatically by asking something that matches the description: