A skill is a packaged instruction set for an AI agent. The best way to make a skill in Claude is to use the built-in skill-creator skill. But if you think that all of Anthropic's published skills follow the same path, you'd be wrong.
An analysis of hundreds of skills published by Anthropic and cross-checked against Claude's skill-creator skill reveals a standard anatomy plus nine key principles.
You may be wondering why I don't just turn these findings into its own skill. Well, you wouldn't learn anything that way, would you? Just read it :-p
The Anatomy: Seven Components
A complete skill answers seven questions, roughly in this order:
- Trigger — what causes this skill to fire?
- Objective — what is the goal?
- Context — what does it read in order to be properly grounded for the task?
- Process — what are the steps?
- Rules — what constraints apply?
- Output — what exact shape does the result take?
- Edges — what does it not do, what happens on missing input, and how does it end?
The anatomy tells you what to write. The nine principles below tell you whether it is written well.
The Description Is a Router
What The frontmatter description is written for the model deciding whether to load the skill. It states what the skill does, then lists literal phrases a user would actually type — a spreadsheet-audit skill lists "model won't balance" and "something's off in my model"; a company-profile skill lists every synonym from "tear sheet" to "one-pager" — including casual and indirect phrasings.
Tip Err on the side of being pushy in a description: "use this whenever the user mentions X, even if they don't say Y."
Why The description is the only part of the skill in a model's context before triggering. Anthropic's own reports have demonstrated that models tend to undertrigger by default — especially on tasks they think they can handle alone. A skill that doesn't fire is of no use, no matter how good its body is. Trigger phrases are cheap insurance against the router missing an intent the author considered obvious.
Focus Skills to the Task
What One skill produces one nameable deliverable — a tie-out report, a root-cause JSON, a tear sheet — and sizes its response to the actual question. If a skill needs pages of warnings to stay in its lane, it should be broken into multiple skills.
Why Narrow deliverables are verifiable and composable; sprawling ones force the author to police scope with emphasis, which degrades under context pressure.
break-trace skill does one thing — trace a reconciliation break to its source transaction — and returns one JSON object naming the cause.Specify the Edges
What Define behavior everywhere the standard path doesn't apply: include a "what the skill will not do" section, what to do when input is missing (e.g. ask, halt, or proceed with labeled assumptions — never proceed silently), and how it ends (hand back options and a next-step decision tree, not a unilateral decision).
Why Models fill gaps with confident guesses. An undeclared boundary produces a plausible wrong answer instead of an escalation; an unspecified missing-input rule produces fabricated data; an unspecified ending produces a skill that quietly overreaches its authority. Edge behavior is where skills fail in ways that matter, so it's where the specification has to be explicit.
Progressive Disclosure
What Structure content by when it's needed: a skill's description is always kept in context so limit it to roughly 100 words, a SKILL.md body under ~500 lines loaded on trigger, and references/ files loaded only on demand — organized by variant so the model reads only what it needs. Putting scripts in a scripts/ folder ensures they can be executed without ever being loaded into context.
Why Everything in context competes for the LLM's attention. Structuring content on a need-to-know basis means the skill costs almost nothing when idle, stays coherent when active, and can hold unlimited depth.
Every Instruction Earns Its Place
What Justify each rule with its reason rather than with volume or capitalization. A DCF-modeling skill forbids writing computed numbers into Excel cells, and the reason carries the rule: "the model must flex when the user changes an assumption" — every cell must be a live formula. If your skill shouts ALWAYS/NEVER in all caps, treat it as a yellow flag.
Why A reasoned rule generalizes — the model can apply the why to situations the author never enumerated. A bare prohibition only covers its literal case and competes for attention with every other prohibition; when everything is CRITICAL, nothing is.
Classify Your Inputs
What Sort what flows into the skill into kinds and treat each accordingly. Method vs. judgment: the reusable procedure lives in the skill, the user's positions and preferences live in a config file the skill reads at runtime. Claude for Legal's NDA-review skill is the model case: it defines a stable GREEN/YELLOW/RED review framework but contains zero opinions on what makes an NDA term acceptable — those criteria come entirely from the firm's own playbook config, so the same skill serves any legal team.
Tip For any skill, identify which input is authoritative (the instructions) and which is the material being evaluated (the artifact). Then never allow the artifact to issue instructions.
Why Mixing method with judgment reduces the output consistency of a skill; separating them ensures reusability. Mixing trust levels is also dangerous! Treating an uploaded document as an instruction source can create security problems via prompt injection. One declarative line per input prevents both.
Use Files, Not Context, for Better Memory
What In any multi-step skill, write retrieved data to files immediately after each retrieval — not batched at the end — then verify the files exist, then declare the files (not the conversation) the single source of truth for every number in the output. Generation reads from disk.
Why Long-running context degrades: details drift, get summarized, or get silently dropped, and a model will confidently "remember" a figure it mangled. Files don't degrade. This is the single highest-leverage guard against the failure mode users can't detect — an output that looks right but is built on corrupted recall.
financials.csv; before generating the document, print a checklist verifying each file exists and has rows; generate every number by reading the files.Structure Outputs for Consistency
What Specify the output shape verbatim, including templates with placeholders, fixed table columns, fixed JSON fields. Also consider providing a small fixed vocabulary for confidence and provenance ([verify], [review], [source: X]), with confidence graded by input quality: full document in hand → confident; a name alone → flagged.
Why A predictable shape is what makes a skill usable twice and consumable by the next skill in a pipeline; free-form output composes with nothing. And uniform confidence is fake calibration — a skill that sounds equally sure on clear and ambiguous questions transfers risk to whoever reads it. Inline tags make uncertainty survive copy-paste into the downstream document, where the prose caveat would have been trimmed.
[model knowledge — verify].Determinism into Scripts; Composition into the System
What Anything mechanical — validation, recalculation, formatting — ships as a bundled script or function the skill must call, not as prose describing the desired result. Find candidates empirically: if every test run independently wrote the same helper, bundle it. Beyond scripts, compose outward: hand off to agents for heavy work, point at shared guardrails instead of duplicating them, and use canonical names in cross-references — a misspelled skill reference is a dead command that fails silently.
Why Prose describing correct behavior is re-interpreted on every invocation and drifts under context pressure, whereas a function bakes in the rules. A tear-sheet skill learned this directly: pages of prose formatting rules still occasionally produced black-background tables (a Word-generation bug), so the author replaced the prose with five required helper functions — a createTable() with correct shading baked in cannot produce the bug. And skills that duplicate instead of referencing diverge silently over time; composition is what lets a library of small skills behave like one coherent system.
recalc.py and requires "run it until status is success, zero formula errors" — verification is a script exit code, not a judgment call.