当前位置: 首页 > news >正文

rmux:用 Rust 重写,专为 AI Agent 时代而生的终端神器,它开源了!

摘要:rmux 是一款用 Rust 从零重写的现代终端复用器,兼容 tmux 90+ 条命令,原生支持 Linux / macOS / Windows,并提供 typed Rust SDK、Ratatui TUI 集成和端到端加密的浏览器 Web Share 功能。它不只是 tmux 的替代品,而是为 AI Agent 工作流重新定义了"终端控制"应该是什么样子。

你有没有想过,tmux 这个 2007 年诞生的工具,今天还在被几乎所有后端开发者使用——它的设计,本质上是为"人类用键盘操作终端"而生的。

但 AI Agent 时代来了。

当你的 Agent 需要在 SSH 上运行一个长达几小时的任务,或者你要用代码同时编排三个 Claude 实例分别处理不同子任务时,tmux 的那套逻辑开始显得力不从心。你能send-keys,但你得自己解析 escape sequence;你能capture-pane,但输出是原始文本,没有结构;你等一个进程跑完,只能靠sleep && grep,没有更好的办法。

rmux就是在这个背景下诞生的。


它是什么?

一句话:rmux 是用 Rust 从零重写的终端复用器,兼容 tmux 命令,同时提供一套 typed Rust SDK,让代码能像 Playwright 驱动浏览器一样驱动终端。

GitHub:https://github.com/Helvesec/rmux
官网:https://rmux.io
当前版本:v0.5.0
开源协议:MIT / Apache-2.0
平台:Linux / macOS / Windows(原生,无需 WSL)

项目在 2026 年 5 月登上 Hacker News Show HN,作者用的标题是"A programmable terminal multiplexer with a Playwright-style SDK",反响不错,目前 GitHub Star 已超过 1900。


为什么要重写 tmux?

作者在 README 里写得很直接:

"我的出发点很简单——我想在 SSH 上运行长时间运行的 Agent,同时不丢失终端,还能检查、脚本化和编排整个流程。"

tmux 本身是 C 写的,诞生于 2007 年,设计目标是让人类能在终端里管理多个 session。它很好,但它没有提供一个给代码用的 API。你要从程序里控制 tmux,只能通过命令行调用,拿到的是原始文本输出,等待某个输出出现只能靠 sleep。

rmux 的选择是:同时面向人类和代码,两个接口共享同一个 daemon,不是非此即彼。


三个公开接口,共享同一个 daemon

rmux 的架构很清晰,有三个对外暴露的接口:

1. CLI(rmux命令行)

完全兼容 tmux 的使用习惯。90+ 条命令实现,肌肉记忆可以直接迁移:

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

你的.tmux.conf配置也支持作为迁移 fallback 导入,不需要从头配。

2. Rust SDK(rmux-sdkcrate)

这是 rmux 最有意思的部分。Session、Pane 都是有稳定 ID 的 Rust 对象,可以直接 await,可以等特定文本出现,可以拿结构化快照:

usermux_sdk::{EnsureSession, EnsureSessionPolicy, Rmux, SessionName, TerminalSizeSpec};#[tokio::main]asyncfnmain() -> rmux_sdk::Result<()> {letrmux = Rmux::builder() .default_timeout(Duration::from_secs(5)) .connect_or_start() .await?;letsession = rmux.ensure_session( EnsureSession::named(SessionName::new("work").unwrap()) .policy(EnsureSessionPolicy::CreateOrReuse) .detached(true) .size(TerminalSizeSpec::new(120,32)), ).await?;letpane = session.pane(0,0); pane.send_text("printf 'ready\n' && sleep 1\n").await?; pane.wait_for_text("ready").await?;// 不用 sleep,等到它出现letsnapshot = pane.snapshot().await?;println!("{}x{}", snapshot.cols, snapshot.rows);Ok(()) }

wait_for_text("ready")这个 API 设计很有意思——你不再需要猜测进程跑了多久,直接声明等什么,SDK 帮你处理。

