The playbook in 4 minutes · working draft 0.1.0

Building Software With a Team of AI Agents

What happens when agents stop being the bottleneck, and what I'm learning about planning, shared memory, review and cost.

By Hamed Taheri. Working draft, revised October 15, 2026. PR counts through October 15; other numbers through October 14. Full playbook · Give to your AI

Merged PRs per month, my account2026

431merged in October 1–15, against 154 in all of September.

  • April–September. More sessions in parallel, sessions that message each other, single sessions that work longer and check their own work, and guardrails.
  • October. Shared memory for the agents and a new system to run them: scripted pipelines that prepare, build and review each task.
Merged PRs per month: Apr 85; May 128; Jun 136; Jul 131; Aug 136; Sep 154; Oct 1–15 431. October is partial.85Apr128May136Jun131Jul136Aug154Sep431Oct 1–15
Activity on one account, not hours saved. Several changes landed together, so the phases show timing, not separate effects. PR size varies, and feature parts and fix PRs can merge separately. October is partial, through 15 October 2026.Definitions, benchmarks + sources →

I don't write the code. Agents do most of the implementation; I decide what to build, define it so an agent can finish it, and check what comes back. Almost a year ago, I began redesigning our development process around that split: from one session per feature to scripted pipelines that prepare, implement and review work in parallel.

In October, my account passed September's merged-PR total within 11 days. Earlier gains came from running more sessions in parallel, letting them message each other, and getting single sessions to work longer, check their own work and stay inside guardrails. In October, the agents got shared memory and a new system to run them: scripted pipelines that prepare, build and review each task. That's when output jumped.

The bigger surprise was where the work waited. In the pipeline's first nine days, more than half the runs ended with an approval carrying a condition only a person could clear. The agents stopped being the constraint; my decisions became the queue.

This is the method behind those numbers, the failures that shaped it, and what I haven't measured yet.

What changed in my work

$16.38 → $5.30

Per task, coordination included

October 5: one long coordinating session, about 20 tasks. October 10–13: scripted pipeline, 64 tasks marked done.

$1.86 → $0.48

The same task, lean worker

8 model calls instead of 21, less than half the peak context, and every acceptance check met.

37

Stops instead of guesses

Workers that hit a gap in the brief handed the task back. Each stop cost cents; a guessed migration costs far more.

API-priced usage, not invoices. The two cost windows count tasks differently; this is not a matched comparison. How I counted ↗

How the work flows

  1. Me + coordinator

    49.6% of spend

    Plans with me, writes specs, launches runs. Never reads code or diffs.

  2. Preparer

    $0.18 median

    Turns the spec into a six-field brief, or answers NOT READY.

  3. Worker

    $0.43 median

    Capped, lean, own worktree. Implements one brief and opens a draft PR.

  4. Reviewer

    $0.11 median

    No edit tools. Reviews the exact revision: MERGE, MERGE AFTER or DO NOT MERGE.

  5. Gate + me

    human time

    I clear conditions and merge to an integration branch. Release is a separate, supervised step.

Median recorded cost per stage, October 6–14 (176 preparation, 199 worker and 151 review records). Coordinator share from the October 10–13 window. API-priced usage, not invoices. Evidence ↗

Agents review every PR against its acceptance checks. I read the gate: the verdicts, the conditions and the PRs held for me. Nothing reaches production without a person.

Where 206 agent runs endedOctober 6–14, 2026

120 / 206were approved by the AI reviewer, then waited for my decision.

  • 120 Approved, waiting on a decision only a person can make
  • 31 Approved, nothing blocking: ready for my gate
  • 37 Stopped at a gap in the brief instead of guessing
  • 18 Other: no PR, spec not ready, or an error
Each run: one agent writes the brief, another builds it, a third reviews it. 206 runs over 201 tasks.Run outcomes data →

The seven practices I use

Each practice came from a failure. Four of them:

1. Prepare a task an agent can finish

A worker once invented column names for a table another task created, because my spec named the table without listing its columns. Mocked tests passed. Now every worker gets outcome, acceptance checks, spec, files, verification commands and branch, and a shared table comes with its exact definition.

