Skip to content

Releases: R3tter/foreman-releases

Foreman v1.4.1

Choose a tag to compare

@R3tter R3tter released this 17 Aug 20:14
62fd66a

How much of your plan you've actually used

Claude sessions reported which quota window they were in and when it reset, but never how full it was — so the rate-limit panel showed a dash where the number should be, and you found out you were near a limit by hitting one. Both CLIs are now asked outright, on session start and after every turn, and both answer without running a turn or spending anything. The Usage dropdown and the Analytics strip show a real percentage per window with a bar behind it, green through amber to red, next to the plan they should be read against — twenty percent of a five-hour window is a different amount of work on Pro than on Max. Weekly Opus and Sonnet budgets appear as their own rows on the plans that have them. A window that genuinely hasn't been measured yet still says so rather than showing a confident zero.

Launch pauses that match the account

Foreman pauses new launches while an account is refused, and that pause was reading the wrong signal in two directions. A quota window that had already rolled over could leave its old "blocked" verdict attached to the fresh one, holding the launch and review gates for up to five hours on an account sitting at three percent. In the other direction, a usage reading with nothing to say about status could quietly clear a real block, dropping the badge and letting launches pile onto an account that was refusing them. Both are now settled by which reading a verdict actually came from, so the gate opens when the account opens and not before.

Branch sizes measured against the right branch

The Git graph's branch drawer counted a branch's commits as "everything not on the trunk", which is only correct for branches cut straight off it. A two-commit branch sitting on a thirty-seven-commit release line read as thirty-nine commits of its own, and highlighting it lit up the whole release line underneath. Each branch is now measured against the branch it actually sits on — the deepest one it descends from — falling back to the trunk when there isn't one. Its own remote counterpart is never mistaken for its base, so a branch that hasn't been pushed in a while doesn't suddenly appear to own a single commit.

Talking to one session, not to the project

Every session registered itself under its display name, which defaults to the folder it runs in — so three sessions in one project all answered to the same address, and a message meant for one of them reached whichever the CLI picked. Each session now registers under a name of its own, so an @ mention resolves to the session you chose. What you see is unchanged: the picker and your transcript still show the readable name, with the addressing part kept out of sight.

What the context breakdown was really telling you

Clicking a session's context meter opened a panel headed "Live breakdown" that wasn't live — it comes from a separate one-shot probe that can't see your conversation, so it reported almost no messages and nearly all the window free, sitting directly beneath a meter reading two hundred and sixty thousand tokens. It's now labelled as what it is: the baseline a fresh session in that folder starts with, before anything is said. The two rows that only ever described the probe are gone, and the rest — system prompt, tools, memory files — are the ones worth seeing.


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.

Foreman v1.4.0

Choose a tag to compare

@R3tter R3tter released this 13 Aug 06:50
62fd66a

Sessions can talk to each other

Two agents working on the same problem had no way to reach each other — you were the wire, copying an answer out of one transcript and pasting it into another. Type @ in the composer now and you get every other Claude session running on that machine, Foreman's own and the ones you started in a terminal; pick one and your message is delivered to it as a real prompt, with the @Label staying readable in your own transcript. What arrives on the other side is drawn as its own card, not as a user bubble — it says who sent it, from which project, and under which permission mode, because a session that suddenly starts working deserves an on-screen answer to "who asked it to?". The canvas draws the traffic as an edge between the two sessions, and when a reply landed in the recipient's own transcript instead of coming back, the edge offers to ask it to send the answer along. Every session can decide what it accepts: the default matches Claude Code's own rule — a message auto-delivers only between sessions running the same permission posture — and you can widen or close that per session from its gear menu, or for everything you create next in Session defaults.

What each session says it's doing

