FabricFabricHarness
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:

  1. Loads the skill by name.
  2. Interpolates args into the prompt (template variables in the body, plus a structured arguments preamble).
  3. Runs the harness loop with the chosen tools/commands.
  4. 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.