Create a skill
Each skill is a folder with aSKILL.md file in it. The folder name is the
skill’s name. To make a skill for this project, create
.o4/skills/release-notes/SKILL.md:
skill tool reads the folders each time.
You can also create one from /skills: choose Create new skill, enter a
name, pick the location (project or user), and o4 writes a SKILL.md
template and opens it in your editor. A skill created this way works as a
slash command right away.
Where skills live
When two skills have the same name, a project skill wins over a user skill,
a user skill wins over a plugin skill, and a plugin skill wins over a
built-in one.
o4 ignores a project’s
.o4/skills folder until you trust the workspace, so
a repository you just cloned can’t add instructions to your sessions. See
Workspace trust.
To install skills that others have written, install a plugin that contains
them. o4 calls these plugins skill packs. See
Plugins and marketplaces.
Built-in skills
o4 ships with five skills that the model can load:
Built-in skills don’t appear in
/skills and don’t have slash commands. To
change how one works, create a project or user skill with the same name.
The SKILL.md format
ASKILL.md file is Markdown with optional YAML front matter between ---
lines. A skill must be a regular file, not a symlink, and at most 1 MiB.
string
What the model sees when it lists or searches skills. Write it so the model
can tell when the skill applies. Without it, o4 uses the first non-empty
line of the body, without any leading
#. The model sees at most 200
characters. For project and user skills, /skills and the slash command
menu always show the body’s first line instead.string
Set to
fork to hand the skill to a subagent when you invoke it as a slash
command. o4 shows “Running <name> in background…” and sends the model
the skill’s text with a request to run it as a subagent; the model then
starts one with its agent tool. See Subagents.string[]
Shown in the skill’s details in
/skills. For project and user skills it
doesn’t limit which tools the model can use. In a plugin’s skill, a tool
that isn’t in the plugin’s permissions.tools keeps the skill from
loading. See Plugins and marketplaces.string
Shown in the skill’s details in
/skills. o4 doesn’t switch models for
the skill.list
Hooks that run only while the skill runs. Each has an
event, an optional
matcher and a command. See
Hooks in skills.boolean
default:"false"
When
true, running the skill as a slash command shows its text in o4
without sending it to the model. Use it for checklists and reference notes
you want to read yourself.name
field in the front matter doesn’t change it. In a plugin’s skill, a name
field sets the slash command name and the name in /skills, but the model’s
skill tool still uses the folder name. Keep the two the same.
Arguments
When you run a skill as a slash command, o4 replaces every$ARGUMENTS in
the body with the text you typed after the command. If you type nothing,
$ARGUMENTS becomes an empty string. In a plugin’s skill, o4 also replaces
$CWD with the working directory and $O4_PLUGIN_ROOT with the plugin’s
folder. When the model loads a skill with its skill tool, it gets the body
without any replacements.
Shell commands in skills
o4 never runs a line in the body that starts with!. When you run a
project or user skill as a slash command, o4 replaces each such line with a
note like this before the model sees it:
skill tool, or you run a plugin’s
skill, the line reaches the model as written, and still isn’t run.
If a skill needs a command’s output, tell the model to run the command. It
then goes through the normal approval, sandbox, and hook checks.
How the model uses skills
The model has askill tool with three uses:
- With no arguments, it lists the available skills with their names, where each comes from, and their descriptions. It shows up to 50.
- With
query, it searches skill names and descriptions. - With
name, it loads that skill’s full instructions.
skill tool never asks for approval,
because it only reads instructions. A clear description is what lets the
model find the right skill.
Run a skill yourself
Type/ and the skill’s name, followed by any arguments:
$ARGUMENTS, and sends it to the model as your
next message. Built-in slash commands take precedence, so a skill named
help can’t replace /help. Skills from plugins run the same way.
Manage skills with /skills
/skills opens the skill browser. Its tabs are All, Project,
User, Plugin, and Errors. The Errors tab lists skills that
failed to load, such as a SKILL.md with invalid front matter, and notes when
project skills were skipped because the workspace isn’t trusted.
Select a skill to see its details and act on it:
- Select skill puts
/<name>in the prompt so you can add arguments. - Edit skill opens the
SKILL.mdin your editor. - Delete skill removes it.
- View definition shows the skill’s description and where it comes from. In o4 0.2.74, selecting it does nothing more.
disabled_skills in the project’s .o4/config.toml. While a skill is turned
off, it’s left out of the slash command menu, and running it only shows
“Skill ‘<name>’ is disabled by Project Scout.” The model can still load it
with its skill tool.
You can’t edit or delete plugin skills from the browser. Change or remove
the plugin instead.
While the model is working, you can still open the browser, select a skill,
and use Enable skill, but creating, editing or deleting a skill is
refused: o4 closes the browser and shows
Wait for the current turn to finish before making this change.
You can also jump straight to an action:
The Skills tab in
/config (run /config skills to go straight to it)
has two rows:
- Open skill browser opens the same skill browser as
/skills. - Install skill packs opens the plugin browser, the same as
/plugins, where you can find and install plugins that bundle skills. See Plugins and marketplaces.