
字节笔记本
2026年9月25日 · 约 6 分钟读完
tty7 深度:免 tmux 持久会话的实现与用法
上一篇介绍过 tty7 这个终端工作台(识别 23 种 coding CLI、吞吐 2 倍于 Alacritty),这篇往深挖一层:它最核心的卖点——不用 tmux 就能做到会话持久——到底是怎么实现的,以及日常怎么用。
实现:一句话架构
后台 server 拥有你的 shell 和 pane(PTY),窗口只是个视图。

tty7 分两部分:跑在后台的 server 持有所有 PTY、shell、agent 进程;你看到的窗口只是一个附加到 server 上的视图。退出应用关掉的只是这张"皮",server 继续跑——编译继续编译、agent 继续干活、SSH 连接照常。重开应用时按 pane 的稳定 id(%42 这种终身不变的编号)重新附加上去,原样恢复。
三个由此推导出的特性:
- 崩溃不是灾难:每个 pane 的输出会往磁盘写一份有上限的尾部存档,pane 重开时把尾巴还给它,不是白屏;
- CLI 无 GUI 可用:
tty7命令 talk 的是同一个 server,窗口关着照样 split/send/capture; - 停止是显式动作:托盘菜单 Quit and Stop Server… 是唯一正常停止方式,还会先警告——因为那会杀掉所有 pane 里的进程(布局保留、shell 全新)。
存活矩阵:什么能扛过什么
| 关标签 | 退出 tty7 | 停 server | 重启电脑 | |
|---|---|---|---|---|
| shell 继续跑 | ✗ | ✓ | ✗ | ✗ |
| 布局恢复 | ✗ | ✓ | ✓ | ✓ |
| 屏幕内容恢复 | ✗ | ✓ | ✓ | ✓ |
| agent 会话续上 | ✗ | ✓ | ✓ | ✓ |
注意"停 server"和"重启"这两列:shell 本身死了,但受支持的 agent 会话能续上——这是它和 tmux 拉开代差的地方。
agent 会话恢复的原理
tty7 的 hook 会从 coding agent 内部学到 session id。当 server 消失(重启、崩溃、主动重启),pane 在恢复时不是回到裸提示符,而是重放原始启动命令:
claude --dangerously-skip-permissions --resume 8f3c…原始启动 flags 也会原样重放,pane 回到你当初启动它的样子而不是默认样子。覆盖所有被识别的 agent(Aider 除外),restore_agent_sessions: false 可关。前提是装了对应 agent 的 hooks——session id 就是 hook 上报的。
还有一个很实用的能力:fork 活会话。右键 pane 或标签,把正在进行的对话分叉成独立的第二份,原会话不受影响。各家 agent 都适配了各自的 fork 命令(Claude Code 用 --fork-session、Codex 用 codex fork <id>、Grok 同样 --fork-session)。
怎么用
日常零配置:装好打开,server 随之启动。正常干活、随手退出即可。
按项目组织:⌘⇧O 打开 Workspace 切换器,一个项目一个 workspace;前 9 个 workspace 有固定编号,可绑快捷键直达。
无 GUI 操作:每个 pane 导出三个环境变量(TTY7_PANE、TTY7_WS、TTY7_CONFIG_DIR),CLI 按 pane id 寻址:
tty7 split # 当前 pane 分屏
tty7 send <pane> "命令" # 向指定 pane 发命令
tty7 wait --until free # 等 agent 空闲
tty7 capture # 抓取 pane 内容
tty7 -m devbox ls # 跨机器操作远程 serverecho $TTY7_PANE 是判断你在不在 tty7 里的最快方式。
远程机器:SSH 配好后,每台机器有自己的 server、workspace 和 pane,文件、仓库、git 数据都留在远程。Workspace 切换器里本地和远程排在一起。
一个必须知道的警告
重启 server 会杀掉该机器上所有 pane 里的所有进程——shell、agent、SSH 会话全不例外。布局会保留、pane 以全新 shell 回来,受支持的 agent 会话靠 --resume 续上,但正在跑的构建和未保存的状态就没了。文档原话:别在别人不知情时替他们重启 server。
收个尾
tmux 的会话模型寄生在"终端复用器"里,靠 detach/attach 保命;tty7 把会话升级成了系统级常驻服务 + PTY 所有权模型,再用 hook 拿到 agent 的 session id 补上了重启恢复——这是 tmux 架构上永远做不到的。对同时跑一排 agent 的人来说,这一项就值得迁移。
上一篇:《别再靠 tmux 保会话了:tty7 把终端做成 agent 工作台》。仓库地址:github.com/l0ng-ai/tty7(Apache-2.0)。


