When Factory Agents Argue With Each Other
I filed a support ticket against my own product last week. Domi told me “my search budget for this turn is used up” while the usage screen showed 3 of 50 monthly searches spent. I read that as broken. It wasn’t. The model had a correct sentence and no good way to say it. One station opened a PR to fix the wording. Five rounds of review. Three days to merge. Every round was a real disagreement, not a stall.
Five rounds on one sentence
Round one: our cross-model reviewer — a different model family, running offline, reading only the diff — found that the fix introduced the same bug pointed the other way. Near the monthly ceiling, the new wording promised “ask again for a fresh set” on a turn that was about to close the month out entirely. True finding. Fixed the same hour, with five mutation-verified tests so an off-by-one couldn’t sneak back in.
Round two: the reviewer wanted a chat eval fixture for the change. Reasonable — it’s the house rule. But the station that owns the eval harness had already found a gap: the harness never executes the file this sentence lives in. A fixture would pass whether the sentence existed or not. Writing one anyway would be worse than writing none — a green check reporting coverage it doesn’t have. So it came to me: merge past a real gap in the harness, or wait for the fix. I’m still the tie-breaker on that one.
In between, I changed the ask myself. I dropped the per-turn cap entirely instead of rewording around it. The reviewer kept up. It caught a real, narrower cost I’d described too broadly in my own PR body — concurrent turns could each grab the month’s remainder. It later caught that our English and French help docs still described the old limit. Both true. Both fixed.
Five rounds. One sentence. None of them were noise.
Agents arguing with each other
Here’s the part nobody selling “agents build your software” says out loud: specialists disagree, and disagreement is slow by construction.
The reviewer’s whole job is to not share the author’s blind spot. That means it will sometimes stop a PR the author is sure is fine. Add a station that owns quality bars, and it will refuse a fixture that only looks like coverage — and hand you a rules question instead of a shrug. That isn’t friction getting in the way of the work. That is the work, working.
Specialization delivers quality
The same trade pays off on the other side of the app.
Domi’s calendar used to show multi-day events as a 4-pixel strip with the label crammed underneath. Cramped. Easy to miss on a busy week. The fix wasn’t “make it taller.” The design station’s first pass filled the bar with the event’s raw color and set the label inside it — and failed accessibility contrast on eight of ten event colors. Worst case: 2.6:1. Nowhere near readable.
The shipped version tints the fill toward the background instead of using the raw color, so the label clears contrast on every color, in every palette. A station that only cared about “looks nicer” would have shipped the first version. The station that owns accessibility caught what looking at it couldn’t.


Each specialist is a real check that catches something the others miss. Each one is also a place the pipeline can stop cold — on a genuine disagreement between two stations that are both right from where they’re standing.
The number I don’t have yet
There’s an optimal number of specialized agents. Add one, and it can catch a real bug or a bad default before it ships — that’s quality going up. Add too many, and every extra station is another review, another place a PR can stall — that’s velocity going down.
I don’t know that number yet.
Here’s what I do know: fewer agents ship faster. Every specialist is a station that can stop a PR on a disagreement worth having, and every one of those disagreements costs a round of review. Five rounds on one sentence proved the reviews were worth it. It also proved they cost three days.
So the trade is real, and it cuts both ways. I’m not cutting stations to go faster. I’m watching for the round that stops paying for itself — and I’ll know the number when I see it.