5 · Skills — how work is done here¶
Part II — The Layers · ← Context · Contents · Next: Agents →
The problem skills solve¶
Context (chapter 4) tells the agent what is true. It does not tell the agent what to do when the user says "fix this bug" — and left to improvise, a capable model will produce a different competent procedure every time. One session reproduces the bug first; the next dives straight into a fix; a third refactors en route. All defensible, none repeatable, and repeatability is what turns an assistant into infrastructure.
A skill is a written procedure for one kind of task, in this codebase, loaded when
that kind of task appears. The operative word is procedure: the best skills here read
like a checklist a senior engineer would hand a new team member, not like prose about
values. There are 71 of them in
project/.claude/skills/, plus 53 machine-level commands
in global/commands/ — the PM ceremony among them, which gets
its own chapter (10).
Anatomy of a skill¶
Every skill is a directory with a SKILL.md, whose frontmatter does more work than it
appears to. Here is bug-fix's, in full:
---
name: bug-fix
description: "Investigate, reproduce, fix, and test bugs in the Acme codebase.
Use when the user reports a bug, error, or unexpected behavior that needs
fixing. Do not use for performance issues (use performance) or infrastructure
problems (use dev-troubleshoot)."
model: sonnet
---
Three design choices worth stealing:
- The description is a routing contract, not a summary. It states when to use the skill and when not to, naming the alternative. With 71 skills, mis-routing is the dominant failure mode, and every "do not use for X (use Y)" clause is a fence between two skills that were once confused.
model: sonnet— a mechanical bug-fix workflow doesn't need the most expensive model. Cost discipline is set per-procedure, where the procedure's difficulty is known, not per-session. Update, 2026-09-30: the two posts on the 5.5 models disagree about this skill. The workload table in Building with Claude Sonnet 5.5 puts "Well-scoped everyday coding: fixing bugs, …" in the Sonnet 5.5 row. What a task costs on Opus 5.5 moves down to Sonnet or Haiku "for lookups, not for writing code", and keeps a mechanical edit across many files on Opus 5.5 at low effort. Price per token doesn't settle it: that post prices a task by its tokens and its retries ("A retry costs more than those savings") and says to measure it on your own work. Measure both options on your own tasks before choosing between them:model: sonnet, ormodel: opuswitheffort: low.- Parameterized skills add an
argsline anddisable-model-invocation: true— they are tools to be called deliberately (/implement-domain-event deal-confirmed), not patterns to be auto-matched.
Bodies are stepwise and imperative. Skills that need supporting material carry a
references/ directory (triage ships its
autonomy policy; design-review its
checklists) and sometimes scripts/ or assets/ — a skill is allowed to be a small
software package, not just a prompt.
A taxonomy of 71¶
The catalogue is best understood as five families:
Lifecycle skills map to the moments of a working day: bug-fix, new-feature,
api-change, frontend-change, db-migration, refactor, hotfix, pr-create,
commit, deploy, incident. These are the auto-invoked workhorses.
Generator skills (implement-*, 12 of them) scaffold this platform's specific
patterns: implement-domain-event
produces the whole pattern — event contract, aggregate method, outbox entry,
publisher, consumer, dead-letter handler, idempotency guard, and tests — because on
this platform an event without its idempotency guard is a bug half-shipped.
implement-nestjs-module, implement-helm-chart, implement-endpoint and the three
implement-*-tests skills do the same for their patterns. This family is the strongest
argument that skills beat prose context: a convention enforced by generation never
drifts.
Autonomous-loop skills: the two loop-engineering skills from
chapter 2 —
triage and
verify-loop — plus five ralph-*
skills (ralph-fix-tests, ralph-implement-spec, ralph-debug, ralph-refactor,
ralph-green-build) implementing the Ralph Wiggum
technique: the same prompt fed repeatedly, each iteration
building on state visible in files and git history, with a hard iteration cap (15–50
depending on the skill).
Guardrail skills encode discipline rather than tasks:
verification-before-completion
("Your eyes are not a test suite. Show concrete evidence"),
systematic-debugging,
test-driven-development,
source-driven-dev. Several
extend plugin-provided base skills with project specifics — extension, not duplication.
Operations skills wrap the platform's sharp edges: k8s-troubleshoot,
cicd-troubleshoot, dev-instance, production-access, launch-readiness,
erp-issue, sonar-scan, env-status.
And one meta-skill closes the loop between layers:
session-learnings scans a
session for gotchas worth preserving and writes them to the memory tree — the bridge
from layer 2 to layer 6, run at the end of a working day. Its own instruction is the
right one: "Be highly selective — only document what prevents future mistakes or saves
real time."
When does a procedure become a skill?¶
The rule of thumb, from Appendix A:
The third time you explain the same procedure, it becomes a skill.
The first time is a conversation. The second time might be coincidence. The third time
is a pattern, and every future explanation is a tax that a SKILL.md pays off. The
corollary matters just as much: don't port these 71 — most encode conventions that
are not yours. A skill library is grown, not installed.
Precedence: when skill worlds collide¶
This setup runs its own skills alongside two third-party skill collections
(agent-skills and superpowers — see Appendix B), which
means overlapping claims on the same task. The root
project/CLAUDE.md settles it with an explicit precedence
order:
- PM commands (
/pm:*) — project tracking, GitHub sync, status. Always the backbone.- Agent-skills — engineering process (build, test, review, debug).
- Custom skills — only for project-specific logic (deploy, hotfix, db-migration…).
- Superpowers — meta-workflows only. NEVER for TDD, debugging, or code review.
Unremarkable-looking, but it removes a whole class of nondeterminism: without a written order, which debugging methodology loads depends on phrasing luck. With one, the answer is a lookup. If you adopt more than one skill source, write this paragraph on day one.
The machine-level commands¶
global/commands/ carries what should exist on every project:
the 45 PM ceremony commands under pm/ (chapter 10; lineage
in Appendix B), three
context/ commands that create, prime and update a
project's context files, two testing/ commands, and a
code-rabbit.md for driving an external review
bot's findings to resolution.
Primary sources¶
project/.claude/skills/— all 71, each a directory withSKILL.mdtriageandverify-loop— the two loops, worth reading end to endimplement-domain-event— the generator family's best specimenglobal/commands/— the machine-level 53project/.claude/README.md— the original in-repo quick-reference ("I want to… → skill")
Next: procedures need executors — and graders. The agent fleet: fifteen domain experts, a review panel, and the one agent that is deliberately kept ignorant. Chapter 6 — Agents: who does it, and who checks it →