mcpField
T
tmux

tmux

github.com/hkudsAgent 工作流49.7k91 次安装1 天前更新
代码仓库

关于 tmux

tmux 是用于管理交互式终端会话的 Agent 技能,支持隔离套接字和并行运行编码 Agent。适合需要启动、监控和清理 TTY 进程的 Agent。

主要功能

  1. 01隔离的 tmux 套接字会话
  2. 02捕获并监控窗格输出
  3. 03跨套接字查找会话
  4. 04等待窗格中的文本
  5. 05并行运行编码 Agent
  6. 06清理会话和服务器

适用场景

  1. 01运行交互式 Python REPL
  2. 02监控长时间运行的 TTY 进程
  3. 03协调并行运行的 Codex 或 Claude Code

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/hkuds/nanobot --skill tmux

安装后在 Claude Code 中输入/tmux确认已加载。

附带文件scripts/find-sessions.shscripts/wait-for-text.sh

详细介绍

tmux 技能

仅在需要交互式 TTY 时使用 tmux。对于长时间运行、非交互式的任务,优先使用 exec 后台模式。

快速开始(独立 socket,exec 工具)

SOCKET_DIR="${NANOBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/nanobot-tmux-sockets}"
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/nanobot.sock"
SESSION=nanobot-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

启动会话后,始终打印监控命令:

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

Socket 约定

  • 使用 NANOBOT_TMUX_SOCKET_DIR 环境变量。
  • 默认 socket 路径:"$NANOBOT_TMUX_SOCKET_DIR/nanobot.sock"。

定位窗格与命名

  • 目标格式:session:window.pane(默认为 :0.0)。
  • 保持名称简短;避免使用空格。
  • 查看:tmux -S "$SOCKET" list-sessions、tmux -S "$SOCKET" list-panes -a。

查找会话

  • 列出你 socket 上的会话:{baseDir}/scripts/find-sessions.sh -S "$SOCKET"。
  • 扫描所有 socket:{baseDir}/scripts/find-sessions.sh --all(使用 NANOBOT_TMUX_SOCKET_DIR)。

安全地发送输入

  • 优先使用字面量发送:tmux -S "$SOCKET" send-keys -t target -l -- "$cmd"。
  • 控制键:tmux -S "$SOCKET" send-keys -t target C-c。

观察输出

  • 捕获最近的历史记录:tmux -S "$SOCKET" capture-pane -p -J -t target -S -200。
  • 等待提示符:{baseDir}/scripts/wait-for-text.sh -t session:0.0 -p 'pattern'。
  • 可以附加;使用 Ctrl+b d 分离。

启动进程

  • 对于 python REPL,设置 PYTHON_BASIC_REPL=1(非 basic REPL 会破坏 send-keys 流程)。

Windows / WSL

  • tmux 在 macOS/Linux 上受支持。在 Windows 上,请使用 WSL 并在 WSL 内安装 tmux。
  • 此技能仅限 darwin/linux,且要求 tmux 在 PATH 中。

编排编码 Agent(Codex、Claude Code)

tmux 擅长并行运行多个编码 Agent:

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

提示:

  • 为并行修复使用单独的 git worktree(避免分支冲突)
  • 在全新克隆中运行 codex 之前先执行 pnpm install
  • 检查 shell 提示符(❯ 或 $)以检测完成
  • Codex 需要 --yolo 或 --full-auto 才能进行非交互式修复

清理

  • 终止一个会话:tmux -S "$SOCKET" kill-session -t "$SESSION"。
  • 终止 socket 上的所有会话:tmux -S "$SOCKET" list-sessions -F '#{session_name}' | xargs -r -n1 tmux -S "$SOCKET" kill-session -t。
  • 移除私有 socket 上的所有内容:tmux -S "$SOCKET" kill-server。

辅助工具:wait-for-text.sh

{baseDir}/scripts/wait-for-text.sh 在窗格中轮询正则表达式(或固定字符串),并带有超时。

{baseDir}/scripts/wait-for-text.sh -t session:0.0 -p 'pattern' [-F] [-T 20] [-i 0.5] [-l 2000]
  • -t/--target 窗格目标(必填)
  • -p/--pattern 要匹配的正则表达式(必填);添加 -F 表示固定字符串
  • -T 超时秒数(整数,默认 15)
  • -i 轮询间隔秒数(默认 0.5)
  • -l 要搜索的历史行数(整数,默认 1000)

评论

支持 Markdown