lowercase-hyphenated and equal to the directory, per both harnesses' rules. the human name moves to `title`. a skill named "Deploying Officer" was listed to an agent and could not be loaded by it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
91 lines
4.8 KiB
Markdown
91 lines
4.8 KiB
Markdown
---
|
|
name: delegating
|
|
title: Delegating the writing
|
|
description: >-
|
|
Use when a feature has been agreed and somebody has to type it — how to hand the writing to a cheaper
|
|
agent, what a brief has to contain, and how to review what comes back. Also read it before deciding NOT
|
|
to delegate, because most of the cost of doing it yourself is invisible until the context runs out.
|
|
version: 1
|
|
---
|
|
|
|
# Why this exists
|
|
|
|
The owner's architecture, somebody else's typing, and the owner's reviewer in the middle. That division
|
|
is the whole point: the expensive model should be spending its context on decisions, not on writing out
|
|
six locale files or the same form for the fourth time.
|
|
|
|
Set as a standing way of working on 2026-08-24. It is not a suggestion to consider per task — when a
|
|
feature is agreed and the remaining work is typing, it goes to an agent.
|
|
|
|
# What stays here and what goes
|
|
|
|
**Stays.** The design. Which boundary moves, what a thing is called, what the failure modes are, and
|
|
whether the result is right. If a decision has to be made while the code is being written, the brief was
|
|
incomplete — that is a fault in the brief, not a reason to take the work back.
|
|
|
|
**Goes.** Everything mechanical and everything wide: a change repeated across many files, translations,
|
|
a form, a migration over a list of call sites, tests for a rule already agreed.
|
|
|
|
**Does not go.** Anything where a wrong guess is expensive and quiet — permission checks, credential
|
|
handling, anything that deletes. Not because a smaller model cannot write them, but because reviewing
|
|
them properly costs as much as writing them, so nothing is saved.
|
|
|
|
# The brief
|
|
|
|
An agent that has to ask a question has already cost more than it saved. So the brief carries:
|
|
|
|
- **The exact files**, by path. Not "the locale files" — list them.
|
|
- **The pattern to follow**, by pointing at a file that already does it. "Same shape as `pt-PT.json`" is
|
|
worth more than any description.
|
|
- **What must not change.** Key names, public exports, anything another file imports.
|
|
- **How it verifies itself**: `bunx tsgo`, `bun test`, `bunx prettier --write <the paths it touched>`.
|
|
Say that a red typecheck is not done, or it will report success with a broken tree.
|
|
- **What done looks like**, in one sentence it can check itself against.
|
|
|
|
Run it in the background and carry on. A brief good enough to run unattended is the same brief that makes
|
|
the result reviewable.
|
|
|
|
# Choosing the model
|
|
|
|
**The cheapest one that will get it right.** Not the cheapest one; the cheapest one that will get it
|
|
right, which is a different question and has to be asked per task.
|
|
|
|
- **Haiku** — mechanical and high-volume with no judgement in it. A rename across forty call sites, a
|
|
JSON transform, moving a block of files to a new shape.
|
|
- **Sonnet** — the default, and what most of this work is. A feature whose design is settled and whose
|
|
brief names the files: translations, a form, tests for a rule already agreed, a migration over a list.
|
|
- **Opus** — when the work still contains a decision. Which usually means the brief is incomplete, so
|
|
the first move is to finish the brief rather than to spend more per token on writing it.
|
|
|
|
## Cheapness is a property of the pair, not the model
|
|
|
|
A cheap model on a vague brief is the most expensive option available: it returns something plausible,
|
|
you review it, you reject it, you write the brief you should have written, and you pay for the whole
|
|
round twice. The saving comes from the brief being good enough that a smaller model cannot go wrong —
|
|
so if you find yourself reaching for a bigger model to compensate for a thin brief, fix the brief.
|
|
|
|
The other direction is real too, and cheaper to correct: a task that comes back wrong from Haiku goes to
|
|
Sonnet and costs one wasted run. Start low.
|
|
|
|
# Reviewing what comes back
|
|
|
|
**Read the diff, not the summary.** The summary is written by the thing being reviewed. `git diff` is not.
|
|
|
|
**Run the checks yourself.** `bunx tsgo && bun test` in the real tree. An agent reporting green has
|
|
reported what it believes.
|
|
|
|
**Then it is yours.** It goes out under your commit and your name, so a mistake in it is not the agent's
|
|
mistake. Review it as if you had typed it, because as far as the history is concerned you did.
|
|
|
|
# What went wrong the first time, so it does not go wrong again
|
|
|
|
Both of these are from one night, 2026-08-24.
|
|
|
|
**A dead agent was reported as running, twice.** A subagent is a sidechain in the parent session, and a
|
|
tool rejection in the parent had killed it about four hours earlier. Nothing said so and the parent kept
|
|
answering "still running" when asked. **Never report a subagent's state from memory — look.** If the
|
|
result is not in the tree, it did not happen.
|
|
|
|
**Interrupting the parent interrupts the child.** Stopping the session to say something also stops the
|
|
work it was waiting on. Worth knowing before assuming a long silence means progress.
|