Skip to content

Muster 0.13.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 18:34
· 115 commits to main since this release

Behaves differently

  • Every window is a window of one app. Each window used to be its own process. Now cmd+q
    quits them all, and the next launch reopens every window that was open, with the one you last
    used in front. On the first launch after updating, window processes left from an older Muster
    are asked to quit, and their windows open in the new app.
  • Closing a window keeps its tabs. Close it with its close button or the new cmd+shift+w,
    and Window > Reopen lists it by name to bring back. Launching Muster again while it runs opens a
    window in the running app rather than a second copy.
  • Naming a pane names its agent's session. Muster types /rename <name> at the agent's prompt
    once it is idle and its prompt is empty, which Claude Code and Codex take. In the other
    direction, a session renamed in its harness renames the pane. name_sessions = false in
    config.toml stops Muster typing into your agents.
  • An agent comes back after its daemon restarts. After a crash, a reboot or an upgrade that
    could not hand panes over, a pane whose agent had reported its session comes back running that
    session. It keeps the flags it was started with: claude --model opus comes back as claude --model opus --resume <id>. So far that is Claude Code, with its plugin's hooks up to date
    (see the next item). resume_agents = false brings such panes back as shells, as before. The
    window now says when a daemon restarted, which agents it resumed and which it could not, and the
    warning stays until each of those panes has an agent again or is closed.
  • Update the Claude Code plugin if you installed it before this release. Its hooks now report
    the session's id, which resuming after a restart needs. An installed plugin keeps its old hooks
    until updated: claude plugin marketplace update muster, then claude plugin update muster@muster. If you installed it from a checkout of this repository, run claude plugin marketplace remove muster, then muster harness install claude-code, to install it from the
    adapters bundled with the app instead.
  • The numbered chords' actions are numbered_chord_1 to numbered_chord_9. A [keymap]
    naming focus_pane_N, or the older focus_tab_N, is refused, and the whole file with it,
    saying the new name; rename them. The menu items are "Tab or Pane 1" to "Tab or Pane 9".
  • muster tab new no longer switches to the tab it makes, and the keyboard stays in the pane
    it was in, as the command's help always said. --focus switches to it.
  • The context ring's color moves with the fill, from grey when empty to red when full, where
    it used to turn orange at 80%. Orange is the blocked state's color, so a full ring no longer
    looks like an agent waiting on you.
  • The pointer is an I-beam over a pane's text and a hand over a link. The link under it shows
    its address at the pane's bottom left, so an OSC 8 hyperlink can be read before opening it.

