AI 编码代理越来越擅长读仓库、改代码和跑测试,但它们和人类仍然常常不在同一个操作界面里。人看的是终端窗口,agent 读取的是日志片段、截图、临时文件或聊天上下文。中间一旦需要等待命令结束、识别当前 pane、读取滚动历史、把输出交给另一个 agent,就会退回到脆弱的脚本和文本解析。

今天推荐的 weill-labs/amux 正好切在这个问题上。它是一个 Go 写的终端 multiplexer,目标不是完整复刻 tmux,而是给人和 agent 一个共享的 TUI 网格:人可以用快捷键看和操作 pane,agent 可以用 CLI 命令读结构化状态、发送按键、等待条件和订阅事件。GitHub 当前页面显示项目约有 29 stars3 forks,主要语言是 Go,许可为 MIT;最新 release 是 v0.5.0,发布于 2026 年 4 月 15 日。

项目概览

属性详情
仓库weill-labs/amux
Stars约 29
Forks3
主要语言Go
许可MIT
创建时间2026 年 3 月 13 日
最近更新2026 年 5 月 24 日
最新 Releasev0.5.0

为什么不是再写一个普通终端分屏工具

amux 的有趣之处在于,它把终端 pane 的解析状态当成系统里的真实状态。PTY 输出先进入 VT emulator,随后同一份状态可以渲染成人能看的 ANSI 画面,也可以导出成 agent 能读的结构化数据。

这和“让 agent 截屏看终端”是两条路。截图需要视觉模型理解布局,成本高,也很容易受字体、主题、窗口大小影响。普通文本 capture 又经常丢掉 cursor、pane、foreground process、idle 状态和颜色等上下文。amux 试图把这层状态显式化,让 agent 直接拿到 JSON。

README 里最能说明定位的一组命令是:

amux capture --format json
amux send-keys pane-1 "make test" Enter
amux wait exited pane-1
amux events --filter idle

这不是单纯“远程控制终端”,而是把终端会话变成可观察、可等待、可组合的工作区。

Agent API:capture、wait、events

amux 的 agent API 是普通 CLI,不要求调用方使用特定 SDK 或语言。最基础的是 capture:它可以抓取整个 session,也可以抓取某个 pane;可以返回纯文本,也可以返回 JSON;可以读取当前可见屏幕,也可以带上 retained scrollback history。

JSON capture 里包含 session、window、pane 位置、cursor、terminal 元数据、pane 内容、是否 idle、是否 exited、最近输出时间、当前命令等字段。对 agent 来说,这些字段比一大段终端文本更容易判断下一步。

第二类能力是 wait。常见条件包括:

amux wait idle pane-1 --timeout 30s
amux wait ready pane-1
amux wait exited pane-1
amux wait content pane-1 "PASS"

这解决了 agent 脚本里非常常见的轮询问题。以前可能要 sleep、grep 输出、猜命令是否结束;现在可以让 multiplexer 自己根据 pane 状态阻塞到条件满足。

第三类是 events。它会以 NDJSON 形式推送 layout、output、terminal、idle、busy、exited、client connect/disconnect 等事件。长跑 agent 可以订阅事件,而不是不停 capture;也可以把事件流接到自己的调度逻辑里。

同一个 pane,人和 agent 都能看见

amux 的设计没有把人类排除在外。它仍然是一个 TUI:有 pane、window、split、zoom、copy mode、快捷键和 attach/detach。默认 prefix 是 Ctrl-a,可以分屏、切换 pane、缩放、进入 copy mode、创建 window、重载 server。

这点对 AI 工作流很重要。很多 headless 自动化工具的问题不是不能跑命令,而是人看不到现场,或者 agent 的操作状态很难接管。amux 让人和 agent 共用同一组 pane:人可以观察 agent 正在跑什么,agent 也可以读取人刚刚操作后的状态。

README 还提到,pane history 由 server 保留。客户端 attach 时会恢复历史,各个 viewer 可以维护自己的 copy-mode 状态。这样 detach、reattach、hot reload 和 crash recovery 后,滚动历史仍然比较可恢复。

远程主机和多 agent 工作流