3. Ratatui Widget(ratatui-rmux

如果你在写 Rust TUI 应用,可以直接把 rmux pane 的快照渲染成 Ratatui 组件:

useratatui::{buffer::Buffer, layout::Rect, widgets::Widget};useratatui_rmux::{PaneState, PaneWidget};usermux_sdk::PaneSnapshot;fnrender(snapshot: PaneSnapshot, area: Rect, buffer: &mutBuffer) {letstate = PaneState::from_snapshot(snapshot); PaneWidget::new(&state).render(area, buffer); }

这意味着你可以在自己的 TUI 里内嵌一个真实的终端 pane,而不是模拟一个假的。


Web Share:把终端分享到浏览器

这是 v0.5.0 里的新功能,也是最差异化的一个亮点。

一行命令,把你的终端 session 暴露到浏览器里:

# 本地 loopback 访问rmux web-share# 分享指定 sessionrmux new-session -d -s work rmux web-share -t work# 通过 tunnel 公开访问rmux web-share --tunnel-provider localhost-run

加密方式是端到端加密的 WebSocket,文档里说用了"混合后量子加密"(hybrid post-quantum E2EE)。执行仍然在本机,浏览器只是一个查看和操作界面。

实际效果是:你可以在浏览器里看到终端输出、拖动分割线、新建 pane,就像一个远程桌面里的终端窗口一样,但不需要 VNC,不需要 X11 forwarding。

对于需要临时分享调试现场、远程演示、或者在没有 SSH 客户端的设备上临时访问服务器的场景,这个功能很实用。


跨平台:Windows 不靠 WSL

很多"跨平台"的终端工具,到了 Windows 上要么直接说"用 WSL",要么功能大幅缩水。

rmux 选择了认真对待 Windows:用真正的ConPTY(Windows 伪控制台 API)而不是模拟,IPC 用Windows Named Pipes(Unix 上用 Unix Socket),两者都是 OS 原生支持的。

平台

PTY 后端

IPC 后端

Linux

Unix PTY

Unix Socket

macOS

Unix PTY

Unix Socket

Windows

ConPTY

Named Pipe

对于要在开发者 Windows 机器或 Windows Server CI 环境里部署 Agent 工具链的团队,这个细节很重要。


能做什么?Demo 场景一览

项目 README 里列了几个 demo,可以感受一下 rmux 的使用场景:

  • 多 Agent 编排(约 514 行):用 rmux 同时驱动多个 AI Agent 实例,每个实例在独立的 pane 里运行

  • Agent 广播竞技场(约 2,171 行):把同一个输入广播给多个 Agent,对比它们的输出

  • Mini-Zellij(约 944 行):用 rmux + Ratatui 自己实现一个 Zellij 风格的终端界面

  • 终端自动化(约 1,495 行):集成 Playwright 做 Web 测试,终端操作和浏览器操作混合编排

这些 demo 的源码都在仓库里,都是可以直接跑起来的。


安装方式

Linux / macOS:

# 一键安装脚本curl -fsSL https://rmux.io/install.sh | sh# Homebrewbrew install helvesec/rmux/rmux# APTsudo apt install rmux# 需先添加 apt 源,见官方文档# Cargocargo install rmux --locked

Windows:

# PowerShell 一键安装 irm https://rmux.io/install.ps1 | iex # Scoop scoop bucket add rmux https://github.com/Helvesec/scoop-rmux scoop install rmux # WinGet winget install rmux

Rust 项目依赖:

cargo add rmux-sdk cargo add ratatui-rmux

一些客观的局限

项目本身对现状写得比较坦诚:v0.5.0 仍然是"moving fast"的阶段,90 条命令覆盖了最常用的,但重度 tmux 插件用户(比如 TPM 插件生态、复杂 Lua 脚本)目前还不能完整迁移。

社区里的评测结论基本是:"把它当作'碰巧也可以用代码控制的 tmux',而不是'比 tmux 在所有方面都更好的 tmux'"。

如果你现在只是想换一个更快的日常 tmux,它能用,但还有 bug;如果你要构建需要代码驱动终端的 Agent 工具链,它是目前这个方向上设计最完整的选择。


总结

rmux 的核心判断是:终端控制应该是一个 API,而不只是一个命令行工具。

这不是一个新想法,但它是第一个把这件事做完整的开源项目——CLI、SDK、TUI 渲染、浏览器分享,四个接口共享同一个 daemon,设计上是一致的。

AI Agent 工作流对终端控制的需求,就像 Web 自动化对浏览器控制的需求——Playwright 解决了后者,rmux 在尝试解决前者。

项目还年轻,但方向是对的。

GitHub:https://github.com/Helvesec/rmux
官网文档:https://rmux.io/docs

我是顾北,关注我,获取更多好玩有趣的开源仓库!

谢谢你阅读我的文章~

我们下期再见!

PS:本文部分内容由AI辅助创作

http://www.cnnetsun.cn/news/3003729.html

相关文章:

  • 5步掌握缠论量化分析:chan.py框架实战指南
  • 2026年口碑好的工业粘合剂生产厂家 行业资深从业者经验分享
  • 原神小助手:让AI帮你玩转提瓦特大陆的智能伙伴
  • 关于从算法工程化角度看空间换时间策略的权衡的技术7
  • 有哪些真正好用的降AI率平台?能同时优化语句逻辑和消除AI痕迹的那种
  • 毕业论文神器!2026年闭眼可入的专业AI论文写作软件
  • 参考文献格式乱如麻?师兄推荐这几个AI论文网站
  • 意甲幻想足球xP预测:轻量级机器学习实战指南
  • 小米智能家居完美接入HomeAssistant的终极指南:告别米家App限制
  • RAG实战指南:从原理到生产级部署的硬核经验
  • TVA在物流分拣领域的独特价值(6)
  • 信息管理化技术中的信息收集信息分发信息存储
  • Outfit字体:如何用9种字重打造完美品牌视觉系统
  • 在 Android Kotlin 开发中,Kotlin 无法识别 Lombok 生成的 getter
  • 遗传算法实操避坑指南:实数编码、自适应变异与精英保留
  • 2026年6月25日最新|Codex 辅助开发到底值不值?开发者真实使用场景分析
  • FastAPI 文件上传避坑全指南:分块存盘、类型校验与安全兜底
  • 聊聊Mybatis-Plus中的10个坑!
  • Wedecode深度解析:微信小程序逆向工程的全栈解决方案
  • WinCC Advanced数据导出行列转换
  • 10104黄大年茶思屋榜文101期 第4题 大模型上下文窗口高效无损扩容技术
  • DDD-032:案例:库存管理系统实战
  • 跨境电商多账号防关联,我如何用指纹浏览器解决“一锅端”问题
  • ArduSub水下飞控系统原理与实战指南
  • 三步掌握BilibiliDown:你的B站视频离线宝库
  • 第25篇-动态规划入门-从爬楼梯到经典状态转移
  • 3分钟掌握G-Helper:让你的华硕笔记本性能翻倍,续航倍增的秘密武器
  • 手把手教你用超算GEO 优化自家品牌
  • PHPWind SSRF漏洞挖掘与防御:从原理到实战的完整指南
  • Apache Tika XXE漏洞深度剖析:从原理到实战利用与防御