Building Agents
Skills
Reusable Markdown procedures.
Skills live under .fabricharness/skills/<skill-name>/SKILL.md. They are Markdown-first: the body is the instructional prompt, the frontmatter declares metadata.
Format
---
name: triage-issue
description: Triage a GitHub issue and recommend severity, labels, and next action.
model: openai/gpt-5.5
---
You are triaging a GitHub issue.
Steps:
1. Read the issue using the `gh` command.
2. Inspect relevant files if available.
3. Determine severity.
4. Recommend labels.
5. Decide whether a fix can be proposed.Invocation
const result = await session.skill('triage-issue', {
args: { issueNumber: 42, repository: 'octocat/repo' },
commands: [gh],
result: schema.object({
severity: schema.enum(['low', 'medium', 'high', 'critical']),
summary: schema.string(),
recommendedLabels: schema.array(schema.string()),
fixSuggested: schema.boolean(),
}),
});The framework:
- Loads the skill by name.
- Interpolates
argsinto the prompt (template variables in the body, plus a structured arguments preamble). - Runs the harness loop with the chosen tools/commands.
- Validates the typed result.
Why skills, not just prompts
- Reuse. Multiple agents can call the same skill.
- Versioning. Skills are tracked in source control; you can ship "skill packs" once a registry exists.
- Auditability. Skill instructions are visible and reviewable, separate from agent code.
- Model overrides. A skill can declare its own model (for cheap classifiers, big-context reviewers, etc.).
Roadmap
- Full YAML parsing for richer frontmatter.
- Skill-declared input/output schemas.
- Skill-declared permissions.
- Skill packs and a registry.