⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/rmux-agent-terminal/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

作者在 HN 上发这个项目的时候说得很直白,他在 SSH 上跑着几个长期存活的 AI Agent,不想丢掉它们的终端,想随时切回去看状态,最好还能写脚本编排它们的行为。tmux 做不到这件事。

它把终端变成了可以被程序驱动的东西

终端里的会话与 pane 排布

从程序里控制 tmux,路子只有一条,exec 命令行,再解析它吐出来的原始文本。想等某段输出出现?sleep 一会儿再 grep。作者受不了这条路,干脆用 Rust 把整个想法重写了一遍。

结果就是 rmux。一句话概括,带 API 的 tmux。它是一个用 Rust 从零写的终端复用器,兼容 90 多条 tmux 命令,同时提供 Rust、Python、TypeScript 三套带类型的 SDK。代码可以像 Playwright 驱动浏览器那样驱动终端。

它开源在 Helvesec 组织下,双协议 MIT 与 Apache-2.0,五月建的库,现在两千六百多 Star。Linux、macOS、Windows 都原生支持,Windows 上不需要 WSL。既能当独立命令行工具用,也能嵌进 Rust 终端应用,还可以通过 SDK 来驱动。

老命令照用,新能力是 SDK

项目 logo

它没有另造一套命令,而是把 tmux 最常用的那 90 多条搬了过来。new-session、split-window、send-keys、attach-session 这些都能直接用,肌肉记忆不浪费。作者还写了专门的兼容测试覆盖,不是随便抄几个命令就完事。

功能与命令对照表

配置也考虑到了迁移成本。找不到 rmux 专属配置时,它会回退去解析你现有的 tmux.conf,遇到不支持的插件会报出来,但不会崩。

真正拉开差距的是脚本化这一层。三套 SDK 全部带类型,包名分别是 Rust 的 rmux-sdk、Python 的 librmux、TypeScript 的 @rmux/sdk。

三套 SDK 的代码面板

SDK 连的是本地的 rmux daemon,开放 session、pane、stream、wait、snapshot 这几类接口。你可以写代码创建 session,往 pane 里发文本,等某段输出出现,然后抓一张屏幕快照。整个过程不用 sleep,也不用解析字符串。

仓库里还带了几个能直接跑的 demo,多 Agent 编排、Agent 广播竞技场、Mini-Zellij,以及终端自动化混搭 Playwright。

四套接口挂在一个本地守护进程上

桌面上的多窗口布局

把 CLI、三套 SDK、TUI 渲染和浏览器分享串在一起的是同一个 daemon,这也是它设计上最一致的地方。

架构上,shell、session、window、pane 和 PTY 进程全部留在本地 daemon 里,本地客户端通过 IPC 接入。Web Share 只把被选中的那个 pane 或者 session 通过端到端加密的 WebSocket 暴露出去,实际执行始终留在你的机器上。它支持 loopback 本地预览,也支持走 tunnel provider 或者自己的 ingress,用的是混合后量子端到端加密。

浏览器里的配对界面

这个能力对挂长任务的人很实用。服务器上跑着个几小时的任务,想从手机或者另一台电脑扫一眼进度,不用 SSH 登录,开个浏览器就行。

另外两块是给开发者准备的。如果你用 Rust 写 TUI,官方提供了 ratatui-rmux widget,可以把 rmux 的实时 pane 快照直接渲染进 Ratatui 的 buffer,等于在 TUI 里内嵌一个真正的终端,而不是自己模拟一套终端行为。

还有一条专门给 Claude Code 的命令,rmux claude。跑起来会自动附上 --teammate-mode tmux,并且会在 Claude 进程的 PATH 最前面塞一个私有的 tmux shim。这个 shim 严格限定在 Claude 进程内部,不会污染你系统里的 tmux。这个细节说明作者自己就在用 Claude Code,而且被兼容问题烦过。

Windows 这次不用绕 WSL

tmux 在 Windows 上一直是痛点。rmux 的底层 IPC 在 Linux 和 macOS 上走 Unix socket,在 Windows 上走 Named Pipe,全是原生实现。

没有 WSL 那层翻译,Windows 开发者拿到的终端复用体验和 Linux 一致。在这个圈子里,这是件少见的事。

装它有三类路子

终端里的实际操作

第一类是脚本。macOS 和 Linux 用这个。

curl -fsSL https://rmux.io/install.sh | sh

Windows 那边对应的是 PowerShell 脚本,一条命令就能装好,不用另配运行时。

irm https://rmux.io/install.ps1 | iex

第二类是包管理器。常用的几条都在这里。

brew install rmux
cargo install rmux --locked

Windows 上还有 winget install rmux 和 choco install rmux,Linux 侧可以走 APT 或 DNF,也能装 Nix 版本。

装完先确认它认识哪些命令。顺手看一眼版本,再跑一次自检。

rmux list-commands
rmux new-session --help
rmux -V
rmux diagnose --human

然后跑个最小流程。建会话、分屏、发命令、再看结果。

rmux new-session -d -s work
rmux split-window -h -t work
rmux send-keys -t work 'echo "hello from rmux"' Enter
rmux attach-session -t work

第三类是写代码驱动。Rust 项目里加两个依赖,

cargo add rmux-sdk
cargo add ratatui-rmux

Python 和 TypeScript 的包名分别是 librmux 与 @rmux/sdk,装法一样。工作区还给了四条从源码自检的命令,跑格式化检查、clippy、测试与 unsafe 扫描。

它还不够稳,但方向值得跟

Helvesec/rmux 仓库首页

先说前提。rmux 还在快速迭代,bug 肯定有,重度 tmux 插件用户暂时别想着完整迁移。它最近的提交停在八月,更新节奏不算密。

但方向上我是认同的。终端控制本来就应该是 API,而不只是命令行工具。Web 自动化有 Playwright,浏览器控制被解决了;终端自动化这边,把 CLI、SDK、TUI 渲染、浏览器分享这四件事串到同一个 daemon 下面,我确实没找到第二个。

作者自己就是目标用户,他写这个工具是为了解决自己每天遇到的问题。这类项目通常比「我觉得市场可能需要」的项目走得更远。来源作者在 macOS 上装了一个,试了 SDK 里的 wait_for_text,评价是比 tmux 的 expect 脚本舒服太多。

如果你也在 SSH 上挂着长期运行的 Agent,或者写过那种靠 sleep 加 grep 撑着终端脚本,值得花十分钟装一个试试。反过来,如果你的 tmux 配置里塞满了插件、跑了几年没动过,那可以先观望。

仓库在 https://github.com/Helvesec/rmux

文章目录
  1. 1. 它把终端变成了可以被程序驱动的东西
  2. 2. 老命令照用,新能力是 SDK
  3. 3. 四套接口挂在一个本地守护进程上
  4. 4. Windows 这次不用绕 WSL
  5. 5. 装它有三类路子
  6. 6. 它还不够稳,但方向值得跟