A session card told you "Running" or "Idle" and nothing else, which for a fleet of them is barely more than a light being on. Claude Code can summarise its own state — what it's working on, and what it's waiting for when it's blocked — but only while something is watching for it, so there's now a switch in Appearance that turns that on. Cards and canvas nodes then carry a line in the session's own words, and a blocked one says what it needs from you in amber, which is the thing Foreman genuinely cannot work out for itself: the CLI reports a turn that ended in a question as finished, because it is. It's off by default and says why in the setting itself — the signal is per machine rather than per session, so switching it on covers every Claude session on that laptop and costs each of them a small extra model call at the end of every turn, on your plan.

Attach a file, or paste something enormous

Pasting a long log or a stack trace into the composer buried the conversation in it, and then quietly re-sent the whole wall as context on every turn afterwards. A paste past about twenty thousand characters now becomes an attached file instead, which the agent opens when it needs it and pays for once. Files can be dragged into the composer or picked outright, with image thumbnails; for a session on your own machine nothing is copied at all — the file is referenced where it already lies, so there's no size ceiling and no wait. Sending to another laptop does have to move the bytes, so it's bounded, with a lower ceiling for relay-connected machines where an oversized transfer used to be able to drop the connection rather than just fail. Anything big enough that the agent will only read part of it says so on hover.

Choosing a model without guessing

The model menu was a flat list mixing family aliases with every exact build the CLI knows about, which grew ugly as fast as the model lineup did. It's now one row per family — Fable, Opus, Sonnet, Haiku — where picking the row means "the latest build of it", and expanding it pins a specific version, newest first, with the row holding your current choice already open. "Default" is now labelled "CLI default", since in a menu of model names it read like a model rather than "don't pass one at all". Alongside that, a reasoning-effort level that the newly-picked model doesn't actually offer is cleared instead of being sent anyway, and clicking inside a submenu no longer dismisses the menu you opened it from.

Deleting a session deletes it

Removing a session offered a checkbox to "also delete the on-disk transcript", off by default, which read as the careful choice and wasn't: checkpoints and attachments went either way, and the transcript it spared became unreachable the moment the record pointing at it was gone. There's one road now, and the dialog spells out everything that goes — the conversation, including Claude Code's own history, so claude --resume won't find it in a terminal either, plus every rewind point and any files you attached. Usage and Insights survive, because cost history doesn't depend on the session still existing.

Smaller things

When Foreman's servers rejected this machine's sign-in, the app kept using a stale cached plan and left you looking at features you no longer had; it now clears the cache and signs out properly, so the state on screen is the state you're actually in. The Load Context tabs had the handoff and memory icons the wrong way round.


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.

Foreman v1.3.4

Choose a tag to compare

@R3tter R3tter released this 11 Aug 20:25
62fd66a

⌘K now knows what Foreman can do

The command palette listed your laptops, your projects, your sessions — and three actions, which meant the one surface built to answer "what can this app do" answered with a list of your own machine names instead. It's now the app's action index: fan-out, bulk sessions, issue intake, schedules, load context, checkpoints, handoff, every view, the theme and layout toggles, adding or sharing a laptop, and every settings pane, each with a line saying what it actually is rather than just what it's called. Actions come first and, on an empty query, in full — opening the palette and typing nothing is a question, and the list is the answer. Search matches across the title, the description and a set of synonyms, so "parallel", "spend" or "rewind" find the right thing without knowing its name. An action you can't run right now stays in the list, dimmed, saying why — hiding fan-out because no project happens to be selected is how you never learn fan-out exists.

Every skill picker offers the same skills

The / picker in the chat composer and the one in the chain, fan-out and bulk dialogs disagreed, and the dialogs were the ones missing things: the CLI's built-in skills — /code-review, /run, /dataviz and the rest — ship inside the binary rather than on disk, so a picker that read your folders could never see them. Foreman now asks the CLI itself for that list, once per machine, in a mode that reads no credentials and starts no turn, so all four scopes — yours, the project's, plugins' and the built-ins — appear everywhere a prompt is composed. The refresh button re-asks rather than reusing the cached answer, which makes it do the one thing you press it after: updating the CLI. Codex sessions now correctly offer nothing, because they have no such mechanism and a / command sent to Codex just arrives as literal text.

