FEATURE

What Are Claude Code Skills? A Practical Guide

Claude Code skills are reusable capabilities Claude loads on demand from a SKILL.md folder. Here's how they work and how they relate to slash commands and subagents.

By Ian MacCallum··7 min read

Claude Code skills are one of the more quietly powerful ways to extend Anthropic's agentic coding tool. At their core, they're reusable capabilities you package as a folder — a SKILL.md file plus any supporting scripts or reference material — that Claude can discover and load on its own when a task calls for it. Instead of pasting the same instructions into every session, you write a skill once and Claude pulls it in when it's relevant, or you invoke it directly. This article explains what skills are, how they're structured, where they live, and how they relate to slash commands and subagents. Claude Code follows the open Agent Skills standard, so the same model-invoked pattern shows up across several of Anthropic's products.

Claude Drops is an independent project and is not affiliated with or endorsed by Anthropic. For authoritative, up-to-date authoring syntax, always check the official Claude Code documentation linked throughout this article.

What are Claude Code skills?

A skill is a self-contained bundle of expertise that teaches Claude Code how to do a specific kind of task well. Think of a recurring workflow you keep explaining: how your team writes migration scripts, how you format a release changelog, how to run your project's accessibility audit, or the exact steps to scaffold a new API route. A skill captures that knowledge in a structured folder so Claude can apply it consistently without you re-typing the instructions every time.

A defining trait of Claude Code skills is that they are model-invoked by default: Claude reads the short description of each available skill, decides whether the current task matches, and loads the full instructions only when needed. You can also invoke a skill yourself by typing /skill-name, the same way you'd run a command. This loading pattern is called progressive disclosure — Claude sees just enough up front to know a skill exists, then pulls in the detail on demand.

How a skill is structured: the SKILL.md file

Every skill is a directory containing a SKILL.md file. That file has two parts: a small YAML frontmatter block with metadata, and a Markdown body with the actual instructions. The most important field is the skill's description — it's what Claude reads to decide whether the skill is relevant.

  • description — a concise summary of what the skill does and, crucially, when Claude should use it. Per the official docs, the directory name becomes the command you type, and a clear, trigger-focused description is what lets Claude load the skill automatically.
  • name — an optional display label shown in skill listings. If you omit it, Claude Code falls back to the directory name. It does not need to match the command name.
  • instructions (the body) — the full Markdown content Claude loads once the skill is selected. This is where the step-by-step guidance, conventions, examples, and gotchas live.

The folder can hold more than just SKILL.md. You can include helper scripts, templates, reference documents, or example files alongside it and point to them from the instructions. Because the body only loads when the skill activates — and bundled scripts run via the shell without their source entering the context window at all — a skill can be richly detailed without bloating Claude's context on every turn. The description stays cheap, and the heavy content arrives just in time.

my-skill/
  SKILL.md          # frontmatter (description, optional name) + instructions
  reference.md      # optional supporting docs the instructions can point to
  scripts/
    run.sh          # optional helper script the skill can invoke
Write the description from Claude's point of view: state the situation that should trigger the skill, not just what the skill is. "Use when generating App Store release notes from a changelog" works better than "Release notes helper," because it gives Claude the keywords to match against a real request.

Where Claude Code skills live

Skills are kept in a skills directory under .claude. A project skill lives in .claude/skills inside your repository and is scoped to that project — ideal for conventions specific to one codebase, and easy to commit so your whole team shares it. A personal skill lives in your home directory at ~/.claude/skills and follows you across every project. Each individual skill gets its own subfolder containing a SKILL.md. Organizations can also distribute skills through managed settings, and plugins can bundle their own.

Because project skills are just files in your repo, they version like any other code: they show up in pull requests, get reviewed, and evolve with the codebase. If you've ever browsed the Claude Code changelog to see how the tool's capabilities have grown, skills fit that same philosophy of putting durable, shareable context into your project rather than into one-off prompts.

Skills vs. slash commands vs. subagents

Skills, slash commands, and subagents all let you extend Claude Code, but they're related rather than rival concepts. Worth knowing up front: in current Claude Code, custom commands have effectively merged into skills. A file at .claude/commands/deploy.md and a skill at .claude/skills/deploy/SKILL.md both create a /deploy command and behave the same way — skills simply add optional features like a folder for supporting files and frontmatter that controls who can invoke them.

CapabilityInvoked byBest for
Skill (model-invocable)You and/or ClaudeReusable know-how Claude applies when a task matches — conventions, workflows, domain expertise
Slash commandYou (typed explicitly, e.g. /name)On-demand prompts and shortcuts; these are now a form of skill you trigger yourself
SubagentClaude (delegated to a separate context)Isolating a focused job in its own context window with its own instructions and tools

