一条提示词,最多八个隔离的 worktree。
把一个任务扇出到最多八个 git worktree,每个都有自己的 agent 和分支。并排比较结果,逐个代码块(hunk)收割你想要的改动——要么全部应用,要么完全不应用,绝不会出现半应用的 diff——然后一键打开 pull request。

一个窗口容纳整支团队:终端、agent、git worktree、真实浏览器,以及它们协作所用的频道。

每添加一个 agent,就多一个窗口、多一个终端、多一件要检查的事。wmux 把工作区——而不是终端——变成你复用的单位。
tmux 拆分的是一个终端。wmux 复用的是整个工作区——终端、agent、git worktree、浏览器,以及它们协作所用的频道——全部由一个守护进程持有,让它们在退出、崩溃和完全重启后依然运行。一个窗口。一支团队。Windows & macOS。
你能得到什么
把一个任务扇出到最多八个 git worktree,每个都有自己的 agent 和分支。并排比较结果,逐个代码块(hunk)收割你想要的改动——要么全部应用,要么完全不应用,绝不会出现半应用的 diff——然后一键打开 pull request。

编排器把角色分派给子 agent,Fleet View(Ctrl+Shift+A)把每个面板都放到一个屏幕上。一键循环会从你的 .claude 目录中选取一个 skill,并不断针对完成条件清单运行,直到真正勾选完成为止。

Slack 风格的频道让人类和 agent 共处同一个工作区,A2A 任务消息让面板之间可以直接交接工作。话题、任务和未读状态都由守护进程存储,重启也不会抹掉对话。

守护进程持有你的会话,而不是窗口。wmux.json 中声明的面板会像 init 系统监督服务那样被监督:挂掉时自动重启,你回来时自动恢复,最多 999K 行的回滚缓冲完整保留。

不是截图,也不是无头浏览器的近似模拟:agent 通过 DevTools 协议驱动一个真正的 Chrome 标签页,包括 React 受控输入框和中日韩(CJK)输入法组字,而你可以观察同一页面,随时接管。

Agent 很快,但偶尔会犯错。wmux 在不可逆命令执行前将其标记出来,并把本地暴露面控制到最小。
rm -rf、git push --force 和 DROP TABLE 会被标记为需要审批,而不是静默执行。
wmux web 通过回环地址(loopback)只读地把你的终端提供给手机浏览器;要暴露它,是一个明确的、会被警告的选择。
每次 MCP 调用都携带一个按会话生成的 token,且只能到达它所来自的那个工作区。
没有数据分析、没有账户、不会往外拨号。守护进程只与你的机器通信,别无其他。
录制自一次真实会话:一条提示词变成跨面板运行的分派工作。

让 Claude 独占一个面板,把 diff、测试和 PR 留给其他面板——同一个工作区、同一个工作目录,不用来回切换窗口。
Claude 在面板 A 中重构,面板 B 监视测试运行,Git 标签页打开 PR。一个窗口,一副键盘。
同时运行 Claude Code、Codex 和 Gemini CLI,给每个分配角色,让编排器通过频道和 A2A 消息在它们之间路由工作。
编排器把迁移任务分派给三个子 agent,然后保持循环运行,直到完成条件清单全部变绿。
把同一条提示词发到八个隔离的 worktree,并排阅读结果,只保留值得落地的那些 hunk。
八个分支,一条提示词,一轮评审。最好的 hunk 被收割;其余的 worktree 全部丢弃。
让 agent 在一个真实的 Chrome 标签页里点点点——你的仪表盘、你的 CI、你自己的应用——而你观察同一页面,需要时随时接管。
一个 agent 在浏览器中走完发布清单,把发现的问题发到频道里,并在任何破坏性操作之前停在审批门禁处。
MCP 工具
wmux 首次运行时,会向你机器上的 agent 注册自己的 MCP 服务器。无需编辑 JSON,无需复制粘贴,而且每次调用都限定在它所来自的那个工作区内。
browser_open
通过 CDP 附加,在真实 Chrome 标签页中打开一个页面。
browser_click
点击实时页面上的一个元素。
browser_extract_text
从当前页面提取可读文本。
browser_screenshot
捕获整个页面或单个元素的截图。
channel_post
向一个工作区频道发布消息。
channel_read
读取一个频道,包括你不在时收到的消息。
channel_unread
查看某个 agent 还没有看过的内容。
a2a_task_send
把一个任务交给另一个 agent 并跟踪它。
a2a_discover
列出工作区中的 agent 及其技能。
company_a2a_send
在同一台机器上的不同工作区之间发送消息。
pane_split
拆分一个面板,并在其中启动内容。
pane_list
列出面板及其 agent、cwd 和状态。
terminal_read
读取终端当前显示的内容。
terminal_send
原样向终端输入内容。
surface_new
打开一个新的 surface——终端、浏览器或编辑器。
deck_ask_decision
请人类做决定,并等待答复。
wmux_search_panes
一次性搜索所有面板的回滚缓冲。
workspace_list
列出守护进程当前保持存活的工作区。
已检测到的 agent:Claude Code · Codex CLI · Gemini CLI · Aider · OpenCode · GitHub Copilot CLI
安装
Windows 10 (1903+) 或 Apple Silicon 上的 macOS · 无需管理员权限 · 无需账户 · 无遥测
Tmux 前缀模式覆盖了 13 种操作,肌肉记忆可以直接沿用。
┌──────────────────────────────────────────────────────────────┐ │ wmux window · Electron renderer · React + xterm.js │ │ ── panes · tabs · Fleet View · Git tab · browser surface │ ├──────────────────────────────────────────────────────────────┤ │ daemon · owns every session, outlives the window │ │ ── PTY pool (ConPTY on Windows, forkpty on macOS) │ │ ── wmux.json pane supervision ── scrollback up to 999K │ │ ── channels · A2A bus · worktree tasks │ ├──────────────────────────────────────────────────────────────┤ │ mcp host · 84 tools, registered on first run │ │ ── workspace-scoped tokens ── execute approval gate │ ├──────────────────────────────────────────────────────────────┤ │ agents · claude code · codex · gemini · aider · … │ └──────────────────────────────────────────────────────────────┘ # Each agent runs in its own PTY. wmux owns the lifecycle, not the agent. # 8-pane echo latency: p50 4.6 ms, measured in CI. # wmux web binds to loopback; exposing it to the network is opt-in.
对比
| wmux | tmux | Windows Terminal · iTerm2 | VS Code 终端 | Agent 管理工具 | |
|---|---|---|---|---|---|
| 分屏面板 | ✓ | ✓ | ✓ | ✓ | 部分支持 |
| 会话持久化 | ✓ | ✓ | ✕ | 部分支持 | 部分支持 |
| 完整重启后仍然存活 | ✓ | ✕ | ✕ | 部分支持 | 部分支持 |
| Git worktree 扇出 | ✓ | ✕ | ✕ | ✕ | ✓ |
| 编排器与 Fleet View | ✓ | ✕ | ✕ | ✕ | 部分支持 |
| 破坏性命令的审批门禁 | ✓ | ✕ | ✕ | ✕ | 部分支持 |
| 频道与 agent 间消息 | ✓ | ✕ | ✕ | ✕ | ✕ |
| 真实浏览器自动化 | ✓ | ✕ | ✕ | ✕ | ✕ |
| MCP 工具自动注册 | ✓ | ✕ | ✕ | ✕ | 部分支持 |
| 开源 · MIT | ✓ | ✓ | 部分支持 | 部分支持 | 部分支持 |