task 261014-xa4x-bIllustrative brief, after the import feature in practice 1
1Outcome
Part B writes every imported row to the import table, with a status per row.
2Acceptance
1. Valid rows land as imported. 2. Invalid rows land as rejected, with a reason. 3. Queries run against a real Postgres, not mocks.
3Spec
The accepted import spec and plan, pinned to a commit.
4Files
Exact path:start-end ranges, plus the CREATE TABLE copied from part A.
5Verification
The test command for the import module, then one run against a disposable Postgres.
6Branch
Its own worktree and branch; the PR stacks on part A’s branch.

Product decisions are where I spend most of my time. My session asks them in rounds of three or four multiple-choice questions, each option with a why-yes and a why-no. On October 14, I groomed about 59 tasks in seven rounds. Prepare work

2. Give each session a focused job

My coordinating session plans and routes; it never implements. Separate headless processes prepare, implement and review, each with only the tools it needs, a budget and its own worktree. A default worker inherits every tool and instruction. Trimming that took the same task from $1.86 to $0.48.

Same task, two worker setups

Task mq4d · lean run on Sonnet 5.5

Model calls

Default21
Lean8

Peak context

Default109K
Lean45K

Cost

Default$1.86
Lean$0.48
The default claude -p worker missed one acceptance check; the lean worker met all of them. Lean means six tools, no MCP servers, a fixed 1,200-token worker card, capped file reads, and the brief plus exact code ranges in the prompt.

Discovery and changing requirements stay interactive. Execution and scripts

3. Review the whole change before patching

One PR took nine fix rounds and about $6.68 because each review found the next nearby problem. Now I use one deep review, one complete fix and one confirmation, with depth matched to risk. A new finding in the same area goes to a person for design review, never to round three. Tests must exercise the layer that changed: mocks hid the table bug above. Review and delivery

4. Count the workflow, including failed attempts

A cheap worker can hide expensive coordination. In the October 10–13 window, my coordinating session was 49.6% of all spend, so it now routes and never reads code. I count preparation, failed attempts, reviews and the coordinator, and keep money paid, API-priced usage and accepted work as three separate numbers. My target is $1–2 per task with a hard cap of $5; over $2 means the task should be split. Cost and evidence

5. Keep useful state outside the conversation

Team memory holds tasks, owners, decisions, handoffs, messages and guidelines. A new session retrieves the state it needs instead of the whole conversation, and a handoff keeps the evidence and the next action.

I use Personize, the entity-driven memory layer we build; our own development became its use case. A table and a markdown file are enough for one developer with one tool. Shared identity, safe claims and governed retrieval start to matter when several people and tools share the same work. Queue claims aren't atomic yet, so I run one coordinator. Memory and kit

6. Put important limits in code

An agent spent $36.70 refreshing cached pages one at a time when one wildcard would have cost about half a cent. A sentence in the instructions hadn't stopped it; a hook now does. Scripts, permissions and human approval guard anything expensive or irreversible. These guardrails aren't a sandbox: on a shared machine, run workers in containers with scoped credentials. Guardrails

7. Save the lesson and test it again

Every rule above started as a recorded failure: the change, the outcome, the cost and what broke. An agent can draft a sanitized finding; a person decides whether to share it. I'd like other teams' findings too, especially the ones that contradict mine. Learning and contributions

What this does and doesn't show

How every number was counted: evidence and definitions.

Where this is going

We work with tens of agents today. The direction I'm building toward is hundreds or thousands working in parallel alongside developers, sharing context and coordinating complex work. Those held runs show what has to change first: human decision capacity, not agent capacity. That means batched decision inboxes, versioned claims so several coordinators can run safely, and budgets that cover a whole fleet.

Try one change, or pass this to your AI

Pick one bottleneck and three checkable tasks. Track acceptance, every attempt, cost and your own time before adding parallel work. The workflow assessment finds your main constraint in twelve questions, and the pilot guide walks through the test.

Read https://hamedtaheri.com/playbook/v0.1.0/agent/start.md.
Compare these practices with our workflow, following our project rules.
Propose one change and three tasks to test it. Include acceptance checks,
a total budget covering review and retries, and cost and human-time measures.
Don't start paid runs yet.

The templates, memory starter and measurement tools are in the starter kit. The production runner scripts aren't public yet; ask me if you'd like to see them.

I'm curious how much further experienced developers, product managers and CTOs could take this. Read the full playbook, or book a call to compare notes.

Get the next version by email

This is version 0.1.0. Next: human minutes per task and quality after merge. One short note when a version is worth reading.

Prefer LinkedIn? Subscribe to the newsletter there instead.