Skip to content
Claude Library
English
Esc
↑↓navigate↵open⌘Jpreview
On this page

Skills

What skills are in Claude Code, how they get invoked, where they live, and how to write a simple SKILL.md.

A skill is a package of instructions that teaches Claude how to handle one kind of task — your deploy steps, a code review checklist, the conventions of a particular module. Instead of explaining the same thing every time, you write it down once as a skill.

The key part is that skills load on demand. Only a short description sits in the context; the full instructions come in when the task calls for them. That’s why you can keep many skills around without weighing the session down.

How they’re invoked

Manually

You type /skill-name in the prompt — just like any other slash command.

Automatically

Claude recognizes from the description that the skill fits the task and loads it itself.

That makes description the most important field: it’s the only thing Claude sees before deciding whether to open the skill.

/create-commit
/deploy-staging

Skills that come from a plugin are invoked with a prefix — the plugin name, a colon, the skill name:

/mattpocock-skills:tdd

Where they live

Location Scope When to use it
.claude/skills/<name>/SKILL.md This project only Conventions, commands, and processes specific to the repo. Committed with the code.
~/.claude/skills/<name>/SKILL.md All your projects Personal habits and workflows you carry everywhere.
Plugins Depends on the install Ready-made sets of skills, installed in one go.
Marketplace Depends on the install Public collections — add a marketplace, then install a plugin from it.
  • .claude/
    • skills/
      • deploy-staging/
        • SKILL.md
      • review-checklist/
        • SKILL.md
        • references/
          • checklist.md
        • scripts/
          • lint.sh
  • CLAUDE.md

A simple SKILL.md

The minimal skill is YAML frontmatter with name and description, followed by Markdown instructions:

---
name: deploy-staging
description: Deploys the current branch to staging. Use when the user asks to deploy, ship, or push to staging.
---

# Deploy to staging

## Before deploying

1. Check that the tests pass: `pnpm test`
2. Check that there are no uncommitted changes: `git status`

## Deploy

```bash
pnpm build
pnpm exec vercel deploy --prebuilt
```

## After deploying

Check the health endpoint and report the deployment URL.

What makes a description good

It says WHAT it does and WHEN to use it

Both, together. “Deploys to staging” on its own isn’t enough — add “Use when the user asks to deploy or ship”.

It contains the words you'll actually type

If you say “push it to staging”, put “staging” and “push” in the description. Matching is semantic, but the concrete words help.

It's short

One or two sentences. The description sits in the context permanently — a long one costs tokens in every session.

A skill can be just a prompt

Not every skill wraps scripts and reference files. If there’s a paragraph you keep retyping — a review stance, a formatting rule, a request you make at the start of every project — that paragraph already is a skill. Save it once and it becomes one command.

The clearest example is grilling, Matt Pocock’s interview skill. Its entire body:

Interview me relentlessly about every aspect of this until we reach a shared
understanding. Walk down each branch of the decision tree, resolving dependencies
between decisions one-by-one. For each question, provide your recommended answer.

Ask the questions one at a time, waiting for feedback on each question before
continuing. Asking multiple questions at once is bewildering.

If a *fact* can be found by exploring the environment (filesystem, tools, etc.),
look it up rather than asking me. The *decisions*, though, are mine — put each one
to me and wait for my answer.

Do not act on it until I confirm we have reached a shared understanding.

Why it earns a permanent slot: a brain dump always has gaps you can’t see, because you don’t know which parts of your own context are missing. An interview finds them — one question at a time, each arriving with a recommended answer so you’re editing instead of authoring. It’s the packaged form of the “make it ask until it’s sure” habit.

It ships in the official plugin marketplace: run /plugin, install mattpocock-skills, then say “grill me about this plan” — or invoke it directly with the plugin prefix.

Supporting files

A skill isn’t only one file. Next to SKILL.md you can put:

  • references/ — long reference material Claude reads only when it needs it.
  • scripts/ — ready-made scripts the skill calls instead of rewriting them each time.
  • assets/ — templates, configs, patch files.

The idea is to keep SKILL.md short and have it point at the rest: “for the full list, see references/checklist.md”.

Skill or subagent?

Skill Subagent
What it is Instructions for the current session A separate session with its own context
Context Enters your context Has its own, isolated context
When A procedure Claude should follow A large task whose intermediate steps you don’t want in the main conversation
Managed via A file in .claude/skills/ /agents and .claude/agents/

The two combine well: a subagent that loads a skill is a very common setup.

Was this page helpful?