The gap between hitting send and the first word

Send a message and the badge said "Running" while the transcript sat completely still — for a cold start or a slow first token that silence ran for seconds, long enough to wonder whether the message had gone anywhere. There's now a pulsing "Claude is thinking…" line the moment a turn goes live, drawn from the same session status the badge reads, so it covers every way a turn starts: the composer, a queued message draining, a chained follow-up, a dispatched review comment, your phone. It gives way as soon as real output arrives, and stays out of the way of a permission prompt or a background task, which say more than it could.

Merge a branch that a session is already using

Dragging one branch onto another in the Git page failed outright when the dragged branch was checked out in a worktree — which is to say, whenever an agent was actually working on it, since git refuses to check the same branch out twice. Foreman now runs the merge or rebase inside that worktree instead, and asks first: the prompt names the directory, names the session sitting in it if one is live, and says plainly that the files there are about to be rewritten and nobody is going to tell the agent. Cancelling closes the menu cleanly rather than leaving it stuck open with an error.

Smaller things

The "Show me" buttons in this modal and the palette can now open the bulk-session and issue-intake dialogs, not just fan-out — the other two were listed and did nothing. Deleting a session from the canvas inspector is a bin icon rather than an ✕ that read like "close this panel", and it says Delete, because that's what it does.


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.

Foreman v1.3.3

Choose a tag to compare

@R3tter R3tter released this 09 Aug 19:21
62fd66a

See how you work, not just what you spent

The Analytics page could tell you what a month of agent work cost and nothing about how it went. It now has a second lens: Insights, thirty days of your working patterns measured against the thirty before them — how often you stop a turn mid-flight, which tools you keep denying permission to, how many fan-out lanes you actually keep, how long it takes a session to get to its first turn, and what a thousand lines of agent-written code costs you. Every card names its own sample size and says so out loud when there are too few readings to mean anything, because a rate over eleven turns is arithmetic, not a pattern. Above the numbers there's an optional analysis pass that reads them and writes up what stands out — it never runs on its own, it tells you what it will cost before you press it, and every finding it makes has to cite the sessions, metrics and tools it was drawn from. A finding whose citations don't resolve against the real data is thrown away before you see it rather than filtered into something that looks solid, which is the whole reason to trust the ones that survive. When a run turns up something you haven't read, the header says so; when it hasn't, there's no badge at all.

Send a review to the agent that can act on it

Review comments could only be dispatched to a session working the same checkout as the diff — anything else was listed and greyed out, which meant the agent that wrote the code you're reviewing was frequently the one session you couldn't send it to. The picker now offers every session on the same machine, grouped by how close it sits to the diff: this checkout first, then the project's other worktrees, then other projects by name, then sessions started outside a project. Sending across a checkout rewrites every path in the batch absolute, off the repository root rather than the session's folder — the difference matters in a monorepo, where the wrong one names a file that doesn't exist and the receiving agent reports back confidently about nothing. The batch leads with a line saying where those files live and to ask for access rather than guess, and the menu flags a session whose permission mode can't act on a review at all.

Projects on the canvas, laid out in a grid

A laptop's projects ran off in one unbounded row, so a machine with a dozen of them meant scrolling sideways to find anything. Projects now wrap into a grid you set to one, two or three columns, and the choice sticks. Anything you've dragged out of place — a terminal, a panel, a plan card — now remembers its position relative to the box it belongs to rather than to the canvas, so reshaping the layout carries your arrangement with it instead of stranding it. A project with a large memory now gets a scrollable box of a sane height instead of a two-thousand-pixel column that pushed everything else off screen. Sharing this laptop and adding another are both on the canvas now: Share sits at the foot of the machine's own rail and appears only there, and a dashed slot below the last machine adds the next one. Positions saved by the previous version are discarded once on upgrade — the old ones described a layout that no longer exists.

