-
cmux sshcreates remote workspace metadata and does not require--name - Remote daemon bootstrap/upload/start path with
cmuxd-remote serve --stdio - Reconnect/disconnect controls (CLI/API/context menu) + improved error surfacing
- Retry count/time surfaced in remote daemon/probe error details
- Remove automatic remote service port mirroring (
ssh -Lfrom detected remote listening ports) - Add transport-scoped proxy broker (SOCKS5 + HTTP CONNECT) for remote traffic
- Extend
cmuxd-remoteRPC beyondhello/pingwith proxy stream methods (proxy.open|close) - Auto-wire WKWebView in remote workspaces to proxy via
WKWebsiteDataStore.proxyConfigurations - Add browser proxy e2e tests (remote egress IP, websocket, reconnect continuity)
- Implement PTY resize coordinator with tmux semantics (
smallest screen wins) - Add resize tests for multi-attachment sessions (attach/detach/reconnect transitions)
- Add window handles +
window.list/current/focus/create/closefor multi-window socket control (v2) + v1 equivalents (list_windows, etc) + CLI support. - Add surface move/reorder commands (move between panes, reorder within pane, move across workspaces/windows).
- Add browser automation API inspired by
vercel-labs/agent-browser, but backed by cmux's WKWebView (wait, click, type, eval, screenshot, etc.). - Finalize browser parity contract and command mapping decisions in
docs/agent-browser-port-spec.md. - Add
cmux browsercommand surface that mirrors agent-browser semantics and targets explicitsurface_idhandles. - Add short handle refs (
surface:N,pane:N,workspace:N,window:N) and CLI--id-format refs|uuids|bothoutput control. - Add v1->v2 compatibility shim for migrated browser/topology commands while v1 remains supported.
- Port browser automation coverage to
tests_v2/perdocs/agent-browser-port-spec.mdand keep v1 + v2 suites green.- Added
tests_v2/test_browser_api_comprehensive.py,tests_v2/test_browser_api_p0.py,tests_v2/test_browser_api_extended_families.py,tests_v2/test_browser_api_unsupported_matrix.py, andtests_v2/test_browser_cli_agent_port.py. - Full VM runs:
./scripts/run-tests-v1.shand./scripts/run-tests-v2.shpassing (v2 visual D12 remains reported as a known non-blocking VM failure, matching v1 policy).
- Added
- Fix
cmux browser open|open-split|newURL parsing so routing flags (--workspace,--window) are removed before URL construction. - Fix
identify --workspace/--surfacecaller parsing to honor ref handles (workspace:N,surface:N) instead of falling back to current/focused IDs. - Update
browser.open_splitplacement policy: reuse nearest right sibling pane first (nested-aware), only create a new split when caller has no right sibling. - Upgrade
browser.snapshotto agent-browser-style output (snapshottree text +refs) and make non-JSON CLI output print snapshot content instead ofOK. - Add richer selector failure diagnostics (
hint, counts, sample, snapshot excerpt) with bounded retries for transientnot_foundraces. - Add regression coverage for browser placement policy + snapshot/ref output + diagnostics in v2 tests.
- Allow
browser fillwith empty text (clear input) in CLI + v2 API flows. - Make legacy
new-pane/new-surfaceCLI output prefer shortsurface:Nrefs by default. - Add optional
--snapshot-after/snapshot_afteraction feedback to include a fresh post-action browser snapshot. - Switch CLI
--jsondefault ID output to refs-first (UUIDs only via--id-format uuids|both) and add regression coverage. - Expand end-user skill docs with deep-linkable cmux-browser references/templates plus a new core
skills/cmux/topology skill.
- Add cmd+shift+p palette with all commands
- Warm pool of Claude Code instances mapped to a keyboard shortcut
- Add "Install Claude Code integration" menu item in menubar
- Opens a new terminal
- Shows user the diff to their config file (claude.json, opencode config, codex config, etc.)
- Prompts user to type 'y' to confirm
- Implement as part of
cmuxCLI, menubar just triggers the CLI command
- Codex integration
- OpenCode integration
- Per-WKWebView proxy observability/inspection once remote proxy path is shipped (URL, method, headers, body, status, timing)
- P0 Terminal title updates are suppressed when workspace is not focused (e.g. Claude Code loading indicator doesn't update in sidebar until you switch to that tab)
- Sidebar tab reorder can get stuck in dragging state (dimmed tab + blue drop indicator line visible) after drag ends
- Drag-and-drop files/images into terminal shows URL instead of file path (Ghostty supports dropping files as paths)
- After opening a browser tab, up/down arrow keys (and possibly other keyboard shortcuts) stop working in the terminal
- Notification marked unread doesn't get pushed to the top of the list
- Browser cmd+shift+H ring flashes only once (should flash twice like other shortcuts)
- P0 Remove all index-based APIs in favor of short ID refs (surface:N, pane:N, workspace:N, window:N)
- P0 CLI commands should be workspace-relative using CMUX_WORKSPACE_ID env var (not focused workspace) so agents in background workspaces don't affect the user's active workspace. Affected: send, send-key, send-panel, send-key-panel, new-split, new-pane, new-surface, close-surface, list-panes, list-pane-surfaces, list-panels, focus-pane, focus-panel, surface-health
- P0 Remove
close-workspacewith no args — require explicit workspace short ID or UUID, with clear error message if missing
- Show loading indicator in terminal while it's loading
- Add question mark icon to learn shortcuts
- Notification popover: each button item should show outline outside when focused/hovered
- Notification popover: add right-click context menu to mark as read/unread
- Right-click tab should allow renaming that workspace
- Cmd+click should open links in cmux (browser panel) instead of external browser
- "Waiting for input" notification should include custom terminal title if set
- Close button for current/active tab should always be visible (not just on hover)
- Add browser icon to the left of the plus button in the tab bar
- Add PostHog tracking (set
PostHogAnalytics.apiKeyinSources/PostHogAnalytics.swift)
- Implement locator family:
browser.find.rolebrowser.find.textbrowser.find.labelbrowser.find.placeholderbrowser.find.altbrowser.find.titlebrowser.find.testidbrowser.find.firstbrowser.find.lastbrowser.find.nth
- Implement frame/dialog/download:
browser.frame.selectbrowser.frame.mainbrowser.dialog.acceptbrowser.dialog.dismissbrowser.download.wait
- Implement session/context state APIs:
browser.cookies.get|set|clearbrowser.storage.get|set|clearbrowser.tab.new|list|switch|closebrowser.state.save|load
- Implement developer/diagnostic helpers:
browser.console.list|clearbrowser.errors.listbrowser.highlightbrowser.addinitscriptbrowser.addscriptbrowser.addstyle
- Add explicit
not_supportedfor WebKit/CDP-gap commands:browser.viewport.setbrowser.geolocation.setbrowser.offline.setbrowser.trace.start|stopbrowser.network.route|unroute|requestsbrowser.screencast.start|stopbrowser.input_mouse|input_keyboard|input_touch
- Extend
cmux browser ...CLI grammar for the new families (including aliases). - Port/add v2 tests for all newly implemented families.
- Update unsupported matrix tests to assert
not_supportedfor hard platform gaps (instead ofmethod_not_found). - Re-run full
run-tests-v1.shandrun-tests-v2.shoncmux-vm.