I Spent Weeks Confused About Claude Code's 5 Concepts. Here's the Mental Model That Finally Clicked.
Slash commands, skills, agents, MCP servers, plugins. Five concepts. Five different jobs. One very confused developer (me) trying to figure out which one to use when.
You're using Claude Code. You've seen these terms thrown around like confetti at a developer conference. Slash commands! Skills! Agents! MCP servers! Plugins! Each one sounds important. Each one sounds slightly different from the others. Each one makes you wonder if you're using Claude Code wrong.
Spoiler: you probably are. But so is everyone else, so don't feel too special about it.
Here's the mental model that finally made sense to me after weeks of confusion and several existential crises about whether I understood my own tools.
The one-sentence version
Slash commands = shortcuts you trigger manually (like a civilized person)
Skills = instructions Claude might trigger automatically (emphasis on "might")
Agents = autonomous workers with their own context (little worker bees you send off to do your bidding)
MCP servers = external capabilities like browsers, databases, APIs (the things that let Claude actually do stuff in the real world)
Plugins = packaging that bundles any combination of the above (a zip file for your AI workflow, basically)
That's it. Five concepts. Five different jobs. The confusion happens because they overlap like a Venn diagram designed by someone who hates clarity. A slash command can spawn an agent. An agent can use MCP servers. A plugin can contain all of the above. It's turtles all the way down.
(I'm not covering hooks here — automations that fire on events like file saves. That's a whole other therapy session.)
The key distinction most people miss
Here's what nobody tells you upfront: who decides when something runs?
- Slash commands: You trigger them. Like pressing a button. Revolutionary concept.
- Skills: Claude triggers them. In theory. When it feels like it. Maybe.
- Agents: You spawn them, then they run autonomously until they're done or your tokens are.
- MCP servers: Claude calls them when it needs to reach outside your codebase.
- Plugins: You install them. They're just containers.
This matters more than all the technical mumbo-jumbo. Want control? Slash commands. Want Claude to figure it out? Skills. Want to let something loose and hope for the best? Agents. Want Claude to actually interact with the real world? MCP servers.
The decision tree (for people who don't want to think about this anymore)
When you're about to ask Claude to do something, run through this:
Is it a repeatable task with fixed steps? → Slash command. Done. Move on with your life.
Does it need to access external systems? → MCP server. Claude can't browse the web or query databases with pure thought. Yet.
Does it require exploration and figuring things out? → Agent. Let it wander. It's smarter than you think. Sometimes.
Is it domain-specific instructions that don't always apply? → Skill. Good luck getting Claude to actually use it without being asked.
Do you want to share your setup with others? → Package it as a plugin. Make it someone else's problem.
The overlap problem (or: why everyone builds three things for the same task)
Here's what happens in the wild: developers build a slash command, a skill, AND an agent for the same task. I've done it. You've probably done it. We've all sinned.
Pick one primary approach:
- Need control over when it runs → slash command
- Need Claude to decide when it's relevant → skill (and a prayer)
- Need autonomous multi-step execution → agent
- Need external system access → MCP server
- Need to share your setup → plugin
Use the others to support, not duplicate. Your future self will thank you when you're not debugging three different implementations of the same thing at 2 AM.
How they layer (the actually useful part)
Think of it as a stack:
- Skills = instructions (how to do things)
- Slash commands = triggers (entry points you control)
- Agents = workers (autonomous task executors)
- MCP servers = capabilities (external system access)
- Plugins = packaging (bundles of all the above)
A slash command can spawn an agent. An agent can use MCP servers. A skill can teach Claude how to use an MCP server efficiently. A plugin can package all of this into something you can share on GitHub and pretend makes you a thought leader.
They compose. They don't compete. Unless you make them compete, in which case, godspeed.
This is post 1 of 4. Next up: slash commands vs skills — and why skills don't work the way the documentation promises they will.
I help technical founders develop, deploy, and market their SaaS using Claude Code. This is the kind of workflow clarity I wish someone had given me three months ago.