Method12 min read

How to Write a SKILL.md That Teams Can Trust

A SKILL.md is not a long prompt. It is a routing layer, a procedure, an output schema, and a set of checks — compact enough that an agent reads all of it and a teammate can review it in five minutes.

Published Sep 4, 2026Updated Sep 13, 2026By the Grokkit team

Key takeaways

  • Name and description are a routing layer, not decoration — they decide whether the skill fires at the right moment and, just as importantly, stays quiet at the wrong one.
  • Write a numbered procedure, not an essay. Anything that reads as background belongs in a reference file the skill points to.
  • The output schema and the checks are what make a skill testable. Without them you have written a long prompt with a filename.
  • Keep the root file compact. A long SKILL.md gets skimmed by models and ignored by people, and both failures look like the same bug.

The convention that has settled across AI tooling is simple: a folder containing one instruction file at its root, plus the references, templates, and scripts it depends on. The instruction file is conventionally called SKILL.md, and it is plain text — diffable, reviewable, and versionable like any other source artifact.

The format is easy. Writing one a team will actually trust is not, because it requires deciding things the original process left implicit: when the skill applies, what counts as a source, what the output must contain, and what the skill must never assert. This is how to write one that survives review and real use.

Part 01 · Routing

Activation, inputs, and scope

The first third of the file decides whether anything else in it gets used.

What SKILL.md is for

A SKILL.md defines one repeated job: when it applies, what it needs, how it is done, what it produces, and how you know the result is acceptable. It is the unit you install, version, test, and own.

One useful email a week

Get one workflow teardown a week.

A practical look at how a real repeated job becomes a reliable AI workflow — inputs, review points, and the failure modes to avoid.

By subscribing, you agree to receive Grokkit’s weekly workflow teardown. Unsubscribe anytime.

It is explicitly not a knowledge base, a style guide, or a collection of related tips. Those are reference files. Conflating them is the most common authoring mistake and it is why so many skill files are four thousand words long and rarely followed.

Name and description as the routing layer

In most runtimes, the name and description are all the agent sees when deciding whether to load the skill at all. They function as a router, so they should describe the triggering situation in the words a user would actually use, not the internal name of the process.

“Customer renewal brief — use when preparing for a renewal conversation or an account review” routes correctly. “Account Intelligence Framework v2” does not, because nothing a user types will resemble it.

When the skill should activate — and when it must not

State both boundaries explicitly. The negative boundary matters more than authors expect: a skill that fires on adjacent work produces confidently wrong output in a context it was never designed for, and users lose trust in the whole library rather than the one skill.

Two or three lines is enough. “Use for scheduled renewal and QBR preparation. Do not use for new-business research, for pricing decisions, or when the account has an open legal dispute — escalate those to the account lead instead.”

Inputs the user must provide

List the required inputs and the optional ones separately, and say what the skill does when a required input is missing. The correct behaviour is almost always to ask for it or state that it is unavailable — never to proceed on an assumption.

Be specific about form as well as content. “The last call transcript” and “a summary of the last call” are different inputs that produce different quality outputs, and the difference should not be left to chance. Writing that list as a contract the operator can satisfy — including what to do with half-filled CRM fields — is covered in input contracts.

  • Required inputs, named exactly
  • Optional inputs and what their absence changes
  • What to do when a required input is missing
  • Any input the skill must refuse to accept — for example, raw data it is not cleared to process

Sources the skill may use

Define the allowed source set. Without this, the effective rule is “anything in the context window plus whatever the model remembers,” which is how outdated internal knowledge and unverifiable claims get into a deliverable.

The allowed set should be a short list with an ordering when sources conflict — for example, the CRM record wins over a transcript on commercial terms, and the transcript wins on stated intent. Conflict rules are cheap to write and prevent a whole class of quiet errors.

Part 02 · The body

Procedure, output, and checks

The three sections that make a skill reproducible rather than suggestive.

A step-by-step procedure, not an essay

