
Claude Skills vs Subagents: When to Use Each
Claude Skills vs. Subagents: An Empirical Guide
The distinction between a Claude skill and a subagent is a frequent point of confusion. Developers building on Claude Code often ask whether to package a piece of logic as a reusable skill or as a more complex, isolated subagent. The documentation provides theoretical guidance, but theory often breaks down against reality. This article offers an empirical answer to the question of claude skills vs subagents.
At SkillProof, our entire purpose is to test Claude Code skills on real work. To do this reliably, our test harness runs every candidate skill inside a dedicated subagent, so one run can’t contaminate the next. That gives us a practical vantage point, though it’s worth being precise about what our data does and doesn’t prove. We have run records for 2090 skills, which tells us a great deal about how skills fail — not a controlled comparison of the same task built both ways. The skill vs agent claude difference laid out below is our reading of those failures, and we’ll show the numbers behind each claim so you can judge the reasoning yourself.
Defining the Terms: Skill vs. Subagent
Before analyzing the data, it’s important to establish clear definitions. While they can seem similar, skills and subagents serve fundamentally different purposes and operate at different levels of abstraction.
A skill is a recipe. It’s a set of specific, reusable instructions and tools that augment the base model’s abilities for a well-defined task. A skill is defined in a SKILL.md file and is designed to be called upon by the main agent to perform a discrete action. It operates within the main agent’s context and is best suited for atomic operations, like formatting code, generating a specific file type, or enforcing a house style. Think of it as a recipe card you hand to a cook who can already cook.
A subagent is an entirely separate worker. It’s an independent instance of the model, spun up by a primary agent to handle a large, complex, or specialized task. A subagent has its own context, its own system prompt, and can manage its own state over a multi-step workflow. The primary agent delegates a high-level goal to the subagent, which then works autonomously to achieve it. Think of it not as a function, but as a separate service you call via an API.
This table summarizes the core differences:
| Feature | Skill | Subagent |
|---|---|---|
| Analogy | A specific recipe | A specialized chef |
| Scope | Atomic, single-purpose task | Complex, multi-step workflow |
| State | Stateless | Own context window for the run; returns a summary and keeps nothing afterward |
| Context | Shares context with the main agent | Isolated, independent context |
| Complexity | A directory: SKILL.md plus optional scripts and reference files loaded on demand | A markdown file with YAML frontmatter in .claude/agents/ — system prompt, tool allowlist, model |
| Best for | Tooling, format enforcement | Autonomous tasks, specialized roles |
How Our Test Harness Reveals the Difference
Note that the real axis of difference in that table is context isolation, not code size. Both are authored as plain markdown; only one gets its own window.
Our testing methodology leans on this distinction. As our methodology page puts it, an agent runs the test, not a person: the same agent produces a no-skill baseline and a skill-guided attempt at the same real task, then grades whether the result is clearly better than Claude without the skill. We run each of those tests in its own subagent so one skill’s execution cannot influence another’s.
This setup forces a clear boundary. The subagent is given a single goal: execute the task using the provided skill. Having watched that run two thousand times, we have a reasonable view of where the skill abstraction holds up and where it breaks.
Our catalog statistics are telling. Of 2090 skills tested to date:
- 1291 (62%) pass our benchmarks. They install, they fire on the prompts they claim to handle, and they beat the no-skill baseline on a real task.
- 697 need setup. Per our methodology, setup means the skill needs configuration, a companion skill, or a connected integration before it can work. Scanning those 697 test notes, the blockers are overwhelmingly access-related: 229 mention an external CLI or binary, 171 an API key or credential, 169 a paid account or plan, 136 an MCP server or integration.
- 102 score BELOW plain Claude. They failed to beat the no-skill baseline — some because they could not run at all (a missing CLI, a dead dependency, an example that crashes), some because they ran and left the output worse than plain Claude.
Read honestly, that distribution says less about architecture than you might hope. The setup bucket is mostly a story about credentials and missing binaries, which is orthogonal to whether a task belongs in a skill or a subagent. The failures are where the architectural lesson actually lives, and we’ll get to them below.
When to Use a Skill: The Recipe Model
Based on the 1291 passing skills in our directory, a clear pattern emerges. Successful skills are focused, stateless, and deterministic. They are tools, not thinkers.
Here are the ideal use cases for a skill:
-
Atomic, Repeatable Tasks: A skill excels at tasks that have a clear input and a predictable output. Think of things you would normally write a small script for. audit-export, a passing skill in our productivity category, is a clean example: feed it a markdown audit report and it emits an import-ready CSV for Jira, Linear, Teamwork or Monday. In our test it turned a five-finding report into valid rows with correct phase due dates and quoted multi-line ticket templates. One job, done well.
-
Teaching Claude to Use Access It Already Has: This is the distinction people most often get backwards, so be careful here: a skill does not grant new access. It cannot reach your Postgres instance or call a third-party API on its own — that is what MCP servers are for, and we covered the split in Claude Skills vs MCP. What a skill does is teach Claude to use capability it already has, well and consistently. If a CLI is already on your PATH, a skill is the right place to encode how your team invokes it.
-
Constrained Output and Formatting: When you need output to conform to a rigid structure, a skill is the right choice. git-workflow, in our coding category, is a working example: asked for help before opening a PR from a one-commit branch called
my-fixwith the commit message “fixed stuff”, the skill named the specific convention violations and produced conforming replacements. TheSKILL.mdcarries strict instructions about form, which the model follows reliably because the task is narrow.
Characteristics of a well-designed skill, as seen in our high-scoring examples, include a concise SKILL.md, a clear definition of any included tools, and an absence of complex, branching logic. The instructions should guide the model, not try to program it through prose.
When to Use a Subagent: The Specialist Model
If a skill is a recipe, a subagent is a specialist you hire for a complex job. The decision of claude code subagent or skill becomes clearer when the task requires memory, iteration, or a distinct persona.
Our data on failing or complex-setup skills shows when a developer should have chosen a subagent architecture from the start.
Here are the ideal use cases for a subagent:
-
Multi-Step, Complex Workflows: Any task that requires a sequence of dependent steps is a job for a subagent. For example: “Research the performance of various sorting algorithms for nearly-sorted data, write a summary of the findings, and then generate Python code implementing the most efficient one.” This workflow requires maintaining context (the research) across multiple steps (summarizing, coding). A skill’s stateless nature makes this nearly impossible to do reliably.
-
Tasks Requiring Isolation or a Different Persona: Sometimes a task requires a completely different mindset from the main agent. A classic example is a “code reviewer” agent. You might want this agent to be critical, meticulous, and focused only on code quality. Trying to coax this persona out of a general-purpose assistant via a skill is inefficient and unreliable. It’s far more effective to spin up a subagent with a system prompt tailored to that critical persona.
-
Long-Running Work You Don’t Want in Your Context: A skill isn’t a call at all — nothing is invoked and nothing returns. Claude reads the
SKILL.mdinto its own context and follows the instructions itself, inside the main loop. There is no separate worker to hand a long job to. Subagents are the mechanism for that, and since Claude Code v2.1.198 they run in the background by default, with the foreground reserved for when the result is needed immediately. One caveat worth stating plainly: for merely waiting — polling an endpoint, watching a build finish — a background shell task is cheaper and simpler than spawning an agent. Reach for a subagent when the work needs judgment, not just patience.
The Gray Area: Why 102 Skills Are Worse Than Nothing
The most illuminating data comes from our failures — and it does not say what we expected it to say. We went into this assuming the 102 failures would be skills straining to act like subagents: bloated SKILL.md files, convoluted branching, stateful processes crammed into a recipe. Scanning the test notes of all 102, only five mention length or token bloat at all. That theory is mostly wrong, and it’s worth saying so rather than quietly dropping it.
What actually breaks down into two groups. The larger one is dependency failure: 30 of the 102 cite a missing CLI or binary, 22 a paid account, 19 a missing MCP server, 10 an absent API key. skill-builder is representative — every tool call depends on a separate MCP server that isn’t bundled or auto-connected, and the skill never mentions the prerequisite, so a plain manual approach beats it. These are packaging failures, not architecture failures.
The second group is quieter and more instructive: skills that install cleanly, fire correctly, and simply produce nothing better than the baseline. api-design-principles is the clearest case. We tested a REST design task — a bookmarking service with endpoints, versioning, pagination and JSON examples — with and without the skill. Both arms produced correct, comparable work. aeon and arbor landed the same way. This is where the skill-versus-subagent question actually bites: these skills tried to encode a whole reasoning process in prose, and the model was already capable of that reasoning. The skill added words without adding capability.
That is the honest architectural lesson. Not “long skills fail” but: if what you’re writing is a procedure the model already follows competently, a skill adds nothing — and if the procedure genuinely needs its own context, a persona, or many dependent steps, prose in a SKILL.md is the wrong container for it. The answer to when to use a skill vs a subagent in Claude Code is this: if your task feels like a program, build it as a subagent; if it feels like a memo to a competent colleague who already knows the job, it may not need to exist at all.
A Practical Heuristic
Choosing between a skill and a subagent doesn’t have to be an academic debate. Our test data suggests a simple, practical heuristic:
Is the task a function call or a program?
- If your task can be modeled as a single function call—it takes a clear input and produces a discrete output without needing to remember past interactions—it is a skill.
- If your task requires state, internal memory, multiple steps, or a specialized context to run—in other words, if it behaves like a standalone program—it should be a subagent.
By adhering to this distinction, developers can build more robust, reliable, and effective solutions with Claude Code. Start with the simplest abstraction that works. A well-defined skill is powerful. But recognize the signs of growing complexity and be prepared to graduate to a subagent architecture when the task demands it.
Related reading: if you’ve decided the job belongs in an isolated worker, our guide to Claude Code subagents covers how to define one and what it can actually see. And if you’re still deciding whether you need new access rather than better instructions, Claude Skills vs MCP draws that line properly — it’s the more common source of confusion.
If you need reliable, pre-vetted tools for common development tasks, we’ve benchmarked over a thousand passing skills. You can browse by function in coding skills and document skills, or pick up a role-based pack of ten tested skills for $10 — the developer toolkit is the closest fit for the work described here.
★ 9.6/10 × 3
The free starter pack
3 skills with our highest test scores plus the install checklist — the setup we'd put on a fresh machine. Free, by email.