Get started

Claude Code skills, explained: what loads, when it fires, and how to write one

Skills roundups list twenty skills and skip the only question that matters: when does Claude actually read one? Once you understand the loading mechanism, you can predict which skills will fire, explain why most installed skills never do, and write one that earns its place.

Updated August 4, 2026

What a skill actually is

Strip the branding and a skill is a directory with one required file. SKILL.md opens with YAML frontmatter carrying a name and a description, then continues as ordinary Markdown instructions. The folder can also hold scripts the instructions invoke, reference documents, and asset templates. That is the whole format, and it is deliberately boring: a skill is a procedure written down, packaged so an agent can find it.

---
name: brand-audit
description: Check UI code against the project design system. Use when reviewing components, screens, or PRs for hardcoded colors, off-scale spacing, or fonts that bypass the tokens in DESIGN.md.
---

# Brand audit

1. Read DESIGN.md at the repo root before judging anything.
2. Flag any literal hex value, arbitrary Tailwind color, or font-family
   that does not come from the token set.
3. Report violations as file:line with the token that should be used.
The minimal anatomy of a SKILL.md.

The same format now works beyond Claude Code: it grew into an open agent-skills convention that OpenAI's Codex and Cursor have adopted with their own discovery paths, which is why a skill you write once increasingly travels with you. We cover the Codex side in Codex skills.

The loading mechanism, which explains everything else

Claude Code does not read your skills into every conversation. At session start it indexes only the frontmatter: each skill contributes its name and description to context, a couple of lines, nothing more. The full body, the scripts, the reference files load only when Claude decides the current task matches a description, or when you invoke the skill explicitly. Anthropic calls this progressive disclosure, and it is the design decision the whole feature hangs on.

Two practical consequences follow. First, installing fifty skills costs you almost nothing in context, so hoarding is cheap; a hundred descriptions weigh less than one loaded skill body. Second, and this is the part the roundup posts miss, a skill with a weak description is *installed but unreachable*. Claude cannot match a task to "Helps with frontend stuff." The complaints that fill Reddit threads, I installed twenty skills and nothing changed, are usually this: the bodies were fine, the descriptions never gave the model a reason to open them.

The description is the API

Write descriptions the way you would write a function signature for a caller who cannot read the implementation. Name the trigger situations ("use when reviewing components or PRs"), the inputs it expects, and the surface it touches. A concrete description is both the trigger condition and the promise the skill has to keep.

Where skills live

  • ~/.claude/skills/<skill-name>/SKILL.md: personal skills, available in every project you open.
  • .claude/skills/<skill-name>/SKILL.md: project skills, committed to the repo so every collaborator and every agent session gets them.
  • Plugins: a plugin can bundle skills alongside commands and agents, which is how teams distribute a set in one install.

The repo location matters more than it looks. A personal skill fixes your sessions; a committed one fixes your teammate's sessions and your CI agent's sessions too. Anything that encodes a project contract, how we review UI, how we write migrations, how we apply the design system, belongs in .claude/skills/ next to the code it governs.

Skills, CLAUDE.md, or a subagent?

Claude Code gives you three places to put knowledge, and they answer different questions. CLAUDE.md is always loaded: it is for constraints that apply to every request, and every line in it is paid for on every prompt, so it should stay short. A skill loads on demand: it is for procedures that are only sometimes relevant, and it can be long because it costs nothing until it fires. A subagent is a separate context entirely: it is for work whose intermediate output would pollute your session.

LoadsBest forCost when idle
CLAUDE.md / rulesEvery requestHard constraints: build commands, never-do rulesEvery line, every prompt
SkillWhen the task matches its descriptionProcedures: reviews, releases, audits, design applicationTwo lines of frontmatter
SubagentWhen delegatedWork with noisy intermediate outputNothing
Where a piece of knowledge belongs.

The dividing line for the full file taxonomy, including AGENTS.md and DESIGN.md, is in CLAUDE.md vs AGENTS.md vs SKILL.md vs DESIGN.md.

How to write a skill that fires

  1. 1

    Start from a repeated correction

    The best skill candidates are the things you keep typing: the review checklist you paste, the deploy sequence you re-explain. If you have never corrected the agent about it twice, it does not need a skill yet.

  2. 2

    Write the description first, as trigger conditions

    Before the instructions, write the sentence that decides when this loads: the verbs and situations a matching request would contain. If you cannot name the situations, the skill will not fire and you have discovered that early.

  3. 3

    Make the body an executable procedure

    Numbered steps, exact commands, exact file paths. Reference files in the skill folder for anything long. An agent follows a procedure far more reliably than it channels a vibe.

  4. 4

    Point at artifacts, not adjectives

    A skill that says "keep the UI consistent" does nothing. A skill that says "read DESIGN.md and use only its tokens" works, because the judgment is externalized into a file the agent can open. Put the knowledge in an artifact and let the skill be the pointer.

  5. 5

    Test it by asking, not invoking

    Do not test with an explicit invocation; that proves nothing about the trigger. Phrase a request the way you naturally would and check whether the skill loads. If it does not, the description, not the body, is what needs editing.