Help decide what gets built next, if you want to

Foreman has never sent anything about how it's used, which is an easy promise to keep and a hard one to build against. There's now a Settings › Privacy pane with a switch that is off until you turn it on, and underneath it the actual list: eight events, each one spelled out in full, and an explicit list of what never leaves your machine — no paths, project names, branches, prompts, output, file contents or cost figures. There's no free-text field in the format, so nothing else can travel by accident. You'll be asked once, after your first session finishes, and the invitation takes you to that pane rather than flipping the switch for you: agreeing to telemetry should mean having read what it is. Say no, or ignore it, and you won't be asked again.

The composer, at any width

The session composer was laid out for a full-width column and met the canvas drawer badly: dragged down to its narrow end, the chips spilled over each other and the send button got squeezed off the row. It now sheds controls by its own width rather than the window's, widest first — the parallel button, then the per-session chips you can set from Settings anyway — and keeps the three things a message actually needs: skill, dictate, send. Alongside it, a handful of Insights fixes worth naming: switching a session's model no longer reads as a completed session, a cancelled first turn no longer poisons the time-to-first-turn figure, and a "new findings" badge you've clicked now actually clears.


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.

Foreman v1.3.2

Choose a tag to compare

@R3tter R3tter released this 09 Aug 10:19
62fd66a

See how you work, not just what you spent

The Analytics page could tell you what a month of agent work cost and nothing about how it went. It now has a second lens: Insights, thirty days of your working patterns measured against the thirty before them — how often you stop a turn mid-flight, which tools you keep denying permission to, how many fan-out lanes you actually keep, how long it takes a session to get to its first turn, and what a thousand lines of agent-written code costs you. Every card names its own sample size and says so out loud when there are too few readings to mean anything, because a rate over eleven turns is arithmetic, not a pattern. Above the numbers there's an optional analysis pass that reads them and writes up what stands out — it never runs on its own, it tells you what it will cost before you press it, and every finding it makes has to cite the sessions, metrics and tools it was drawn from. A finding whose citations don't resolve against the real data is thrown away before you see it rather than filtered into something that looks solid, which is the whole reason to trust the ones that survive. When a run turns up something you haven't read, the header says so; when it hasn't, there's no badge at all.

Send a review to the agent that can act on it

Review comments could only be dispatched to a session working the same checkout as the diff — anything else was listed and greyed out, which meant the agent that wrote the code you're reviewing was frequently the one session you couldn't send it to. The picker now offers every session on the same machine, grouped by how close it sits to the diff: this checkout first, then the project's other worktrees, then other projects by name, then sessions started outside a project. Sending across a checkout rewrites every path in the batch absolute, off the repository root rather than the session's folder — the difference matters in a monorepo, where the wrong one names a file that doesn't exist and the receiving agent reports back confidently about nothing. The batch leads with a line saying where those files live and to ask for access rather than guess, and the menu flags a session whose permission mode can't act on a review at all.

Projects on the canvas, laid out in a grid

A laptop's projects ran off in one unbounded row, so a machine with a dozen of them meant scrolling sideways to find anything. Projects now wrap into a grid you set to one, two or three columns, and the choice sticks. Anything you've dragged out of place — a terminal, a panel, a plan card — now remembers its position relative to the box it belongs to rather than to the canvas, so reshaping the layout carries your arrangement with it instead of stranding it. A project with a large memory now gets a scrollable box of a sane height instead of a two-thousand-pixel column that pushed everything else off screen. Sharing this laptop and adding another are both on the canvas now: Share sits at the foot of the machine's own rail and appears only there, and a dashed slot below the last machine adds the next one. Positions saved by the previous version are discarded once on upgrade — the old ones described a layout that no longer exists.

Help decide what gets built next, if you want to

