Skills format
We follow the anthropics/skills convention exactly. Any tool that reads that format can use harness-generated skills, and vice versa.
Directory shape
<skill-name> is the canonical identifier — kebab-case, must start with a letter.
SKILL.md shape
---
name: skill-name # must match directory
description: 10–1024 chars
version: 1.0.0
when_to_use: routing hint
inputs:
- {name: ..., type: ..., required: true/false, description: ...}
outputs:
- {name: ..., type: ..., description: ...}
---
# Human-readable title
## Steps
1. ...
2. ...
## Failure modes to avoid
- ...
Frontmatter is YAML; body is markdown. Both are required.
Validators
harness.skills_io.validate_skill enforces:
namematches^[a-z][a-z0-9-]*$descriptionbetween 10 and 1024 charsbodyis non-empty
The validator is intentionally lenient — we don't want to break anthropics/skills compatibility by over-specifying.