Skills
What it is. A folder with a SKILL.md (frontmatter name and
description, then the instructions) and any files it uses. The agent reads
the description, and the rest only when the skill is needed.
Where it goes. .agents/skills/<name>/SKILL.md (~/.agents/skills at
user scope).
---name: reviewdescription: Review the change before you stop.---Read the diff and list problems.What each agent gets
Section titled “What each agent gets”| Agent | Gets |
|---|---|
| Every agent but Claude Code | nothing written: it loads .agents/skills where it is |
| Claude Code | a copy of each skill in .claude/skills |
Run agent-harness-adapter install after you add or change a skill, so
Claude Code’s copy follows; status exits 1 while it is out of date.
As a tool
Section titled “As a tool”[[skills]]name = "mytool"description = "Check the project with mytool."body = "Run `mytool check`; fix what it reports.\n"
[[skills]]dir = "agent/skills/review" # an existing skill folder, as it is
# or every skill folder in a directory: skills = { from = ".agents/skills" }Integration::new() .skill(Skill::new("mytool", "Check the project with mytool.", "Run `mytool check`.\n")){ skills: [{ name: "mytool", description: "Check the project with mytool.", body: "Run `mytool check`.\n" }] }{"skills": [{"name": "mytool", "description": "Check the project with mytool.", "body": "Run `mytool check`.\n"}]}Limits
Section titled “Limits”- Copilot, Cursor, OpenCode, Kilo Code and Devin also load
.claude/skills, so with Claude Code installed they can see a skill twice. The install warns (may load the skills twice); the copies are identical.