返回

文章详情

展示 HN: Boo - 基于 libghostty 的屏幕风格终端复用器

Hacker News2026年6月11日 20:52

_ .-. | |__ ___ ___ (o o) | '_ \ / _ \ / _ \ | O \ | |_) | (_) | (_) | \ \ |_.__/ \___/ \___/ `~~~' 让你的终端挥之不去的会话。安装 | 使用 | 自动化 | 架构 基于 libghostty (libghostty-vt) 的 GNU screen 风格终端复用器,使用 Zig 编写。每个会话的输出都通过 Ghostty 的终端仿真核心解析,因此 boo 始终知道每个会话的确切屏幕状态:内容、样式、光标、回滚和终端模式。这个状态在附加时用于重建你的终端,回答与脱离会话的终端查询,并让脚本和 AI 代理像人类一样读取屏幕。特点 使会话在断开连接时依然存活:使用 Ctrl-A d 脱离,使用 boo attach 重新附加。一个全屏会话管理器:boo ui 在侧边栏列出会话。忠实重绘 libghostty 终端状态,包括 SGR 样式、光标位置、滚动区域、窗口标题和终端模式。友好的代理自动化原语:send、peek、wait 和 --json 输出,所有操作无需 TTY。 demo.mp4 安装 对于 Linux 和 macOS: curl -fsSL https://raw.githubusercontent.com/coder/boo/main/install.sh | sh 预构建的二进制文件发布在发行页面。设置 BOO_VERSION 以固定某个版本,并设置 BOO_INSTALL_DIR 以更改安装位置(默认:/usr/local/bin,若可写则为此位置,否则为 ~/.local/bin)。 使用 boo new # 新会话运行 $SHELL,已附加 boo new work # 命名会话 boo new work -d -- make # 创建脱离的已运行命令 boo ui # 在全屏 UI 中管理会话(别名:i) boo ls # 列出会话 boo attach work # 重新附加(别名:at, a) boo rename work api # 重命名会话 boo kill work # 结束会话 boo kill --all # 结束所有会话 如果没有名字,boo new 会根据当前目录命名会话,当该名称已被使用或不可用时,退回到进程 ID。运行 boo help 获取完整概述,boo help <命令> 获取标志和示例,boo help --all 一次打印每个帮助页面。 快捷键(前缀 Ctrl-a) 快捷键遵循 GNU screen 的默认设置,包括 C-x 变体(C-a C-d 同样像 C-a d 脱离)。 键 动作 C-a d,C-a C-d 脱离 C-a l,C-a C-l 重绘 C-a a 发送文字 C-a boo ui 添加额外的快捷键用于切换、调整大小、创建会话和结束会话。 自动化 除了附加,其余功能都可以在没有终端的情况下工作,这使得 boo 成为脚本和驱动交互程序的 AI 代理的自然沙箱。 规范循环: boo new build -d -- bash # 1. 无头会话 boo send build --text ' make ' --enter # 2. 输入内容 boo wait build --idle # 3. 等待输出稳定 boo peek build --scrollback # 4. 读取屏幕 boo kill build # 5. 清理 读取状态:peek 打印从终端状态重构的渲染屏幕,而不是原始字节日志:有序、完全重绘且稳定。--scrollback 包含历史;--json 添加大小、光标和标题。 等待: wait --text <text> 阻塞直到屏幕包含指定文本; wait --idle 等待输出安静 2 秒; --timeout <dur> 在超时后退出 4,而不是无限挂起(持续时间:500ms,2s,1m,4h,1d)。 不再需要睡眠与轮询循环。 发送输入: send --text 是字面值:没有转义处理,没有隐式换行,也没有需要抗争的引用层。 --enter 提交, --key Enter,C-c,Up 名称控制键,stdin 模式是二进制安全的。 机器可读输出: ls --json 和 peek --json。 退出代码:0 成功,1 错误,2 用法错误,3 没有这样的会话,4 等待超时。 查看 boo help automation 获取完整页面。 贡献 需要 Zig 0.15.2。 zig build # 在 zig-out/bin/boo 中生成二进制文件 zig build test # 单元测试 zig build test-integration # 在真实 PTY 上进行端到端测试 zig build test-all # 全部依赖项自动从源中获取并构建(在 build.zig.zon 中锁定)。 使用 Nix,nix develop 打开具有正确 Zig 版本的 shell,nix build 构建包为 ./result/bin/boo。 架构 你的终端 <-(原始 tty)-> boo 客户端 <-(unix socket)-> 会话守护进程 `- PTY + ghostty-vt 终端 客户端将你的 TTY 放在原始模式下,并通过帧化的 Unix 套接字协议传输字节(src/protocol.zig)。 守护进程(在创建会话时创建的分叉)拥有会话的命令:一个与 PTY 连接的子进程,其输出通过持久的 ghostty-vt TerminalStream(src/window.zig)传递。 在附加时,输出逐字节传递到你的终端。 在附加时,守护进程会清理你的终端并使用其 VT TerminalFormatter 从 libghostty 状态重放屏幕。 脱离时的终端查询(DSR、DA、XTWINOPS 等)由 libghostty 的流处理程序回答;在附加时,真实的终端会回答,避免双重回复。 限制 这是一个年轻项目,并不是一个直接替代 GNU screen 的解决方案:每个会话只能附加一个客户端(附加会抢占);不支持 -x 共享。 每个会话只能有一个窗口:会话内不支持分割或标签。 每个任务运行一个会话,并通过 boo ui 来管理它们。 C-a p

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