Skill Editor
Set every frontmatter option a skill can have, with checks for the mistakes that quietly break
one, then export the files for Claude Code or Codex. Start from the sample below, a blank
skill, or a SKILL.md of your own.
Lowercase letters, numbers, and single hyphens, up to 64 characters. You run the skill as /name. Leave it blank and Claude Code uses the folder name.
The folder SKILL.md goes in. The name has to match it. Leave it blank to use the name.
What the skill does and when to use it, in the third person. The agent reads this to decide whether to load the skill.
More on when the skill applies. Claude Code lists it with description and truncates the two past 1,536 characters; together they're at 216.
true means the skill runs only when you type its slash command; the agent never loads it on its own. Use it for anything with side effects, like a release.
Tools 1 set
Two different settings: what runs without asking while the skill is invoked, and what the skill takes away while it runs.
Invocation and arguments 1 set
Who can run the skill and what it takes after its name.
The placeholder autocomplete shows after the skill’s name, such as [version].
Names the inputs. In the body, $ARGUMENTS is everything typed after the name, $0 and $1 are positional, and $name is a named input.
false hides the skill from your slash-command menu, so only the agent loads it. Useful for background knowledge.
Run in a subagent
Run the body as the task for a fresh subagent instead of in your conversation.
fork makes the body the task for a new subagent with its own empty context. The fork doesn’t see your conversation, so the body has to be a task that stands on its own.
The agent type the fork runs as, with its prompt, tools, and model, such as Explore or one of your own. Only applies with context: fork; without it the fork is general-purpose with every tool.
Whether a fork runs in the background. Forks do by default since Claude Code 2.1.218, and a background fork’s edits land outside /rewind checkpoints.
Model and effort
Overrides the model while the skill runs: the fork’s with context: fork, your conversation’s without it.
Overrides reasoning effort while the skill runs: a level such as high, or a whole-number budget.
Hooks, paths, and shell
Hooks registered when the skill is invoked, as YAML. They stay registered for the session unless an entry sets once: true.
File glob patterns, such as src/**/*.ts.
bash or powershell.
Open standard fields
Fields from the agentskills.io standard, which other tools that read skills share.
A license name, or a reference to a license file in the folder.
Environment requirements the body assumes.
A shorter description, kept in metadata. Claude Code doesn’t read it; Codex does.
Other key: value pairs, as YAML. The standard maps strings to strings, and nothing checks them. The short description has its own field.
Body
32 lines
The procedure the agent follows once the skill loads: the steps and decisions, what it must
not touch, and how to show the work is done. Every line should change a decision. Move long
detail into reference files and say when to read each one. $ARGUMENTS is what was typed after the skill’s name.
SKILL.md is 32
lines.
Keep it under 500.
Ready for Claude Code
Checked against Claude Code’s rules: no errors or warnings.
Export for Claude Code
Save it as .claude/skills/release-notes/SKILL.md in a project,
or in ~/.claude/skills/ for yourself. Claude Code doesn’t read agents/openai.yaml, so this export leaves it out.
release-notes/SKILL.md
--- name: release-notes description: Drafts release notes from the commits since the last tag, grouped into features, fixes, and breaking changes. Use when preparing a release, tagging a version, or when someone asks what changed since the last release. argument-hint: "[version]" allowed-tools: - Bash(git describe *) - Bash(git log *) - Read --- # Release notes Draft release notes for version $ARGUMENTS. If no version was given, title them "Unreleased". ## Gather the changes 1. Find the last tag with `git describe --tags --abbrev=0`. 2. List the commits since it with `git log <tag>..HEAD --no-merges --format='%h %s'`. 3. Read `CHANGELOG.md` if it exists, and match its headings and tone. ## Write the entry - Group the changes under **Features**, **Fixes**, and **Breaking changes**. Leave out empty groups. - Write each line for someone upgrading: what changed and what they need to do, not the commit message. - Fold dependency bumps and chores into a single **Maintenance** line. - Put anything that changes a public API, a configuration key, or a default under **Breaking changes**, with the step to migrate. ## Boundaries - Don't create tags, push, or edit `CHANGELOG.md`. Return the draft for review. - If there are no commits since the last tag, say so and stop.
Load a skill
Drop a SKILL.md or a skill folder here
Notes
- The verdict checks the file the export would write: the frontmatter schema for the target,
the naming and description rules, unknown keys, and a
SKILL.mdover 500 lines. - The notes under each field restate those rules where they apply and add a few of their own,
such as unscoped
Bash, a tool both pre-approved and removed, arguments the body never uses, and options that only matter withcontext: fork. Tips are suggestions; only errors break a rule. - Fields one target doesn’t read stay in the editor when you switch, and come back when you switch back. Keys neither tool reads are written back unchanged.
- Everything runs in your browser. Nothing you load or type is uploaded.