Five different mechanisms, used as if they were one word. Here is the distinction that actually decides which you want.
Last updated: 2026-09-21 · checked against Claude Code 2.1.278
Five words get used as if they were interchangeable, and they are five different mechanisms. Shortest honest version:
The one that catches everyone: a slash command is not a separate thing. A skill at .claude/skills/ship-check/SKILL.md is /ship-check.
| Lives at | Who triggers it | Whose context | |
|---|---|---|---|
| Skill | .claude/skills/<name>/SKILL.md (or ~/.claude/skills/) | You type /name, or Claude picks it when the description fits | Yours — the instructions land in this conversation |
| Subagent | .claude/agents/<name>.md (or ~/.claude/agents/) | Claude delegates, or you name one | Its own. You get a summary back, not the transcript |
| Hook | settings.json, under hooks | The harness, on an event. Not Claude’s decision | Neither. It is a process with stdin and an exit code |
| MCP server | .mcp.json / ~/.claude.json, running as its own process or a remote endpoint | Claude calls its tools once connected | Yours, but only the tool results |
| Plugin | A directory with .claude-plugin/plugin.json | Nothing. You enable it; what it contains then behaves as above | n/a |
Not “which is more powerful”. Where should the reading pile up?
A skill’s instructions go into the conversation you are already having, so everything it reads stays in front of you and stays in your context. That is exactly what you want for a procedure: a release checklist, a commit convention, the four steps before a deploy.
A subagent gets its own context window and hands back a summary. That is what you want when the honest answer involves reading thirty files and you only need the conclusion. Run it as a skill instead and you will spend your context on file dumps.
Rule of thumb: if you would want to read what it read, make it a skill. If you only want its answer, make it a subagent.
Is it allowed to be skipped?
A skill is something Claude chooses to follow. A hook is something the harness does regardless. “Run the formatter after every edit” written into a skill is a hope; written as a PostToolUse hook it is a fact. This is why “from now on, always…” requests belong in settings.json rather than in a memory file or an instruction.
Hooks are also the part most likely to be quietly broken, because a failing hook says nothing where you can see it — why a configured hook never seems to run.
Does it need to reach something outside your machine? A skill is words. If the capability is “look this up in our database” or “file this ticket”, no amount of instruction gets there; that is a tool, and a tool is an MCP server.
MCP is an open protocol rather than a Claude Code feature, so a server you write works in other MCP clients too. That is the argument for building one instead of a bespoke integration, and the reason a working sample is worth more than a diagram: kit-one-tool-mcp is one tool, a described schema, handled failure paths and 15 tests that run with no API key.
Probably not yet. A plugin is about distribution, not capability. For yourself, in one repo, a SKILL.md and a hook in settings.json do the whole job and there is nothing to package.
A plugin earns its keep when either of these is true:
Installing one is two lines, and there is no single registry you are confined to — a marketplace is any repo with a .claude-plugin/marketplace.json:
/plugin marketplace add sdvsignal/kit-plugins
/plugin install kit-ship-check@kit-plugins
Four small ones, free and readable, are at github.com/sdvsignal/kit-plugins.
| Claim | Actually |
|---|---|
| “Slash commands and skills are different features” | The same thing. A skill is invoked as /name; plugin skills as /plugin:name |
| “A plugin is just a bigger skill” | A plugin is a container. It may hold skills, subagents, hooks and MCP definitions |
| “A subagent shares the main conversation” | It has its own context window and returns a summary |
| “MCP servers are a Claude Code thing” | MCP is an open protocol. The same server works in other MCP clients |
Flat prices, written scope, stop at any rung. No call to book, no retainer.
| Rung | What you get | Clock |
|---|---|---|
| Free — starter repo | A real setup you copy yourself | now |
| $29 — Setup Lite | One project: CLAUDE.md, allowlist, one skill, as a pull request you review | 24 hours |
| $99 — Setup Sprint | 3–5 skills, hooks, up to 3 MCP servers, plus a runbook | 48 hours |
| $79 — Surface Audit | Already set up and still fighting it: contradictions and an exact fix list | 48 hours |
Hooks and MCP servers are in Sprint, not Lite — which one you actually need. Clocks run from a complete intake, not from the Stripe receipt.