Blog AI Automation 12 min read

Claude Code Skills vs Plugins vs Subagents: Which to Use When

Introduction I’ve been building inside Claude Code for nine months, and the main question I hear from founders who’ve started tinkering is how to choose between Claude Code skills vs plugins and subagents. They want to know the difference and, more importantly, when to use which. Picking the wrong primitive turns a 10-minute fix into […]

A man stands on a mezzanine overlooking an office with cubicles, where several people work at desks under bright yellow and pink lighting, perhaps discussing claude code skills vs plugins.

Introduction

I’ve been building inside Claude Code for nine months, and the main question I hear from founders who’ve started tinkering is how to choose between Claude Code skills vs plugins and subagents. They want to know the difference and, more importantly, when to use which.

Picking the wrong primitive turns a 10-minute fix into a half-day rebuild. Skills, plugins, and subagents all extend what Claude Code can do, but each one solves a different problem. Use a skill when a plugin would have been cleaner, and you end up with a folder of one-offs that won’t travel. Use a subagent when a skill would have done it, and you’ve burned tokens on isolation you didn’t need.

In this post, I’ll break down what each one is, when each is the right call, and how I use them together.

Key Takeaways

  • Claude’s code skills vs plugins is really a question of scope: a skill is one markdown file Claude loads on demand, a plugin packages many skills together.
  • Subagents are different again, running in their own context window for parallel research or work that would otherwise bloat the main conversation.
  • Reach for a skill when reusable instructions should load only when relevant, not every conversation, to keep context budgets clean.
  • Reach for a plugin when bundling skills, commands, hooks, and agents into one versioned unit you can share or install on multiple machines.
  • Reach for a subagent when context bloat is the real problem, or when independent work can run in parallel for a roughly 4x speed-up.
  • The three primitives stack: a plugin can ship a skill that spawns a subagent, which is how real systems get built inside Claude Code.
  • Picking the wrong primitive costs tokens and rebuilds, both compounding across a busy day of work.

Claude Code Skills vs Plugins vs Subagents: What Each One Is

Three different primitives. Easy to confuse because they all extend Claude Code, and the marketing language around them tends to blur the lines.

A skill is a markdown file. It lives in .claude/skills/ (or inside a plugin), and it follows a standard format: YAML frontmatter at the top with a name and a description, then the body of the file with the instructions Claude should follow when the skill triggers. The description is the magic part. Claude reads it before every turn and matches it against what you’re asking. If it fits, the skill body loads. If it doesn’t, the file stays on disk and doesn’t eat your context budget.

A plugin is a packaging format. Think of it like a zip file with a manifest. A plugin bundles skills, slash commands, hooks, subagent definitions, and MCP server connections into a single installable unit. You add a marketplace to your Claude config, install the plugin, and everything inside it shows up at once. Plugins are how skills get distributed.

A subagent is an independent Claude run with its own context window. You invoke one via the Agent tool with a subagent_type parameter, and it goes off and does work on your behalf. The crucial part: it does that work in a separate context. The subagent reads files, runs tools, thinks, and comes back with a summary. The main agent sees only the summary, not the raw exploration.

Different shapes, different jobs.

Automated factory assembly line with robotic machinery—like comparing claude code skills vs plugins—conveyor belts transport packaged boxes to organized storage units, all outlined with neon-colored lines.

When to Use a Claude Code Skill

Skills are for instruction sets you want loaded only when they’re needed.

The two questions to ask: is this reusable, and does it need to load every conversation?

If something fires only when you’re doing a specific task (writing ad copy, doing a security review, formatting a blog post), a skill is in the right shape. The description string tells Claude when to grab it. The body holds the playbook. You skip the cost of loading 8,000 tokens of marketing-speak into every conversation when 90% of your work has nothing to do with marketing.

Inside my own workspace, the writing-style Skill handles all my prose output. It loads when I’m writing emails, copy, scripts, anything meant to be read as a human wrote it. When I’m debugging a Python script, the skill never opens. That’s the trade. Cheap when idle. Available when called.

Skills also work well for workflows that have multiple steps you don’t want to type out every time. A skilled body can describe an entire process. First, check this file; then ask the user three questions, and then write the output to this directory. Claude follows the skill like a procedure.

What skills don’t do well: anything that needs to run in the background, anything stateful, anything that needs its own context window. Those are different problems.

