Changelog

Every version, and what it changed.

Updates come into the app on their own. This is the record of what each one brought, newest first, from the first public release on.

1.14

Latest
1.14

Automations can now work without git. A task that only reads a folder and uses a service — look over today's meetings and add what matters to your task list, say — runs in a folder of its own, with no repository, no checkpoint and no report unless you ask for one. The chats those automations run in live in each project's list now, folded under the project so they don't crowd it, and new chats sit at the top.

When a run finishes, what to do about it — merge its changes, mark it done, throw them away, read its report — is under the last answer where you'll see it, on the Mac and on the phone, not tucked into a side panel. A run you merged yourself, outside Bulava, no longer jams tomorrow's run behind it.

The readiness screen tells the truth: when something it needs isn't granted it says «ready, with limits» rather than «ready», and checks again when you come back from System Settings. Projects show their icon on the phone. And an update now carries the newest engine with it reliably — a fix for engine changes that had been shipping switched off.

1.13

1.13

The week now has widgets: on the Mac's desktop, on the iPhone's Home Screen and Lock Screen, and on Android. Eight of them, each answering one question: how long the agents worked without you, how runs ended, what the week would have cost at API prices, when in the week they worked, how much code changed, how much of the Claude and Codex limits is left with a mark where an even pace would be, what is working right now, and the whole week at a glance. The limits with that mark are also at the bottom of the sidebar and on the phone. Once a week Bulava sends its author a summary of how it was used: ranges rather than numbers, no projects, paths or text, and Settings → The week and its widgets shows exactly what it holds and switches it off.

A run can now put several decisions in front of you at once, beside its report, with options, its own advice and room for a comment, on the Mac and on the phone. Opened again, they show what you already sent. On the phone the page and its questions are a tap apart, and its buttons, switches and confirmations are the phone's own, with a feel to every tap. Bulava has its own browser, where you sign in once to the sites runs need; Google refuses sign-in to a browser an agent drives, so when a run reaches a sign-in page Bulava hands it to you in a plain window. A run can also show you a page or a file on your phone over your home Wi-Fi, and the Mac tells you when something is waiting for you while Bulava is in the background.

Every chat now knows what Bulava is and which of its tools it has, and makes an automation when you ask it to, chats Codex answers included. Fixed: an answer given just as a run stopped waiting for it now still reaches the run; an empty .git left behind by a start no longer locks the folder as broken; and a merge into main that git cannot do alone goes to the copy's chat with what it needs to finish it.

1.12

1.12

When something breaks and a message cannot go, Bulava now tries to fix it itself: Codex looks for the cause in that project's folder, fixes it there, and the message goes again. It goes again only when it surely never arrived, so nothing runs twice. Every outcome sends an anonymous error report: Bulava's own error code and the error with names, paths and keys taken out, nothing about your projects or chats. Both can be switched off in Settings → Diagnostics.

Errors are cards in the top-right corner now: the whole text, details you can copy, and the button that fixes it. Commit as me gets its title from Claude, which also points at anything that should stay out, and a file that looks like a key stops the commit before any model sees it.

Fixed: installing the engine could be refused for days because of processes that test runs had left behind; Bulava now counts only its own, and stops its own leftovers. A review stopped by a blocker no longer shows as still working, and the chat says why it stopped. A question Claude Code asks on its own screen while a chat starts now comes to the chat and the phone instead of the start being rolled back. When a newer Codex is out, the readiness screen offers to update it: that is how new models such as GPT-6.1 Sol reach the menu.

1.11

1.11

Pipelines. What a message goes through before and after the worker gets it is now something you can see and change: a library of pipelines, a canvas to edit one on, and a chat that proposes changes you look over before applying. A pipeline can be shared through GitHub and brought in from there; an imported one is checked first and arrives switched off. Each chat and each automation can pick its own.

While a run works, a strip under the chat and a section at the top of the right panel show its steps as the engine records them. A research run's report now gets a review of its own: accepted, sent back with notes, or handed to you.

Fixed: in a long chat the whole thread could go blank while Bulava was working, until you scrolled by hand. Automations work in a folder of their own that is kept between runs, ask for what they need while you set them up, and no longer wait at night for a permission nobody is there to give. The permission prompts macOS shows for Bulava, and a few dozen messages that existed only in English or only in Ukrainian, now come in all three languages.

1.10

1.10

Stop no longer leaves the next messages in the queue unanswered, and Stop and edit puts the text back in the field. A long chat scrolls smoothly, dictation no longer freezes the window, and an answer selects and copies as a whole, tables included. Model and depth are chosen for each chat separately, and you can dictate from the phone: the Mac does the recognising.

1.9

1.9.1

If the usual port for the phone is taken by another app on the Mac, Bulava now picks a free one and the phone connects. Before, the link quietly never opened and the code on screen led nowhere.

1.9

Bulava is on your phone: the iPhone app as a TestFlight beta, Android as a file from bulava.app/mobile. Tap the phone icon in the toolbar and scan the code; questions, reports and chats come to the phone, you answer from there, and the Mac keeps working. Also in this version: a session that stopped in the middle of work (say, while waiting for Codex) starts itself again, a report's PDF keeps every picture even if nobody scrolled through the report, and Bulava answers in the language you write to it in.

