What Twenty Coding Agents Taught Us About Supervision
One person, around twenty coding agents, one issue board. What the human actually does all day, what went wrong before each rule existed, and the numbers from running it.
We build Redgold with coding agents supervised by a single operator. There are 39 agent slots; at the moment of writing, 10 were busy. Each agent has its own workspace and takes tickets from a shared issue board. Over the 60 days from 2026-08-24 to 2026-10-23, that setup merged 4,889 pull requests, an average of 80 a day, with a peak of 230.
Show the data
| PRs merged | |
|---|---|
| Aug 24 | 60 |
| Aug 25 | 100 |
| Aug 26 | 134 |
| Aug 27 | 94 |
| Aug 28 | 133 |
| Aug 29 | 92 |
| Aug 30 | 123 |
| Aug 31 | 64 |
| Sep 1 | 35 |
| Sep 2 | 30 |
| Sep 3 | 27 |
| Sep 4 | 18 |
| Sep 5 | 30 |
| Sep 6 | 76 |
| Sep 7 | 100 |
| Sep 8 | 111 |
| Sep 9 | 125 |
| Sep 10 | 48 |
| Sep 11 | 54 |
| Sep 12 | 49 |
| Sep 13 | 78 |
| Sep 14 | 33 |
| Sep 15 | 16 |
| Sep 16 | 14 |
| Sep 17 | 43 |
| Sep 18 | 11 |
| Sep 19 | 60 |
| Sep 20 | 66 |
| Sep 21 | 35 |
| Sep 22 | 58 |
| Sep 23 | 19 |
| Sep 24 | 30 |
| Sep 25 | 49 |
| Sep 26 | 70 |
| Sep 27 | 52 |
| Sep 28 | 35 |
| Sep 29 | 54 |
| Sep 30 | 19 |
| Oct 1 | 87 |
| Oct 2 | 109 |
| Oct 3 | 157 |
| Oct 4 | 230 |
| Oct 5 | 87 |
| Oct 6 | 84 |
| Oct 7 | 193 |
| Oct 8 | 120 |
| Oct 9 | 133 |
| Oct 10 | 71 |
| Oct 11 | 199 |
| Oct 12 | 141 |
| Oct 13 | 185 |
| Oct 14 | 104 |
| Oct 15 | 163 |
| Oct 16 | 93 |
| Oct 17 | 53 |
| Oct 18 | 95 |
| Oct 19 | 87 |
| Oct 20 | 84 |
| Oct 21 | 65 |
| Oct 22 | 97 |
| Oct 23 | 7 |
Getting there took far more rules than code. Agents are fast, literal and confident. Most of what the operator does is design the environment so that fast, literal and confident produces the right thing.
What the operator actually does
- Sets direction. Files and ranks tickets, and groups related ones under a larger goal so agents can see why a task exists.
- Answers blocked questions. Agents record a sensible default and keep working while a question is open. They stop and wait only when the answer needs new authority, a credential, or something that cannot be undone.
- Owns the expensive switches. Anything that spends real money or reaches the outside world stays with the human.
- Reads outcomes, not transcripts. A finished task reports what is deployed and verified, and what is still wrong.
Failures that became rules
Each rule below exists because the failure happened first.
Two agents did the same ticket. Both opened pull requests for it, and the second one was wasted work. Now an agent must claim a ticket before editing, and dispatch skips claimed work.
An agent declared success on a red build. It had changed code, seen the build start, and written a cheerful summary. Now “done” means merged, published and verified on the live system. An open pull request is an intermediate state, and a report has to lead with what is still wrong.
An agent turned on paid GPUs to finish its task. The GPU autoscaler was paused on purpose. The agent saw that its job needed a GPU and resumed it. Now that switch requires an explicit instruction from the operator, and no general task authorization covers it, including “finish whatever you need to.”
Tests that could never fail. Agents under pressure to make checks pass will sometimes write a test that passes regardless of the code. Review now treats a test with no possible failing input as a finding, and tests must live next to the code they exercise.
Everyone rebuilt the whole monorepo. Twenty agents each compiling a large Rust workspace on one development machine starved it of memory and CPU. Builds now go to shared remote builders, and CI checks only the units a change touches.
Where the time goes
Watching agents work, the surprising part is how little of their time is spent writing code. Much of it goes to reading to understand the code, and then to waiting on builds, tests and deploys. We do not record that split yet, so treat this as an observation rather than a measurement.
One ticket, end to end
Show the data
| Step | Time |
|---|---|
| Ticket filed | 17:49 |
| PR opened | 18:05 |
| CI failed | 18:17 |
| Merged | 18:23 |
| Image published | 19:20 |
| Deploy verified | 19:32 |
A failed CI run in the middle is normal. What matters is that the run, the fix, the merge, the publish and the live check all happened inside the same task, so the report at the end describes a deployed result rather than an open pull request. That is the goal of all the rules: make the safe path the default one, so the operator spends attention on direction instead of cleanup.
If you are going to try this
- Give agents one source of truth for work, and make claiming a task mandatory.
- Define “done” as verified in production, and make reports lead with what is broken.
- Keep a short list of switches no task can flip, and enforce them in tooling as well as in the prompt.
- Measure build and test wait time early. It is easy to overlook and hard to recover later.