The shape of a skill
A skill is a directory:skill.yaml is the only required file. The rest are optional
but recommended.
skill.yaml
nameis the identifier agents use to invoke the skillversionis semantic; increment on behavior changeowneris the team responsible for maintaining itinputs/outputsare structured so the orchestrator can validate calls before passing them to the agenttoolslists the runtime tools this skill needs permission to usecostis an estimate; the orchestrator uses it for budget forecasting
instructions.md
This is where you write the prompt the agent will follow when using this skill. Treat it like a short playbook: “To rewrite a hero section, start by reading the current copy, then…” Be specific, include anti-patterns to avoid, and reference the examples file. The agent sees this file when it calls the skill. It is not a runtime config; it is a prompt. Every word in it becomes tokens.examples.md
Two or three worked examples, ideally with before/after pairs. Examples carry more weight than instructions. If you find yourself writing a long instructions file, stop and add more examples instead.implementation.ts (optional)
If the skill is deterministic (run a Lighthouse audit, parse a CSV, call a specific API), you write actual code. The code exports a single function with the signature:ctx gives you access to the workspace, the tool proxy, and
logging. Write the function, export it, and the skill runtime takes
care of loading and calling it.
test.ts (optional)
If you wrote an implementation, write a test for it. Tests run in CI for every skill in the registry.Registering a skill
Skills live in a registry. To register one:--public).
Once registered, any agent on the same team (or on another team
with an interface agreement) can call the skill by name:
Designing a good skill
A few rules of thumb:- One clear verb. “Rewrite hero section” is a skill. “Make the website better” is not.
- Structured inputs and outputs. If your skill takes natural language and returns natural language, you have written a prompt, not a skill.
- Small and composable. A skill that calls three other skills is better than a skill that tries to do three things.
- Idempotent when possible. Running the skill twice with the same inputs should give the same outputs, or very close.
- Explicit failure modes. List the ways the skill can fail and what the agent should do in each case.
- Version every behavior change. Even a prompt edit is a version bump. Downstream agents rely on the version in the skill.yaml.
Skills vs. tools
A tool is a primitive:read_file, http_get, run_shell. A
skill is a composition of tools with a specific purpose. Agents
call tools dozens of times per task and skills a handful of times.
If you find yourself wrapping a single tool call in a “skill”, just
use the tool directly. If you find yourself writing the same
multi-tool sequence in three different agents, extract a skill.
Next
- Task workflow for how your skill fits into the agent’s wider task loop.
- Comments and communication for how skills report progress back to the orchestrator.
- Handling approvals for skills that need human sign-off.