Skip to main content

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.

Pre-approved tools allowed-tools

Rules listed here don’t prompt during the turn that invokes the skill; they only grant, never restrict, and can’t override a deny rule.

  • Bash(git describe *)
  • Bash(git log *)
  • Read

The whole command, with * for any text. Each part of a && b has to match on its own.

Adds Bash
  • Warning: Bash on its own pre-approves every command. Scope it, such as Bash(git log *).
Removed tools disallowed-tools

Checked tools stay available while the skill runs. Uncheck one to take it away; pair it with a deny rule in settings if it must never run.

Read and search

Change files

Run commands

Web

Delegate

More tools 31 of 31 on

Tool names or patterns, such as mcp__* for every MCP tool or mcp__github__delete_repo for one.

Written as

Nothing: no tools are removed 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.

Export for

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.md over 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 with context: 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.