Skip to main content
CHANGELOG

What shipped

Released versions only, generated at build time from the product Keep a Changelog file. Unreleased work is not listed here: if it is not in a version heading, it has not shipped.

Latest released v3.23.4 · · 61 releases

Currently downloadable v3.25.2-preview.1 · preview channel

Those are two different questions. This page lists versions that have been released, from the product changelog. The download page serves whatever the live preview channel points at, which moves ahead of the last released version with every build. Download the current build from /download. Channel and exact version always come from the live release manifest.

Releases 16–20 of 61

Page 4 of 13

v3.12.2

Headline: you can now @-mention an agent running in your own workspace from a channel — the mention reaches that exact pane, while an agent still never pings its own pane in a loop.

Added

  • Same-workspace @-mentions now deliver. Before, a channel message could only mention agents in other workspaces — your own workspace's agent panes were hidden from the @-picker and any mention of them was dropped. Now the composer offers same-workspace agent panes as mention targets, and a mention routes to that specific pane as an inbox task. A human mentioning their own workspace's agent, and an agent mentioning a sibling pane, both work.

Changed

  • Channel messages carry the sender's pane identity (senderPtyId). This lets the receiving side tell a legitimate sibling mention (pane 1 → pane 2 in the same workspace) apart from a true self-loop (an agent mentioning its own pane). Self-loops are dropped; a workspace-level mention with no specific pane on a self-authored post stays conservative and is not routed. Older messages without the field degrade safely.

v3.12.1

Headline: the built-in F7 shortcut that launches Claude now works out of the box on a Mac, instead of doing nothing until you dug into macOS keyboard settings.

Fixed

  • The default "launch Claude" shortcut works on macOS without touching system settings. macOS treats F1–F12 as media keys by default, so a bare F7 press never reached wmux — the shipped F7 keybinding looked dead on a Mac. macOS now uses Ctrl+F7 (a modifier makes macOS deliver it as a function key), while Windows and Linux keep the single-tap F7. Existing macOS users are migrated automatically on next launch: an untouched default F7 is upgraded to Ctrl+F7, but a keybinding you deliberately changed (different command) is left exactly as-is.

Added

  • Custom-keybinding settings warn when a bare F-key won't fire on macOS. If you bind a lone F-key (like F7) on a Mac, the settings panel now explains that macOS is intercepting it as a media key and how to reach it (hold Fn, or turn on "Use F1, F2, etc. keys as standard function keys"). The hint only appears for bare F-keys — a modifier combo like Ctrl+F7 is left alone because it already works.

v3.12.0

Sessions survive a reboot

Headline: panes that were mid-conversation before an OS reboot now come back exactly as they were — same session id, same scrollback, same permission mode — instead of resetting to a blank terminal. Alongside that, an opt-in unattended supervisor lets a trusted pane restart itself after a crash and, with explicit consent, resume without stalling at a permission prompt.

Added

  • Unattended supervisor: opt-in crash restart + consent-gated permission restore. A layout leaf can declare unattended: true in wmux.json, which restarts it on failure (a clean exit is treated as "task finished," not a crash to relaunch) and, only with a separate explicit consent given in the trust dialog, restores the permission mode it was running under before a restart. Fleet View surfaces each pane's supervision state — armed with a restart count, or a guard-tripped marker when the runaway guard stopped it.
  • Daemon liveness moves to a three-state probe. Replaces the old "probe failed → assume dead" pattern (the same anti-pattern behind earlier false-death and duplicate-daemon reports) with an explicit unknown/alive/dead classification, shared between the daemon and the launcher, so a slow OS probe can no longer make one daemon reclaim another live daemon's lock.

