Skip to content

Foreman v1.5.7

Choose a tag to compare

@R3tter R3tter released this 04 Sep 10:06
62fd66a

Codex sessions come back with their history

Reload Foreman, reopen a Codex session, and its conversation was simply gone — an empty transcript above a session that was still very much alive. The cause was that Codex refuses to replay a thread another process is already holding, and the session's own process is exactly that, so the replay could only ever fail for the sessions you'd want it for. Foreman now reads the thread's own record off disk, the same way it has always done for Claude, so history comes back whether the session is running or not. It also comes back complete: the old path replayed messages and dropped every command and tool call between them, and those are now there too.

Context and cost figures you can believe

Several numbers were wrong in ways that pointed in opposite directions. A Codex session's context meter was fed the thread's running total rather than the conversation's current size, and counted the cached prefix twice on top of that, so a session with 31k in context could read as over its window; Codex states its real window per model, and the meter now uses it, which makes it the more exact of the two agents. On the Claude side the window was matched against a hardcoded list of the models that existed when it was written — so a Sonnet 5 session was told it had 200k when it has 1M, while every Opus before 4.6 was told the reverse; a pinned build with a date in its id, and Bedrock and Vertex model ids, are all read correctly now. Per-turn footers gained the token counts they always had room for, and stopped printing "$0.00" for Codex turns, which are reported in tokens and no money at all. And a healthy ChatGPT subscription no longer shows a red "No credits remaining" under every usage reading — that line described a pay-as-you-go balance a subscription simply doesn't have.

Choose which agent does the work, wherever you start it

Starting several sessions at once had no agent picker at all, so it quietly launched Claude however your defaults were set — on a Codex-only machine that meant a batch of sessions that couldn't run. The AI review on a session's Diff tab had the same problem for the same reason. Both now let you pick, and the review's picker is worth having on its own: reviewing a diff with the other agent is a genuinely useful second opinion. Switching agent also stopped leaving pieces of the old one behind — a model id or an effort level from Claude means nothing to Codex, and the launch surfaces disagreed with each other about which of the two to clear, so a Claude reasoning level could survive onto a Codex session that has no such setting. The one place that stays Claude-only is the whole-project Review, and it now says so, with the reason, instead of leaving you to discover it.

Install and remove the agent CLIs from inside Foreman

An install had two minutes to finish or Foreman gave up on it and said "check again shortly" — but a large download over a slow link routinely runs past that while working perfectly, and when it landed there was nothing left watching to notice, so the row sat on "Installing…" forever. Installs are now judged on whether they've gone silent rather than on a stopwatch, they show a progress bar and the installer's own latest line while they run, and they're confirmed against the machine at the end rather than trusted to report honestly. Each CLI also gained an Uninstall button, which removes the real binary the way it arrived — Homebrew, npm or the vendor's own installer — while deliberately leaving your sign-in and session history alone. It won't run while a session on that machine is mid-work, it asks first, and where removal would genuinely need administrator rights it hands you the exact command rather than taking them.

Project boxes that fit on the screen, and can be renamed

A project box grew one column per session with no ceiling, so seven unrelated sessions made a box about fifteen hundred pixels wide with the vertical space beside it left empty. Sessions now wrap into a grid, packed so a short one drops into the gap beside a tall one instead of starting a new row below everything, and lineage and fan-out groups stay intact as units. Drag the box's right edge to set how many fit per row; the width is remembered. Projects can also be renamed now — click the name on the box, or use the Name field in project settings. It's a label and only a label: nothing on disk is touched, so two checkouts can share a name and a long directory can have a short one.

Terminals stop leaving dev servers running

Closing a terminal only ever reached the shell, not what the shell was running — so a npm run dev you'd started survived, kept its port, and was reachable only from Activity Monitor. Worse, a terminal's identity lived only in the window, so reloading the app or closing the window orphaned every running command at once with no way back to any of them. All four exits — closing a terminal, reloading, closing the window, quitting — now take the running command with them, on this machine and on any laptop connected to it. Elsewhere: settings that take effect the moment you click them are drawn as switches rather than checkboxes, so they stop looking like something waiting for a Save button that was never there; the Privacy pane's nine-event list folds away while keeping the guarantee that makes it believable on screen; the "New sessions" pane is now "Session defaults" (the old name still finds it); each laptop card shows how many sessions it's carrying and which build it's on; and the session menu's Share and browser toggles no longer slam the menu shut on the first click, which is what had been hiding the new "Show it on the canvas" for an agent browser that was otherwise running invisibly.


macOS, Apple Silicon. Signed with a Developer ID certificate and notarized by Apple — opens normally with no Gatekeeper warning, and in-app silent auto-update is enabled.