Most subagent prompts fail for one reason: they describe an area instead of a task. "Look at the auth code and clean it up" gives an agent infinite latitude and no stopping rule. It reads files, proposes a plan, edits something, gets uncertain, and either loops or returns a summary you cannot merge.

Four parts fix it. Every subagent prompt in the kit has all four, in this order.

1. Task boundary — one sentence, one outcome

Name the single change and the observable result. If you cannot finish the sentence without "and", it is two subagents.

Task: make POST /orders reject amounts <= 0 with HTTP 422. Result: an integration test that posts -5 and asserts 422 passes. 

2. Allowed files — a whitelist, not a suggestion

This is the part people skip, and it is the part that decides whether the diff is reviewable. Agents do not wander out of malice; they wander because nothing told them where the edge was.

You may edit: app/api/orders.py, tests/test_orders.py You may read: anything You may not touch: migrations/, app/billing/, *.lock, CI config If the task cannot be done inside the whitelist, stop and say why. 

The last line matters more than the list. It converts an impossible task into a message instead of a creative workaround.

3. Done condition — how it proves itself

A command the agent must run and paste the output of. "Tests pass" is a claim; pytest tests/test_orders.py -q and its tail is evidence.

Unverifiable tasks produce confident reports. Verifiable tasks produce diffs.

If no test can express the outcome, use a diff-size and file-count bound instead: "at most 3 files, at most 120 changed lines; if larger, stop and report."

4. Report format — fixed shape, short

DONE / BLOCKED files changed: <list> command run: <cmd> output: <last 10 lines> decisions: <any choice you made that I did not specify> not done: <anything you skipped, and why> 

"decisions" is the highest-value field. It is where an agent quietly picks a library, an error shape, or a naming convention, and it is exactly where review time disappears.

Why three subagents beat one long conversation

Each subagent starts with a clean context, so an early wrong assumption does not contaminate the rest of the work. The price is that facts do not carry over — the parent has to pass file paths, conventions and constraints explicitly. That cost is real, and it is smaller than the cost of an agent that has been wrong for forty turns.

The anti-pattern

Delegating to avoid deciding. If you do not know what "done" looks like, the subagent will invent it and you will spend the review budget finding out what it invented. Write the done condition first, then delegate.

These files ship in the AI Agent Engineering Kit ($12, 18 plain-text files, emailed on payment). Free starter files: ceo-devkit-lab.surge.sh/free.html.