Which one should I use?
A one-line answer for each of Claude Code's eight customization tools, plus the four moments that tell you to move something from one to another.
- Each tool answers a different question. Match your problem to the question, not the other way around.
- Most people reach for
CLAUDE.mdfor everything, because it is the first one they learn. It is the wrong tool for enforcement and for reusable procedures. - Here is where it bites people: they write a hard rule in
CLAUDE.md, then get surprised when Claude occasionally skips it.CLAUDE.mdis advice. A hook is enforcement.
The table
| You want to... | Use |
|---|---|
| Keep a fact or convention always in context | CLAUDE.md |
| Reuse a multi-step procedure across projects | A skill |
| Give a task its own isolated context and a cheaper model | A subagent |
| Trigger an exact prompt yourself, on demand | A slash command |
| Make something run every time, no matter what the model decides | A hook |
| Give dozens of teammates identical setup in one install | A plugin |
| Connect Claude to an external tool or database | MCP |
| Change Claude's tone or output format for a task | An Output Style |
Auto memory is not on this list because you do not choose to use it. Claude writes it on its own, from corrections you make mid-conversation, and it sits alongside CLAUDE.md rather than competing with it. See Memory management for how the two work together.
Four moments that tell you to move
- A
CLAUDE.mdsection is turning into numbered steps → move it to a skill. Instructions load every session whether you need them or not; a skill's body loads only when it is relevant. - A rule keeps getting skipped → move it from
CLAUDE.mdto a hook.CLAUDE.mdis context Claude reads. A hook is a command that runs, with no way for the model to opt out. - One task is filling the conversation with noise you do not need afterward → move it to a subagent. It runs in its own context window and hands back only a summary.
- The same procedure needs to work in Claude Code and somewhere else entirely, the API, a different tool that reads the same format → build it as a skill, not a Claude Code-only slash command. A skill is the one artifact here that is portable outside Claude Code at all.
Why CLAUDE.md is not the answer to everything
CLAUDE.md is durable, always-loaded context: facts and conventions Claude should know on every single message. That is exactly why it is the wrong place for two things. Procedures only matter when you are doing that specific task, so they should not cost context on every other message. Hard rules need to hold even when the model would otherwise reasonably decide to skip them.
A skill fixes the first problem through progressive disclosure. Claude sees only the skill's name and a one-line description by default, and loads the full body only when the current task actually matches it. A hook fixes the second problem by moving the rule out of the model's judgment entirely. It is a script that runs, not a suggestion the model reads.
Read next
Where everything lives has the file path and precedence rule for every tool on this page.