1.8

1.8.8

A new Bulava opened over an old one now replaces it. Before, the new copy quietly quit and the old one stayed on screen without the new buttons. If an old copy meets a question it has no buttons for, it says in plain words that it needs updating instead of offering terminal commands. And when several messages were held back by uncommitted changes, they all go, one after another, once you answer.

1.8.7

If a chat started on uncommitted changes you chose to leave as they were, the check still counts only the worker's work after the session restarts, not your edits. Files git ignored at the start of the work are no longer deleted, even if the worker changed .gitignore.

1.8.6

The night shift no longer commits your uncommitted changes without asking. If the folder holds unsaved work, Bulava lists the files and asks what to do: start without touching them (a snapshot is kept to restore from), commit them in your name with your message, or sort it out yourself, in which case the message goes as soon as the folder is clean. Projects with their own MCP servers (.mcp.json) no longer hang at start with advice to reinstall hooks: Bulava names the servers and asks whether to turn them on. And a new user's first chat no longer stalls on Claude Code's theme picker, which nobody can see in the background.

1.8.5

Chats can be archived. Bulava asks first; archived chats sit in an Archive group under each product in the sidebar and open read-only, with Unarchive where the message field used to be. ⌘K opens them read-only too, instead of quietly bringing them back. This one is @effeto's work. Also: Bulava notices a Claude that hung while a message waits in the queue, tests that were already failing before your change no longer count against it, and readiness check results survive a restart.

1.8.4

A fix to recovering from a hung Claude. When restarts did not help, the same undelivered message in the queue kept earning another "last" attempt, and if a restart could not succeed at all, Bulava restarted Claude over and over. Now each of your messages gives exactly one extra attempt. After that the work waits for you, and the chat says that Claude hung and the restart did not help.

1.8.3

Bulava keeps one main window, always. Closing it and then clicking Open Bulava several times could bring the closed window back next to a new one. Now the same window comes back, from the menu bar and from the Dock. The window size and sidebar width you set stay as they were after the update.

1.8.2

Fixes to 1.8.1. If Claude hung and restarts did not help, Bulava no longer clears that work away together with its task after four idle hours: it waits for your next message, and that message starts Claude again in the same conversation. Restart attempts are no longer used up while another message is being delivered. Open Bulava opens exactly one window, even when the window was closed and you clicked twice.

1.8.1

New models in the menus: Opus 5.5 for Claude (a fresh Claude Code keeps its model list in another file and format, which Bulava did not see), GPT-6 Sol and GPT-6 Luna for Codex. With two copies of the Codex CLI on the Mac, Bulava runs the newer one and takes the model list from it. Open Bulava in the menu bar shows the window that is already there instead of adding another, each of which ran its own copy of the app's work. And Claude no longer loses a task when it hangs halfway: after ten minutes without any movement Bulava restarts it in the same conversation and asks it to carry on, and the chat says so while it happens.

1.8

Two features in this release come from Demian Yushyn. Find works in an open conversation: ⌘F brings up a bar like a browser's and says how many times the phrase appears, ⌘G and ⇧⌘G step between them, and the phrase is highlighted where it stands rather than the whole card. The old ⌘K is now called Go to…, because it takes you somewhere else. The second is Dev Learning Mode: turn it on in Settings and a finished result gets an "Explain what happened" button. The explanation changes nothing and never starts by itself; tell it what you do for a living and it is written in terms you already know. Also, Codex no longer drops out over Ukrainian text: the prompt was cut by bytes, sometimes through the middle of a letter, and the CLI refused it before the session even began.

1.7

1.7.13

Connecting a folder and allowing it to be changed are now two separate decisions. Bulava no longer creates git on its own: a folder of videos or documents does not need it, so Bulava stops and asks, with a button in the chat rather than a command in a terminal. A folder that holds repositories connects as those repositories. Bare repositories and broken .git folders are never mistaken for ordinary files, and the app and the engine now share one scanner, so they cannot show different things.

1.7.8–1.7.12

Five quick releases in one day, each closing a gap in the same fix. A folder holding separate repositories no longer becomes one project: Bulava connects each repository itself, the way you would add them by hand. Before, it put git over the whole folder; on a workspace of fifteen checkouts that meant half a gigabyte of extra objects, secrets in the index and an endless "Connecting to Night Shift…". A folder that could not be looked through to the end gets no git either. Work done in a neighbouring connected repository is no longer lost, even when that repository has no commits yet. And a start that refuses now says why. Thanks to Demian Yushyn for the bug report.

1.7.7

Claude can ask Codex again from any allowed folder, and when Codex stays silent the app says why: a timeout, a crash or a lost sign-in instead of "code 1". A declared result no longer pretends to have succeeded when nothing was written down.

1.7.6

A model is no longer cut off mid-thought. Each position used to run against a fixed clock, and the one that needed another second came back empty, because the answer is printed at the end. Now Bulava reads both models' events as they work and stops a call only when it has actually gone quiet, so at maximum effort a model thinks as long as it needs to. When a call is stopped, the chat says why.