Foreman has never sent anything about how it's used, which is an easy promise to keep and a hard one to build against. There's now a Settings › Privacy pane with a switch that is off until you turn it on, and underneath it the actual list: eight events, each one spelled out in full, and an explicit list of what never leaves your machine — no paths, project names, branches, prompts, output, file contents or cost figures. There's no free-text field in the format, so nothing else can travel by accident. You'll be asked once, after your first session finishes, and the invitation takes you to that pane rather than flipping the switch for you: agreeing to telemetry should mean having read what it is. Say no, or ignore it, and you won't be asked again.

The composer, at any width

The session composer was laid out for a full-width column and met the canvas drawer badly: dragged down to its narrow end, the chips spilled over each other and the send button got squeezed off the row. It now sheds controls by its own width rather than the window's, widest first — the parallel button, then the per-session chips you can set from Settings anyway — and keeps the three things a message actually needs: skill, dictate, send. Alongside it, a handful of Insights fixes worth naming: switching a session's model no longer reads as a completed session, a cancelled first turn no longer poisons the time-to-first-turn figure, and a "new findings" badge you've clicked now actually clears.


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.

Foreman v1.3.1

Choose a tag to compare

@R3tter R3tter released this 08 Aug 09:37
62fd66a

Ask a side question without derailing the session

Half the things you want to ask an agent mid-turn aren't work — what does this file do, why did it pick that approach, what's in this branch — and asking them in the session spends the same context, the same money and the same permissions as the work itself, then leaves the answer buried in the transcript. btw opens a side chat beside the session that forks its context: it can read everything the session knows, but it cannot write a file, run a command that changes anything, or add a turn to the session's own history. It closes when you're done and leaves nothing behind, and it runs on its own model and reasoning effort — set per agent in Session defaults, since a re-read of context you already have is the cheap kind of question and shouldn't cost what the work costs.

Stash, and switch branches anyway

Trying to switch branches with a dirty working tree used to end at the reason it failed, leaving you to go and deal with it somewhere else. Foreman now offers to stash and retry in the same dialog: it sets your changes aside, completes the switch, and tells you the stash is waiting. Stashes are a first-class part of the Git page now — you can stash the working tree with a name of your own, and see, apply, pop and drop stashes from the branch drawer. Popping is never automatic, because the whole point of the stash was that you're on a different branch now.

Finding a commit in a long history

The Git page's one filter box was doing two different jobs — narrowing the graph and looking for a specific commit — and doing neither well. Searching is now its own thing: ⌘F moves you to matches one at a time, with a live count, ↵ and ⇧↵ to step forward and back, and Escape to come back to where you were. Pressing ⌘F again selects the query instead of appending to it, and the count no longer claims your cursor is on the first match before you've stepped to it. Branch labels also got a correctness fix that mattered more than it looks: a commit carrying several branch names (what git switch -c leaves behind) used to take git's first one, which could rename a whole trunk's worth of history after the branch off it — the graph now prefers the branch you pinned, then the repo's trunk, and shows the other candidates rather than confidently picking one.

Keyboard, throughout

Menus were mouse-only, which is a strange thing to discover halfway through a keyboard-driven workflow. Every dropdown in the app now takes arrow keys, Home/End, type-to-jump and ↵ to choose, filter lists take the same navigation, and dialogs and panels close in a predictable order rather than all at once. Committing is ⌘↵ from the message box, with ⇧⌘↵ to commit and push, and ⌘K remains the command palette.

Reviews that two runs agree on

The point of a review is to run it again after a round of fixes and see the numbers move — which only works if the numbers were drawn the same way both times. The dead-code lens was the worst offender and got the most work: it now names whether it ran with the repo's own analyzer config or none at all, verifies every candidate rather than a sample of them, checks packages by what they install as well as by name so a spawned CLI doesn't read as dead, lists the files behind a count instead of asserting it, and makes its chart add up to its own metrics. The dependency and architecture lenses had the same class of drift and were pinned the same way — every manifest in a workspace, not just the root; tests counted as dependents, since a module the suite leans on is genuinely depended on. Picking a scope is easier too: the folder picker has a filter box, and long metric values and chart labels no longer overflow their tiles.

