一聚教程网:一个值得你收藏的教程网站

热门教程

tmux:远程 CLI 控制与智能体编排 - Openclaw Skills

时间:2026-08-18 14:42:01 编辑:袖梨 来源:一聚教程网

什么是 tmux?

tmux 技能为 Openclaw Skills 提供了一个强大的接口,通过持久、隔离的会话与基于终端的环境进行交互。与标准 shell 执行不同,此技能允许进行交互式 TTY 管理,使智能体能够发送特定按键、处理复杂的 REPL,并监控长时间运行过程的实时输出。

通过利用专用的 Unix 套接字,它确保自动化过程与用户的主终端环境保持隔离。这使其成为开发者构建复杂 Openclaw Skills 的必备工具,特别是那些需要多步终端交互或自主编码智能体并行执行的任务。

下载入口:https://github.com/openclaw/skills/tree/main/skills/steipete/tmux

安装与下载

1. ClawHub CLI

从源直接安装技能的最快方式。

npx clawhub@latest install tmux

2. 手动安装

将技能文件夹复制到以下位置之一

全局模式 ~/.openclaw/skills/ 工作区 <project>/skills/

优先级:工作区 > 本地 > 内置

3. 提示词安装

将此提示词复制到 OpenClaw 即可自动安装。

请帮我使用 Clawhub 安装 tmux。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。

tmux 应用场景

  • 运行非基本 shell 模式可能失败的交互式 Python REPL。
  • 在不同的 git 工作树中并行编排多个编码智能体(如 Codex 或 Claude Code)。
  • 抓取长时间运行后台任务的实时输出,以检测完成情况或错误。
  • 管理需要在智能体进程重启后依然存在的持久终端会话。
tmux 工作原理
  1. 初始化隔离的套接字目录,以防止与其他 Openclaw Skills 发生会话冲突。
  2. 使用特定的套接字和会话名称创建一个新的后台 tmux 会话。
  3. 向目标窗格发送原始按键或字面命令,以驱动交互式应用程序。
  4. 抓取窗格历史记录或使用轮询脚本等待特定的文本模式或提示符。
  5. 同时监控多个会话,以跟踪并行智能体的进度。
  6. 自动化任务完成后,终止会话或清理整个套接字服务器。

tmux 配置指南

确保您的主机(macOS 或 Linux)上已安装 tmux。对于 Windows 用户,必须在 WSL 环境中安装 tmux。按如下方式设置套接字目录:

SOCKET_DIR="${CLAWDBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/clawdbot-tmux-sockets}"
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/clawdbot.sock"
SESSION=my-session-name

# 在后台启动新会话
tmux -S "$SOCKET" new -d -s "$SESSION"

tmux 数据架构与分类体系

该技能通过 tmux 套接字和内部缓冲区历史记录管理数据。以下是该技能使用的组织结构:

组件 类型 描述
套接字路径 文件 用于会话隔离和通信的 Unix 域套接字
会话 标识符 逻辑任务的命名分组(例如 agent-1, repl-test)
目标窗格 标识符 格式为 session:window.pane 的精确坐标(默认 :0.0)
历史缓冲区 文本 通过 capture-pane 捕获的回滚内容,用于分析
脚本助手 可执行文件 实用脚本,如 wait-for-text.sh,用于基于正则的监控
name: tmux
description: Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.
metadata: {"clawdbot":{"emoji":"??","os":["darwin","linux"],"requires":{"bins":["tmux"]}}}

tmux Skill (Clawdbot)

Use tmux only when you need an interactive TTY. Prefer bash background mode for long-running, non-interactive tasks.

Quickstart (isolated socket, bash tool)

SOCKET_DIR="${CLAWDBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/clawdbot-tmux-sockets}"
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/clawdbot.sock"
SESSION=clawdbot-python

tmux -S "$SOCKET" new -d -s "$SESSION" -n shell
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'PYTHON_BASIC_REPL=1 python3 -q' Enter
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200

