A skill adds instructions to your current conversation when they are needed. A subagent takes a task away, works on it in its own context window, and hands back only the result. Slash commands are no longer a separate thing: Claude Code merged custom commands into skills, so a skill is also how you make a /command.
The short version
| Skill | Subagent | |
|---|---|---|
| Lives in | .claude/skills/<name>/SKILL.md |
.claude/agents/<name>.md |
| Runs in | Your conversation | Its own context window |
| Sees your conversation | Yes | No, only the task it is given |
| Loads | The description always; the full text when used | When Claude delegates to it |
| Can limit tools | allowed-tools, disallowed-tools |
tools |
| Can pick a model | model |
model |
| Best for | How to do a kind of work | Doing a contained piece of work |
What a skill does
A skill is a folder with a SKILL.md file and, optionally, scripts, templates and reference files. Claude Code keeps every skill's description in context, so Claude knows what is available, and loads the full instructions only when the skill is used. That is why long reference material in a skill "costs almost nothing until you need it," in the words of the Claude Code docs.
You can call a skill yourself with /name, or let Claude load it when your request matches its description. Two front matter settings control that:
disable-model-invocation: truemeans only you can start it, with/name. Use it for workflows with side effects, like a deploy.user-invocable: falsehides it from the/menu, so only Claude can use it.
What a subagent does
A subagent is a specialized assistant with its own system prompt, its own tools and its own permissions. When a task matches a subagent's description, Claude delegates to it, the subagent does the work in its own context, and only its summary comes back to your conversation.
That makes subagents good for three things: keeping long exploration or test output out of your main conversation, restricting what a task can touch (a reviewer with only Read, Grep, Glob), and running a task on a cheaper, faster model.
When to use which
- Use a skill when you want Claude to do something your way: a house style for tests, a checklist for a release, a design system. The instructions need to sit next to the work.
- Use a subagent when you want something done and reported: search a large codebase, review a diff, run and summarize a test suite. You care about the answer, not the steps.
- Use a skill with
disable-model-invocation: truewhen you want a command you trigger by hand, which is what a slash command used to be. - Combine them in either direction: a skill with
context: forkruns as a subagent, and a subagent can preload skills through itsskillsfield.
What we see across 2,043 skills
The description decides whether a skill ever gets used, because it is the only part Claude reads before choosing. In the Use This Skill directory, which collects 2,043 skills from 45 public repositories, about 35% of descriptions say when to use the skill ("Use when…", "Use for…"). The rest describe only what the skill is, which leaves Claude to guess when it applies.
If you write your own, start the description with what the skill does and end it with the situations that should trigger it. To see what a well-written skill actually changes, browse the proven skills: each one ran three times with the skill and three times without it on the same brief.
Directory counts are from the October 23, 2026 crawl. Settings and behavior are from the Claude Code documentation linked below, read the same day.