Foreman v1.5.8
Foreman stops paying for a login shell on every command
Every command Foreman ran on your machine — resolving where claude lives, reading a git status, starting a session — opened a fresh interactive login shell first, because that is the only way to see the PATH your own terminal sees. On a fast Mac that costs about four tenths of a second; on a base M1 it is closer to three and a half, and starting one session runs five of them. Foreman now reads your login shell once and remembers what it contributed, so the commands themselves run through a shell that is roughly forty times cheaper. Nothing about which binary gets picked has changed: your profile is still read, just not from scratch every time. It is re-read whenever you come back to the window and whenever a CLI is installed, updated or removed, so a brew install you ran in your own terminal still counts without restarting the app. Removing a session got quicker too, by doing its cleanup at once rather than one round trip after another.
MCP servers and plugins, for both agents
The MCP pane only ever described Claude. A server you connected there did nothing for a Codex session, and the pane didn't say so — a green "Connected" read as a fact about the machine. Servers are now mirrored into both CLIs when you add one, each row names each agent and shows that agent's own verdict, and Connect signs in per CLI, because the two hold separate tokens and authorizing one genuinely leaves the other signed out. Plugins gained a Codex tab beside the Claude one, with its marketplaces, installs and — through the same config write Codex's own interface uses — its enable and disable switches, which its command line has no equivalent for. Plugins are listed per agent rather than merged: unlike a server, a plugin id names a marketplace the other CLI has never heard of. Adding a server on a machine that only has one of the two CLIs no longer reports a failure for the one that isn't there, a removal that doesn't land keeps its row instead of vanishing optimistically, and a schedule now warns about a sign-in only when it is the agent that schedule will actually run.
Codex sessions have skills
The skill picker was hidden for Codex sessions, on the reasoning that skills were a Claude idea. They aren't: Codex has its own full skills system, sharing the same on-disk shape and the same plugin:skill naming. The picker now offers them, read from Codex itself rather than guessed at from disk — which matters, because the enabled state lives in its config file and several versions of the same plugin can sit side by side with nothing on disk naming the live one. Skills from either agent are still never offered to the other; naming one at the wrong CLI just reaches the model as literal text.
The AI commit message runs on the agent you use
The "Generate commit message" button in both commit composers ran claude, hardcoded — so on a machine that only has Codex it failed with a command-not-found, from a control that looked perfectly available. It now runs the session's own agent, or on the Git page the one your session defaults name. The button's tooltip also says who is about to write it and on which model, rather than leaving you to find out from the result.
See which agent a session is running, and change it where you start work
A session card marked Codex and left Claude unmarked, which only answers the question if you already know the convention — and on the canvas the agent picker didn't exist at all, so anyone working there concluded the Settings pane was the only way to switch. Every session now names its agent, on the sidebar row, on the canvas node and in the session info popover, and the picker moved into the New session menu that the sidebar and the canvas share. The agent menus also mark a CLI that isn't installed on the machine you're pointing at — marked, not blocked, since an unreachable laptop hasn't established anything either way, and a laptop that simply didn't answer is no longer reported as having nothing installed. Session cards on the canvas grew wider to fit all of that without truncating the name after a few characters, and a project box now defaults to four of them per row instead of five, so the box keeps the footprint it had.
Fixes
The Codex model picker in Session defaults sat on "Checking for installed Codex models…" forever on any install where you hadn't yet clicked a machine in the fleet list — it was asking a laptop it had never been given. It now uses the same machine every other settings pane does, and says so plainly when there genuinely isn't one. Uninstalling or updating a CLI also used to leave its model catalog on offer for the rest of the app run, listing models from a binary that was no longer there; the pickers now ask again. And $FOREMAN_PORT is exported in every session rather than only in isolated ones, so the run command we suggest in project settings — npm run dev -- --port "$FOREMAN_PORT" — no longer expands to a bare --port and fails to start in an ordinary session. $PORT is still overridden only in isolated sessions, so a plain npm run dev keeps whatever default your dev server picks.
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.