Write numbered steps in the order they happen. Each step should be an action with an observable result: read this, extract that, compare against the other, produce this section.

Explanatory prose is the enemy here. If a step needs justification, put the reasoning in a reference file and keep the step imperative. Models follow instructions far more reliably than they infer intent from context, and so do people.

Output schema: the required sections

Specify the output precisely: the sections, their order, what each contains, and roughly how long each should be. This is the single highest-leverage part of the file, because an unspecified output shape is the main reason two runs of the same skill look nothing alike.

Include an example of a filled-in output somewhere in the package. One concrete example communicates more about the expected register and depth than several paragraphs of description.

Checks that run every time

Add a short list of checks the output must pass before it is handed over. Keep them binary so that failure is unambiguous and so that they can be run as tests later.

Four to six checks is the right size. More than that and they stop being run; fewer and they miss the failure modes that matter for your job.

  • Every required section present and non-empty
  • Every factual claim traceable to a named input source
  • No dates, figures, or names that do not appear in the inputs
  • Unknowns listed explicitly rather than omitted
  • Nothing asserted about matters the skill is not scoped to judge

The unknowns policy

State what happens when the inputs are insufficient. The default behaviour of a language model is to produce a plausible answer, and the whole point of an unknowns policy is to override that default with something explicit.

A workable policy has two parts: name what is missing in a dedicated section of the output, and do not let a missing input silently weaken a conclusion elsewhere. A brief that says “renewal risk cannot be assessed — no usage data provided” is far more valuable than one that quietly assesses it anyway.

Evidence-attachment rules

Decide what counts as evidence and how it must be attached: a quote, a timestamp, a record ID, a link. Then require it for the claim types where being wrong is expensive.

Requiring evidence on every sentence makes the output unreadable. Requiring it on risks, commitments, numbers, and anything that will be quoted back to a client is the usual balance.

Part 03 · Packaging

Escalation, references, and examples

What goes alongside the root file, and how to keep the root file short.

Escalation and approval language

Write the escalation conditions as rules with a named destination. “If the account has an open dispute, stop and hand to the account lead” is actionable; “use judgment on sensitive accounts” is not.

Approval points belong in the file for the same reason. If a human must sign off before anything is sent, that is part of the process definition, not an informal habit — the reasoning is in why approval points belong in the skill file.

References, templates, and scripts in the same package

The folder holds everything the job depends on: reference files for detail and background, templates for the output, and any scripts the workflow runs. The root file points to them by name and says when to read each one.

This is what keeps the root compact while allowing the skill to be thorough. Detail that is needed sometimes should be one hop away, not inline.

Keep it compact: long files get ignored

Aim for a root file a person can read in five minutes. Past that length, models begin to weight the beginning and end more heavily, and human reviewers stop reading entirely — so a rule buried in the middle of a long file is effectively not there.

The discipline that works: every time you want to add background, add it to a reference file instead and leave a single pointer. The root file should be almost entirely instructions and specifications.

Examples: typical, messy, and edge

Include three worked examples rather than one. A typical case shows the expected shape. A messy case — missing inputs, contradictory sources — shows the unknowns policy in action. An edge case shows the escalation path being taken rather than an answer being produced.

The messy example is the one that changes behaviour most, because it demonstrates that declining to conclude is an acceptable, expected outcome. Without it, the skill drifts toward always producing a confident answer.

Version field and changelog

Put a version and a date in the file, and keep a short changelog of what changed and why. This is what makes a shared skill safe to edit: a reviewer can see what moved and a user can tell whether they are running the current version.

Without it, the rational behaviour for a careful teammate is to avoid the shared artifact and keep their own copy — which is exactly the drift problem described in why teammates avoid an unversioned shared artifact. What a version bump should involve when the real process changes — retesting, release notes, and a rollback path — is in what a version bump should carry.

Part 04 · Shipping

Testing, mistakes, and review

What to do before the skill goes anywhere near a teammate.