The bigger pattern: skills are how you teach Claude what and how, while context files teach Claude who (your business, your data, your team).

When to Use a Claude Code Plugin

Plugins are about distribution.

You’ll know it’s a plugin job when you find yourself with five or six related skills, a handful of commands, maybe a hook or two, and you want to install all of it on a different machine or share it with someone. Without a plugin, you’d copy each file manually and probably miss one.

Plugins package the lot. A plugin.json lists what’s in it, what version it is, and where to find the marketplace. Someone else installs your plugin and gets the whole bundle. They never see the individual files unless they want to.

For my own work, the plugins I’ve installed mostly come from public marketplaces. The gstack plugin gives me roughly 30 skills around shipping code, reviewing PRs, and running QA tests. It’s not a single skill; it’s a whole working philosophy bundled together. Trying to maintain that as loose files would be a nightmare.

The other reason to package as a plugin: version control. If you’re going to evolve a set of skills over time, and you want to test new versions without breaking the working set, plugins give you a clean upgrade path. Marketplace points to the new version; when you update, the old skills are replaced. In the same way, Cursor or VS Code handles extensions.

The line between “skill” and “plugin” is this: if it’s one file you’ll only ever use yourself, leave it as a skill. If it’s a system, package it.

A man stands in an office, reading a document while glancing at a display case filled with mechanical tools—perhaps considering the benefits of claude code skills vs plugins for managing intricate technical tasks.

When to Use a Claude Code Subagent

Subagents solve a different problem. Context bloat, parallelisation, and cost.

Every Claude conversation has a budget. The context window is finite. Long file reads, tool outputs, search results, all of them eat into it. The bigger your context gets, the slower Claude becomes and the more expensive each turn is. Eventually, you hit a wall.

A subagent is how you stop that. Instead of reading 40 files in your main conversation, you spawn a subagent with the question “find the place where X is defined.” The subagent reads the 40 files in its own context, returns a one-paragraph answer, and your main conversation only sees the paragraph. The 40 file reads never touch your budget.

That’s the context firewall use case, and it’s by far the most common one. Anytime I’m hunting for something across the codebase, an Explore subagent does it.

The second use is parallelisation. If you’ve got four independent things to check (the front end, the back end, the database, the deploy config), you can fire off four subagents at once instead of doing them sequentially. They run in parallel. You get results back roughly 4x faster.

The third use is model routing. Subagents can run on a different model than the main agent. Heavy reasoning stays on Opus, search and summary go to Haiku. Haiku is roughly 20x cheaper than Opus and totally capable of “go read these files and tell me what they say.” Most of my subagent calls now specify model: "haiku" by default, and the bill comes down.

What subagents don’t do: they don’t share context with the main agent. They start fresh every time. So if you need to brief them, the prompt has to be self-contained. If your subagent needs to know who the user is or what project they’re in, you have to tell it.

My Decision Rule for Claude Code Skills vs Plugins (and Subagents)

The decision tree I run, in order:

Question one: Is this thing going to do its own reading or research? If yes, it probably wants to be a subagent. Anything that pulls in a lot of files, scans a big folder, or scrapes a website should run in its own context window. Otherwise, you’re polluting your main conversation with raw data you only needed once.

Question two: Is this thing reusable across conversations? If yes, it wants to be a skill. Skills are persistent. They sit in your workspace and trigger when relevant. A skill is the right home for any “I want Claude to act this way when X” pattern.

Question three: Am I going to share this with someone, version it, or install it on more than one machine? If yes, wrap it in a plugin. Plugins are the only clean way to distribute a bundle of skills, commands, hooks, and agents together.

Often you’ll use all three. A plugin bundles skills. One of those skills might tell Claude to spawn a subagent for the heavy lifting. The three primitives stack.

The way I think about it: skills tell Claude what to do, plugins tell Claude what’s available, subagents tell Claude who else to ask.

If you find yourself building everything as a slash command (the old way), you’re probably leaving capability on the table. Skills are smarter because they trigger themselves. Plugins are cleaner because they bundle. Subagents are essential because the alternative is context bloat that kills your conversation quality after two hours of work.

Conclusion

Claude Code is now genuinely a building platform, not just an assistant. The three primitives are the building blocks. Claude’s code skills vs plugins isn’t a competitive comparison, and neither is the subagent question. They solve different problems, and you use them together.