1.7.5

When one of the two models has no position, Bulava now says why: it ran out of time, stopped with an error, returned nothing, or returned half of one, and half a position is not a position. Before, the chat said only that Claude's position was missing, which read like a fault in the app.

1.7.4

Screen recording worked on no Mac except the one Bulava is written on: the recorder had a line only a newer Python than the one in macOS understands, so it never even started. Fixed, and every release is now checked with the system's own Python rather than whichever one comes first on the developer's machine.

1.7.3

Limits are now used to the end. Bulava no longer holds back a safety margin, neither the last per cent of the five-hour window nor three per cent of the week, so only a real refusal from the provider stops the work. Checking the result is no longer skipped to save quota: a checked night is worth more than the per cent saved. And the download page stopped promising a memory the engine no longer has.

1.7.2

Codex is no longer treated as unavailable while it still has quota: the weekly window has its own threshold, and 91% of the week with a free session is a working Codex, not five days of silence. When a limit really is used up, Bulava says which day it comes back, not only the hour. And a new conversation in a project no longer runs into old work nobody will return to: a run that is doing nothing and waiting for nothing is cleared away, while one holding a question or a pause is left alone.

1.7.1

If the engine has to be replaced while some work is holding it, the readiness screen no longer leads to a dead end: it names that work before you press anything and offers to stop it and install straight away. Before, the button simply refused, and stopping the work from another screen left a terminal session open, so the wall stayed even after you did everything it asked.

1.7

Work no longer stops because of Bulava's own status line: it read the "(reset 01:40)" it draws itself as a spent limit, and the queue stalled. While both models read a message, you can see which one is still reading and for how long. What Codex read lands in the chat instead of a file nobody opens, and the "Codex answered" cards show the answer, not CLI help or an argument error.

1.6

1.6.4

If the app is closed in the middle of an install, the copying goes on by itself for a while; the next launch now sees that and does not start a second copy over the first. A lock left behind by 1.6.1 or 1.6.2 no longer blocks installing for good.

1.6.3

Two installs at once can no longer both believe they are alone: the lock is held by the system and frees itself when the process holding it is gone. And if the old version file cannot be removed, copying does not start at all; better not to start than to leave half.

1.6.2

The first install on a Mac that never had Bulava answered "another install is already running" and never happened, by itself or from the button. Fixed. If you had edited /night or other commands by hand, the installer now keeps a copy beside them before putting its own in place, and an install cut off while copying no longer leaves behind a version number that is not there.

1.6.1

After an update Bulava installs its own engine: no more red wall asking you to press a button. If work is running at that moment, the engine update waits for it to finish and says what it is waiting for. An install cut off halfway no longer pretends to have finished; the next launch tries again.

1.6

A follow-up in the same conversation no longer costs as much as a new task: "commit and release" is read in seconds, not minutes. When one of the two models runs out of its window, work goes on, and Bulava says plainly which one is missing. A limit that has already reset is noticed straight away, so messages no longer sit untouched for an hour after the Mac wakes up. The chat shows what is really happening: a queue, a wait for a limit, or actual reading. And the download page finally names the right macOS.

1.5

1.5

Bulava no longer keeps a memory of its own. The Memory screen is gone, and the app no longer mixes rules gathered from your past decisions into tasks: long-lived rules are read where they live, in CLAUDE.md, AGENTS.md and the project's own docs. What was recorded before is left on disk untouched.

1.4

1.4

The app is called Bulava everywhere: in the disk image, the menus and the process list. The readiness screen has a button for every wall: install Codex or gh, sign in to Claude. When Claude asks to be signed in again, the chat says so in its own words instead of suggesting a command for a terminal you do not have. A run in a new folder no longer reports that it changed nothing. Shift-Return starts a new line.

1.3

1.3

Codex's limits are back in the left panel. They are asked of Codex directly now, instead of being read out of its logs, which stopped working once its session files grew. Working with Claude alone or Codex alone is not offered for the moment: every message goes to Claude, with Codex reviewing it.

1.2

1.2.2

The panel with the model and depth now opens from under the words rather than from the edge of the button, the depth label is no longer cut off, and the slider's knob keeps clear of both ends of its track.

1.2.1

The model is chosen from the system's own pop-up menu now, just the names, and the depth slider's knob no longer sticks to the end of its track.

1.2

The composer now says what the next message runs on: which engine, which model, how deep. Changing it is one panel with a slider instead of a menu of menus. New Codex models show up on their own, with the depths only they accept. Dictation asks for the microphone properly and understands your own language. A new Skills screen shows what a project should be using and what it actually used. Codex's own words appear in the thread, a message can be taken back and edited, and Claude answers when Codex has no week left. Workers can drive other apps through Bulava, on one permission given once.

1.1

1.1

Bulava updates itself. It checks a signed feed once a day, and if a run is in progress it puts a quiet line in the sidebar instead of interrupting you. The engine now ships inside the app and installs itself on first launch, together with the night-shift commands for the terminal.

1.0

1.0

The first public release. Claude and Codex work as a pair: Claude does the work, Codex checks it and sends it back for another pass. The night shift, a memory of your decisions, and updates in one click.