Skills
How skills bundle task-specific knowledge that loads on demand, and how that differs from always-loaded project memory.
Some knowledge is useful on every single task — that's what project memory is for. Other knowledge is useful only on a specific kind of task, and would just be noise the rest of the time. Skills exist for the second case: detailed, task-specific instructions that load only when the task at hand actually calls for them.
The structural idea
A skill is a folder containing a description of what it covers and the detailed instructions or reference material for that task — anything from "how to work with this internal CLI tool" to "the house style for writing API documentation" to "the steps for this specific deployment process." The short description sits available at all times so Claude can recognize when a skill is relevant; the full instructions only get pulled into context once a task actually matches.
Why this beats putting everything in project memory
CLAUDE.md loads in full, every single session, regardless of what the task is. That's fine for a
short file of genuinely universal rules, but it stops scaling once you have a lot of detailed,
narrow procedural knowledge — a deployment runbook, a guide to an internal API, formatting rules for
a specific document type. Putting all of that into the always-loaded file means most sessions are
carrying context they'll never use. A skill keeps that detail out of the default context entirely,
available the moment it's relevant and invisible the rest of the time.
Good candidates for a skill
- A workflow specific to one kind of task, detailed enough that it would bloat
CLAUDE.mdif always loaded — a multi-step release process, a specific data-migration procedure. - Reference material for an internal tool or convention that isn't documented anywhere a model would otherwise know about.
- Domain-specific instructions that only a subset of tasks on a project actually need — formatting rules for one type of document, conventions for one specific subsystem.
How this differs from a slash command
A slash command is something you invoke by name for a specific, repeatable request. A skill is
something Claude reaches for on its own, based on relevance to the task — you don't type /skill,
you describe a task that happens to match what a skill covers, and the detailed instructions load
automatically. They're not competing mechanisms; a command can describe what to do, and a skill can
supply the detailed how, if the task calls for it.
Next: hooks, for running your own commands automatically around Claude Code's actions.