create-skill
Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V. ✓ Copied. Switch to Claude and paste — ⌘/Ctrl+V.
Create Skill
Scaffold a new Agent Skill that is spec-correct against both Anthropic's open Agent Skills baseline and Claude Code's layered extensions. When the brief is thin, apply the exploration-first intake methodology in references/intake-methodology.md to flesh it out before drafting. Always run the verification gate appropriate to the chosen scope before reporting done.
When this skill applies
- The user asks to "create", "scaffold", "design", "author", "build", or "make" a skill.
- The user describes a repeated workflow or a pasted-instruction pattern they want to capture as a reusable skill.
- The user says "I want a skill that…" or "new SKILL.md".
Skip when the user is modifying an existing skill in place (edit it directly), when they are asking how skills work in general (answer from references/frontmatter-spec.md or point at the upstream URLs), or when they are invoking a different existing skill.
Workflow
Intake — apply the exploration-first methodology when the brief is ambiguous. Check the brief for these slots before drafting:
- target name (kebab-case, lowercase letters/numbers/hyphens only, max 64 chars, cannot contain "anthropic" or "claude")
- one-paragraph purpose
- 2–5 trigger phrases (for the
descriptionfield) - skip conditions
- whether the skill takes arguments and what
argument-hintshould be (Claude Code modes only) - whether
disable-model-invocationoruser-invocable: falseapplies (Claude Code modes only) - target scope (project / personal / portable — see step 2)
- copyright-footer choice (whose notice, or none)
If every slot is present in the brief, skip ahead to step 3. If any slot is missing OR the user is exploring rather than dictating, load
references/intake-methodology.mdand apply the methodology — ask before answering, surface assumptions, track an insights log, resist solutioning — until the user explicitly signals readiness ("okay, draft it", "let's go", "what would you do?"). Then resume here at step 2 with a complete brief.Confirm scope mode.
Mode Path Frontmatter set Template project .claude/skills/<name>/open baseline + Claude Code assets/SKILL.template.claude-code.mdpersonal ~/.claude/skills/<name>/open baseline + Claude Code assets/SKILL.template.claude-code.mdportable wherever the user specifies open baseline only assets/SKILL.template.portable.mdPortable mode is for skills shipping via the Claude API or claude.ai Projects, where Claude Code-specific frontmatter (
when_to_use,argument-hint,allowed-tools,paths, etc.) is ignored or rejected. In portable mode emit ONLYname+descriptionand keep the body to standard markdown.Detect supporting-file signals, suggest, then ask. Scan the brief for these signals before scaffolding subdirs:
- "large API spec", "reference docs", "specification", "examples library", "RFC", "schema" → suggest
references/ - "script", "Python", "shell", "executable", "automation", "validator" → suggest
scripts/ - "template", "boilerplate", "starter file", "fill-in" → suggest
assets/
Present the detected signals and proposed subdirs in one block; ask the user to confirm or adjust. If no signals fire, default to SKILL.md only. Never scaffold an empty subdir — only create one when at least one file will land in it during this turn.
- "large API spec", "reference docs", "specification", "examples library", "RFC", "schema" → suggest
Draft
SKILL.mdfrom the appropriate template. Open the template (assets/SKILL.template.claude-code.mdfor project/personal,assets/SKILL.template.portable.mdfor portable) and fill in the slots from the intake brief. Apply the frontmatter and body rules below. Write through to the chosen path.Draft supporting files for any subdirs confirmed at step 3. Reference each one from
SKILL.mdso the model knows what it contains and when to load it.Run the verification gate for the chosen scope (see below). Fix every failure before reporting done.
Frontmatter rules
The full table with constraints and source citations lives in references/frontmatter-spec.md. Load it when an edge case comes up (e.g. paths glob syntax, context: fork agent selection, allowed values for effort). The must-know rules:
nameanddescriptionare the only fields the open baseline requires. Everything else is a Claude Code extension and only applies in project/personal mode.name: lowercase letters, numbers, hyphens only; max 64 chars; cannot contain XML tags; cannot contain the reserved words "anthropic" or "claude".description: non-empty; max 1024 chars on the open baseline. In Claude Code, the combineddescription+when_to_useis truncated at 1,536 chars in the skill listing.- Defaults are not re-stated in frontmatter. Don't emit
disable-model-invocation: falseoruser-invocable: true— those are noise. - Invented fields are forbidden.
context: inlineis not a valid value (the only documented value forcontextisfork; inline is the implicit default).allowed-toolstakes real tool names likeRead,Grep,Bash(git add *)— not strings likefile-readingorcode-analysis. - In portable mode, emit ONLY
nameanddescription. Any other field is a validation failure.
Body-writing rules
- H1 = the skill's display name.
- Keep the body under ~500 lines. Skill content sits in context every turn — every line is a recurring token cost.
- State what to do, not why or how — well-named sections do that work.
- Move large reference material (API specs, full field tables, examples libraries) to
references/*.mdso it loads only on demand. - Reference supporting files from
SKILL.mdwith relative links so the model knows what each contains and when to load it.
Copyright footer
Decide with the user whether to include a copyright notice and, if so, whose. Common patterns: the skill author's name, an employer or organization name, or no footer at all. When included, placement depends on file type:
SKILL.mdand any other markdown file with YAML front matter: HTML-comment block at the very bottom (front matter on top of a header comment would break parsing).- Markdown reference files without front matter: same HTML-comment block at the bottom.
scripts/*.shandscripts/*.py:#-comment header at the top.
Standard block shape (substitute the rights holder and year):
Copyright © <year> <rights holder>. All rights reserved.
Third-party and open source components remain under their respective licenses;
see LICENSE.md for details.
Verification gate
<dir> is the new skill's directory.
The gate runs as manual model-driven checks (read the file back, validate the structure). In a shell-enabled environment, additionally run the tooling commands listed under "Shell-enabled environments" below, but the manual checks remain authoritative when no shell is available.
Manual checks (always run)
- Frontmatter validator: parse the YAML between the
---fences. Verify:namematches^[a-z0-9-]{1,64}$and contains neither "anthropic" nor "claude"descriptionis non-empty and ≤ 1024 chars (open-baseline cap)- In project/personal mode, the combined
description+when_to_use≤ 1536 chars - Every field name is in the allowed list (see
references/frontmatter-spec.md) - Portable mode is strict: ONLY
nameanddescriptionare allowed; any other field is a failure - No XML-like tags (
<…>) innameordescription. claude.ai rejects skills whosenameordescriptioncontains anything matching<[^>]+>. The most common slip is angle-bracket placeholders like<name>in description prose — use[name]or rephrase. (The body ofSKILL.mdcan still use<name>freely; the rule applies only to the two YAML fields.)
- Body-length check: SKILL.md is ≤ ~500 lines.
- Supporting-file references: every file scaffolded under
references/,scripts/, orassets/is referenced fromSKILL.mdso the model knows when to load it. - Copyright-footer check (when a footer was chosen): the last non-blank line of every markdown file is inside the copyright HTML comment block; any scripts have the
#-comment header at the top. - Forbidden-field-value check: no
context: inline, no abstract tool names inallowed-tools, no defaults emitted explicitly (disable-model-invocation: false,user-invocable: true,shell: bash).
Shell-enabled environments (optional accelerators)
If the destination environment exposes a shell, additionally run:
npx prettier --check '<dir>/**/*.md'
npx markdownlint-cli2 '<dir>/**/*.md'
# Project mode in a Claude Code repo with cspell configured:
npx cspell '<dir>/**/*.md'
Auto-fix prettier failures with npx prettier --write … and re-run. If cspell flags a legitimate technical term, append it to the repo's cspell dictionary in alphabetical position. These commands are not available in claude.ai Projects or in Claude API contexts that don't expose Bash.
Definition of done
- All manual checks pass for the chosen scope; shell-tool checks also pass when shell is available.
- The new skill directory exists with
SKILL.mdat minimum. - For project and personal modes in Claude Code, live-change detection picks up the new skill in the same session — asking "what skills are available?" lists it with the correct description.
- The bundle has no broken sibling-skill references and no commands required as mandatory that the destination environment cannot run.
Hard rules
- Never invent frontmatter fields. If a field isn't documented in
references/frontmatter-spec.mdor the upstream pages it cites, don't emit it. - Never write a skill body longer than 500 lines. Move overflow into
references/*.mdand link to it fromSKILL.md. - Never scaffold empty subdirectories. Only create
references/,scripts/, orassets/when a file is being placed inside. - Never bypass the intake step on a thin brief. If any required slot is missing, apply
references/intake-methodology.mdfirst. - Never assume the destination has a shell. Manual checks are authoritative; shell tools are optional accelerators.
Technical details
- Source
- Standalone skill
- Skill name
create-skill- Maturity
- experimental
- Security review
- No security review
- File
skills/create-skill/SKILL.md
To use this skill in Claude Code, copy SKILL.md into your local .claude/skills/create-skill/ directory.
Standalone skills are not exposed via claude plugin install — that path is reserved for plugin bundles.
Edit this skill on GitHub — opens GitHub's web editor. No git knowledge needed.