{} Claude Skills ยท ch.2 ยท writing the trigger
๐ŸŽฏ Chapter 2 ยท The sentence that decides everything

The sentence Claude reads first

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.

1What the description does (and doesn't do)

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:

  • The trigger. Does this prompt match? Does it cover the phrasings users actually use?
  • The pitch. Does this skill look like the right one โ€” clearer in scope than the others Claude has loaded?
๐Ÿ’ก
One sentence to keep: if your skill never fires, the description didn't sell it. Not Claude's fault. Not the model's fault. Not the user's fault. Your description didn't include the words a real user would type.

2The three-part recipe

Strong descriptions all have the same three parts, often in this order:

  • What it does โ€” one short line. "Extract transcripts from YouTube videos." No fluff.
  • When to use โ€” the words a user is likely to say. "transcript", "subtitles", "captions". And the situation: "when the user provides a YouTube URL".
  • Where the boundaries are โ€” when NOT to use it. "Supports output with or without timestamps" (an implicit boundary โ€” this isn't a video editor). Or explicitly: "SKIP if ...".

Here's the actual youtube-transcript description from ~/.claude/skills/youtube-transcript/SKILL.md, broken into its three parts:

Extract transcripts from YouTube videos. Use when the user asks for a transcript, subtitles, or captions of a YouTube video and provides a YouTube URL (youtube.com/watch?v=, youtu.be/, or similar). Supports output with or without timestamps.
what it does when to use (trigger phrases) boundary / parameters

Three pieces, each earning its place. Drop any one and the description gets weaker.

3Say what the user will say

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 writeDo 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
๐Ÿ—ฃ๏ธ
If you're not sure what to write, imagine a friend who isn't a developer asking you for the thing your skill does. What word would they use? That is your trigger phrase. The vocabulary of the implementation rarely overlaps with the vocabulary of the user.
Interactive ยท description scorer Type ยท watch the bars ยท see which prompts match
Trigger coverage
0
Specificity
0
Boundary clarity
0
keywords: โ€”

4Skip-conditions are gold

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.

๐Ÿšฆ
A skip-condition isn't "extra polish" โ€” it's the difference between a skill that activates for "how do I get a YouTube channel started?" (which has nothing to do with transcripts) and one that doesn't. Adding "SKIP if the user is asking about channel growth, monetisation, or recommendations" cuts that whole class of false positives in one line.
Interactive ยท skip-condition demo Toggle the SKIP clause ยท watch false positives disappear
SKIP clause: OFF ยท fires for everything matching the trigger words
0 match ยท 0 blocked

5Watching a real description work

Take the youtube-transcript description apart, clause by clause. Every phrase is doing something specific:

  • "Extract transcripts from YouTube videos." — the what. Doesn't say HOW (no mention of the API or the script). Doesn't say WHY (no marketing copy). Just the verb and the object.
  • "Use when the user asks for a transcript, subtitles, or captions of a YouTube video" — the when, with all three natural-language synonyms. "Transcript" is the technical word; "subtitles" and "captions" are what casual users will actually say. Cover all three.
  • "and provides a YouTube URL (youtube.com/watch?v=, youtu.be/, or similar)" — an implicit skip-condition. No URL? No match. The URL examples teach Claude what to look for in the prompt.
  • "Supports output with or without timestamps." — a parameter note. Tells Claude (and the user) what the skill can do once it activates.

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.

Interactive ยท before / after Click any card to flip it — see the rewrite
0 / 3 flipped

6Iterating: when Claude isn't triggering

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:

  • Add a missing trigger phrase. A user said "captions" but your description only mentions "transcript". Add "captions" to the description. Done.
  • Add a skip-condition for a false positive. Your skill fires for prompts that look related but aren't. Identify the pattern, add it to a SKIP clause.
  • Tighten an over-broad clause. "Use whenever the user mentions Y" fires for everything tangentially Y-shaped. Replace with "Use when the user asks to do Y-task and provides Z".

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.

๐Ÿ”
The feedback loop is: type a prompt โ†’ see if the skill fires โ†’ if not, what word would have helped? Add it. Re-test. Most skills converge to a good description in three or four passes โ€” but only if you actually pay attention to what people say.

7Explicit vs implicit: writing for both

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.

  • Explicit-first skill. If you mostly invoke it via the slash command, the description matters less for triggering โ€” it doesn't have to win the matching contest. But it still serves as a one-line reminder of what the skill is for, the next time you (or another developer) look at the folder.
  • Implicit-first skill. If you want Claude to auto-fire it, double down on trigger phrases. Write every user-facing synonym you can think of. Add the obvious skip-conditions.

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.

๐ŸŽฏ
Test the implicit path the same way you'd debug a flaky test: type the prompt you wish triggered it. If it doesn't fire, the description (not Claude) is the bug. Refine until the natural phrasing fires it every time.

8Side-by-side: weak vs strong SKILL.md

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.


          
Triggers on too many phrasings, has no boundaries, doesn't say what it does. Claude will fire this for "how do I get a YouTube channel started?" โ€” pure noise.

          
Three parts working together. "Extract transcripts..." is the what. "Use when the user asks for transcript/subtitles/captions and provides a URL" is the when. The URL formats are implicit skip-conditions โ€” no URL, no match.