Tmux 会话常驻
tmux 是 botmux 的默认后端(PTY 已退役、不再自动兜底)。装好 tmux 后,CLI 进程常驻在 tmux session 内,daemon 重启不中断 CLI——这是「重启会不会丢上下文」这个高频顾虑的答案:不会。

为什么重要
botmux restart 时 worker 进程退出,但 tmux session(及其中的 CLI 进程)保持运行。下次收到消息时 worker 自动 re-attach,无需 --resume 重载上下文——上下文一直活着,省 token、省时间、不丢状态。
恢复是「re-attach 到活着的进程」,不是「用
--resume冷启一个新进程」:daemon 重启后会对存活的常驻会话预先以空 prompt 重新 fork(只接管、不触发新回合),后续消息或打开终端时也会按需惰性重连。
/close/ 关闭按钮走的是tmux kill-session——由 tmux 向 pane 内进程发 SIGHUP 收尾,会话与 CLI 一起消失。
tmux 不可用会怎样
不会静默降级 pty,而是硬拦截:起新会话时若本机 tmux 不可用,botmux 拒绝启动并弹一张卡告诉你装 tmux(brew install tmux / apt-get install -y tmux),附上 BACKEND_TYPE=pty 应急开关。已经活着的常驻会话不受一次性探测失败影响,仍可重连。详见 前置要求。
直接 attach
attach 进去后你看到的就是和本地开发完全一致的终端——这也是 botmux 相比"只读输出"方案的关键区别。飞书话题、Web 终端、本地 tmux 三处看到的是同一个进程,见 Web 终端。
其它后端与显式 pty
默认只有 tmux(默认)与 pty(应急)与你日常相关;zellij / herdr 也是可选后端,按需通过 BACKEND_TYPE 或 per-bot backendType 显式启用,不影响默认。riff 则不同——它随 riff CLI 配对启用(cliId===riff ⇔ backendType===riff,强制绑定),不能像 zellij/herdr 那样给普通 CLI 单独选。
⚠️ pty 会话不跨 daemon 重启存活:pty 没有可 re-attach 的常驻进程,重启后会话需重载。要「重启不丢上下文」请用默认的 tmux。也可 per-bot 配
"backendType": "pty"(见 bots.json 配置)。
