Notes

What a Claude Code skill actually is, and how to install one

July 28, 2026 · 6 min read

“Skill” is one of four words in the Claude Code ecosystem that sound like they mean the same thing. They do not. The short version:

  • A skill is a folder of instructions Claude reads when the task matches. It teaches Claude how to do something.
  • An MCP server is a running process exposing tools. It gives Claude something new to call.
  • A slash command is a saved prompt you trigger by name.
  • A subagent is a separate Claude instance with its own context, for delegating a chunk of work.

A skill is by far the simplest of the four. It is a directory with a markdown file in it. There is no process to run, no port, no authentication, no dependency to install.

What a skill looks like on disk

The minimum is one file:

my-skill/
└── SKILL.md

SKILL.md opens with YAML frontmatter holding a name and a description, then contains the instructions themselves:

---
name: my-skill
description: What this does and when Claude should reach for it.
---

# My Skill

Step-by-step instructions, conventions, code samples,
gotchas — whatever Claude needs to do the job well.

Bigger skills add folders alongside it. A common shape, and the one Copy Edit Mode uses:

copy-edit-feature/
├── SKILL.md
├── references/        # deep guides, read only when relevant
│   ├── nextjs-app-router.md
│   ├── other-stacks.md
│   └── deployment.md
└── assets/            # files copied into the user's project
    └── scripts/

The split matters for a practical reason. Claude does not load everything at once — the description is what it sees when deciding whether the skill is relevant, and the reference files are read only when the task calls for them. Keeping the entry point short and the detail in references/ is what makes a large skill cheap to have installed.

How Claude decides to use one

The description field does the work. Claude matches the task against the descriptions of installed skills, and loads the ones that fit. This is why a good description names the trigger phrases a user would actually say, not just what the skill does.

Weak:

description: Helps with website content.

Strong:

description: Add an in-place copy-editing mode ("?edit") to any web
  app. Use when the user asks to add "the edit feature", "copy edit mode",
  "?edit", "in-place text editing", or "let the copywriter edit the site".

You can also invoke a skill by name with a slash, if you know it is there.

Installing one

Skills live in one of two places. Put a skill in your home directory and it is available in every project:

cp -R my-skill ~/.claude/skills/

Put it in a project and it travels with the repo for the whole team:

cp -R my-skill .claude/skills/

On Windows, the personal directory is %USERPROFILE%\.claude\skills\.

That is the entire install. Start Claude Code, or restart it if it was already running, and the skill is available. Nothing is compiled, nothing is registered, and removing the folder uninstalls it completely.

Writing a good one

Having built and shipped a couple, the things that separate a skill that works from one that mostly gets ignored:

  • Write trigger phrases into the description. The words a user would type, verbatim.
  • Be specific about the failure modes. The value of a skill is largely the mistakes it prevents. Say what not to do and why.
  • Include real, runnable code. Not pseudocode. Claude will adapt working code far more reliably than it will invent it from a description.
  • Keep SKILL.md short. Push depth into references/, and say in the entry point when to read each one.
  • State the invariants. Things that must hold no matter what — “never render stored text as HTML”, “the in-code copy is always the fallback”. These are what stop a plausible-looking implementation from being subtly wrong.

Skill or MCP server?

A quick test:

Does Claude need to talk to something it cannot already reach? Your Jira, your database, an internal API. That is an MCP server — you are giving it a new capability.

Does Claude need to know how you want something done? Your deployment steps, your review checklist, how to wire a feature into your stack. That is a skill — the capability already exists, the knowledge does not.

Copy Edit Mode is a skill, because writing files and editing React components is something Claude Code can already do. What it lacks is the specific design: the sparse override layer, the fail-open read, the plain-text invariant, the password gate that is checked on the server. That design is the product.

Try one

Copy Edit Mode ships as two skills — one that adds the ?edit mode to your app, one that rotates the editor password safely. Copy two folders into ~/.claude/skills/ and ask Claude to add the edit feature to your project. $7.99 once.