开发者生态
morning
Show HN:Rmux – 带有 Playwright 风格 SDK 的可编程终端多路复用器
2026-05-21
1 阅读
shideneyu
适用于代理时代的通用 Rust 多路复用器:可拆卸、可编写脚本和可检查,具有与 tmux 兼容的 CLI、守护进程支持的 SDK 和本机 Ratatui 集成。英语 · 法语 · 简体中文 · 日本语 重要提示 当前版本:v0.2.0,于 2026 年 5 月 18 日发布。所有 90 个 tmux 兼容命令均已实现,但预计会出现错误 - 这是一个全新的公共预览版。如果您遇到问题,请提出问题。为什么 RMUX RMUX 存在,因为我相信 tmux 用例只得到了部分探索。我自己的出发点很简单:我希望通过 SSH 运行长期代理,而不会丢失终端,同时仍然能够检查、编写脚本和编排它们周围的一切。因此,我在 Rust 中从头开始重建了这个想法:一个速度极快、与 tmux 兼容的多路复用器,具有类型化 SDK、持久会话、结构化快照以及 Linux、macOS 和 Windows 上的本机本地传输(包括 Windows 命名管道)。无需 WSL。 RMUX 可供代理、无头 CLI 工作流程和人类使用:您可以为终端应用程序提供可分离的执行、稍后重新连接、检查其状态、从代码驱动它们,或者只是将其用于正常的 tmux 风格的终端工作。演示 RMUX 用途的简短真实示例。多代理编排 ≃ 514 行 Agent Broadcast Arena ≃ 2,171 行 Mini-Zellij ≃ 944 行 终端 <> 浏览器镜像 ≃ 649 行 Playwright 测试 ≃ 1,495 行 安装适用于 macOS 和 Linux 的预构建二进制文件:curl -fsSL https://rmux.io/install.sh | sh 适用于 Windows PowerShell 的预构建二进制文件:irm https://rmux.io/install.ps1 | iex 直接下载和 SHA256 校验和可从 v0.2.0 GitHub 版本获取。来自 crates.io 和 Cargo:cargo install rmux --locked 从本地结账:cargo install --path。 --locked 对于 Rust 应用程序:cargo add rmux-sdk Cargo add Ratatui-rmux 文档 完整的 RMUX 文档可在 rmux.io/docs 上找到。它包括安装指南、CLI 参考、SDK 示例、终端自动化示例和 API 文档。 CLI 快速入门 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 在本地使用命令帮助: rmux list-commands rmux new-session --help rmux split-window --help SDK 快速入门 [依赖项] rmux-sdk = " 0.2 " tokio = { version = " 1 " , features = [ " rt-multi-thread " , " macros " ] } 使用 std :: time :: Duration ;使用 rmux_sdk :: { EnsureSession , EnsureSessionPolicy , Rmux , SessionName , TerminalSizeSpec , } ; # [ tokio :: main ] async fn main ( ) -> rmux_sdk :: Result < ( ) > { let rmux = Rmux :: builder ( ) . default_timeout(Duration::from_secs(5))。 connect_or_start()。等待? ;让 session_name = SessionName::new("work") 。 Expect(“有效的会话名称”);让会话= rmux 。 Ensure_session(EnsureSession::named(session_name).policy(EnsureSessionPolicy::CreateOrReuse).detached(true).size(TerminalSizeSpec::new(120, 32)),)。等待? ;让窗格=会话。窗格 (0, 0);窗格。 send_text("printf'准备好\\n'&&睡眠1\n")。等待? ;窗格。 wait_for_text(“准备好”)。等待? ;让快照=窗格。快照()。等待? ;打印! ( "{}x{}" , 快照 . cols , 快照 . rows ) ; Ok ( ( ) ) } Ratatui Widget 使用ratatui :: { buffer :: Buffer , layout :: Rect , widgets :: Widget } ;使用ratatui_rmux :: { PaneState , PaneWidget } ;使用 rmux_sdk::PaneSnapshot ; fn render(snapshot:PaneSnapshot,area:Rect,buffer:&mutBuffer){letstate=PaneState::from_snapshot(snapshot); PaneWidget::new(&状态)。渲染(区域,缓冲区);架构 三个公共界面——一个 rmux CLI、一个 rmux-sdk Rust 箱和一个ratatui-rmux 小部件——共享一个本地协议来与守护进程对话。任何一个表面能做的事情,其他表面也能做。 Workspace Crate 角色发布 rmux-types 共享平台中立值类型 public rmux-proto 分离的 IPC DTO、成帧、线路安全错误 public rmux-os Small OS 边界助手 public rmux-ipc 本地 IPC 端点和传输 public rmux-sdk 守护进程支持的 Rust SDK publicratatui-rmux Ratatui 集成小部件 public rmux-pty PTY 分配、调整大小、子进程控制支持crate rmux-core 会话、窗格、布局、格式、挂钩、缓冲区支持 crate rmux-server Tokio 守护进程和请求分派支持 crate rmux-client 本地 IPC 客户端和附加管道支持 crate rmux CLI 和隐藏守护进程入口点 公共二进制 rmux-render-core 共享快照渲染核心工作空间内部 平台支持平台 PTY 后端 IPC 后端 默认端点 Linux Unix PTY Unix 套接字/tmp/rmux-{uid}/default macOS Unix PTY Unix 套接字 /tmp/rmux-{uid}/default Wi