Smaller fixes

The skill picker grew a refresh button and stays reachable when a project has no skills yet, so a skill you just wrote is one click away instead of requiring a session restart. Repos with more than one remote — a fork with both origin and upstream — no longer pick their trunk at random. And the read-only guarantee behind btw was tightened to cover commands that write through a flag, and commands hidden inside a substitution.


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.

Foreman v1.3.0

Choose a tag to compare

@R3tter R3tter released this 07 Aug 09:50
62fd66a

Project review

Asking an agent "what's wrong with this codebase?" gives you one pass, one opinion, and a wall of prose you have to re-read to find the part that mattered. Foreman now has a Review tab that runs the question properly: pick a repo and up to five lenses — dependency health, test presence, architecture, security and dead code — and each one runs as its own agent lane, in parallel, against the real repo. What comes back is a report rather than a transcript: a headline verdict per lens, a handful of metrics, a chart, and findings ranked by severity that you can filter and open one at a time. The lenses were written to work on any language, not just the TypeScript they were built against, so a Go or Python repo gets the same five questions asked of it.

Numbers that say where they came from

The failure mode of an AI audit isn't being wrong, it's being confidently approximate — a "47 untested modules" that was eyeballed off a file listing reads exactly like one that was counted. Every metric in a review is now stamped as measured or estimated, and a measured number has to carry the command that produced it; anything claiming to be measured without that evidence gets demoted to an estimate before you ever see it. The same rule applies to the lens that leans on an external analyzer: the report tells you which one ran, so you know whether two reports are even comparable. Per-lens cost and duration estimates in the picker come from your own last run of that lens rather than a number shipped in the build, which stops being true the moment you change model.

From a finding to a fix

A finding you agree with is still work you have to describe to somebody. Each one now expands to its evidence and suggested fix with two buttons under it: Copy as prompt, and Start session to fix, which opens a session in the reviewed project with the finding already written as its first turn. The report header keeps Re-run, so re-checking after a round of fixes is one click with the same lenses and the same scope.

Reviews you can send to somebody else

A report that only exists inside the app is hard to act on with anyone who isn't sitting at it. Export writes the whole review — verdicts, metrics, charts, every finding and its evidence — as a single self-contained HTML file with no scripts and nothing to fetch, so it opens in any browser, attaches to a mail or a ticket, and reads the same in a year. Past runs are kept and listed newest-first, each labelled with the project it ran against, and a run interrupted by quitting the app is now reconciled on the next start instead of sitting on screen pretending to still be running.

Reviews that don't crowd out your sessions

Five agent lanes starting at once is a real burst of processes, and the honest risk was that starting a review would make the rest of the app feel stuck. Lanes are throttled by their own limit, deliberately set below the app's session-launch cap, so a review can never be wider than the burst Foreman would allow anyway and can never queue behind your own session starts. Each lens gets only the read-only commands it needs — counting and searching, never writing — and the dead-code lens, the one lens that fetches and runs an ecosystem analyzer, says so on its card before you pick it. Project review is part of Pro, alongside fan-out.


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.

Foreman v1.2.8

Choose a tag to compare

@R3tter R3tter released this 06 Aug 20:39
62fd66a

A sign-in status you can believe

Foreman reported you as signed in whenever the agent CLI said so — but claude auth status and codex login status only read credentials off disk and never call the API, so a login whose token had quietly expired kept printing a cheerful email and plan while every session it started failed to authenticate. That green tick was the last thing you'd suspect. Foreman now proves the credential instead of trusting it, by running one very small turn against it, and the badge says which it means: verified, stored-but-not-yet-checked, expired, or unreachable when the machine didn't answer at all. A sign-in that has actually broken now raises a banner at startup rather than waiting for you to discover it mid-task, and a machine that was simply never set up gets the ordinary setup prompt instead of an alarm. There's also a Sign out button, which is often the only way to unstick a wedged login. This only ever runs on a subscription: verifying an API key would spend your money to light up a status badge, so those are left alone and judged on the evidence your real turns give for free.

