The description is both the trigger and the one-shot pitch โ it's all Claude sees until your skill fires. Write it like the user would say it, not like the code looks under the hood.
Chapter 1 said the description IS the trigger. Chapter 2 is how to write one that works. Plain English first: a good description sounds like the user, not like the implementation.
Everything in this chapter comes back to one observation: your description is the only thing Claude reads before deciding whether to use your skill. So it has to sell the skill AND draw the right boundary AND match real human phrasings โ all in two or three sentences.
Here's the lifecycle. When a session starts, Claude reads the descriptions of every available skill. Just the descriptions โ not the bodies, not the supporting files, not the scripts. The body of SKILL.md is invisible until your skill is actually invoked.
From that point on, every time you type something, Claude does a quiet matching pass: does any skill's description suggest it's the right tool for what the user just asked? If yes, the skill activates and Claude reads the body. If no, nothing happens.
So the description has two jobs at the same time:
Strong descriptions all have the same three parts, often in this order:
Here's the actual youtube-transcript description from ~/.claude/skills/youtube-transcript/SKILL.md, broken into its three parts:
Three pieces, each earning its place. Drop any one and the description gets weaker.
This one rule wins more skill-fires than any other: your description is read by Claude, but it has to MATCH what humans actually type.
So write the words the user is going to type. Not the technical name for what's happening behind the scenes. "Transcript" โ not "automatic speech recognition output". "Deploy" โ not "static asset distribution". The right word is the one that sits naturally in a person's mouth.
| Don't write | Do write | |
|---|---|---|
| automatic speech recognition output | โ | transcript / subtitles / captions |
| static asset distribution pipeline | โ | deploy / push the site / ship it |
| syntactic refactoring of identifier symbols | โ | rename this variable |
| codebase-wide invocation analysis | โ | find all the places that call X |
| configurable persistence layer commit | โ | save / write to disk |
Look at the claude-api skill's description. After the trigger phrases, there's a clause that starts with SKIP: โ "file imports openai/other-provider SDK, filename like *-openai.py/*-generic.py, provider-neutral code, general programming/ML".
That clause is doing real work. Without it, the skill would fire any time someone touches an SDK file โ including OpenAI's, Cohere's, anybody's. With it, the skill quietly steps aside when it's clearly not the right one.
Here's the right mental model: a description is a classifier. Positive examples (trigger phrases) tell Claude when to fire. Negative examples (skip-conditions) tell Claude when to stop. A classifier with only positive examples will over-fire. Give it boundaries.
Take the youtube-transcript description apart, clause by clause. Every phrase is doing something specific:
Three sentences. No wasted words. Every clause is either a phrase Claude can match against, or a constraint that prevents a false match. That's the bar.
Your first description rarely lands perfectly. That's normal. The fix is observation, not cleverness: watch real user phrasings and refine.
Three moves cover almost every fix:
Treat your description like a regex you tune. You don't get it right the first time; you get it right by iterating on what you actually see.
There are two ways a skill fires (Chapter 1, briefly): the user types /skill-name, or Claude auto-invokes based on the description match. The description's job changes depending on which one you're after.
Most well-written skills work both ways. If you can't invoke a skill in plain English without using /skill-name, the description has more work to do.
Same skill (kind of). Same job (extract transcripts). Two very different descriptions. Read both โ and notice how the weak one would fire for prompts that have nothing to do with what the skill actually does.