关于 tmux
tmux 是用于管理交互式终端会话的 Agent 技能,支持隔离套接字和并行运行编码 Agent。适合需要启动、监控和清理 TTY 进程的 Agent。
主要功能
- 01隔离的 tmux 套接字会话
- 02捕获并监控窗格输出
- 03跨套接字查找会话
- 04等待窗格中的文本
- 05并行运行编码 Agent
- 06清理会话和服务器
适用场景
- 01运行交互式 Python REPL
- 02监控长时间运行的 TTY 进程
- 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