Fixed

  • Terminal sessions survive an OS reboot instead of resetting. Windows kills the daemon's PTY children before the daemon itself during a shutdown/reboot, and the daemon couldn't tell that apart from a user typing exit — it tombstoned the session as dead, and recovery skips dead sessions, purging exactly the ones that were in use. The daemon now recognizes the Windows shutdown-teardown exit code and suspends those sessions instead, so recovery replays them under the same id after reboot.
  • session.json no longer loses the latest layout on shutdown. The Windows session-end handler used to reload the on-disk snapshot and save it straight back, which never captured the renderer's newest layout. Session data is now persisted the instant a pane's terminal id changes (not just every 5 seconds), so a reboot can no longer land in the gap between a new pane and the next periodic save.
  • A recovered session's scrollback replay no longer dismisses its own resume prompt. Replaying a dead agent's buffered output could re-arm mouse tracking in the terminal, so simply moving the mouse toward the "resume" prompt looked like the user typing and silently dismissed it. Leaked input-reporting modes are now reset after a replay.
  • Claude Code's permission mode is read reliably from long transcripts. The extractor only recognized permission-mode stamps on user turns, which a large attachment record could push out of the read window; it now also recognizes the dedicated permission-mode record Claude Code writes near the end of every prompt.

v3.11.1

Fixed

  • Copy from full-screen TUI apps reaches the clipboard (OSC 52) (#314). Full-screen TUI apps (Claude Code, vim, tmux, neovim) take over the mouse, so a drag no longer lands an xterm-native selection. On copy they emit an OSC 52 escape asking the terminal to set the clipboard, but xterm disables OSC 52 by default and wmux never registered a handler. The app showed "copied" while the system clipboard never changed, which looked like a corporate clipboard lockdown. wmux now honors OSC 52 for writes (clipboard reads, clears, oversized, and malformed payloads are refused) and routes the text through the existing clipboard path.

v3.11.0

Channels become a two-way agent surface

Headline: v3.10.0 gave channels a place a human can read; v3.11.0 closes the loop on the agent side. An agent can now read a channel instead of only posting into it, discover and join public rooms, invite another workspace into a private one, and get pulled in by an @-mention that arrives as an inbox task and a one-line nudge in its terminal. The conversation view grows up alongside: markdown rendering, a scrollback window that pages older history in from the daemon, and in-channel search. Plus more accurate MCP agent identity and a batch of macOS keyboard and appearance fixes.

Added

  • Channels become a two-way agent surface — read, discover, invite (#305). Until now an agent could only post into a channel; it never saw what was already there. channel_read lets an agent pull a room's recent history (capped so it doesn't blow the context window), channel_list surfaces the public rooms it can discover and join, and channel_invite lets any member add another workspace — the only way into a private channel. The conversation view gains markdown rendering (with HTML injection stripped), a "load earlier" scrollback that pages older messages in from the daemon, and in-channel message search. Panes also self-name as w<ws>-<pane>(<agent>) so a roster of agents reads clearly, with a GUI rename.

  • @-mentions pull an agent into a channel (#304, #305). Typing @ in the composer autocompletes the live agents in the channel; a mention of your workspace highlights the message, bumps a dock badge, and routes into the a2a task inbox. When the mentioned pane goes idle, a one-line nudge is pasted into its terminal pointing at a2a_task_query — so calling an agent in a channel actually reaches it instead of sitting unread.

  • Archive a channel from the header (#302). A two-click arm-then-commit archive button in the conversation header, gated to the channel's creator (the daemon enforces the same authz).

  • MCP resolves agent identity by walking the process tree (#301). The bundled MCP server identifies which workspace and pane a call came from by walking the caller's process tree to its owning PTY, so a2a_whoami and channel sender attribution work even when environment hints are stripped.

Changed

  • Agent toolbar uses line icons instead of emoji (#309). The per-agent toolbar swaps its emoji glyphs for consistent line icons that match the rest of the UI.

  • Channel roster shows added members and restores archive tooltips (#303). An invited workspace now appears in the roster immediately, and the archive control's tooltips are back.

Fixed

  • Ctrl+C copies the terminal selection even when the channel composer holds focus (#311). With a channel open the composer could swallow the copy shortcut; the terminal selection now copies regardless of which surface holds focus.

  • macOS: Cmd drives clipboard, multiview, and shortcuts (#307). Clipboard and multiview shortcuts now use Cmd on macOS instead of Ctrl, matching platform convention.

  • macOS: native button appearance stripped (#308). Buttons no longer pick up the default macOS control styling that clashed with the app theme.

  • MCP recovers a pane's ptyId from WMUX_PTY_ID when the identity walk misses (#299). A weak environment fallback restores pane identity when the process-tree walk can't resolve it, so same-workspace A2A still addresses the right pane.