A new skill is a decision, not a template.
Settle it before you write a file.

One install gives your agent an authoring workflow for a brand-new skill, starting from nothing but "I want an agent that does X": three or four requests it should catch and one it should refuse, the description of every installed sibling those requests touch, a boundary in both directions, then scripts versus references versus assets, a description written last that actually triggers, and a validator run before handoff.

8 workflow steps 5 ground rules 7 checks a script cannot make 0 unrun claims

for coding agents · free, open, no auth

install

Copy one line. Decide before you write.

Detects Claude Code, Cursor, Codex, Qoder and more, then writes the skill into the right folder. Validation calls check_skill.py from tune-skill — install that too, or step 7 is done by hand.

npx skills add arm-pz/draft-skill --skill draft-skill

the workflow

Eight steps. Most of the work happens before SKILL.md exists.

Two things fail silently in production, and neither one errors: a description that promises a step the body never performs, and a name that already belongs to a better-established project. The steps below exist to catch those two, not to fill in a template.

Get concrete examples 1

Three or four requests the skill should catch, one it should refuse, and what the output looks like.

  • propose a shape, do not interview
  • report · edited file · command · decision
  • one example rephrased in other words
  • triggering fails on variety

Check the installed set 2

Read every sibling description the examples touch — from the file, not from memory or a README.

  • one line each: claims · produces · hands off
  • overlap recorded before designing
  • job already claimed? stop and say so

Decide the boundary 3

One line for what this owns, one for where it stops and who takes over. Both are shown before anything is written.

  • the "Not for" clause is this boundary
  • not decoration
  • every verb gets an owner

Plan the resources 4

Create only the directories you actually fill. If all three are empty, the skill is prose and that is fine.

  • scripts/ — must be tested by running it
  • references/ — knowledge loaded while working
  • assets/ — in the output, never in context
  • a sequence that breaks if reordered gets a script

Choose the name 5

Lowercase, hyphenated, short, verb-led, and the folder named exactly after it. Checked on GitHub first.

  • a topics page renders 200 for names that do not exist
  • only a topic search count is evidence
  • the numbers you got are recorded
  • keep and qualify, or rename: the user decides

Write it 6

Frontmatter is name and description. The description is written last.

  • what it produces, then the user's own words
  • then the "Not for" clause
  • imperative body, each rule carries its reason
  • every reference pointed at by a line saying when

Validate 7

Run the sibling tool on the folder, then work through what it cannot see.

  • fix every FAIL, judge each WARN
  • does the body keep the description's promise
  • would this pass without the description
  • do the references actually get opened

Write the test cases 8

In tune-skill's case format. The examples from step 1 become the clear triggers.

  • implicit triggers and near-misses
  • one case each side of every boundary
  • a case stays marked written until it has run

Where it stops 4 handoffs

Not for tightening a skill that already exists — that is tune-skill. Not for turning a batch of your own prompts into a skill — that is prompts-to-skill. Releasing a finished one goes to prompts-to-skill-release; the repo name and listing go to findable. Say which handoff you are making and what the next skill receives — "use tune-skill next" transfers no context.

  • owns: a new skill, from an idea
  • stops: a skill that already exists
  • stops: a batch of existing prompts
  • serves: draft-skill → tune-skill → findable

ground rules

What it refuses to do.

Confirm before writing

Restate the purpose, the expected output, and the phrases the user would really type. Wait for a yes. A skill drafted on a guessed purpose triggers on the wrong requests forever, and the fix costs a re-publish.

Nothing exists unless it earns its tokens

The agent reading this already knows what Python is. Keep only what it would otherwise get wrong: your conventions, your file names, your order of operations, your gotchas. A reference nobody is pointed at is dead weight.

Do not claim what you did not run

The report names which checks ran, which test cases were only written, and which siblings were never opened. A script that has never been run, or an install command for an agent nobody installed on, is labelled unverified instead of working.

Know what the skill is for before it has any files.

Free, open, and it writes only what you confirmed. Validating needs tune-skill installed beside it.

Install draft-skill Read the source