Foreman v1.2.5
Stop cancels the turn, not the session
Stop used to kill the CLI process outright: the agent went away mid-thought, the session dropped to resumable, and picking it back up meant paying to replay the transcript before you could say the one thing you'd stopped it to say. It now interrupts the turn the way the agent's own escape key does. The session stays live, keeps its context, and is ready for your next message immediately — so stopping an agent that's heading the wrong way costs you nothing but the turn it was in. If an interrupt doesn't land, the button turns into Force stop and the old process kill is one press away, rather than being the only thing on offer.
Codex sessions show what they cost
Codex reports tokens where Claude reports dollars, so a Codex session used to sit at a token count while everything around it talked in money — and it was left out of the cost totals entirely. Turns on an API key are now priced from OpenAI's published rates, so Codex sessions carry a real figure and count toward your daily and monthly spend alongside Claude. Where a price would be a guess it still isn't shown: a session on a ChatGPT subscription isn't metered per token, and a model that isn't in the rate table falls back to tokens rather than inventing a number from a stale one.
Cost figures that agree with each other
The cost readouts disagreed depending on where you looked. "This week" and "This month" meant different spans in the app and on the web dashboard, so the same account could show a month smaller than the week inside it; the web dashboard's "This month" reached back into the previous one, disagreeing with the calendar printed directly beneath it. Both now mean the calendar week and the calendar month everywhere. The badge also stopped quietly switching scope — it opened with your fleet-wide total and fell back to this machine's alone after the first turn. Cost per project is now kept as its own running total, so deleting a session no longer takes its spend out of the project breakdown while leaving it in the totals, and the per-model split is accumulated from the same turns as the total instead of being re-derived from whichever sessions still exist. If you drive one laptop from another, that machine's spend is no longer counted twice in your account-wide figures.
Skills where you start work, not just where you continue it
The skill picker only existed in the chat composer, because the list of skills came from a session that was already running. Bulk runs, fan-out and chained follow-ups had no way to reach one — you typed the /name from memory and hoped. All three now offer the picker while you're composing the prompt, reading skills straight from disk. That list is also fuller than the old one: your global skills in ~/.claude were being dropped whenever a project happened to have no .claude/commands directory, which is most of them, and skills from enabled plugins are now included and named the way you invoke them. Bulk task boxes can be expanded too, so a long prompt is readable before you launch twenty of them.
Pro features are labelled instead of silently failing
Features that depend on our servers — driving sessions from your phone, running agents across the laptops you own, and cost across all your machines — now say so where you meet them, with a lock that explains what the feature does rather than only that it's locked. Fan-out and AI review are marked the same way. Nothing you already set up gets taken away mid-flight: a shared session can always be un-shared and a shared laptop always un-shared, whatever your plan says, so a lapsed subscription can't strand you in a state you can't undo.
Fixes
A Codex thread that hits an internal fault now says so in the transcript and settles the session, instead of leaving it stuck at "running" with no reply ever coming. The first-run screen leads with getting one agent going on this machine rather than with connecting a fleet.
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.