tmux 到底怎么隔离 shell?Mario 用它替代了什么 Harness 机制?

原始问题

“看不懂什么叫 tmux 隔离” “我还是不懂什么叫暴露出能力” “不同的 shell 页面是天然隔离了,但既然隔离了为啥模型能在同一个终端里重试我也不懂”

澄清:tmux 是什么

tmux = terminal multiplexer(终端多路复用器)。把它理解成”浏览器开启了多个标签页,每个标签页里是一个独立的网页”。每个 tmux 窗口就是一个独立的 shell,关掉一个不影响别的。

核心能力:开多个独立窗口、断线不丢(关终端进程还活着)、随时切换。

澄清:“暴露”是什么意思

操作系统的进程隔离是天生的——不同进程天然互不干扰,像楼里的每户有独立的墙和水电表。

但你只有一个终端窗口(一把钥匙),每次只能进一间房。

tmux 给了你一个钥匙盘——上面挂着所有房间的钥匙,你随时可以开任意一扇门,甚至同时看几间的状态。

tmux 没有创造隔离——隔离是操作系统本来就有的。tmux 让隔离变得可操作。这就是”暴露”。

核心对比:tmux 替代了什么

本来需要 Harness 实现的功能tmux 怎么替代为什么能替代
Background Tasks(s13):长进程管理tmux new-window "npm run dev"——进程在独立窗口里永不停操作系统的进程天然不需要”等它结束才能干别的事”
Subagent(s06)的进程隔离不同 tmux 窗口 = 不同进程空间,互不干扰进程隔离是 OS 原生能力
Worktree Isolation(s18)的进程层每个 Agent 一个 tmux 窗口同上

Mario 不在 Harness 代码里造后台线程管理、进程隔离、子进程通信——因为操作系统已经给了最好的实现。Harness 不应该重新发明 OS 已经提供的能力。

tmux 和”错误重试”没有逻辑关系

原笔记 S11(Error Recovery)中曾有一段把 tmux 和错误重试关联起来的文字,但经讨论确认:对于”看到报错 → 重试”这个动作,tmux 和 Claude Code 的做法效果几乎一样。 模型都能看到错误输出,都能重新执行修正命令。

tmux 的真正价值在:

  • 长进程管理(不需要 Background Tasks)
  • 人类可见性(你能实时切过去看 Agent 在干什么)
  • 少写代码(不造 OS 已有的轮子)

不在”让重试更方便”。该段已在笔记中修正。

核心引用

“Harness 不应该重新发明操作系统已经提供的能力。”

“tmux 没有创造隔离——隔离是操作系统本来就有的。tmux 让隔离变得可操作。”