New

  • Right-click menus on a pane, a tab's caption and an agent's row. A pane can be split any
    way, or onto any attached machine, zoomed, moved to a tab of its own, renamed, compacted or
    closed. A tab can be renamed, moved to another window, closed, or given a new tab beside it on
    any machine. Each menu copies the pane or tab id that muster takes.
  • Drag a pane by the handle at its top onto another pane's edge to put it on that side, half
    and half, as in Ghostty. muster pane move --onto PANE --down does the same.
  • Go back and forward through the panes the keyboard has been on, across tabs and machines,
    with cmd+opt+[ and cmd+opt+], the mouse's back and forward buttons, or muster focus --back
    and --forward.
  • Two new chords. cmd+shift+r renames a tab, and cmd+ctrl+= makes every pane in a tab the
    same size.
  • The Help menu searches every action, and Select Pane Asking is greyed out while no pane is
    asking.
  • Compact an agent's context with Compact Agent in the Pane menu and the right-click menus,
    the compact_pane action, or muster pane compact. compact_at = 80 in config.toml has
    Muster compact an agent once it reports its context 80% full; it is off unless set, and acts
    only on agents whose adapter reports context. Either way the compact command is typed once the
    agent is idle and its prompt is empty, never mid-turn. muster pane wait --context 80 ends when
    an agent gets that full.
  • muster pane read --turn reads what an agent printed in its last turn, and nothing from the
    turn before.
  • muster msg post --urgent reaches an agent while it works. The message is typed into the
    agent's prompt box, and Claude Code and Codex take what is typed there into the running turn
    after the current tool call. It still waits out a dialog, a draft or a blocked agent.
  • Codex and OpenCode can report their own state, through adapters in extras/codex and
    extras/opencode, as Claude Code's hooks do: working, blocked and idle, with context and model.
    muster harness install codex or opencode installs one. Messages now wake both at their
    prompts, adapter or not, and an idle Codex holding a draft is woken with codex queue, which
    leaves the draft alone.
  • muster harness install claude-code (or codex, opencode) installs a harness's adapter
    through the harness's own plugin command, from the adapters now bundled with the app;
    --dry-run prints the commands. A devenv gets the adapters when Muster installs its daemon
    there. muster window and the agent list say when a pane's agent has an adapter that is not
    reporting.
  • The agent list shows your message groups under a Messages caption, with how many messages
    are unread in each and an @ while any are addressed to you. Choosing a group opens its
    transcript, as muster msg open --group G does.
  • muster msg group delete deletes a group and its log.
  • human_name in config.toml sets the name messages show beside @human, which is your
    login name unless set.
  • muster window --layout draws every tab as boxes, including tabs not on screen and tabs in
    closed windows, each pane with its state and its size in cells. With --watch it redraws
    whenever the arrangement changes. muster window --watch lines now end with each pane's label,
    and muster window says each machine's swatch color.
  • Windows from the CLI: muster window close, muster window list --closed, and muster window reopen NAME. muster window new --daemon ID starts the new window on that machine, and
    --tab TAB moves that tab into it. A global --window NAME says which window any command is
    about.
  • A problem at the foot of the agent list can offer a button that fixes it, such as Reattach
    for a pane left blank.
  • A [[daemon]] block added to the config attaches when you save it, with no relaunch, and so
    does a corrected block whose machine never attached. A removed block, or one changed after its
    machine attached, waits for a relaunch, and the agent list says so.
  • An agent-detection override in ~/.muster/agent-detection/ applies when you save it, rather
    than at the next launch.
  • hide_pointer_while_typing = true hides the pointer while you type in a pane, as in
    Ghostty. It is off unless set.

Fixed

  • Claude Code's plan approval dialog reads as blocked. The agent could read idle, then done,
    while the dialog waited on you.
  • An agent that starts several seconds after its command is recognized. One that started
    about eight seconds in, just as Muster stopped looking, never was.
  • A message posted to Codex as it starts is no longer lost.
  • An idle agent whose screen never stops moving is now woken by messages, such as one with an
    animated statusline.
  • Claude Code's statusline reports context, model and cost on a devenv without jq, where it
    used to report nothing.
  • A claude -p run from inside an agent's pane can no longer report that pane idle mid-turn,
    nor clear its agent's context and model.
  • A row's number in muster pane read no longer changes as old rows are trimmed from the
    scrollback.
  • Starting the laptop's daemon can no longer hang Muster, which a rare race could make it do.
  • A daemon that can never start is reported once, rather than retried forever under a warning
    promising its panes were on their way.
  • A first window opens on the machine the config names first, rather than whichever local
    daemon answered first.
  • A pane that stays untypeable is reported once, rather than again, reopening the problem box
    you had put away, each time Muster reconnected it.

Under the hood

  • The daemon protocol is 1.3. Muster hands the 0.12.0 daemon's panes to the new one on the first
    launch after updating, on the laptop and on a devenv, so running agents keep running.
  • A pane in a tab nobody is looking at no longer draws, and the agent list redraws a changed row
    in place rather than rebuilding it, which matters most in a window holding many tabs.

Apple Silicon, macOS 14 or newer. Notarized and stapled.

brew install amterp/tap/muster

sha256 c458665a5722bc742d63806b359dcf8dfffad98788430fe12797bf39850bace1

Full Changelog: v0.12.0...v0.13.0