The cleanest way to think about it: a skill is the reusable unit, and its frontmatter decides who gets to invoke it. By default both you and Claude can. You can restrict a skill to manual-only invocation (good for actions with side effects like deploys), or to model-only (good for background knowledge that isn't a meaningful command). Subagents are the separate idea: a worker Claude spins up in its own context — and skills and subagents compose, since a skill can even be configured to run inside a forked subagent. To go deeper, see our guides on Claude Code slash commands and Claude Code subagents.

A common pattern is a skill you keep manual-only as a slash command, giving you a deliberate entry point into a richer, multi-step workflow you don't want Claude triggering on its own.

Why Claude Code skills matter

The practical payoff of Claude Code agent skills is consistency and reuse without context bloat. A few reasons they're worth adopting:

  • Reusability — encode a workflow once and Claude applies it across sessions and teammates, instead of relying on whoever remembers the right prompt.
  • Progressive disclosure — only short descriptions stay loaded; the full instructions arrive when relevant, and bundled scripts run without loading their source, keeping context lean.
  • Shareability — project skills commit to your repo, so the whole team benefits and improvements flow through normal code review.
  • Composability — skills can reference scripts and other files, and pair naturally with subagents and commands.
  • Lower prompt overhead — you stop re-explaining the same conventions in every conversation.

Skills shine for anything you'd otherwise document in a wiki and hope people read. Database migration conventions, your changelog format, environment-specific deploy steps, testing standards — all good candidates. If you're still mapping the broader vocabulary here, our Claude Code glossary covers how skills, subagents, commands, and other concepts relate.

How to use Claude Code skills

Getting started is deliberately lightweight. The general flow looks like this:

  1. Create a folder for the skill under your project's .claude/skills directory (or ~/.claude/skills for cross-project use).
  2. Add a SKILL.md with a description that states when the skill should be used. The directory name becomes the command, so name the folder for the command you want.
  3. Write the instructions in the body — concrete steps, conventions, and examples Claude should follow.
  4. Optionally add supporting scripts or reference files and point to them from the instructions.
  5. Let Claude discover and invoke it automatically when a task matches the description, or run it yourself with /skill-name.
Frontmatter fields, naming rules, and invocation-control options evolve as Claude Code ships new releases. Don't hardcode assumptions about exact syntax from any blog post — confirm the current spec in the official docs before authoring production skills.

For the precise authoring format — required and optional frontmatter fields, naming rules, and how to reference bundled files — follow the official Claude Code documentation. If you want to track how skills and related features land over time, the public Claude Code changelog on GitHub is the source of truth, and you can browse a readable view on our changelog hub.

Conclusion

Claude Code skills turn your repeated instructions into durable, shareable capabilities — packaged as a simple SKILL.md folder, loaded through progressive disclosure, and scoped to a project or to you. They unify what used to be separate slash commands, they let you control whether you or Claude triggers them, and they pair naturally with subagents for focused, isolated work. Any team that wants consistent, low-friction workflows benefits. Want to stay current as new capabilities ship? Browse the Claude Code changelog or grab the Claude Drops app to get a push notification the moment a new release lands.

IM

Ian MacCallum

Maintainer, Claude Drops

Ian builds Claude Drops and reads every Claude Code release so you don't have to. He writes plain-English guides to Claude Code's features, drawing directly from the official changelog and documentation.

Stay on top of Claude Code

Get notified the moment a new version ships, and browse the full Claude Code changelog.

Get Claude Drops

FAQ

Frequently asked questions

What is a Claude Code skill?+
A Claude Code skill is a reusable capability packaged as a folder containing a SKILL.md file. The SKILL.md holds a description of when to use the skill plus the instructions Claude follows, and can bundle supporting scripts or reference files. Claude reads each skill's description and loads the full instructions automatically when a task matches, so you don't repeat the same guidance every session. You can also invoke a skill yourself by typing /skill-name.
Where do Claude Code skills live?+
Skills live in a skills directory under .claude. Project skills go in .claude/skills inside your repository and are scoped to that project, so they can be committed and shared with your team. Personal skills live at ~/.claude/skills in your home directory and apply across all your projects. Each skill gets its own subfolder containing a SKILL.md. Organizations can also distribute skills through managed settings, and plugins can bundle them.
How are skills different from slash commands and subagents?+
In current Claude Code, custom commands have effectively merged into skills: a file in .claude/commands and a skill in .claude/skills can both create the same /name command. The skill is the reusable unit, and its frontmatter controls who can invoke it — you, Claude, or both. A subagent is a separate idea: a worker Claude delegates to in its own context with its own tools. Skills and subagents compose, and a skill can even be configured to run inside a forked subagent.
What is progressive disclosure in Claude Code skills?+
Progressive disclosure means Claude keeps only each skill's short description loaded at all times and pulls in the full instructions and bundled files only when it decides the skill is relevant. Bundled scripts run through the shell without their source entering the context window. This keeps the context lean while still letting individual skills be detailed, because the heavy content arrives just in time rather than on every turn.
How do I create a Claude Code skill?+
Create a folder under .claude/skills (the folder name becomes the command), add a SKILL.md with a description that states when the skill should be used, and write the step-by-step instructions in the Markdown body. You can include helper scripts or reference files in the same folder and point to them from the instructions. For the exact frontmatter fields and naming rules, follow the official Claude Code documentation at docs.claude.com, since the spec changes over time.