Skills
A skill is a folder with a SKILL.md file: instructions for one kind of task. The model sees only the skill’s name and description until a task matches, so a skill costs a few lines of context until it is used. You can also run a skill yourself with /name.
Save this as ~/.tatu/skills/release-notes/SKILL.md:
---name: release-notesdescription: Draft release notes from the git log. Use when asked for release notes or a changelog entry.---Find the latest tag with `git describe --tags --abbrev=0`.List the commits since it with `git log --oneline <tag>..HEAD`.Group them under Added, Fixed and Changed, and keep each line to one sentence.Show the result and do not write any file unless asked.Start Tatu and type /release-notes, or just ask “write the release notes for this version” and the model loads the skill by itself.
Where the files go
Section titled “Where the files go”| Folder | Applies to |
|---|---|
~/.tatu/skills/<name>/SKILL.md |
every project (skills/ inside TATU_HOME, if you set it) |
.tatu/skills/<name>/SKILL.md in a project |
that project only |
A folder that holds a SKILL.md is a skill, and Tatu does not look inside it for other skills. Folders without one are searched up to four levels down, so you can group skills in subfolders. Folders that start with a dot, and node_modules, are skipped. Symbolic links to folders are followed.
Tatu reads the folders when it starts. Put other files the skill needs (a template, a checklist) in the same folder and mention them in the SKILL.md by relative path. Tatu tells the model that paths in a skill are relative to the skill’s folder.
The front matter
Section titled “The front matter”The front matter sits between two lines of --- at the top of the file.
| Field | What it does |
|---|---|
name |
the command name. Without it, the folder’s name. Use lowercase letters, digits and single hyphens, up to 64 characters; Tatu warns at startup about anything else. |
description |
required. What the skill does and when to use it: the model reads this to decide. Up to 1024 characters; Tatu warns about a longer one. A skill without a description is ignored, with a note. |
disable-model-invocation |
true keeps the skill out of the model’s list, so only you can run it with /name. Default false. |
user-invocable |
false creates no /name command, so only the model uses the skill. Default true. |
Write each field on one line, as key: value; a long description can be a block that starts with > or |. Do not put a comment after a value: it becomes part of the value. Any other field is ignored.
Write the description for the model. “Use when adding behavior or fixing a bug” tells it more than “testing helper”.
How the model finds a skill
Section titled “How the model finds a skill”At startup Tatu adds a list to the system prompt with the name, description and file location of each skill that the model may use. When the task matches a description, the model reads the SKILL.md with its read tool and follows it. A skill with disable-model-invocation: true is not in the list.
Running a skill with /name
Section titled “Running a skill with /name”/release-notes sends the skill’s text to the model right away. Arguments after the name go with it:
- If the text uses
$1,$@,${1:-fallback}or${@:2}, your arguments are put in there. These work as in prompt templates. - If it uses none, your arguments are added after the skill.
The conversation shows the line you typed, with the kind at the end:
› /release-notes since v1.2 (skill)Press Ctrl+O to see the text the model got. Tatu sends the skill as written. It only fills in arguments, and it does not run any command inside it.
When names collide
Section titled “When names collide”- A project’s skill replaces a global skill with the same name. A note at startup says so.
- Two skills with the same name in the same place: the first one is kept and the other is ignored, with a note.
- A name that is already a built-in command is never replaced. The skill is ignored, with a note.
- A skill and a prompt template with the same name in the same place: the skill wins.
Limits
Section titled “Limits”A SKILL.md body is cut at 32 KiB, with a note at startup. A file that is not text, or whose front matter is not closed with a second ---, is ignored with a note.
See also
Section titled “See also”- Prompt templates: a command that is just a prompt.
- Custom subagents: a helper with its own conversation.
- Coming from Claude Code: skills you already have.