create-skill
Skill11 starsChanged 9 days agoMITView on GitHub
Create new skills, modify and improve existing skills, and measure whether they work. Use when the user says "create a new skill", "turn what we just did into a skill", "package this workflow", "rebuild this skill", "write an eval suite for this skill", "why isn't this skill triggering", or invokes /create-skill. Covers scaffolding, frontmatter, harness neutrality, benchmarks, and trigger verification. For surgical tweaks to an existing skill use /customize-skill instead.
142 other projects use a version of this.
Adopted by
Most recently taken up by
- lancy69/skillstheir own version, first seen Nov 8, 2026
- CherryHQ/cherry-studiotheir own version, first seen Nov 8, 2026
- niilohlin/skillstheir own version, first seen Nov 8, 2026
- sankalpaacharya/skillstheir own version, first seen Nov 8, 2026
- zalogarcia/zalo-claude-code-setuptheir own version, first seen Nov 8, 2026
- serbyte-development/shellby-mcptheir own version, first seen Nov 8, 2026
Used with
Projects with it also use review-bugbot, migrate-to-skills and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
0mlkrizzz655335vSkillreview-bugbot
缺陷导向代码审查。用 Bugbot 子代理找 bug。
Also in 5 projects that use this
32103210Skillmigrate-to-skills
Convert 'Applied intelligently' Cursor rules (.cursor/rules/*.mdc) and slash commands (.cursor/commands/*.md) to Agent Skills format (.cursor/skills/). Use when you want to migrate rules or commands to skills, convert .mdc rules to SKILL.md format, or consolidate commands into the skills directory.
Also in 8 projects that use this
32103210Skillupdate-cursor-settings
Modify Cursor/VSCode user settings in settings.json. Use when you want to change editor settings, preferences, configuration, themes, font size, tab size, format on save, auto save, keybindings, or any settings.json values.
Also in 8 projects that use this
PandelisZSkillupdate-cli-config
View and modify Cursor CLI configuration settings in ~/.cursor/cli-config.json. Use when the user wants to change CLI settings, configure permissions, switch approval mode, enable vim mode, toggle display options, configure sandbox, or manage any CLI preferences.
Also in 7 projects that use this
yawningwhaleAISkillbuild-premium-website
Build a premium, animated marketing website (React + Vite + Tailwind + GSAP) for any industry. Use when the user asks to "build a website", "make a landing page for [business]", "build a marketing site", or wants a high-end animated company website. Adapts color, copy, services, and signature animation to the industry.
Also in 6 projects that use this
yawningwhaleAISkillinstantly-campaign
Create a new Instantly cold-email campaign in the proven 5-email structure of the user's top-performing campaign (~16% reply rate). Use when the user wants to launch a new outbound campaign, write a cold email sequence, create an Instantly campaign, draft outreach for a new service or niche, or set up a sales sequence.
Also in 5 projects that use this
- +1 more from 32103210
Other versions142 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 142
- microsoft/vscode★ 195ksame name
- CherryHQ/cherry-studio★ 53ksame name
- videojs/video.js★ 40ksame name
- BuilderIO/agent-native★ 7.6ksame name
- stagewise-io/stagewise★ 6.8ksame name
- dotnet/skills★ 5.9ksame name
- xstongxue/best-skills★ 2.9ksame name
- Lilac-Labs/gini-agent★ 1.9ksame name
- Open-Curiosity/gini-agent★ 1.9ksame name
- mattmireles/gemma-tuner-multimodal★ 1.5ksame name
132 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository44 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- analyze-dataSkill
- brainstormingSkill
- craft-lessonSkill
- create-agentSkill
- customize-agentSkill
- customize-skillSkill
- designSkill
- deslopSkill
- developSkill
- discovery-reportSkill
- elicitationSkill
- empathy-mapSkill
- explore-ideaSkill
- grill-meSkill
- help-meSkill
- humanizeSkill
- incidentSkill
- iterateSkill
- journey-mapSkill
- jtbdSkill
- kanbanSkill
- launchSkill
- legal-safety-auditSkill
- maintenance-executeSkill
- maintenance-planSkill
- memorySkill
- motionSkill
- phaseSkill
- planSkill
- research-planSkill
- retroSkill
- reviewSkill
- root-causeSkill
- round-tableSkill
- shape-upSkill
- shut-upSkill
- statusSkill
- teach-meSkill
- testSkill
- unpack-problemSkill
- validate-ideaSkill
- validation-patternsSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 11 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 132 edited versions we read keep these.
11
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 47
Prefer a concise example over a verbose explanation.
- Distinctive: line 141
Prefer a short, verb-led phrase describing the action.
- Distinctive: line 157
When should it trigger — which phrases, tasks, or slash command?
- Very specific: line 168
If an existing skill covers ~80% of the intent, enhance that one rather than adding a sibling.
- Distinctive: line 171
If the new skill would take over part of another's job, say so and plan the removal.
- Distinctive: line 173
Check the trigger phrases specifically.
- Very specific: line 178
Use references/skill-template.md as the baseline.
- Very specific: line 209
Write SKILL.md, then any references/, scripts/, resources/.
- Distinctive: line 243
Write 2–3 realistic prompts — the kind a real user would type, not a description of the task.
- Distinctive: line 244
Run each with the skill and without it (for an existing skill, without means the *previous* version).
- Distinctive: line 265
Does it trigger?: Write ~10 queries: half that should fire the skill, half near-misses that should not.
- Distinctive: line 270
Run each query, note whether the skill fired, and fix the description where it did not.
- Distinctive: line 275
When a problem is stubborn, try a different framing rather than a more rigid rule.
- Distinctive: line 277
Read the transcript, not just the output: If the skill made the agent spend ten minutes on something unproductive, the fix is usually …
- Very specific: line 280
Look for repeated work: If every test run independently wrote the same helper, that is the signal to bundle it in scripts/ — the empirical …
“Common” is measured: kept by at least 6 in 10 of the 132 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Create Skill — Skill Authoring, Verification & Optimization
What this skill does
Guides you through creating a new Vespyr skill or substantially rebuilding an existing one: capture
the intent, check for a duplicate, structure the SKILL.md, provision resources, add benchmarks, and
verify the skill actually triggers and actually helps.
The last two are the parts most skill-authoring guidance skips. A skill that never triggers is dead weight in the context window, and a skill that triggers but does not improve the output is worse — it costs tokens to produce the same result.
When to use
- "Create a new skill for X"
- "Turn what we just did into a skill"
- "Rebuild or heavily restructure this skill" (major rewrites)
- "Add benchmarks for a skill" / "write an eval suite"
- "Why isn't this skill triggering?" / "optimize the description"
- "Turn this skill into a router that calls step files"
When NOT to use
- For agent persona customizations (use
/customize-agent) - For surgical tweaks to a description, trigger phrase, or workflow step (use
/customize-skill) - For standard project features (use
/develop) - For prompt snippets or memory notes (those go in
project-context.md/active-decisions.md)
Core principles
Concise is key — the context window is a public good
A skill shares the window with the system prompt, the conversation, every other skill's metadata, and the actual request. Assume the agent is already capable. For each paragraph ask: does the agent need this explanation, and does it justify its token cost?
Prefer a concise example over a verbose explanation. If a rule can be shown in three lines, showing it in ten wastes seven.
Set appropriate degrees of freedom
Match specificity to the task's fragility. This is the single most useful design decision in a skill, and it is not the same as "be precise everywhere":
| Freedom | Write | Use when |
| High — prose, heuristics | "Read the changed files and look for the failure modes that matter" | Multiple approaches are valid; judgement depends on context |
| Medium — pseudocode, parameterised steps | "Run check --kind <k> --file <f>, then act on the exit code" | A preferred pattern exists; some variation is acceptable |
| Low — one exact command, few parameters | "Run exactly this, then stop" | The operation is fragile, consistency is critical, or order matters |
Think of the agent exploring a path: a narrow bridge with cliffs needs guardrails; an open field allows many routes. A skill that puts guardrails on an open field gets ignored; one that leaves a cliff unguarded gets someone hurt.
Progressive disclosure — three levels, loaded as needed
- Metadata (
name+description) — always in context. This is the router. SKILL.mdbody — loaded when the skill triggers. Keep under 500 lines.- Bundled resources — loaded only when the body points at them. No practical limit; a script can run without ever being read into context.
Three patterns for the split:
- High-level guide — core workflow in the body, depth in
references/<topic>.md, each linked with when to read it. - Domain organisation — one reference file per variant (an AWS file, a GCP file, an Azure
file) so the agent reads only the one it needs. Write the example as a description, not as a
path —
spec_check.jsscans the whole body for path-shaped references and cannot tell an illustration from a citation, so a path written as an example fails as a phantom. - Conditional detail — the common path inline, the advanced path behind a link.
Keep references one level deep. A reference that points at another reference is a trail the agent will lose.
Harness neutrality — the skill must survive a product swap
Full rules: references/harness-neutrality.md. Read it before writing any frontmatter or any
instruction that names a tool. The short version:
- The body names capabilities, never tools. "Ask the user", not
AskUserQuestion. "Run the command", notBash. A tool name that resolves on one harness points at nothing on another. - Frontmatter declares; the body instructs.
allowed-toolsandcompatibilitymay name a specific product's tools — they are declarations, inert where unread. The body must not depend on them. - A rule that needs a tool must have the declaration to match. A skill that asks the user while declaring no question tool has an unenforceable rule in the one harness that checks.
- No product binary in a command.
claude -p,codex,cursor-agentdo not run anywhere else. - Use the repository's runtime. A Node repository does not need a Python toolchain.
- Degrade in one body, not per-harness forks. Say what changes without subagents or a browser; do not carry three sections that drift.
spec_check.js enforces the mechanical half. See the reference for which half is not enforced and
why.
Explain the why
An agent given the reason behind a rule can apply it to a case the author never imagined; an agent
given a bare ALWAYS cannot. If you find yourself writing ALWAYS or NEVER in capitals, or
reaching for a rigid structure, treat it as a yellow flag — reframe and explain what the rule is for.
The exception is a genuinely closed set: [GO] / [RESHAPE] / [NO-GO] are the vocabulary, and
listing them is not barking, it is defining.
What not to include
A skill contains only what an agent needs to do the job. Do not add README.md,
INSTALLATION_GUIDE.md, QUICK_REFERENCE.md, CHANGELOG.md, or similar. They are context about the
skill rather than instructions for using it, and they make the reader guess which file matters.
Anatomy of a Vespyr skill
.agents/skills/<skill-name>/
├── SKILL.md (required)
│ ├── Frontmatter — name, description; optional: license, compatibility, metadata, allowed-tools
│ └── Body — Markdown instructions, <500 lines ideal
├── steps/ (router skills only — one file per step, each cited by SKILL.md)
├── references/ (optional — loaded on demand)
├── scripts/ (optional — executable helpers for deterministic work)
└── resources/ (optional — templates, assets, static data)Benchmarks do not live in the skill folder. They are centralised under
evals/suites/<group>/<name>.json. See references/evals-schema.md.
Naming
- Lowercase letters, digits and hyphens only; normalise a title to hyphen-case (
Plan Mode→plan-mode). Under 64 characters, no leading or trailing hyphen. - Prefer a short, verb-led phrase describing the action.
- Namespace by tool when it improves triggering (
gh-address-comments, notcomments). - The folder name and the frontmatter
nameare the same string.
Workflow
Step 1: Capture intent
Understand what the skill should accomplish before writing anything.
- From chat context — extract the tools used, the sequence, the corrections the user made, and the input/output formats observed. Confirm with the user before proceeding.
- From scratch — interview briefly. Four questions:
- What should this skill let the agent do?
- When should it trigger — which phrases, tasks, or slash command?
- What is the expected output?
- What are the edge cases or constraints to guard against?
Ask about the failure mode, not just the happy path. "What goes wrong today, without this skill?" is the question that decides whether the skill earns its place.
Step 2: Deduplication & collision check
List .agents/skills/ and read the names and descriptions. Then:
- If an existing skill covers ~80% of the intent, enhance that one rather than adding a sibling.
Two skills that both answer "what should I do next?" is how
/sprint-statuscame to exist and then be deleted. - If the new skill would take over part of another's job, say so and plan the removal. A skill that supersedes another must retire it in the same change.
- Check the trigger phrases specifically. Two descriptions matching the same user sentence means one of them undertriggers forever.
Step 3: Draft SKILL.md
Use references/skill-template.md as the baseline. For a router (a skill that owns steps/), use
references/router-skill-template.md and carry the <!-- router-skill --> marker plus
When to invoke, Halt conditions, and Done when.
Frontmatter
Allowed top-level keys only: name, description, license, compatibility, metadata,
allowed-tools. Anything else is a violation — put it under metadata.
- name — matches the folder.
- description — the primary triggering mechanism. Include both what the skill does and the
contexts that should fire it. All "when to use" information belongs here, not in the body: the body
is only loaded after triggering, so a "When to use" section cannot help the agent decide.
Single line, 1–1024 chars, no
|/>block scalars. Write it slightly pushy. Agents systematically undertrigger — they skip a skill that would have helped. Name the user phrases, the synonyms, and the slash command. - metadata — string keys to string values. Put
version,last_updated,authorhere. Lists are rejected; join them into a comma-separated string. - compatibility — 1–500 chars, only if the skill genuinely needs an environment. Do not claim a harness you have not verified (see Harness neutrality).
- allowed-tools — optional, space-separated string. YAML list form is invalid.
Body
- Under 500 lines. Move depth into
references/and link it with when to read it. - Imperative mood.
- Explicit input/output templates where the output has a shape.
- A rule that matters gets its reason. A rule that does not matter gets deleted.
Step 4: Write the files
Write SKILL.md, then any references/, scripts/, resources/. Delete unused scaffolding — an
empty directory reads as intent.
Scripts must be run, not just written. Execute each one against a real input before shipping it. A script that has never run is a script that does not work.
Step 5: Verify
node .agents/scripts/spec_check.jsmust report 0 violations and 0 warnings. Violations are machine-decidable facts: missing H1, a citedsteps/*.mdnot on disk, an unreachable step file, a phantom skill or agent reference, an unbalanced fence, a box-drawing glyph outside a fence, a non-standard frontmatter key, a missingmetadata.last_updated, a body that names a harness tool, or a rule that needs a question tool the declaration does not grant.- Trigger check — read the description and answer honestly: does it name the slash command, the phrases a user would actually type, and the near-miss cases that should not fire it? If you cannot tell whether a sentence should trigger this skill or a neighbour, the description is not finished.
- Regenerate the catalog so
/help-mesees it:
Note the compiler harvests everynode .agents/scripts/compile_skills.js git diff -- .agents/skills/help-me/skills-catalog.json # must list the new skillartifacts/...path the body mentions, reads included — see its header for that recorded limit. - Run the skill once for real, on the kind of prompt it exists for. Reading a skill is not running one.
Step 6: Measure
Two measurements, and they answer different questions.
Does it help? A skill's value is the difference it makes, not the output it produces. For a skill with a verifiable output:
- Write 2–3 realistic prompts — the kind a real user would type, not a description of the task.
- Run each with the skill and without it (for an existing skill, without means the previous version). Same prompt, same inputs.
- Compare the outputs. If the no-skill run is as good, the skill is costing tokens for nothing — cut it or rewrite it.
Record the comparison in evals/suites/<group>/<name>.json (schema: references/evals-schema.md).
Assert the output contract, never the prose: a heading that must appear, a command that must be
run, a field that must be present. An assertion on wording pins the phrasing and blocks every
improvement that changes it.
Declare the baseline, so the runner can check the comparison for you:
"baseline": { "variant": "without-skill", "note": "why this baseline" }The runner then runs the same prompt without the skill and compares. If your assertions pass in
both runs, they measure the output rather than the skill — the run reports those as
nonDiscriminating, and that number is the one to act on. A benchmark whose assertions hold either
way is decoration, and it will read as evidence until someone checks.
Does it trigger? Write ~10 queries: half that should fire the skill, half near-misses that should not. The near-misses are the valuable half — "write a fibonacci function" as a negative for a PDF skill tests nothing. A good negative shares vocabulary with the skill and genuinely needs something else.
Run each query, note whether the skill fired, and fix the description where it did not. This is cheap and it is the difference between a skill that works and a file nobody's agent ever opens.
Generalise from what you see — do not overfit. A skill is meant to run a thousand times on prompts nobody has written yet; you are testing it on three. If a fix only helps the fixture, it is not a fix. When a problem is stubborn, try a different framing rather than a more rigid rule.
Read the transcript, not just the output. If the skill made the agent spend ten minutes on something unproductive, the fix is usually deleting the instruction that caused it.
Look for repeated work. If every test run independently wrote the same helper, that is the signal
to bundle it in scripts/ — the empirical answer to "what belongs in this skill".
Step 7: Log it
Append to artifacts/memory/active-decisions.md:
### [DECISION] Created Skill: <skill-name> [date: YYYY-MM-DD]
**Purpose:** {summary of capability}
**Path:** .agents/skills/<skill-name>/SKILL.md
**Router:** {yes — owns steps/, carries <!-- router-skill --> | no}
**Benchmarks:** {suite file + count, or "none — <reason>"}
**Harness needs:** {filesystem only | + subagents | + network | …}Anti-patterns
- Undertriggered descriptions. "How to deploy apps" instead of "Deploy and publish web apps. Use when the user says ship it, deploy, release, or invokes /deploy." The description is the router.
- A body that names a tool.
AskUserQuestion,present_files,Bash— each resolves on one product and points at nothing elsewhere. Seereferences/harness-neutrality.md. - A rule the declaration does not grant. Permitting a confirmation prompt while declaring no question tool makes the rule unenforceable where it is checked.
- Bloated bodies. 1,000 lines in
SKILL.mdinstead ofreferences/. The 500-line guideline is a warning, not a preference. - Guardrails on an open field. Rigid steps where judgement is the point. The agent follows the steps and produces something worse than it would have alone.
- A per-skill
evals/evals.json. Nothing reads it. Benchmarks go inevals/suites/. - Benchmarks that assert wording. They pin the phrasing and turn every improvement into a test failure, which is how a benchmark stops being a measurement and becomes a brake.
- A step file no citation path reaches. A written contract the router never loads reads as coverage that does not exist. Link it or delete it.
- Per-harness sections that drift. Three forks of one workflow, no way to tell which is current.
- Shipping without running it. A skill that has never been executed is a draft with frontmatter.
- Malicious or surprising logic. Skills adhere to
.agents/GUARDRAILS.mdand the principle of least surprise.
Reference resources
- Harness neutrality (read before writing frontmatter):
references/harness-neutrality.md - Leaf-skill template:
references/skill-template.md - Router-skill template:
references/router-skill-template.md - Evals schema (the real
vespyr-evalformat):references/evals-schema.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

