keepane,AI 时代的终端多路复用

keepane,AI 时代的终端多路复用

💡 原文中文,约5600字,阅读约需14分钟。
📝

内容提要

keepane 是 Windows 上的 tmux 替代品,解决终端关闭后程序中断的问题,支持脱离、恢复布局和 tmux 配置。它将每个 pane 变为可命名、可收发消息、可执行命令的 actor,并处理空闲判断、ConPTY 输出、多行命令、剪贴板崩溃、帧率优化和 SSH 脱离等问题。作者提醒其仅开发半个月,尚不成熟。

🔎

延伸解读

Windows 终端复用的现实选择

文章指出,Windows 上原本没有 tmux,WSL 里的 tmux 又管不到 PowerShell 的 pane。keepane 填补了这一空白,让终端关闭后程序继续运行,重启后还能恢复布局。对于在 Windows 上跑编译、部署或 agent 的用户,这提供了原生方案;但作者也提醒,它仅开发半个月,尚不成熟,不适合追求稳定性的生产环境。

从分屏到通信:pane 作为 actor

keepane 不满足于仅做分屏,而是将每个 pane 变成有名字、收件箱和工作模式的 actor,支持 pane 间互发消息和远程执行命令。这解决了多 agent 协作时靠人工复制粘贴的痛点。消息投递时机由收件方的工作模式决定,且发送方不能伪造来源字段,超过 8 跳会被拒收,防止循环。这种设计适合需要自动化协作的场景。

已知限制与使用注意

文章列出了几处限制:卡在忙时需手动用 pane-ready 解开;cmd、fish 和 WSL 里的 shell 没有提示符钩子,shell 模式下消息只排队不执行;跳数限制拦不住 agent 空闲后重新发起的循环;投递和人手打字间有毫秒级竞争窗口。此外,shell 模式执行的命令会进入 PSReadLine 持久历史。用户需了解这些边界,避免误用。

是否从 tmux 迁移的考量

作者建议分情况:在 Linux 上且不在 pane 里跑 agent 的,tmux 就够了,keepane 多出的消息功能若无需求则无收益,且 tmux 久经考验。Windows 上则不同,因为原本没有 tmux 这类工具。迁移前需权衡自身需求,并注意 keepane 仍处于早期开发阶段,三平台 CI 虽全量运行,但作者坦言后面肯定还有坑。

❓

Q&A

keepane 是什么?它主要解决什么问题?

keepane 是 Windows 上的 tmux 替代品,解决终端关闭后程序中断的问题。它支持脱离、恢复布局和 tmux 配置,并将每个 pane 变为可命名、可收发消息、可执行命令的 actor。

keepane 和 tmux 有什么区别?

keepane 在 Windows 上提供类似 tmux 的功能,但增加了 pane 之间的消息通信能力。每个 pane 有名字、收件箱和工作模式,可以互发消息或执行命令。而 tmux 只管理排版,不负责通信。

keepane 的工作模式有哪几种?分别是什么?

keepane 有三种工作模式:normal(不自动投递,程序自己用 read-message 取)、shell(提示符钩子看到 shell 回到提示符时自动打入命令)、ai(agent 轮次结束 hook 调过 pane-ready 时把正文当提示词打入)。

keepane 如何判断 pane 是否空闲?

keepane 只认自己的提示符标记(OSC 7777;keepane-prompt),不认 OSC 133。按键、粘贴、send-keys 一律转成忙。状态机还记录“行上留着东西”的状态,防止消息插进提前输入的内容中。

keepane 在 ConPTY 上遇到了什么问题?如何解决的?

ConPTY 会重排和补行,导致输出起点推算错误。keepane 改为在命令结束时到屏幕上查找命令末行,从下一行开始截取输出,找不到才退回推算。修复后测试通过率显著提升。

keepane 的剪贴板崩溃问题是如何发现和修复的?

e2e 测试中偶发堆损坏,排查发现是同一进程内多线程同时操作剪贴板导致。修复方法是进程内加锁,从打开到关闭全程持有。修复后压力测试和 e2e 均通过。

keepane 如何优化帧率?效果如何?

keepane 增加了 16 ms 的帧率上限,不足 16 ms 只记待画,在间隔末尾补帧。优化后服务端 CPU 从 166% 核降到 99%,客户端进程从 2719 ms 降到 62 ms,打字延迟不变。

keepane 在 SSH 会话中脱离后 session 丢失的原因是什么?如何修复?

原因是 OpenSSH 将每个会话放入 job,而启动 server 时未带 CREATE_BREAKAWAY_FROM_JOB 标志,导致连接断开时 job 被清掉。修复方法是在启动 server 的两处补上脱离标志,若 job 不允许脱离则退回不带标志再起一次。

keepane 的手机访问功能是如何工作的?

在终端打印二维码,手机扫描后打开一个列出所有 pane 的页面,可查看屏幕、输入。二维码包含地址和每次启动新生成的 128 位随机密钥。所有处理在电脑上,手机只负责显示和输入。

keepane 目前有哪些已知限制?

已知限制包括:卡在忙状态需手动解开;cmd、fish 和 WSL 里的 shell 没有提示符钩子,shell 模式下永远不空闲;跳数限制只能拦处理中循环;投递和人手打字有竞争窗口;shell 模式命令会进 PSReadLine 历史;权限规则防失误不防存心。

🏷️

标签

➡️

继续阅读