Skills vs. other Claude Code features
You've just finished writing your first skill, and now you're looking at the broader Claude Code customisation surface and wondering where the boundaries actually sit. Should this linter integration be a hook or a skill? Should that code-review checklist live in CLAUDE.md? Is a subagent overkill for what you're trying to do?
Choosing the wrong one is the fastest way to build something that fights the tool. Claude Code offers five ways to customise behaviour — Skills, CLAUDE.md, subagents, hooks, and MCP servers — and each one solves a different problem. Knowing which is which prevents you from forcing everything into the same hammer.
CLAUDE.md vs. Skills
CLAUDE.md loads into every conversation, always. If you want Claude to use TypeScript strict mode in your project, or to never modify the database schema, or to prefer a specific testing framework, that goes in CLAUDE.md. It's the always-on project contract.
Skills load on demand. When Claude matches a request to a skill, that skill's instructions join the current conversation — and not before. Your PR review checklist doesn't need to be in context when you're writing new code. It activates when you ask for a review.
Use CLAUDE.md for: project-wide standards that always apply, hard constraints like "never modify the database schema," framework preferences, and coding style rules.
Use Skills for: task-specific expertise, knowledge that's only relevant sometimes, and detailed procedures that would clutter every conversation if they were always loaded.
Skills vs. subagents
This is the comparison where people get tripped up, because both feel like "extra knowledge for Claude." The difference is context scope.
Skills add knowledge to your current conversation. When a skill activates, its instructions join the existing context — you're still talking to the same Claude, with the same history, now better informed.
Subagents run in a separate context. You delegate a task, the subagent receives it, works on it independently with its own fresh context, and returns results. They're isolated from your main conversation by design.
Use subagents when: you want to delegate a task to a separate execution context, you need different tool access than the main conversation, or you want isolation between delegated work and what you're doing.
Use Skills when: you want to enhance Claude's knowledge for the current task and the expertise applies throughout the conversation.
Skills vs. hooks
Hooks fire on events. A hook might run a linter every time Claude saves a file, or validate input before a specific tool call. They're event-driven — Claude does something, the hook reacts.
Skills are request-driven. They activate based on what you're asking for, not on what Claude just did.
Use hooks for: operations that should run on every file save, validation before specific tool calls, or automated side effects of Claude's actions.
Use Skills for: knowledge that informs how Claude handles requests, and guidelines that affect Claude's reasoning before it acts.
MCP servers
MCP servers are a different category entirely. They provide external tools and integrations — a way for Claude to talk to systems that live outside its own environment. A skill is markdown instructions. An MCP server is a running process exposing capabilities over a protocol.
You'd use an MCP server when Claude needs to call an API, query a database, or interact with a service. You'd use a skill when Claude needs to know how to do something, not to reach something new.
Putting it all together
A realistic Claude Code setup uses most of these at the same time, with each one handling its own specialty:
- CLAUDE.md — always-on project standards and constraints
- Skills — task-specific expertise that loads on demand
- Hooks — automated operations triggered by file saves and tool calls
- Subagents — isolated execution contexts for delegated work
- MCP servers — external tools and integrations
Don't force everything into skills when another option fits better. The mental model is: match the activation pattern to the need. Always-on? CLAUDE.md. On-demand expertise? Skill. Event-driven automation? Hook. Isolated delegation? Subagent. External tools? MCP.
Key Takeaways
- 1CLAUDE.md is always-on project context; Skills load on demand when their description matches the request.
- 2Subagents run in an isolated fresh context — use them for delegation; use Skills when you want additive knowledge in the current conversation.
- 3Hooks are event-driven (file saves, tool calls); Skills are request-driven (activated by what you ask).
- 4MCP servers are a different category entirely — they expose external tools, not instructions.
- 5A healthy Claude Code setup combines multiple features rather than forcing every customisation into one of them.