用途:把 tmux 当作可编程终端复用器,用于驱动交互式命令行程序(Python REPL、gdb、ipdb、psql、mysql、node、bash 等),通过发送按键并抓取窗格输出实现远程控制。适用于 Linux 和 macOS 的原生 tmux,建议使用私有 socket 以避免自定义配置干扰。
主要能力:创建后台会话、向指定窗格发送字面文本或控制键(C-c、C-d、C-z、Escape 等)、抓取窗格历史输出、列出会话与窗格、按正则或固定字符串轮询等待提示符、清理会话或整个 socket。
使用方式:socket 约定放在 CLAUDE_TMUX_SOCKET_DIR(默认 ${TMPDIR:-/tmp}/claude-tmux-sockets),先 mkdir -p "$CLAUDE_TMUX_SOCKET_DIR",默认路径 SOCKET="$CLAUDE_TMUX_SOCKET_DIR/claude.sock"。启动会话示例:tmux -S "$SOCKET" new -d -s "$SESSION" -n shell;发送输入:tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'python3 -q' Enter;抓取输出:tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200;清理:tmux -S "$SOCKET" kill-session -t "$SESSION"。目标格式为 {session}:{window}.{pane},省略时默认 :0.0。发送字面文本用 -l 避免 shell 拆分;组合命令用单引号或 ANSI C 引号避免展开。等待提示符可用 ./scripts/wait-for-text.sh -t "$SESSION":0.0 -p '^>>>' -T 15 -l 4000,匹配成功退出 0,超时退出 1 并打印最后抓取文本。查找会话可用 ./scripts/find-sessions.sh -S "$SOCKET" 或 --all。
适用场景:需要与交互式工具进行多轮对话式操作时,例如调试、数据库客户端、REPL 探索。启动 Python 交互式 shell 时务必设置 PYTHON_BASIC_REPL=1,否则非基础控制台会干扰 send-keys;调试默认使用 lldb。
限制:依赖 bash、tmux、grep;tmux wait-for 不监视窗格输出,需改用轮询脚本;启动会话后应始终向用户打印可复制粘贴的监控命令(attach 或 capture-pane)。