Beta · macOS

Stop babysitting AI.

Bulava 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.

Download for macOS

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

Source on GitHub

The Bulava window: products in the sidebar, one product's conversation in the centre with the agent's transcript, and the inspector on the right showing the folders in context and the verification evidence for this run.
One window. Products on the left, the agent's real transcript in the middle, and what you can act on — changes, evidence, reports — on the right.

How the work goes

Describe it once. Read it when it is finished.

Three moments, and none of them is a terminal you have to watch.

You write it the way you would say it

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 composer at the bottom of a product's conversation, with the engine selector set to Claude and Codex, and the task card above it.

It runs whether or not you are there

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.

A task card mid-run: the step it is on, the tools the agent has just used, and the usage meters for Claude and Codex in the sidebar.

And it has to prove it finished

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.

The inspector for a finished run: the folders in context, and the verifier's evidence — each acceptance criterion with the command that checked it and what it said.

What happens to a message

One message, and everything that happens to it.

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.

A comic panel: a large figure labelled CODEX stands over a smaller one labelled CLAUDE CODE, holding a belt, saying he will call a human if the work is not done properly; the smaller one answers “okay… okay…”.
The review gate, as I described it to friends before there was a diagram.

The product's own benchmark

How much better is this than Claude Code on its own?

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.

The task, word for word

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.

Three results

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.

What the measurements showed

Plain ClaudeClaude + reviewTwo positions
Time on the task3.7h4.2h1.5h
Tokens processed389.0M155.6M34.3M
Claude's effortreasoning levelxhighhighhigh
What came out≈13bugs, by eye≈7bugs, by eye0broken 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 →

Working now In this build

  • The night shiftQueue the work in the evening; read the result in the morning.
  • The review gateCodex does not accept work until it is done.
  • Say it out loudText, a file or your voice — and the transcription happens here, not in a cloud.
  • It asks about the irreversibleThe rest it works out itself, without me.

Not built yet Intention

  • A harness editorDescribe in words how you want to work, and get a pipeline that runs.
  • A mobile companionWatch and answer while you are away from the desk.
  • TelegramFor people who do not want another app.
  • Skills for the task at handStores have stars and reviews; there is no reason to hunt for these by hand.

Two ways in

Take the app. The terminal is there if you want it.

Recommended

Bulava for macOS

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.

For terminal people

night-shift

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

Your machine, your accounts, your folders.

macOS 15.6 or newer
Apple Silicon or Intel.
Claude Code
On your own account. Signing in happens once, in a terminal — nobody can do that part for you.
Codex CLI
Your own account as well. This is the one that reviews the work.
tmux, jq, git, python3
Bulava checks for them on first launch and offers to install them through Homebrew, with a button.

Where it honestly stands

It runs every day, and it built itself.

But you are among the first people to use it who are not me, and a beta is a beta.

Updates
The app checks for them itself and offers one with a button. If work is in flight, it asks first.
What can stop a run
An expired login, a usage window with nothing left, or a decision that is genuinely yours. All three come back as a question you can answer in the app.
The source
Open, and the site is built from the same repository.
Found a bug
Write to me. I fix these quickly.