Tool-specific notes without forking the process

Different runtimes handle files, connectors, and memory differently, and a skill that is useful in several tools needs a small amount of per-tool guidance. Keep it in a clearly separated notes section or a separate adapter file.

Never let platform detail leak into the procedure itself. The moment a step says “upload the file to the project,” the skill has stopped being portable — the layering is described in keeping platform detail out of the procedure.

Testing the skill in a fresh chat

Always test in a clean session with no prior context. A skill tested in the conversation where it was written inherits everything you explained along the way, which is why authors consistently overestimate how well their instructions stand alone.

Then run the real test suite: ten past cases with known-good outcomes, scored against the checks. Behaviour that only appears under messy inputs will not appear any other way — the method is in testing a skill in a fresh session.

Common authoring mistakes

Most weak skill files fail in the same handful of ways, and all of them are visible in a five-minute review once you know what to look for.

The underlying pattern is writing for a reader who already understands the job. The skill will be run by someone who does not, in a session with no context, on a messier input than you tested.

  • Describing the job instead of instructing how to do it
  • No negative boundary, so the skill fires on adjacent work
  • An output section with no stated contents or length
  • Tone instructions — “be insightful” — in place of structural rules
  • Detail inline that should be a reference file, making the root unreadable
  • No version, no owner, no changelog

A review rubric for merging a skill into the library

Treat a new skill like a code change: someone other than the author reviews it against a fixed rubric before it enters the shared library. Six questions are enough, and they take about five minutes.

The reviewer should also run the skill once themselves in a fresh session. Reading a skill file and running one produce different opinions about it, and the second is the one that matters.

  • Does the description route correctly, and is the negative boundary stated?
  • Are required inputs named, with defined behaviour when one is missing?
  • Is the output schema specific enough that two runs produce the same shape?
  • Are the checks binary and testable?
  • Is there an unknowns policy, and does the messy example demonstrate it?
  • Does it have a version, an owner, and a test suite that passes?

How a packaged skill differs from a raw SKILL.md

A raw SKILL.md is the instruction file. What we ship is the file plus the things that make it trustworthy in a team: a test suite built from your real history, worked examples including the messy case, per-tool install notes, a version and changelog, and a named owner. Those are precisely the four properties a native container cannot hold, which is the argument in what a native container cannot hold.

For common jobs, the library already contains packaged skills you can install and adjust. For jobs carrying your own rules and source systems, the build process is on the custom workflows page, and the docs cover installation, versioning, and compatibility.

One useful email a week

Get one workflow teardown a week.

A practical look at how a real repeated job becomes a reliable AI workflow — inputs, review points, and the failure modes to avoid.

By subscribing, you agree to receive Grokkit’s weekly workflow teardown. Unsubscribe anytime.

Common questions

Questions teams ask about this

How long should a SKILL.md be?

Short enough that a person reads all of it in about five minutes. Past that, models weight the beginning and end more heavily and human reviewers skim, so a rule in the middle of a long file effectively does not exist. Keep the root file to routing, inputs, sources, procedure, output schema, checks, and escalation; move background and detail into reference files the root points to.

What makes a SKILL.md testable?

Two things: a specific output schema and binary checks. If the file states which sections are required and lists four to six pass/fail conditions — every claim attributed, no dates absent from the inputs, unknowns listed explicitly — you can run ten real past cases and score them. Without those, you have a long prompt and no way to tell whether an edit helped.

Should the skill say when NOT to be used?

Yes, and it is the line most often missing. A skill without a negative boundary fires on adjacent work and produces confident output in a context it was never designed for, which damages trust in the whole library. Two or three lines naming the excluded situations and where to escalate them instead is enough.

Put this into practice

Take this from the article to your team.

Three ways in, matched to what this article is actually about — a skill you can install today, a worked example of the same job, and a bundle to start adapting from.

Read next · Business case

The Business Case for Custom AI Workflows: Time, Rework, Consistency, and Onboarding