Picking up MCP and plugin changes without restarting the app

A session connects to its MCP servers and loads its plugins once, when its process starts, so authorizing a connector in your browser changed nothing for anything already running. The restart control that fixed this only appeared if the settings pane happened to catch the server flipping to connected between two of its polls — and it only polls while it's open, so the common case, authorizing in a browser and then coming back to Foreman, was exactly the one it couldn't see. The control is now simply available whenever there's something to restart, in both the MCP and Plugins panes, and each session's own menu has a Restart process that resumes the same conversation in a fresh process. Bulk restart still applies to everything on the machine, as asked — it now tells you first when some of those sessions are mid-turn and would lose what's in flight.

Enter sends

Every message in the chat composer needed ⌘↵, which is the wrong shortcut for the box you type in most. Enter now sends, and Shift+Enter or Ctrl+Enter breaks the line; ⌘↵ keeps working, so nothing you already have in your fingers stops. The same goes for review comments, element comments and the deny-reason box. Commit-message boxes deliberately kept the old rule — a commit message is multi-line by convention, and Enter there would commit a half-typed subject line — as did the empty-composer "just reconnect me" keypress, which spawns a process and shouldn't fire from a stray Enter.

Chain a follow-up with no context

Chaining a follow-up session always seeded it with a handoff digest of everything the source session did, which is what you want when the second task builds on the first — and dead weight when it doesn't. Chaining "now run the test suite" onto a long refactor paid for a digest turn and then started the follow-up with a page of context it had no use for. The chain dialog now has a checkbox to turn the handoff off: the link becomes a pure trigger, and the follow-up starts clean in the same working directory with your task as its first turn. Links set up this way are marked on the canvas, since starting cold changes what you should expect from them.


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.

Foreman v1.2.7

Choose a tag to compare

@R3tter R3tter released this 05 Aug 21:26
62fd66a

A commit graph you can actually follow

Any history with more than two or three branches in flight drew as a knot: every edge curved diagonally across all the rows between a commit and its parent, cutting through the lanes and commit dots in between, and lines were coloured by column — so a branch changed colour when it shifted columns, and an unrelated branch that later inherited the column got the same colour. Branches are now coloured by the line itself, so a branch keeps one colour from tip to base and two lines drawn at the same height never share one. Edges run straight down their own lane and take a single turn at one end, the familiar |/ where a branch rejoins its base, and commits are read in topological order so a branch's commits stay together instead of being scattered by timestamp among every other branch's. Hovering still traces a whole branch and dims the rest — it now lights up the same line your cursor is on.

More than one terminal per project on the canvas

A project on the canvas could open one shell, which is the wrong number the moment you want a dev server running while you type in another. You can now open as many as you need, each its own node with its own shell, placed side by side and numbered in the title — and a number stays with its terminal, so closing one doesn't renumber the rest out from under you.

The canvas remembers how you arranged it

Everything you positioned on the orchestration canvas — popped-out session panels, plan cards, terminals — went back to its computed default spot on the next launch, which got expensive once a project could hold several terminals arranged deliberately. Positions and sizes now persist, and the terminals you left open come back with the canvas. Their scrollback does not: shells are killed on quit, so a restored terminal opens a fresh one at the same directory rather than pretending to be the session you left.

Saved commands for a project's terminals

The terminal's script picker only knew what was in package.json, so the commands you actually retype all day — a tunnel, a deploy, a container shell — lived in your own notes. A project now carries its own list of named commands, editable in Project settings and offered from the same Run… picker in every terminal for that project, docked or on the canvas. There's a button to save whatever the shell is currently running without retyping it. Saved commands are placed at the prompt rather than run on click: a npm run script is knowably safe and an arbitrary saved command isn't, and one keypress is cheap insurance. They live on the project, so they follow it to whichever machine it's on — keep credentials out of them.