After starting a session, always print monitor commands:

To monitor:
  tmux -S "$SOCKET" attach -t "$SESSION"
  tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200

Socket convention

  • Use CLAWDBOT_TMUX_SOCKET_DIR (default ${TMPDIR:-/tmp}/clawdbot-tmux-sockets).
  • Default socket path: "$CLAWDBOT_TMUX_SOCKET_DIR/clawdbot.sock".

Targeting panes and naming

  • Target format: session:window.pane (defaults to :0.0).
  • Keep names short; avoid spaces.
  • Inspect: tmux -S "$SOCKET" list-sessions, tmux -S "$SOCKET" list-panes -a.

Finding sessions

  • List sessions on your socket: {baseDir}/scripts/find-sessions.sh -S "$SOCKET".
  • Scan all sockets: {baseDir}/scripts/find-sessions.sh --all (uses CLAWDBOT_TMUX_SOCKET_DIR).

Sending input safely

  • Prefer literal sends: tmux -S "$SOCKET" send-keys -t target -l -- "$cmd".
  • Control keys: tmux -S "$SOCKET" send-keys -t target C-c.

Watching output

  • Capture recent history: tmux -S "$SOCKET" capture-pane -p -J -t target -S -200.
  • Wait for prompts: {baseDir}/scripts/wait-for-text.sh -t session:0.0 -p 'pattern'.
  • Attaching is OK; detach with Ctrl+b d.

Spawning processes

  • For python REPLs, set PYTHON_BASIC_REPL=1 (non-basic REPL breaks send-keys flows).

Windows / WSL

  • tmux is supported on macOS/Linux. On Windows, use WSL and install tmux inside WSL.
  • This skill is gated to darwin/linux and requires tmux on PATH.

Orchestrating Coding Agents (Codex, Claude Code)

tmux excels at running multiple coding agents in parallel:

SOCKET="${TMPDIR:-/tmp}/codex-army.sock"

# Create multiple sessions
for i in 1 2 3 4 5; do
  tmux -S "$SOCKET" new-session -d -s "agent-$i"
done

# Launch agents in different workdirs
tmux -S "$SOCKET" send-keys -t agent-1 "cd /tmp/project1 && codex --yolo 'Fix bug X'" Enter
tmux -S "$SOCKET" send-keys -t agent-2 "cd /tmp/project2 && codex --yolo 'Fix bug Y'" Enter

# Poll for completion (check if prompt returned)
for sess in agent-1 agent-2; do
  if tmux -S "$SOCKET" capture-pane -p -t "$sess" -S -3 | grep -q "?"; then
    echo "$sess: DONE"
  else
    echo "$sess: Running..."
  fi
done

# Get full output from completed session
tmux -S "$SOCKET" capture-pane -p -t agent-1 -S -500

Tips:

  • Use separate git worktrees for parallel fixes (no branch conflicts)
  • pnpm install first before running codex in fresh clones
  • Check for shell prompt (? or $) to detect completion
  • Codex needs --yolo or --full-auto for non-interactive fixes

Cleanup

  • Kill a session: tmux -S "$SOCKET" kill-session -t "$SESSION".
  • Kill all sessions on a socket: tmux -S "$SOCKET" list-sessions -F '#{session_name}' | xargs -r -n1 tmux -S "$SOCKET" kill-session -t.
  • Remove everything on the private socket: tmux -S "$SOCKET" kill-server.

Helper: wait-for-text.sh

{baseDir}/scripts/wait-for-text.sh polls a pane for a regex (or fixed string) with a timeout.

{baseDir}/scripts/wait-for-text.sh -t session:0.0 -p 'pattern' [-F] [-T 20] [-i 0.5] [-l 2000]
  • -t/--target pane target (required)
  • -p/--pattern regex to match (required); add -F for fixed string
  • -T timeout seconds (integer, default 15)
  • -i poll interval seconds (default 0.5)
  • -l history lines to search (integer, default 1000)

热门栏目