tmux-cli 是一个命令行工具(CLI utility),用于在持续运行的交互式 CLI 会话中,或借助 tmux 与其他 CLI 智能体(CLI Agents)通信。它来自 sammcj/agentic-coding 来源。当被要求通过 SSH 连接远程主机等场景时可使用。
依赖与安装 该命令依赖安装 claude-code-tools。如果出现提示命令不可用的错误,可请用户使用以下命令安装: uv tool install claude-code-tools
沙箱注意事项 使用 tmux-cli 连接远程机器时,必须在沙箱外运行:tmux socket 位于沙箱允许路径之外,且 pane 中的 ssh 需要环境中的 SSH 认证。在沙箱内执行的 capture 会返回空结果。可将 tmux-cli 加入允许列表一次,以避免反复的审批提示。任务完成后应清理会话。
远程 SSH 主机(默认模式) 当需要在远程主机上通过 SSH 运行多个命令时,不要反复发出一次性 ssh host 'cmd' 调用——每次都会重新认证并需要单独审批。应打开一个持久的会话并驱动它。这是任何多命令远程工作的默认做法。
复用已有会话,而不是每个任务都新建一个(否则窗口会不断累积):检查 tmux-cli status / tmux-cli list_panes,若其 pane 健康则复用,只有在不存在时才执行 tmux-cli launch "zsh"。记录返回的 pane id。
在连接之前先在 pane 上设置自动清理,这样即使任务被放弃也不会有残留:
- 空闲超时:在启动的 zsh 中执行 export TMOUT=1800(在提示符下空闲 30 分钟后自动退出)。
- 硬性上限看门狗(zsh):( sleep 5400 && tmux kill-session -t remote-cli-session ) &! ——无论活动与否,90 分钟后杀掉整个会话。tmux-cli 的远程会话在默认 socket 上名为 remote-cli-session,因此原始 tmux 可以定位它。&! 用于后台运行并脱离,使其在 shell 退出后仍存活。
使用 keepalive 连接,这样断开的链路会自行拆除:ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o StrictHostKeyChecking=no user@host。
连接后,在远程 shell 上设置相同的空闲超时(busybox ash 和 bash 都支持它):export TMOUT=1800。
使用 send + wait_idle + capture 来执行工作。只有 pane 的 ssh 使用网络 / SSH 认证;tmux-cli 本身只与本地 tmux socket 通信。
完成后显式拆除:tmux-cli cleanup 杀掉受管会话;tmux-cli kill --pane=<id> 杀掉单个 pane。不要留下空闲会话——上述超时是后备措施,而不是清理的替代品。
关键命令 使用退出码检测执行:需要知道 shell 命令成功还是失败时使用 tmux-cli execute: tmux-cli execute "make test" --pane=2
返回 JSON: {"output": "...", "exit_code": 0}
tmux-cli execute "npm install" --pane=ops:1.3 --timeout=60
成功返回 exit_code=0,失败返回非零,超时返回 -1
适用于:
- 运行构建并知道是否通过
- 运行测试并检测通过/失败
- 应在失败时中止的多步自动化
注意:execute 仅用于 shell 命令,不用于智能体之间的聊天。
提示 与另一个 Claude Code 实例通信时,改用 send + wait_idle + capture。 若要等待某个条件,使用带 until 循环的 Monitor(例如 until <check>; do sleep 2; done);若要等待已启动的命令,使用 run_in_background: true。