TODO.md
cmux ssh creates remote workspace metadata and does not require --namecmuxd-remote serve --stdiossh -L from detected remote listening ports)cmuxd-remote RPC beyond hello/ping with proxy stream methods (proxy.open|close)WKWebsiteDataStore.proxyConfigurationssmallest screen wins)window.list/current/focus/create/close for multi-window socket control (v2) + v1 equivalents (list_windows, etc) + CLI support.vercel-labs/agent-browser, but backed by cmux's WKWebView (wait, click, type, eval, screenshot, etc.).docs/agent-browser-port-spec.md.cmux browser command surface that mirrors agent-browser semantics and targets explicit surface_id handles.surface:N, pane:N, workspace:N, window:N) and CLI --id-format refs|uuids|both output control.tests_v2/ per docs/agent-browser-port-spec.md and keep v1 + v2 suites green.
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, and tests_v2/test_browser_cli_agent_port.py../scripts/run-tests-v1.sh and ./scripts/run-tests-v2.sh passing (v2 visual D12 remains reported as a known non-blocking VM failure, matching v1 policy).cmux browser open|open-split|new URL parsing so routing flags (--workspace, --window) are removed before URL construction.identify --workspace/--surface caller parsing to honor ref handles (workspace:N, surface:N) instead of falling back to current/focused IDs.browser.open_split placement policy: reuse nearest right sibling pane first (nested-aware), only create a new split when caller has no right sibling.browser.snapshot to agent-browser-style output (snapshot tree text + refs) and make non-JSON CLI output print snapshot content instead of OK.hint, counts, sample, snapshot excerpt) with bounded retries for transient not_found races.browser fill with empty text (clear input) in CLI + v2 API flows.new-pane/new-surface CLI output prefer short surface:N refs by default.--snapshot-after / snapshot_after action feedback to include a fresh post-action browser snapshot.--json default ID output to refs-first (UUIDs only via --id-format uuids|both) and add regression coverage.skills/cmux/ topology skill.cmux CLI, menubar just triggers the CLI commandclose-workspace with no args — require explicit workspace short ID or UUID, with clear error message if missingPostHogAnalytics.apiKey in Sources/PostHogAnalytics.swift)browser.find.rolebrowser.find.textbrowser.find.labelbrowser.find.placeholderbrowser.find.altbrowser.find.titlebrowser.find.testidbrowser.find.firstbrowser.find.lastbrowser.find.nthbrowser.frame.selectbrowser.frame.mainbrowser.dialog.acceptbrowser.dialog.dismissbrowser.download.waitbrowser.cookies.get|set|clearbrowser.storage.get|set|clearbrowser.tab.new|list|switch|closebrowser.state.save|loadbrowser.console.list|clearbrowser.errors.listbrowser.highlightbrowser.addinitscriptbrowser.addscriptbrowser.addstylenot_supported for 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_touchcmux browser ... CLI grammar for the new families (including aliases).not_supported for hard platform gaps (instead of method_not_found).run-tests-v1.sh and run-tests-v2.sh on cmux-vm.