{} Claude Skills · ch.9 · common pitfalls
⚠ Chapter 9 · The ones you'll hit anyway

Eight ways to break your skill

Every skill author hits these. The good news is they all have the same shape — a trigger that's too wide or too narrow, a body that's doing too much, or a path baked into a place it doesn't belong. Spot the pattern, apply the fix.

Most skill bugs aren't bugs in the code. They're misjudgements in the trigger or the shape of the body. The same eight problems crop up over and over — so over and over that you can almost diagnose a struggling skill from across the room.

This chapter walks through each of the eight, shows the exact mistake, and gives the fix. Then three widgets let you practice spotting them in the wild.

0The eight at a glance

Before we dig in, here are all eight side by side. Skim, then dive — every one gets a section below.

#PitfallWhat it looks likeThe fix
P1Trigger too broad"helps with anything text"Name the verbs and nouns
P2Trigger too narrowOne exact phrase only3-5 natural variations
P3Hardcoded user paths/Users/alice/...Parameterise or document
P4SKILL.md doing too much800-line bodyMove to references/
P5Stale supporting filesSKILL.md and refs disagreeVersion as one unit
P6Skill conflictsTwo skills, same triggerTighten, skip, or merge
P7Mixing concernsFour jobs in one skillSplit, one job each
P8Non-portabilityAssumes node, make, macDeclare deps, fail loudly

1Pitfall 1 — Trigger too broad

The classic enthusiastic mistake. You wrote a skill, you want it to fire, so you tell Claude to use it generously.

The broken version. description: "helps with anything related to text". It fires for every message anyone ever sends. Suddenly Claude tries to use your skill to reply "hello", to plan a trip, to debug Python — because all of those involve text.

The skill becomes noise. Worse, it competes with every other skill, so genuine matches get muddied too.

The fix: name specific verbs and nouns. "Generate a markdown table of contents from a heading list. Use when the user says make a TOC, generate a table of contents, or extract headings." The trigger now has a job description — and it'll only fire when that job is actually being requested.

2Pitfall 2 — Trigger too narrow

The over-correction. You learned that broad triggers misfire, so you locked the trigger to one exact phrase.

The broken version. description: "Use when user says exactly 'pls generate TOC'". Real users never type that exact string. They say "make a TOC", "generate a table of contents", "build a TOC from these headings". The skill never fires.

Same outcome as too-broad: the skill is useless. Different shape, same result.

The fix: include 3-5 natural-language variations in the description. List the verbs people actually use — make, generate, build, extract — and the nouns — TOC, table of contents, headings list. The trigger now matches how humans speak, not how you wrote a unit test once.

3Pitfall 3 — Hardcoded user paths

The skill body says /Users/alice/.config/foo.json. Works perfectly for Alice. Breaks the moment anyone else tries to use it.

The broken version. Anywhere a real user's home directory appears in SKILL.md — /Users/alice/, /home/bob/, C:\Users\carol\ — that's a portability bomb. Even if you're the only user today, future-you on a new machine has the same problem.
The fix: parameterise paths, or document them as user-replaceable. Use ~/ or $HOME. Refer to "your deploy target (configured in references/targets.md)" rather than spelling out one user's filesystem. For strictly-personal skills it's fine to hardcode; for anything you might share, never.

4Pitfall 4 — SKILL.md doing too much

The most common quality-of-life pitfall. The skill works — but it's 800 lines, includes the whole reference table inline, and ships with a 40-line sample dataset baked into the body.

The broken version. SKILL.md has everything inside it: trigger metadata, prose, the full lookup table, every example, the migration notes from two years ago. Every invocation re-reads the whole file. That's tokens you pay for, every time, just to look up a verb at the top.
The fix: SKILL.md is the front door, not the whole house. Move heavy content into references/X.md, templates/Y.md, scripts/Z.sh, and have SKILL.md link to them. Claude follows the link with the Read tool only when actually needed. Short SKILL.md, deep references — that's the shape.

5Pitfall 5 — Stale supporting files

You did the right thing — moved detail into references/. Then you updated SKILL.md to point at a new workflow, but references/old-decisions.md still describes the old one. Now SKILL.md and the references contradict each other.

The broken version. SKILL.md says "use the new fast path documented in references/run.md". references/run.md describes the old slow path. Claude reads both and either picks the wrong one or asks the user to clarify a contradiction that shouldn't exist.
The fix: version the skill folder as one unit. When SKILL.md changes its workflow, update every reference it points at in the same commit. Treat the skill folder like a single package — internal consistency is part of the contract.

6Pitfall 6 — Skill conflicts

Two skills with overlapping triggers. web-scraper says "use for any data from a webpage". screenshot-tool says "use to capture anything from a webpage". The user asks "grab the data from this page" — and Claude has two reasonable matches.

The broken version. Both skills claim the same territory. Neither is reliable: Claude picks one, the wrong one half the time, and you can't easily tell why. Worse, debugging it requires reading both descriptions to see what they share.
The fix: tighten one or both descriptions until they don't overlap. Add skip-clauses ("SKIP when the user just wants a visual screenshot"). If the skills genuinely do the same thing, merge them. Two unreliable skills is worse than one reliable one.

7Pitfall 7 — Mixing concerns

A single skill named editor-helper that triggers on rename, refactor, format, and extract-function. It tries to cover the entire editor toolkit in one file.

The broken version. The body is a giant if/else: "if the user says rename, do X; if they say refactor, do Y; if format, do Z." Hard to test — each path has different inputs and outputs. Hard to refine — changing the rename logic risks breaking refactor.
The fix: one job per skill. Split editor-helper into rename-symbol, refactor-function, format-code, extract-function. Each has a focused trigger and a focused body. Easier to write, easier to test, easier to compose.

8Pitfall 8 — Forgetting non-portability

Cousin to pitfall 3, but about tools rather than paths. Your skill assumes node is on PATH. Or that make exists. Or that the user is on macOS and has pbcopy. Works for you. Breaks for everyone else, and the failure is silent — Claude just produces a worse output.

The broken version. SKILL.md says "run make build". Half your users are on Windows and don't have make. The skill quietly degrades into "give up and apologise".
The fix: declare dependencies in SKILL.md ("requires: node 18+, ripgrep, jq"). Add a precondition check at the top of the body so Claude can fail loudly when something's missing, with a specific message about what to install. Better to refuse cleanly than to half-work.

9Practice · spot the pitfall

Five SKILL.md snippets. Each has exactly one thing wrong with it. Pick the pitfall from the four options; the reveal explains the fix.

Interactive · spot the pitfall question 1 / 5
Score: 0 / 5

10Before / after · the rewriter

For each pitfall, see the broken SKILL.md side by side with the fixed version. The red bits are the problem; the green bits are the cure.

Interactive · before / after Click a pitfall · compare the rewrite
✗ Before

          
✓ After

          

11Diagnose · risk score

Paste a SKILL.md into the box. The widget scans for known pitfall patterns and tells you how many it found. None of this is rocket science — it's the same patterns you'd look for if you reviewed your own skill out loud.

Interactive · risk score Paste any SKILL.md · live scan
0
pitfalls detected
looks clean

12Broken / fixed · three quick examples

Three small SKILL.md snippets, broken on the left tab, fixed on the right. The same shape of bug shows up in real skills constantly — these are the patterns to recognise.

13Check yourself

3 questions · instant feedback 0 / 3
📦
Up next · Chapter 10
Sharing & portability
From your machine to someone else's — what makes a skill shareable.