Claude Code on its own
Boosters do not work, the board does not redraw when there is no move left, boosters do not disappear after use, pieces stick to each other.
its own 12 regression tests — 12/12 how this was measuredBulava runs Claude Code and Codex on your Mac, on the subscriptions you already pay for. You describe the work. Claude does it, Codex reviews it independently and sends it back until it is actually done — and you read the result instead of pressing continue.
Version 1.8 · 10.8 MB · Apple Silicon and Intel · signed and notarised by Apple
Or install the CLI
curl -fsSL https://bulava.app/install.sh | bash
Installs the engine as night-shift into your home directory. No application, no clone, no sudo. What it puts there
How the work goes
Three moments, and none of them is a terminal you have to watch.
No ticket form, no fields, no estimate. You type what you want in the composer of the product it belongs to. Both engines read the message and form a position on it separately, and what they disagree about is written down before a line of code is touched — so the work starts from a settled reading of the task rather than from the first plausible one.
While they are still reading, the card says which of them is reading and for how long.
The run lives in its own session and survives quitting the app, closing the lid, a dropped network and a usage limit — it waits for the reset and carries on by itself. What reaches you is only what the agents genuinely cannot move without, and it arrives as a question with buttons, never as an errand into a terminal.
No percentage, and no progress bar. A stage is marked when something on disk says so.
Codex reviews the result against the run it came from: the real diff, the tests that actually ran, the build that actually compiled, screenshots of the thing on screen. A finding sends the work back. Nothing reaches you as done on the strength of an agent saying so.
Approve it, merge it, or send it back with what is wrong — from the same card.
What happens to a message
This is the default arrangement — the one the benchmark below picked. It is drawn from the engine in the release on this page, not from whatever is on my machine today.
Stages marked optional are allowed to fail: when one engine's usage window is spent, the run says out loud which engineer is missing and goes on without them rather than stopping. What it never does is call one position a reconciliation.
The three arrangements this replaced — the console era, the plan-and-critique version, and the first one with two positions — each with what it got wrong.
The product's own benchmark
That is the question this measures, and the only honest way we found to answer it: give the same task to Claude Code alone and to Bulava, and compare what comes out. On 7–8 September the task was to rebuild a mobile game from a video of somebody playing it, and nothing else: no hints afterwards, no corrections, no second prompt. The same task ran three ways, each to a finished playable result you can open below.
In this folder you will find a video of a mobile game being played. Your task is to watch the video carefully, work out every mechanic, and make a similar game. The game has to have a luck factor. Somewhere it goes easier, somewhere harder. In the video the run happens to be very easy, because the luck factor is at its highest. Levels vary too — pay attention to that. You may choose any technical stack. It has to be a complete game, with levels, different kinds of boosters, animation and sound design. You may use imagen to generate assets, but no more than 30 calls for the whole session. The game has to run in a browser.
That is the whole of it: no hints afterwards, no corrections, no second prompt. The reference it mentions was a 22-second recording of a commercial match-3, which is not republished here.
The three runs were not handed byte-identical files, and claiming they were would be the easiest thing on this page to fake. The first run got this text and one more line, saying where to deploy the result. The two pipeline runs took the same task from the harness's case file, typed differently — other punctuation, and a closing line that asks for a result which runs locally from the folder. All three exact texts are published, each with its length and its sha256, in benchmark.json: the differences can be read rather than taken on trust.
Written in Ukrainian; this is a translation.
Each clip is a live session against the address beside it. Chrome opens the game and plays it with real mouse input; every move is the one the game itself would hint to an idle player. Nothing is sped up, and no frame here was drawn by us.
Boosters do not work, the board does not redraw when there is no move left, boosters do not disappear after use, pieces stick to each other.
its own 12 regression tests — 12/12 how this was measuredMore finished. But some levels cannot be completed under some conditions, and boosters stick to pieces and do not fire on a plain click.
its own verify.sh — PASS how this was measuredPlayed through to the end without a single broken mechanic. The sound switched itself off once.
its own 57 tests — 57/57 how this was measured| Plain Claude | Claude + review | Two positions | |
|---|---|---|---|
| Time on the task | 3.7h | 4.2h | 1.5h |
| Tokens processed | 389.0M | 155.6M | 34.3M |
| Claude's effortreasoning level | xhigh | high | high |
| What came out | ≈13bugs, by eye | ≈7bugs, by eye | 0broken mechanics |
The token counts are everything the models read, cache included: 97% of them were cache reads.
Measured 2026-09-17, from runs made 2026-09-07 — 2026-09-08. How this was measured →
Two ways in
The whole product: the window, the questions with buttons, the review with its evidence. It also ships the engine inside itself and installs the night-shift command for you, so taking the app does not cost you the terminal.
One thing only the app can do: macOS grants screen recording and accessibility to a signed application, not to a shell script. Runs that have to photograph a user interface to prove they worked need Bulava running.
The same engine, on its own, with no app and no checkout. It queues work, runs the pair, holds the review gate and waits out usage limits from the command line.
# into ~/.night-shift, and links the commands curl -fsSL https://bulava.app/install.sh | bash # it works when this answers night-shift status
It says what it will change before it changes it, and you can read it first. Same accounts and tools as the app. Removing it is one command, and it puts your Claude Code settings back:
night-shift uninstall.
What you need
Where it honestly stands
But you are among the first people to use it who are not me, and a beta is a beta.