The problem
Coding agents are good at starting work and bad at finishing it. Left alone, Claude Code would announce “I’ve done 30% of the work, shall we stop here?” and wait for a person to say no. Supervising that is a job in itself: you read every diff, you re-prompt, you check whether “all tests pass” means anything.
I wanted to stop being the loop.
What I built
Bulava runs Claude Code and the Codex CLI on your Mac, on the subscriptions you already pay for. You describe the work. Claude does it, Codex reviews it independently, and the work goes back to Claude until the review accepts it. There is no account, no API key and no server of mine in the path.
It started in July 2026 as a shell script. About ninety days later it was a native macOS app that I build with itself.
How a task moves through it
- Classify. A new message is sorted by size and by what it needs: a plan, outside research, a look at how comparable products solved the same interface problem.
- Two independent positions. Claude and Codex each read the same context file and write their own approach without seeing the other’s. Codex then lists where they materially disagree.
- Claude decides and builds. The reconciliation is advice, not authority. Claude can consult Codex as many times as the work needs.
- Codex reviews the real diff. A stop hook hands the actual changes, the evidence (build, tests, checks the engine ran itself) and the acceptance criteria to Codex. Findings go back to Claude.
- Limits. Three rounds of patience, two rounds without progress parks the run for a person, twelve rounds is a hard ceiling. Nothing is accepted because an agent said it was done.
Big jobs are cut into pieces a reviewer can accept or reject by looking. Each piece gets its own criteria, its own frames from a real browser or simulator, and its own review.
The benchmark
To answer “is this better than Claude Code on its own?”, I gave the same task to three setups on 7–8 September 2026: rebuild a mobile game from a video of someone playing it, with no hints and no second prompt.
| Measure | Claude Code alone | Claude + one review | Two independent positions |
|---|---|---|---|
| Time | 3.7 h | 4.2 h | 1.5 h |
| Tokens processed | 389.0 M | 155.6 M | 34.3 M |
| Result | ≈13 bugs | ≈7 bugs | 0 broken mechanics |
| Own tests | 12 / 12 | verify.sh PASS | 57 / 57 |
What these numbers don’t say: I counted the bugs by hand while playing each game, the first run used a higher reasoning effort than the other two, and 97% of the tokens were cache reads. The prompt, file digests and method are published at bulava.app/benchmark.json.
Where it runs now
I’m also building a dark factory at Raccoon Gang on the same ideas. Bulava also drives this site. The structure, design system and pages you are reading went through Bulava’s review loop.