Review comments survive, and can go to another session

Staged review comments existed only for as long as the tab was open and only for a session that was currently running: reloading the app dropped the batch, and reviewing work an agent had already finished meant resuming it before you could type a word. Comments now persist, so you can stage them across a restart, and staging no longer needs a live session — the send resumes a dormant one for you. When several sessions share the project you can pick which one receives the batch; sessions working a different checkout are shown but not selectable, with the reason next to them, since the diff's line numbers wouldn't mean anything in their tree. If a comment's diff has moved underneath it, it's re-anchored to the code it was written against rather than silently re-pointed at whatever now sits at that line. And a send that fails now keeps the batch and says what went wrong, instead of clearing a review you paid for.

Fixes

Every way to start a session — new, isolated, bulk, fan out, from an issue — is now one labelled split button in both the sidebar and the canvas project box, rather than a row of unlabelled glyphs that meant slightly different things in each place. Dialogs opened from a canvas terminal's toolbar rendered inside the node, with a backdrop the size of the node and the shell painting over the card; they open properly now. A side drawer no longer paints over the header's own menus. An inline review comment on a file with one very long line no longer stretches past the edge of the panel it's in.


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.

Foreman v1.2.6

Choose a tag to compare

@R3tter R3tter released this 04 Aug 19:34
62fd66a

Read back through a running session

Scrolling up in a session that was still working didn't hold. Every token the agent produced snapped you back to the bottom, which made reading what it had done ten minutes ago effectively impossible — and it fought the transcript search, dragging you off a match the moment new output arrived. The transcript now follows the tail only while you're already parked at it. Scroll up and it lets you stay; a Jump to latest button appears in the corner, with a dot when output has arrived since you left. Sending a message always takes you back down, because at that point you're waiting for the answer.

Shared sessions in the browser show the work, not just the words

Opening a shared session from a browser gave you the conversation and almost nothing else: tool calls appeared as a bare name, and everything they read, ran or changed was dropped. The transcript there now matches what you see in the app — each tool call collapses to a line naming what it touched, and opens to show the command output, the file it read, or the edit it made as a diff. Every turn carries the same summary of what it changed on disk, expandable file by file. There's also a Changes tab: the session's working tree, where you can stage, unstage, discard, commit, push and switch branch from your phone. Discards and branch switches ask first — the one thing a mis-tap on a phone shouldn't be able to do quietly.

Terminals stay where they belong on the canvas

A project terminal opened on the canvas is drawn as an overlay, and it behaved like one: it painted straight over the app header, over the session drawer, and over the canvas's own toolbars, and panning a terminal past the edge of the canvas left it spilling across the rest of the window instead of being clipped like every other node. It now sits under all of that chrome and is clipped to the canvas edge. Its text scales with the canvas too, so zooming out shrinks the shell along with the nodes around it rather than leaving fixed-size text in a shrinking box — and an expanded session on the canvas now reads at canvas size instead of looking like a window cut out of the drawer.

Your laptop stops flickering offline while it sleeps

A sleeping laptop showed up on the dashboard as a device blinking between online and offline for as long as the sleep lasted. The relay connection couldn't tell a real system sleep from a flaky network, so it kept retrying throughout — and a machine woken briefly by Power Nap gave those retries just enough time to check in before suspending again, each one registering a genuine, momentary "online". Foreman now listens for the actual sleep and wake events: the connection closes cleanly on sleep, the device reads offline for the whole nap, and it reconnects the instant the lid opens rather than waiting out a backoff.

Fixes

Spend recorded slightly ahead of this machine's clock — which happens when a laptop you drive remotely is a few minutes fast — no longer landed in a future day bucket where the daily figure couldn't see it but the total could, making "today" and "this week" fail to add up to the total across a month boundary. A packaged Dev build now keeps its own laptops, sessions and sign-in instead of sharing them with an installed release, so the two can run side by side.


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.