Claude Code skills vs subagents vs MCP: which one to use
Claude Code skills vs subagents: a skill is know-how in your chat, a subagent is work in its own context, MCP is a live outside system. One table to pick.
Contents
In Claude Code, skills vs subagents comes down to where the work happens. A skill is instructions or reference material that loads into your current chat, like our release-beta skill, which points Claude at a release checklist. A subagent works in its own context on a job that would flood your chat with files or logs, and hands back a summary. MCP reaches a live outside system; a hook runs every time.
Quotes are from the Claude Code docs as of 22 October 2026. The skill examples (release-beta, release-stable, seo-writing) are from our own repository.
Skills vs subagents vs MCP vs hooks: the decision table#
| You want… | Use | Where it runs | What it costs your context |
|---|---|---|---|
| Claude to follow a procedure or know reference material, sometimes | Skill | In your conversation | Name and description on every request; full text only when used |
| A big side task done without filling your chat | Subagent | Its own context window | Only its summary comes back; its own requests still count |
| Claude to read or change something outside your files | MCP server | Tools from a server you connect | Tool names at start; full schemas when a tool is used |
| Something to happen every single time, without Claude deciding | Hook | A script or request Claude Code runs on an event | Nothing, unless the hook returns output |
| The same setup in another repository or for a teammate | Plugin | Installs skills, subagents, hooks and MCP servers together | Whatever the parts cost |
| A fact Claude should always know | CLAUDE.md | Loaded every session | Every request |
The features overview sums up all five in one sentence: "CLAUDE.md handles always-on context, skills handle on-demand knowledge and workflows, MCP handles external connections, subagents handle isolation, and hooks handle automation."
What a skill is, and when to use one#
A skill is a folder with a SKILL.md file in it. Where it lives decides who gets it:
~/.claude/skills/<name>/: all your projects;.claude/skills/<name>/: one repository (commit it and your team has it too);- inside a plugin.
You run it with /name, or Claude loads it on its own when your task matches its description (skills docs). The docs say to make one "when you keep pasting the same instructions, checklist, or multi-step procedure into chat, or when a section of CLAUDE.md has grown into a procedure rather than a fact."
That is how our release process ended up as two skills, release-beta and release-stable. Each SKILL.md is nine lines: a description naming the phrases that start it ("cut a beta", "/release-beta") and one instruction to follow a checklist in docs/release.md, which runs to 1,836 lines. The pages on this site are written with a third, seo-writing. None of them belongs in CLAUDE.md, because they're needed on maybe one session in twenty.
Custom slash commands are skills now ("Custom commands have been merged into skills"), and old .claude/commands/*.md files keep working. And a skill runs in your context: its full text joins the conversation when it loads. For a long reference that is the point. Heavy work belongs in a subagent.
What a subagent is, and when to use one#
A subagent "runs in its own context window with a custom system prompt, specific tool access, and independent permissions" (subagent docs). It starts fresh, doesn't see your conversation, does its task, and only a summary comes back.
Give it the side tasks that would bury your chat: searching a large codebase, reading a long log, running the full test suite. Claude Code has three built in, Explore for read-only searching, Plan for research in plan mode and a general-purpose one. Yours are Markdown files in .claude/agents/ or ~/.claude/agents/, like this example from Anthropic's docs:
---
name: code-reviewer
description: Reviews code for quality and best practices
tools: Read, Glob, Grep
model: sonnet
---
You are a code reviewer. When invoked, analyze the code and provide
specific, actionable feedback on quality, security, and best practices.
tools: Read, Glob, Grep makes it read-only, and model: sonnet runs it on Sonnet whatever your session is on.
The catch: a subagent keeps your context clean, but it isn't free. It "sends its own requests, which count toward the same usage limits as your main conversation." Five subagents reading in parallel spend roughly five times as fast as one.
Skill or subagent?#
| Skill | Subagent | |
|---|---|---|
| What it is | Reusable instructions, knowledge or workflows | An isolated worker with its own context |
| Context | Adds to your main window | A separate window with its own input and output tokens |
| Best for | Reference material, workflows you run by name | Tasks that read many files, parallel work, specialised workers |
They combine both ways. A subagent can preload skills with a skills: field, and a skill can run in a subagent with context: fork in its frontmatter.
What MCP is for#
MCP connects Claude to things outside your files. The docs' examples are "Query your database, post to Slack, control a browser." You add a server with claude mcp add; it provides the tools and handles the connection and sign-in. Tool search is on by default, so only tool names and server instructions load at the start and an idle server costs little context.
A skill can sit on top of a server, and the docs give the database case: "MCP connects to your database, a skill documents your schema and query patterns." (Servers we'd start with are in best MCP servers for Claude Code.)
Hooks: when it must happen every time#
CLAUDE.md and skills are text Claude reads and usually follows. A hook is a script or request that Claude Code runs on an event such as PreToolUse or PostToolUse, whatever Claude thinks; the hooks guide calls that "deterministic control". The docs use .env as the example: "An instruction like 'never edit .env' in CLAUDE.md or a skill is a request, not a guarantee. A PreToolUse hook that blocks the edit is enforcement."
- Format on save: a hook.
- Block a dangerous command: a hook.
- Lint after every edit: a hook.
- A
/releasechecklist that needs judgement: a skill.
Plugins: how all of it ships#
A plugin isn't a fifth kind of thing. It's "a directory of skills, agents, hooks, MCP servers, or other components that Claude Code installs and loads as one unit" (plugins overview), usually from a marketplace. Plugin skills are namespaced (/my-plugin:review), so two plugins can't clash. Reach for one when a second repository needs the same setup.
The order most setups grow in#
The docs list triggers, and they match what we see:
- Claude gets a convention wrong twice: add a line to CLAUDE.md (what to put in it).
- You paste the same procedure for the third time: move it to
.claude/skills/<name>/SKILL.md. - You keep copying data from a browser tab Claude can't see:
claude mcp adda server for it. - A side task floods your chat with file reads or logs: ask for a subagent, or write one in
.claude/agents/. - You want something to happen every time without asking: a
PreToolUseorPostToolUsehook. - A second repository needs the same: package a plugin.
Keep CLAUDE.md under about 200 lines and move procedures into skills; every line of CLAUDE.md rides along on every request.
How Shuriken shows them#
Shuriken runs Claude Code itself, so all of the above works as it does in your terminal. Three things are easier to see in the app.
- Each chat's Activity panel gives every subagent its own row: which agent it is, its model, tokens, tool calls and how long it has run. A stuck one is obvious, and it has a Stop button.
- Plugins are per project. Add a marketplace, then install, enable, update or remove plugins with a click and see the skills, agents, hooks and MCP servers each one brings; every change runs the real
claude plugincommand. - Global MCPs is one list of servers for every project and account, and you sign in to each server once.
Sources
- Extend Claude Code (Claude Code docs) (accessed 22 October 2026)
- Extend Claude with skills (Claude Code docs) (accessed 22 October 2026)
- Create custom subagents (Claude Code docs) (accessed 22 October 2026)
- Get started with hooks (Claude Code docs) (accessed 22 October 2026)
- Plugins overview (Claude Code docs) (accessed 22 October 2026)
- Manage costs effectively (Claude Code docs) (accessed 22 October 2026)
Frequently asked questions
What is the difference between a skill and a subagent in Claude Code?
A skill is instructions or reference material that loads into your current conversation when it's needed. A subagent is a separate worker with its own context window that does a task and returns only a summary. Use a skill to teach Claude how, and a subagent to keep a big job out of your chat.
Are skills the same as slash commands?
They have merged. Anthropic's docs say custom commands have been merged into skills: a file in .claude/commands/ and a skill in .claude/skills/ both create the same /name command. Skills add a folder for supporting files and can load on their own when relevant.
When should I use MCP instead of a skill?
When Claude has to reach a live system such as a database, Slack, Linear or a browser. An MCP server, added with claude mcp add, gives Claude the tools and handles the connection and sign-in; a skill can sit on top and teach Claude how your team uses them.
Do skills cost tokens when I'm not using them?
A little. By default each skill's name and description are in context on every request, and the full skill loads only when used. Set disable-model-invocation: true on a skill you only run by hand and nothing loads until you call it.
What is a Claude Code plugin?
One install that brings skills, subagents, hooks and MCP servers together, usually from a marketplace with /plugin install. A plugin's skills carry its name as a prefix, like /my-plugin:review. Use one when a second repository or a teammate needs the same setup.