Why a skill does not trigger, and how to fix its description
How an agent decides to load a skill, why a skill is missed or fires too often, and how to write a description that triggers at the right moment.
Updated on
A skill only helps if your agent loads it. The agent does not read all your skills on every request: it decides from a short description. Most skills that seem not to work actually have a description that does not match how you phrase your requests.
How the agent picks a skill
Agents load skills in stages so they do not clutter their context.
- At startup, the agent reads only the name and description of each installed skill. The Agent Skills specification puts this at roughly 100 tokens per skill.
- When your request matches a description, it reads the full SKILL.md file and follows its instructions.
- While working, it opens supporting files (references, templates, scripts) only if it needs them.
The description therefore carries the whole burden of triggering. If it does not say when the skill is useful, the agent has no reason to reach for it. A less obvious consequence: an agent mostly consults skills for tasks that need knowledge it lacks on its own. A simple one-step request such as "read this PDF" may trigger nothing even with a perfect description, because the agent can manage with its basic tools.
Why it does not trigger
| Symptom | Likely cause | Fix |
|---|---|---|
| The skill is not in the agent's list | Wrong folder, or a session opened before the install | Check the folder on your agent's page, then open a new session |
| It is listed but never chosen | Vague description, or one without the words of your requests | Rewrite the description (see below) |
| It ignores a very simple request | The task is too short for the agent to consult a skill | Phrase a fuller task, or call the skill by name |
| It stopped firing once you installed many skills | Descriptions of the least-used skills are cut from the list | Shorten descriptions, remove skills you do not use |
| It is listed but the agent does not recognize it | Invalid YAML header | Fix the frontmatter |
Four points specific to Claude Code, from its documentation:
- The description and the optional
when_to_usefield are truncated together at 1,536 characters in the skill list. Put the main use case first. - That list has a character budget equal to 1% of the model's context window. When it overflows, Claude Code drops the descriptions of the skills you invoke least. The names stay, but not the keywords that let Claude recognize them.
- If the YAML frontmatter is malformed, the skill loads with empty metadata:
/skill-namestill works, but the agent can no longer match it from its description. The frontmatter is read only when the---line is the very first line of the file. Run Claude Code with--debugto see the parse error. - A skill with
disable-model-invocationset totruenever triggers on its own: its description is not even in the context.
To see which skills Claude can see, ask it "What skills are available?". If a skill is missing there, the problem is the installation, not the description. The Claude Code page lists the folders to check.
Writing a description that triggers
Here is the header of a skill with a description that is too vague:
---
name: pdf-tools
description: Helps with PDFs.
---
And a version that says both what the skill does and when to use it:
---
name: pdf-tools
description: Extracts text and tables from PDF files, fills PDF forms, and merges multiple PDFs. Use when working with PDF documents or when the user mentions PDFs, forms, or document extraction, even if they do not say "PDF" explicitly.
---
The rules to keep, from the Agent Skills specification and its description guide:
- Say what the skill does and when to use it. A description is 1 to 1,024 characters.
- Address the agent. "Use this skill when…" works better than "This skill does…": the agent is deciding whether to act, so tell it when.
- Start from the user's intent, not from the skill's internals. The agent compares the description with what you ask.
- List the situations, including indirect ones. Add cases where you do not name the domain, such as a request about "margins" for a spreadsheet skill.
- Keep it short. A few sentences are enough, and every description takes up context in all your conversations.
Avoid angle brackets in the description: Claude Code displays them as < and >. Use square brackets for a placeholder, for example [branch].
Test and adjust
Do not judge a description from a single try. The Agent Skills guide recommends preparing realistic requests, some that should trigger the skill and some that should not, then recording the result after each change.
- Write about ten requests as you really phrase them, with typos, shortcuts and context.
- Add a few neighboring requests that should not trigger the skill, to catch a description that is too broad.
- Run each request in a fresh session and note whether the agent loads the skill.
- Edit the description, then repeat.
If the skill fires too often, make the description more specific. In Claude Code you can also add disable-model-invocation: true and start it by hand only, which suits actions with side effects such as a deployment.
A skill that has loaded can still be dropped along the way. Claude Code adds its content to the conversation when it is invoked, and after an automatic summary of the context it keeps only the start of each invoked skill. Put the essential instructions at the top of SKILL.md, and invoke the skill again if the agent drifts from it.
To install a first resource, see Install your first resource. To understand what a skill adds over a prompt, see Resource or plain prompt?. You can browse the catalog on the skills page.
Sources
Frequently asked questions
My agent ignores an installed skill: what should I check first?
That the skill appears in the agent's list, that SKILL.md starts with the --- line, and that the description contains the words you use in your requests. You can also call it by name, for example /skill-name in Claude Code.
How long should a description be?
The Agent Skills specification sets a maximum of 1,024 characters. A few sentences are enough. Claude Code also truncates the description at 1,536 characters in its skill list, so put the main use case first.
Can a skill trigger too often?
Yes, when its description is too broad. Make it more specific, or in Claude Code block automatic triggering with disable-model-invocation: true so you start it by hand only.
