Guides · Claude Code

Claude Code skills. What they are, and how to write one.

A skill turns a procedure you keep repeating into a command Claude can run on its own. Here is where skills live, which settings matter, and what to check when one will not fire.

Level Intermediate
Read time 9 min
Last checked October 31, 2026
By Yender Fonseca

A Claude Code skill is a SKILL.md file with instructions that Claude uses automatically when relevant, or that you run directly as /skill-name. Write one when you keep pasting the same instructions into chat, or when a section of your CLAUDE.md has grown into a procedure. Unlike CLAUDE.md, a skill's body loads only when it is used.

01Skills and slash commands

If you learned Claude Code a while ago, this is the main change. Custom commands have merged into skills. .claude/commands/deploy.md and .claude/skills/deploy/SKILL.md both create /deploy and work the same way, and your existing command files keep working.

Skills add three things a command file does not have: a folder for supporting files, frontmatter that controls who can invoke them, and the ability for Claude to load them on its own.

02Where skills live

The location sets who gets the skill:

Personal

~/.claude/skills/<name>/SKILL.md Every project on your machine.

Project

.claude/skills/<name>/SKILL.md This repository. Commit it and your team has it.

Nested

<subdir>/.claude/skills/<name>/SKILL.md Sessions in or below that folder. Useful in monorepos.

Plugin

<plugin>/skills/<name>/SKILL.md Wherever the plugin is enabled, as /plugin-name:skill-name.

Account

Your claude.ai skills. Sessions signed in with that account. They download into ~/.claude/skills/synced/.

Enterprise

Managed settings. Deployed by your organization to every user on its machines.

When two skills share a name, enterprise beats personal, and personal beats project. Plugin skills are namespaced, so they never collide.

03What ships built in

Claude Code includes bundled skills you can run today, such as /code-review, /batch, /debug, /loop, /run, /verify, /claude-api, and /skill-doctor. Check these before writing your own. A skill of yours with the same name replaces the bundled command, so pick names on purpose.

Anthropic's document skills are a different case. The Word, Excel, PowerPoint, and PDF skills are not bundled with Claude Code, though pdf and xlsx do arrive through account sync if you sign in with claude.ai.

04Write your first skill

This one drafts customer-facing release notes from your git history. Create the folder:

Shell
mkdir -p ~/.claude/skills/release-notes

Save this inside that folder as SKILL.md:

Markdown · SKILL.md
---
name: release-notes
description: Drafts customer-facing release notes from recent git commits. Use when the user asks for release notes, a changelog entry, or a summary of what shipped.
disable-model-invocation: true
allowed-tools: Bash(git log *)
---

Write release notes from these commits:

!`git log --oneline -20`

Rules:
- Group entries under Added, Changed, and Fixed.
- Describe what changed for the customer, not the code.
- Skip merge commits and internal refactors.
- If nothing is customer-facing, say so.

Now type /release-notes. No restart needed, because Claude Code watches skill folders and picks up edits live. The one exception is creating a top-level .claude/skills/ directory mid-session, which needs /reload-skills.

Two details are doing real work here. The !`command` line runs before Claude sees the skill, so it receives the actual commit list. And disable-model-invocation: true means only you can start it, which suits anything you want to time yourself.

05The frontmatter that matters

In Claude Code every field is optional, though description is strongly recommended. Without one, Claude falls back to the first line of the file. These are the fields worth learning first:

Trigger

description What it does and when to use it. Cut off at 1,536 characters in the skill listing, so put the key use case first.

Control

disable-model-invocation: true Only you can run it, and its description stays out of context.

Control

user-invocable: false Hidden from the / menu, so only Claude uses it. Good for background knowledge.

Scope

paths Glob patterns that limit automatic activation to matching files.

Access

allowed-tools Tools usable without a permission prompt. The grant clears when you send your next message.

Run

context: fork Runs the skill in a separate subagent, with agent choosing the type.

Run

model and effort Override the model or effort level for the current turn.

Enforce

hooks Hooks that switch on when the skill is invoked and stay active for the session.

If the skill will also run on claude.ai

Uploads and the Skills API accept only name, description, license, compatibility, metadata, and allowed-tools. Any other field causes a hard error at upload, so a skill using disable-model-invocation stays in Claude Code. Claude Code simply ignores fields it does not recognize.

06When a skill is the wrong tool

Skills are not the answer to everything. Each of these does a job a skill does badly:

CLAUDE.md

Facts that are always true. Build commands, conventions, project structure. Short, and loaded in every session.

Hooks

Rules that must never be skipped. A hook runs every time its event occurs, whether or not Claude is paying attention. A skill is guidance. A hook is enforcement.

Subagents

Noisy work you want out of the main thread. Delegation, not instruction. A skill can start one with context: fork.

Plugins

Packaging. The way to distribute skills along with hooks, agents, and MCP servers.

07Install and share

For a team, commit .claude/skills/ to the repository. For wider distribution, publish a plugin. Installing from a marketplace takes two commands:

Claude Code
/plugin marketplace add anthropics/skills
/plugin install document-skills@anthropic-agent-skills

Run /plugin with no arguments to browse and manage what you have installed. Skills have the same network access as any other program on your computer, so read third-party skills first, scripts included.

08When a skill misbehaves

Won't fire

Check the description first. Does it use the words you actually type? Ask "What skills are available?" to confirm it loaded, then invoke it with /skill-name. To catch broken frontmatter, run claude plugin validate ~/.claude/skills (v2.1.233 or later) or start with --debug.

Fires too much

Narrow the description, or add disable-model-invocation: true if it should only run on request.

Fades out

Claude follows it, then stops. The skill is added to the conversation once and not re-read. After compaction, Claude Code keeps the first 5,000 tokens of each invoked skill, within 25,000 tokens combined. Put key rules at the top, invoke it again, and move anything critical to a hook.

Cut short

Too many skills installed. The listing budget scales at 1% of the context window, and the least-used skills lose their descriptions first. Run /skill-doctor to find ones to switch off.

Vanished

Skills disappeared from ~/.claude/skills/. Look in ~/.claude/skills/.trash/, and restore them before the default 30-day cleanup. Keep your own skills out of synced/, since a later sync can overwrite it.

Also in Guides

What are Claude Skills? →

Claude skills for content creation →

How to connect Claude to Notion →

Back to Notes & Guides →

The Operator Kit

Twelve skills, already written from real studio work.

Unzip them into your skills folder and they work in Claude Code. $2 each, or $5 for all twelve. See the Operator Kit.