Skip to content

Muster 0.14.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 03:29
· 109 commits to main since this release

Behaves differently

  • A zoom fills the whole tab, whatever machines its panes are on. Zooming a laptop pane in a
    tab beside devenv panes used to fill only the laptop's part. Unzooming brings every machine's
    part back at its width. One gap remains: move the keyboard to another machine's pane while
    zoomed, from the agent list or with muster pane focus, and that machine's part comes back, with
    the zoom covering only its own part again.
  • A right-click selects the word under the pointer and opens the pane's menu, as in Ghostty.
    Over a program that reports the mouse, a right-click still goes to the program, and a
    shift-right-click opens the menu.
  • muster pane send --confirm checks that the send changed the pane. Text already on screen
    no longer passes for text delivered: a send confirms once its text shows more times than
    before, or once the pane changes and still shows it. A send of only keys or Return must change
    the pane. A spinner changes the pane too, so this proves the pane changed, not that the send
    changed it.
  • A window that takes a command and does not answer within 2 seconds is passed over. Before
    sending, muster asks each window it could use what it is showing; a window that stays silent
    is sent nothing, and the machine's daemon answers instead, saying so on stderr. While a laptop
    sleeps, a command run from a devenv pane costs 2 seconds rather than hanging for two minutes.
    pane new and other verbs only a window can carry out give a window 10 seconds, then exit 3
    with nothing sent.
  • Agents are told that waiting for a message or a person is just ending the turn. The hook
    line Claude Code's and Codex's adapters give each session used to read as covering a message,
    so agents declared themselves waiting and a muster pane wait --until idle on them never
    ended. Only work the agent started, such as a build or a sub-agent, is a wait to report. An
    installed adapter keeps the old line until updated: for Claude Code, claude plugin marketplace update muster, then claude plugin update muster@muster; for Codex, codex plugin marketplace remove muster, then muster harness install codex.
  • An agent that names itself in a group keeps its place, across restarts. A pane added to a
    group by its pane id can now muster msg join --name X, and X takes over its membership in
    every group, here and on linked machines. The change is written to each group's log as the pane
    leaving and the name joining, so it survives a daemon restart, where it used to revert.

New

  • muster pane send --key KEY presses keys a dialog reads, so an agent can answer a dialog
    with something other than its highlighted option: --key down --key down --enter gets past
    Claude Code's folder-trust dialog. Codex's dialogs have not been tried yet. Keys are
    spelled as in [keymap]: --key esc, --key 2, --key ctrl+c. A send's text goes first,
    then each key, then Return. muster pane send --enter with
    no text presses Return alone.
  • Right-click a group in the agent list's Messages to leave or delete it. Leave Group takes it
    off your list; Delete Group asks first, then deletes the group and its log for every member.
  • The human on the laptop can delete, pause and resume a group kept on a devenv, from the
    agent list or the laptop's muster msg, while the devenv is attached. Changing its members or
    policy still runs on the devenv.
  • A muster msg verb starts this install's daemon when none is running, as the app does,
    and says so on stderr. A window opened later uses that daemon. A sandbox that refuses the
    daemon's socket, or a $MUSTER_DAEMON_SOCKET naming another daemon, starts nothing.
  • A member removed from a group can still read what was posted before its removal, once, so a
    dismissal reaches it. Its wake used to point at a msg read that refused it.
  • muster msg join says which groups the name is in. Taking over the name of a session that
    had gone lists the groups that came with it, and the command to leave one.

Fixed

  • Right-click opened no menu over a pane, in any window, so the pane menu and Split on
    Machine were unreachable from the mouse.
  • A window opened after its daemons connected said disconnected in its title, though both
    were connected.
  • muster msg post --to <pane> reaches a pane on another machine whose agent joined under a
    name.
    It was refused as nobody by that name, and so was group add by pane.
  • The daemon no longer takes Codex's Linux sandbox helper for a nested Codex, which refused a
    Codex agent's own report --waiting on a devenv. The helper's name comes from Codex's binary;
    the fix has not yet been run against a Codex on a devenv.
  • A pane whose $MUSTER_SOCKET is stale or unset reaches the window that holds it. With
    several windows answering, pane send, pane wait and pane close were refused, and a pane on
    a devenv with no $MUSTER_SOCKET found no window at all.
  • A sandbox refusing Muster's socket is reported as that, naming Codex's network_access
    setting, where it used to say the window had quit.
  • A refused msg join to a group kept on this machine leaves your name as it was. It used to
    rename you before the group's policy refused the join. A join to a group kept on another machine
    still renames you first.

Under the hood

  • The daemon protocol is 1.4, and agent detection engine 13: an agent's manifest can name the
    helper processes its harness runs under other names (helpers), which are not taken for nested
    agents. Muster hands the 0.13.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.

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

brew install amterp/tap/muster

sha256 f024502cc099bbbb74965138c2dd20f7fd664bc86560698b5ff0901aa7339b5d

Full Changelog: v0.13.0...v0.14.0