amux 支持配置 remote hosts,并把远端 session 的 pane 映射到本地视图里。当前可用传输主要是 SSH,配置里也预留了 transport preference;mosh 被识别但还不是已实现路径。

这让它不只是本机分屏工具。你可以把本地 shell、远端 GPU 机器、构建环境或另一个开发机放进同一个 session 视角里。agent 通过 pane 名称或 ID 发送命令,人则通过 TUI 看整体状态。

README 里还给了更高层的工作流例子:给 pane 打 task 或 issue metadata,检查 worker PR 的 CI 状态,找到哪个 pane 负责哪个任务,再把消息发回对应 pane。这些脚本不是 amux 的核心协议,但说明了它想服务的使用场景:多个终端 worker、多个 agent、一个人类监督者,以及可恢复的状态层。

和 tmux 脚本的差异

如果只是分屏,tmux 已经足够成熟。amux 的差异在于它把 agent 所需的几个动作做成一等能力。

tmux 可以 capture-pane,但拿到的是偏向人类阅读的文本,ANSI、换行、pane 宽度和应用状态都可能让解析变复杂。amux 则直接提供结构化 JSON 和 retained history。

tmux control mode 能做集成,但仍然需要调用方处理大量原始 pane 内容。amux 的 wait idlewait contentevents 更像是给自动化脚本准备的同步原语。

headless 的 expect/pexpect 适合独占式自动化,但人类很难自然介入。amux 的取舍是把共享屏幕保留下来,只是在同一份状态上增加 agent 可读写接口。

当然,它也明确不是 tmux 的完整替代。README 说它实现的是人和 agent 配对最需要的一组功能:splits、windows、zoom、remote hosts、searchable choosers 和 agent API。如果你依赖 tmux 的复杂 hooks、session groups 或成熟插件生态,amux 现在还不是替换品。

安装方式和当前边界

amux 提供几种安装方式:

curl -fsSL https://raw.githubusercontent.com/weill-labs/amux/main/scripts/install-release.sh | bash
brew install weill-labs/tap/amux
go install github.com/weill-labs/amux@latest

首次启动 server 时,它会安装自己的 terminfo entry,需要系统里有 ncurses 的 tic。如果自动安装不合适,也可以显式运行:

amux install-terminfo

当前还需要注意几个边界。

  • 项目很新,2026 年 3 月才创建,接口和行为仍可能快速变化。
  • stars 只有几十个,社区反馈和跨平台边角案例还需要时间积累。
  • 它不是 tmux 兼容层,迁移 tmux 配置和插件不能直接照搬。
  • 远程传输目前主要看 SSH,mosh 还只是规划中的方向。
  • 让 agent 控制真实 shell 本身就有风险,适合先在受控仓库和受控命令范围内试用。

适合谁试

amux 适合几类开发者:

  • 经常同时运行多个 AI coding agent、希望人能随时观察和接管的人;
  • 想让 agent 可靠等待测试、构建、部署命令结束,而不是靠 sleep 的人;
  • 需要把终端输出变成结构化 JSON,交给脚本或 agent 后续处理的人;
  • 有本地和远端混合开发环境,希望在同一 TUI 中监督多个 worker 的人;
  • 对 tmux 很熟,但正在寻找更 agent-friendly 的实验性替代方案的人。

如果你的自动化只是偶尔跑一个命令,普通 shell 脚本就够了。如果你的工作流已经深度绑定 tmux,也没有 agent 读写 pane 的需求,amux 目前不会带来足够收益。但如果你每天都在让多个 agent session 排队处理任务,终端状态的结构化会立刻变得有价值。

总结

weill-labs/amux 把终端 multiplexer 重新放进 AI agent 语境里思考。它不是只给人类看的分屏,也不是把人排除出去的 headless 自动化,而是试图让同一组 pane 同时服务人和 agent。

我最看重的是它的同步原语:结构化 capture、阻塞 wait、事件流和 retained history。它们解决的不是炫技问题,而是 agent 在真实终端里经常卡住的细节。项目还早,但方向很清楚,值得关注。

项目地址:https://github.com/weill-labs/amux