← All posts
·4 min read

Claude Code Skills, Explained

I keep telling people that the fastest way to make Claude Code better at your work is to teach it once and never repeat yourself. That's what skills are for. Here's the plain version.

What a skill actually is

A skill is a reusable capability Claude Code loads on demand. It's packaged instructions — and optionally scripts or resource files — that teach Claude how to do one specific task well.

Think of it as a recipe you write once. "Here's how we generate a release changelog." "Here's how we format a database migration." "Here's the exact way we want API errors handled." Instead of explaining the steps every session, you write them down as a skill, and Claude reaches for them when the moment is right.

The key word is capability. A skill doesn't run on its own and it isn't a command you type. It's knowledge that sits ready, and Claude pulls it in when your request matches what the skill is for.

How on-demand loading works (and why it saves context)

This is the part that makes skills worth caring about.

Every skill has a short description. Claude reads those descriptions and nothing else up front. When your request looks relevant to a skill's description, Claude loads the full skill — the detailed instructions and any supporting files. When it isn't relevant, the skill stays on the shelf.

That's on-demand loading, and it matters because context is finite. If you stuffed every workflow, style rule, and edge case into one giant instructions file, Claude would carry all of it on every turn — even when you're just fixing a typo. Skills flip that. You can have dozens of them installed, and only the ones you actually need get loaded into the conversation.

The result: lean context, sharper responses, and room to keep a lot of specialized know-how around without paying for it every message.

Where skills live and how they're structured

Skills live in one of two places:

  • Project skills.claude/skills/ in your repo. These travel with the project and are great for team conventions.
  • Global skills~/.claude/skills/ in your home directory. These follow you across every project.
A skill is typically a folder containing a SKILL.md file plus any supporting files it needs. The SKILL.md has frontmatter with a name and a description, then the instructions below. Here's a realistic one:
---
name: changelog-writer
description: Generate a release changelog from merged PRs. Use when the user asks to draft release notes or summarize changes for a version bump.

Changelog Writer

When asked to write a changelog:

  • Run git log <last-tag>..HEAD --merges to gather merged PRs.
  • Group entries under Added, Changed, Fixed, and Removed.
  • Write each entry as a short user-facing sentence, not a commit subject.
  • Link each PR by number.
  • Output to CHANGELOG.md under a new version heading with today's date.
Keep the tone factual. No marketing language.

That description line is doing real work — it's how Claude decides the skill is relevant. Write it like a trigger: say what the skill does and when to use it. Vague descriptions get ignored; specific ones get loaded at the right time. Anything beyond text — a script, a template, a reference doc — just lives alongside the SKILL.md in the same folder.

How skills differ from subagents and slash commands

These three get mixed up constantly, so here's the clean split.

  • Skills are capabilities Claude loads on its own when a task matches. You don't invoke them. They run inside your current conversation and keep your context lean.
  • Subagents are separate workers with their own context window. You hand off a chunk of work, they go do it in isolation, and they report back. Use them for delegation and to keep big tasks from cluttering your main thread.
  • Slash commands are shortcuts you type. /deploy, /review. They run when you ask, not when Claude decides.
Simple rule of thumb: slash commands are user-triggered, subagents are for delegation, and skills are knowledge Claude pulls in automatically. They compose well together — a slash command can kick off a subagent that leans on a skill.

How to start using them

You don't need much to get going.

  • Step 1 — Make a folder: .claude/skills/my-skill/ for this project, or ~/.claude/skills/my-skill/ to use it everywhere.
  • Step 2 — Add a SKILL.md with a clear name and a sharp description. The description is the most important line — it decides when the skill fires.
  • Step 3 — Write the instructions like you're onboarding a teammate. Be concrete. List the steps.
  • Step 4 — Drop in any scripts or templates the skill needs, right next to the SKILL.md.
  • Step 5 — Start a session and trigger it naturally. If it doesn't load, tighten the description.
Start with one annoying task you explain over and over. Turn it into a skill. You'll feel the difference immediately.

If you'd rather not start from scratch, AgentsCamp has a directory of ready-made skills you can install in seconds. Browse AgentsCamp and add one to your setup with npx agentscamp add skills/. Find a skill that fits your workflow, install it, and let Claude do the repeating for you.