用途:为超出单次对话生命周期的进程(如 tilt up、开发服务器、文件/测试 watcher、数据库服务)提供 tmux 运行模式,避免进程随会话结束而中断。
核心规则:一个项目只用一个 tmux 会话,多个进程用该会话内的多个窗口承载;会话名必须由 git 根目录推导,不硬编码。每次创建前必须先 tmux has-session 检查,已存在则复用,绝不创建并行会话;命令一律用 send-keys 在交互式 shell 中执行,不能把内联命令直接传给 new-session,否则会绕过 shell 初始化,破坏 PATH、direnv 等环境。
会话命名:SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)。
启动单进程:先 has-session 检查,不存在才 tmux new-session -d -s "$SESSION" -n main,再 tmux send-keys -t "$SESSION:main" '<command>' Enter。向已有会话加窗口时先 list-windows 判断窗口名是否已存在,再 new-window 并用 send-keys 运行命令;多进程用 for 循环幂等地为 tests、logs 等创建窗口。
监控与状态:用 tmux capture-pane -p -t "$SESSION[-窗口]" -S -50 取最近输出,配合 rg 检索 error|fail|exception 或 listening|ready|started;用 tmux list-windows -F '#{window_name}: #{pane_current_command}' 查看窗口状态。
生命周期:tmux ls 列出会话,kill-session 只杀当前项目会话,kill-window 杀指定窗口,send-keys C-c 停止进程,重启时先发 C-c 再发启动命令。隔离要求:绝不使用 tmux kill-server,绝不杀非当前项目的会话,杀之前先校验会话名,因为其他 Claude Code 实例可能运行着自己的会话。
适用场景:tilt up、npm run dev、rails s、文件/测试 watcher、数据库服务等常驻进程;不适用一次性构建、10 秒内快速命令,或需要标准输出直接进入对话的场景。等待服务就绪时可轮询 capture-pane 匹配 listening|ready。
限制:资料未提供安装方式、平台支持范围和权限要求等事实。