The worked example: a design skill and the file behind it

Design is the perfect skill use case, and the perfect illustration of the artifact rule above. Anthropic ships a frontend design skill for Claude Code, and it genuinely improves single screens; we tested it and wrote up exactly what it does and what it misses. What it misses is memory between screens: the skill carries taste, not your values, so screen twenty drifts from screen one. Taste generalizes; identity does not.

The fix is the pattern from step four: the skill stays a thin procedure, and the identity lives in an artifact, a DESIGN.md at the repo root with real tokens, type choices, spacing rules, and do-not rules. The brand-audit skill at the top of this page is only twelve lines because everything it enforces is defined in that one file. That is what a design system for an agent is: not a plugin, a readable contract.

Ambient Sage

Live render

Rendered from the kit's actual tokens, fonts, and treatments

Ambient SageOverview
Search anything⌘K
AS

Analytics

Revenue overview

See revenue and retention trends alongside account health.

Jan 1 to Jan 30, 2026
Overview
Analytics
Reports
Notifications

Active users

15.1k

2,491 new

+5%

MRR

$49.1k

Net of churn

+3%

Retention

89%

28-day window

+2%

NPS

69

1,204 replies

+3

Revenue

Last 12 months

$49.1k +18.2%

12m30d7d
JanFebMarAprMayJunJulAugSepOctNovDec

Acquisition

Goal completion

On track
78%of goal
Organic48%
Direct31%
Referral21%

Recent transactions

Latest activity across your workspace

View all
CustomerStatusDateAmount
AR

Alex Rivera

Founder & CEO

Paid2 min ago$1,999.00
MO

Mira Okonkwo

Head of Product

Pending1 hour ago$39.00
JF

Jonas Feld

Design Lead

Processing3 hours ago$299.00

Typography

Plus Jakarta Sans

Color system

28 semantic roles, light + dark

Agent outputs

DESIGN.md, CSS, Tailwind, shadcn

A design kit is the artifact form of that contract: tokens, type, and rules that export as the DESIGN.md a skill can point at.

Give your skills something to enforce

Every kit exports a complete DESIGN.md: semantic tokens in light and dark, typography, spacing, motifs, and agent rules. Install one and your design skill stops improvising.

npx --yes identityforge@latest install --client claude-code
The MCP server gives Claude Code kit browsing and applying as tools; the CLI does the same without MCP.

Skills across tools: the same idea is spreading

The skill format stopped being Claude-specific in a way that matters for what you invest in. OpenAI's Codex discovers SKILL.md folders under .agents/skills/ and ~/.agents/skills/ and invokes them with $; Cursor added Agent Skills with the same on-demand loading next to its always-on Rules, and has been steering long procedural rules toward skills. The convention is converging on the same shape everywhere: frontmatter that advertises, a body that instructs, loading that waits for relevance. Skills you write against artifacts in your repo, rather than against one tool's quirks, survive the tool churn.

Why do my installed Claude Code skills never do anything?

Almost always the description. Claude only sees each skill's name and description until it decides to load one, so a vague description ("helps with testing") gives it nothing to match against your request. Rewrite the description to name concrete trigger situations and inputs, then test by phrasing a natural request rather than invoking the skill explicitly.

What is the difference between a skill and CLAUDE.md?

CLAUDE.md is loaded on every request, so it is for short, always-true constraints, and every line costs context on every prompt. A skill loads only when your task matches its description, so it is for longer procedures that are only sometimes relevant. If you find yourself pasting a checklist into CLAUDE.md, it probably wants to be a skill.

Where do I put a skill so my whole team gets it?

Commit it to the repository at .claude/skills/<name>/SKILL.md. Personal skills in ~/.claude/skills/ follow you across projects but reach nobody else; a plugin is the distribution path when one set of skills should install across many repos.

Can a skill make Claude Code follow my design system?

Yes, and it is the highest-leverage design move in Claude Code, but the skill should be thin: a procedure that says read DESIGN.md, use only its tokens, never hardcode a color. The system itself, tokens, typography, spacing, rules, belongs in that file, not in the skill. Any Identity Forge kit exports a complete DESIGN.md to fill that role.

How many skills is too many?

Idle skills are nearly free, since only the name and description sit in context. The real ceiling is discrimination: many skills with overlapping, vague descriptions blur together and misfire. Fewer skills with sharp, situation-naming descriptions beat a large fuzzy library.