AI 控制真实浏览器,而不是浏览器的截图。
Claude、Codex 和 Gemini 通过 CDP 操作一个真实的 Chromium 标签页。它们点击、输入、滚动、读取 DOM。wmux 只负责转发字节 — 真正的工作由你的 agent 完成。
wmux 是为 AI 编码 agent 设计的 Windows 原生多面板终端。不是 WSL,不是移植,从零构建。
你能得到什么
Claude、Codex 和 Gemini 通过 CDP 操作一个真实的 Chromium 标签页。它们点击、输入、滚动、读取 DOM。wmux 只负责转发字节 — 真正的工作由你的 agent 完成。
像 tmux 教我们的那样分屏。每个面板都是真实的 PTY (conpty),每个都能承载自己的 agent,每个都记得自己的滚动历史。再加上 tmux 风格的 Ctrl+B 前缀键、Quake 式悬浮面板、便于在长日志中跳转的滚动书签。
wmux 监控 agent 进程。一旦完成 — 或需要确认 — 你立刻收到原生 Windows 通知。不必每 90 秒切换标签查看。
claude finished — backend refactor
24 tests passed · 1m 42s
打开 wmux 一次。它会把 13 个工具按正确作用域写入 ~/.claude.json。Codex 和 Gemini 各自有专属配置。同一个 wmux 里的 agent 之间还能通过 A2A (agent-to-agent) 工具互发消息。再无复制粘贴的地狱。
wmux 会快照每个面板、cwd、env、滚动历史和活跃 agent。重启之后 — 即使是你没请求的 Windows 更新 — 重新打开就能接着干。
Agent 很强大。wmux 假设它们可能出错、被恶意利用或被劫持。默认运行四道防线。
每次 MCP 调用都携带按会话的 token。能伪造吗?不能 — 我们对它进行签名。
browser_open 拒绝 metadata IP、宿主 localhost 和私有子网。
Node integration、ASAR 校验、run-as-node — 全部在构建时锁定。
每个 agent 有 RSS 上限。失控会话先收到软信号,然后被强制终止。
实时演示
看 wmux 启动三个 agent,把一个浏览器任务分发给 Claude,完成时主动通知。
谁在用 wmux
一个面板跑 Claude,其他面板看 diff 和测试 — 同一工作区、同一 cwd、零切换成本。
面板 A 让 Claude 重构后端 → 面板 B 监视测试输出 → 面板 C 阅读你的 PR 评论。一个窗口搞定。
并行运行 Claude、Codex、Gemini。A/B 它们的答案,挑最好的,或把大任务拆成三份。
三个面板、三个 agent、一个 prompt 三路分发。谁先做完、做得最好 — 谁就赢。
受够了 WSL2 的内存膨胀、NTFS 与 EXT4 的路径混乱、每天「重启 WSL」的赋税?wmux 是原生 conpty,没有 Linux VM。
冷启动 280 ms。内存基准 118 MB。午餐前不必再「wsl --shutdown」。
让 agent 读你的 changelog、点你的 CI 仪表盘、抓你自己的 PR — 通过真实 Chromium,不是截图。
Claude 读 GitHub 发布说明,把摘要写进 markdown,完成时通过 Windows 通知提醒你。
基准
冷启动
280ms
vs WSL+tmux 3.2s (11× faster)
内存基准
118MB
1 pane idle · vs WSL+tmux 824MB
安装包大小
42MB
signed exe · x64 + ARM64
磁盘占用
198MB
post-install footprint
会话恢复
120ms
3 panes · 50KB scrollback each
MCP 调用延迟
<2ms p50
<5ms p99 · local MCP host
测试环境: Windows 11 23H2 · Intel i7-13700K · 32 GB RAM · NVMe SSD。
MCP 工具
每个 wmux 安装都自带这些 MCP 工具,作用域限定在当前工作区,任何懂 MCP 的 agent 都能调用。
browser_open
启动 Chromium 并附加 CDP。
browser_click
在实时页面上点击任何选择器。
browser_read
通过 CSS 选择器读取文本或 DOM。
browser_type
向聚焦的输入框逐字输入。
fs_read
读取沙箱内的项目文件。
fs_write
带 diff 审阅地保存编辑。
fs_search
在工作区内执行 Ripgrep。
shell_run
在沙箱 shell 中执行 pwsh 命令。
shell_stream
将长任务的输出流式回传给 agent。
task_notify
agent 完成时弹原生 Windows 通知。
session_attach
恢复之前的面板,完整滚动历史。
workspace_open
切换当前 wmux 工作区。
memory_recall
读取作用域内的 agent 记忆。
browser_open
启动 Chromium 并附加 CDP。
browser_click
在实时页面上点击任何选择器。
browser_read
通过 CSS 选择器读取文本或 DOM。
browser_type
向聚焦的输入框逐字输入。
fs_read
读取沙箱内的项目文件。
fs_write
带 diff 审阅地保存编辑。
fs_search
在工作区内执行 Ripgrep。
shell_run
在沙箱 shell 中执行 pwsh 命令。
shell_stream
将长任务的输出流式回传给 agent。
task_notify
agent 完成时弹原生 Windows 通知。
session_attach
恢复之前的面板,完整滚动历史。
workspace_open
切换当前 wmux 工作区。
memory_recall
读取作用域内的 agent 记忆。
安装
需要 Windows 10 (1903+) · 无需管理员 · 无需 WSL
快捷键
架构
┌──────────────────────────────────────────────────────────────┐ │ wmux shell · Electron renderer · React + xterm.js │ │ ── window chrome · pane manager · workspace router │ ├──────────────────────────────────────────────────────────────┤ │ core (Rust, native) │ │ ── PTY pool (winpty / conpty) ── session snapshotter │ │ ── encrypted token store ── Electron Fuses (locked) │ ├──────────────────────────────────────────────────────────────┤ │ mcp host (Node) │ │ ── 13 built-in tools ── auto-register into ~/.claude.json │ │ ── SSRF block-list ── memory watchdog (per agent) │ ├──────────────────────────────────────────────────────────────┤ │ agents · claude-code · codex · gemini-cli · any cli │ └──────────────────────────────────────────────────────────────┘ # Each agent runs in its own PTY. wmux owns the lifecycle, not the agent. # MCP host is local-only (127.0.0.1:auto); never exposed to the network.
对比
| wmux | WSL + tmux | Windows Terminal | ConEmu / Cmder | VS Code Terminal | |
|---|---|---|---|---|---|
| 分屏面板 | ✓ | ✓ | 部分 | ✓ | ✓ |
| 会话持久化 | ✓ | 部分 | ✕ | 部分 | 部分 |
| AI agent 感知 | ✓ | ✕ | ✕ | ✕ | ✕ |
| MCP 工具自动注册 | ✓ | ✕ | ✕ | ✕ | ✕ |
| 浏览器自动化 (CDP) | ✓ | ✕ | ✕ | ✕ | ✕ |
| Windows 原生 (无 WSL) | ✓ | ✕ | ✓ | ✓ | ✓ |
| 开源 · MIT | ✓ | ✓ | ✓ | 部分 | 部分 |
| 单窗口多 agent | ✓ | ✕ | ✕ | ✕ | ✕ |
| 原生 Windows 通知 | ✓ | ✕ | ✕ | ✕ | ✕ |
| 冷启动 < 500ms | 部分 | ✕ | ✓ | 部分 | ✕ |
| 内存基准 < 200MB | ✓ | ✕ | ✓ | ✓ | ✕ |
术语表
FAQ
用户怎么说
他们已经切换了。
Asuka Imai
@asu.dev
Theo Kim
@theok
Hannah Park
@hp