writing-skills · git:20260703.7e660b7 · 2026-07-03 · sha256 ad4f364a8a14e89e
writing-skills git:20260703.7e660b7A
Immutable. This exact content is served forever at /api/v1/blob/ad4f364a8a14e89e.
---
name: writing-skills
description: >-
/writing-skills — the house discipline for authoring SKILL.md skills that
behave predictably. Loads the rules; the skill_writer subagent applies them.
user_only: true
slash: writing-skills
---
# Writing Skills
A skill exists to wrangle determinism out of a stochastic system.
**Predictability** — the agent taking the same *process* every run, not
producing the same output — is the root virtue; every rule below serves it.
A protoAgent skill is a folder holding one `SKILL.md`: YAML frontmatter
(`name` + `description` required, description ≤ 1024 chars) over a markdown
body that becomes the agent's working instructions when the skill loads.
Deep docs: `docs/guides/skills.md`, `docs/guides/add-a-skill.md` (ADR 0052,
ADR 0060).
## Invocation classes — choose deliberately
- **Retrievable (default)** — indexed in the always-on `<available_skills>`
list; the agent loads it with `load_skill`. Its description is scanned
every turn, so the description is a real cost: write it as **triggers, not
identity** — "Use when the user …, mentions …", one trigger per genuinely
distinct branch, synonyms collapsed.
- **`user_facing: true` + `slash: <token>`** — additionally invokable as
`/<token>` in chat.
- **`user_only: true`** — withheld from agent retrieval entirely; the slash
is the only way in. Zero context cost; the *user* becomes the index that
must remember it exists. The description turns human-facing: one plain
sentence for the palette. Use this for rituals only ever fired by hand.
**Token collision check, every time:** slash precedence is goal > plugin
command > workflow > subagent > skill — a same-token workflow or subagent
silently shadows the skill (this is why `web-research` isn't `/research`).
## Body discipline
- **Steps end on a checkable completion criterion** — the agent must be able
to tell done from not-done ("every modified surface accounted for", not
"produce a list"). A fuzzy criterion invites premature completion.
- **Prefer a leading word** — a compact concept the model already holds
(*tracer bullet*, *tight*, *red*) — over a restated triad; it anchors a
region of behavior in one token, in the body (execution) and the
description (invocation) alike.
- **Reference the docs, don't inline them.** Material only some runs need
belongs in repo docs the body points at; the body carries what every run
needs.
## Failure modes (diagnose with these)
- **Premature completion** — a step ends before it's done; sharpen the
criterion first, split the sequence only if that fails.
- **Duplication** — one meaning in two places; costs tokens and maintenance.
- **Sediment** — stale layers that settle because adding feels safe and
removing feels risky; the default fate of an unpruned skill.
- **Sprawl** — too long even when every line is live; push reference out.
- **No-op** — a line the model already obeys ("be thorough"); delete the
sentence, don't trim it — or replace the weak word with a stronger one
(*relentless*).
## Placement & workflow
Operator-authored skills live at `~/.protoagent/skills/<slug>/SKILL.md`
(create/edit via the console Skills surface — it round-trips the same
loader). Plugin-bundled skills live in the plugin's `skills/` dir; repo
examples in `config/skills/`. To draft or tighten one, delegate to the
**skill_writer** subagent — it returns the complete SKILL.md, its placement,
and the token to collision-check.
*(Discipline adapted from mattpocock/skills `writing-great-skills`, MIT.)*