Skip to content

Skills

A skill is a short SKILL.md document — YAML frontmatter with a name: and description:, then instructions. Skills carry reusable rules into coding-runtime workers at the moment they run. They are not the agent, and they do not own the process.

Manage them under Config → Skills or the JSON API:

MethodPath
GET / POST/api/skills
PATCH / DELETE/api/skills/{id}
  • Builtin skills are compiled into the agent binary. They appear with a synthetic id (builtin:<name>), origin: builtin, and editable: false. You can view them but not edit, delete, or override them by name.
  • User skills are stored in the database. Create one from its full SKILL.md text (the backend parses the name: field), and tag it to one or more worker-spawning steps.

Builtin skill names:

SkillPurpose
clean-codeTestability and maintainability constraints for implementation
steelframe-harnessHow the harness pack works; do not bypass hooks
steelframe-sdlcThe bound feature → staging → production flow
ubiquitous-languageUse the project’s shared domain terms
committed-memoryFor steelframe:memory issues, edit only docs/memory/
grafanaInvestigate with gcx (metrics, logs, alerts)
kubectlCorrelate with the cluster (read-only)

Default step bindings (compiled in; user skills merge additively on top):

StepDefault skills
task_lifecyclewaiting_for_workerclean-code, steelframe-harness, steelframe-sdlc, ubiquitous-language, committed-memory
task_lifecyclewaiting_for_ci_fix_workerthe same five
investigate_incidentswaiting_for_investigatorgrafana, kubectl
task_lifecyclewaiting_for_rebase_workernone (deliberately)

The step picker only offers steps that actually spawn workers: waiting_for_worker, waiting_for_rebase_worker, waiting_for_ci_fix_worker, and waiting_for_investigator.

At spawn, the agent writes the step’s skills into the active coding runtime’s skill directory inside the worker sandbox:

  • Claude Code: <work_dir>/.claude/skills/<name>/SKILL.md
  • Grok: <work_dir>/.grok/skills/…
  • Codex: <work_dir>/.codex/skills/… plus a short AGENTS.md index
  • OpenCode: .opencode/skills/…
  • Pi: <work_dir>/.pi/skills/… (sandbox settings.json sets defaultProjectTrust: "always")

Because headless discovery by description can miss, the worker prompt also names every skill explicitly: “Before starting, load and follow these skills: …”.

The harness pack’s repo-level hooks and skills apply to humans, laptop CLIs, and workers after harness_converge merges the sf/harness PR. Workers always get the compiled-in skills in their sandbox, even if that PR is unmerged.

  • Builtin ids start with builtin:; any mutation returns 400 builtin skills are read-only.
  • You cannot create or rename a user skill to a builtin name; the API rejects it.
  • Creating a skill requires non-empty content with a name: frontmatter field.
  • Skills are injected into the sandbox per run; editing one affects the next spawn, not a worker already running.