Two builder agents, one reviewer agent, 173 PRs in 20 days: when a review missed something, he changed the rubric
Zobaer Hossain had two Claude Code agents build a client's mobile app while a separate cloud Claude reviewed every PR; 173 of 174 merged between Oct 2 and Oct 22. Review, not code, set the pace, and screenshot diffs arrived only after a broken UI passed every test.
Source: 173 PRs in 20 Days: Closing the Gap Between AI-Generated Code and Review
Zobaer Hossain ran two Claude Code builder agents in parallel on a client's mobile app (NDA, about 257 screens from Figma), with a separate cloud Claude session reviewing every pull request. His own job was "the rules, the decisions and the client, not the typing." Between October 2 and October 22:
- 173 of 174 opened PRs merged, each with its own spec doc.
- Peak of 21 merges a day; every planned screen was clickable on mock data by October 10.
- 1,700+ unit tests in 241 suites and 24 end-to-end flows on iOS simulators and Android phones.
"Writing code was never the slow part. Reviewing it was." He merged every PR himself for five days, then stopped on October 7: from then on an approved PR merged on its own and the builder moved straight to its next task.
The reviewer never sees the builder's reasoning, only what the PR puts in front of it. Each PR starts with a spec listing goal, scope, Figma nodes and acceptance criteria; it opens as a draft so review only runs on finished work; the reviewer reruns lint, typecheck and unit tests on the head commit itself and compares each changed screen with its Figma node. Changes requested come with a fix plan that the builder applies and resubmits without a person in the middle. Anything the rules can't settle, such as a client request that contradicts the designer's frames, stops at "needs a human."
The incidents are the useful part, and each one ended as a script or a written rule rather than a one-off fix:
- A shared button change stretched about 40 buttons and every flow still passed, because the buttons were still visible. Screenshot diffs against the last approved run arrived on day 19, and he says he'd add them on day one next time.
- The reviewer couldn't fetch Figma images (HTTP 403) in its sandbox, so no screen was being compared. A failed fetch now stops the review at "needs a human" instead of guessing.
- CI minutes ran out by October 5, so PRs now start no Actions at all: the reviewer runs the checks and end-to-end screenshots come from the builder's devices.
- Later review rounds re-raised minor points. Findings are now ranked, and later rounds re-check only what the fix touched.
"When something fails, don't fix the instance, fix the rule. A person who fixes one PR saves one PR. A rule saves every PR after it."
Why it matters for code review
This is a three-week account of agents that never get tired running against a reviewer that has to keep up, and the pace was set by how much the review could be trusted, not by how fast the builders wrote. The trust came from a contract to check against (the spec), evidence to check with (tests and screenshots), and a reviewer kept away from the builder's story. It also shows the gap: a reviewer that reruns the tests can still approve a broken UI if no check looks at it, and its own blind spot (the 403) was silent until someone noticed. And with Actions switched off, lint and unit tests now run inside the reviewer session rather than in independent CI. Pair with Peter Vanhee's nightly loop that never merges, Felix Hellström's overnight fleet, and stopping a coding agent and an AI reviewer from looping.