Pick a skill when you want reusable behaviour. Pick a plugin when you want to package and share. Pick a subagent when you need a separate context window for research, parallel work, or cheaper model routing.

The real win comes when you stop thinking of Claude Code as a chat tool and start thinking of it as the substrate you run your business on. Once you’ve got context files that teach it your business, skills that handle your repeatable workflows, plugins that travel with you, and subagents that do the heavy lifting, you’ve built something closer to an AI brain plus an AI workforce. The brain thinks. The workforce does. The conversation feels different.

That’s the bigger story underneath the primitives.

Take the Next Step

If you’re already inside Claude Code and want to talk through how skills, plugins, and subagents could be put to work in your own business, book a 15-minute Discovery Call. It’s a quick chat to see where you are and what the right next step looks like. Book the Discovery Call here.

If you’d rather read more first, two posts in adjacent clusters are worth your time: Agentic workflow examples and Agentic workflow. They go deeper into the patterns these primitives are designed to support.

For the source-of-truth documentation on plugin and skill formats, the Anthropic developer docs are where I’d start.

Frequently Asked Questions

What is the difference between a Claude Code skill and a plugin?

A skill is a single markdown file with instructions that Claude loads when your request matches its description. A plugin is a bundle that can contain multiple skills, commands, hooks, and subagent definitions, distributed as one installable unit. Skills are content. Plugins are packaging. If you only have one or two files, leave them as skills. If you’re shipping a system, package it as a plugin.

When should I use a Claude Code subagent instead of a skill?

Use a subagent when the work would otherwise pollute your main context window. Big file searches, multi-folder exploration, web scraping, and parallel research are all subagent territory. A skill tells Claude how to behave in the current conversation. A subagent spins up a separate conversation to do work and return only the summary. If you don’t need that isolation, a skill is simpler and cheaper.

Can a plugin contain subagents?

Yes. A plugin can package skills, slash commands, hooks, subagent definitions, and MCP server connections in any combination. The plugin.json manifest declares what’s included. When someone installs the plugin, all those pieces become available at once. This is how most public Claude Code plugins are structured, since real working systems usually need more than one primitive.

Do Claude Code skills work across different projects?

Skills can be installed at the user level (available everywhere) or the project level (scoped to a single folder). User-level skills live in ~/.claude/skills/ and trigger in any project. Project-level skills live .claude/skills/ inside a specific repo. Plugins install to the user level by default, but you can scope them per project if you want different stacks for different work.

How do I know when to write a new skill versus using a slash command?

Slash commands are explicit. You type /something and Claude runs the command. Skills are implicit. You describe what you want in natural language, and Claude grabs the right skill based on the description. Use slash commands when the action is precise and binary. Use skills when the trigger is fuzzy or when you want Claude to pick the right tool from a set of related ones.

Do subagents share memory with the main agent?

No. Each subagent runs in a fresh context. It has no memory of your conversation, no access to your previous turns, and no knowledge of the user unless you brief it explicitly in the prompt. This is the point. The isolation is the feature. If you need a shared state, you pass it as part of the subagent’s prompt or read it from a shared file that the subagent can access.

Can I use multiple subagents in parallel?

Yes, and you should when the work is genuinely independent. Send a single message containing multiple Agent tool calls, and they run concurrently. Four parallel subagents finish roughly four times faster than running them in sequence. The catch is that the work has to be independent. If subagent B needs subagent A’s output, you have to run them sequentially.

About Octavius

Titus Mulquiney is the founder of Octavius AI, where he builds AI brains and AI workforces for founder-led businesses stuck running everything out of their own head. Twenty years in marketing, ex-Sony product manager, ex-GM Zeal NZ. Based in Auckland, working with operators across NZ, Australia, and the US. Connect on LinkedIn.

Stuck running your business out of your head?

Thirty minutes. No pitch deck. Just a read on what's clogging your week.

Book a discovery call →
Keep reading All articles
Business Automation· Jul 18, 2026

AI for Quoting and Proposals: Quotes in Minutes, Not Hours

Business Automation· Jul 18, 2026

Zapier Alternatives in 2026: Which Tool Fits Your Business?

Business Automation· Jul 17, 2026

n8n for Business: What It Is and How to Use It