name: tmux description: 通过发送按键和抓取窗格输出来远程控制tmux会话,用于交互式CLI。 metadata: { “openclaw”: { “emoji”: “🧵”, “os”: [“darwin”, “linux”], “requires”: { “bins”: [“tmux”] } } }
tmux 会话控制
通过发送按键和读取输出来控制tmux会话。对于管理Claude Code会话至关重要。
何时使用
✅ 在以下情况使用此技能:
- 监控tmux中的Claude/Codex会话
- 向交互式终端应用程序发送输入
- 从tmux中长时间运行的进程中抓取输出
- 以编程方式导航tmux窗格/窗口
- 检查现有会话中的后台工作
何时不使用
❌ 在以下情况不要使用此技能:
- 运行一次性shell命令 → 直接使用
exec工具 - 启动新的后台进程 → 使用带
background:true的exec - 非交互式脚本 → 使用
exec工具 - 进程不在tmux中
- 需要创建新的tmux会话 → 使用带
tmux new-session的exec
示例会话
| 会话 | 用途 |
|---|---|
shared |
主要交互式会话 |
worker-2 - worker-8 |
并行工作会话 |
常用命令
列出会话
tmux list-sessions
tmux ls
捕获输出
# 窗格的最后20行
tmux capture-pane -t shared -p | tail -20
# 整个滚动缓冲区
tmux capture-pane -t shared -p -S -
# 窗口中特定窗格
tmux capture-pane -t shared:0.0 -p
发送按键
# 发送文本(不按Enter键)
tmux send-keys -t shared "hello"
# 发送文本 + Enter
tmux send-keys -t shared "y" Enter
# 发送特殊键
tmux send-keys -t shared Enter
tmux send-keys -t shared Escape
tmux send-keys -t shared C-c # Ctrl+C
tmux send-keys -t shared C-d # Ctrl+D (EOF)
tmux send-keys -t shared C-z # Ctrl+Z (挂起)
窗口/窗格导航
# 选择窗口
tmux select-window -t shared:0
# 选择窗格
tmux select-pane -t shared:0.1
# 列出窗口
tmux list-windows -t shared
会话管理
# 创建新会话
tmux new-session -d -s newsession
# 终止会话
tmux kill-session -t sessionname
# 重命名会话
tmux rename-session -t old new
安全发送输入
对于交互式TUI(Claude Code、Codex等),将文本和Enter键分成单独的发送,以避免粘贴/多行边缘情况:
tmux send-keys -t shared -l -- "请应用src/foo.ts中的补丁"
sleep 0.1
tmux send-keys -t shared Enter
Claude Code 会话模式
检查会话是否需要输入
# 查找提示符
tmux capture-pane -t worker-3 -p | tail -10 | grep -E "❯|Yes.*No|proceed|permission"
批准Claude Code提示
# 发送'y'和Enter
tmux send-keys -t worker-3 'y' Enter
# 或选择编号选项
tmux send-keys -t worker-3 '2' Enter
检查所有会话状态
for s in shared worker-2 worker-3 worker-4 worker-5 worker-6 worker-7 worker-8; do
echo "=== $s ==="
tmux capture-pane -t $s -p 2>/dev/null | tail -5
done
向会话发送任务
tmux send-keys -t worker-4 "修复auth.js中的bug" Enter
注意事项
- 使用
capture-pane -p打印到stdout(脚本编写必不可少) -S -捕获整个滚动缓冲区历史记录- 目标格式:
session:window.pane(例如,shared:0.0) - 会话在SSH断开连接后仍然存在