terminal-session
SKILL.md
终端会话控制(tmux)
本技能完全通过已有的
exec工具调用系统级tmuxCLI,无需任何新工具或依赖。
使用时机
✅ 应当使用本技能的场景
- 监控 Claude Code / Codex 在 tmux 中的运行状态
- 向交互式终端程序发送输入(回答提示、选择选项)
- 读取 tmux 中长时间运行进程的输出
- 跨多轮对话操作同一个后台进程
- 检查已有 tmux 会话中的后台任务进度
❌ 不应使用本技能的场景
- 一次性 shell 命令(ls、grep、python script.py 等)→ 直接用
exec - 启动新后台进程(无需交互)→ 用
exec执行命令(末尾加&) - 非交互式脚本 → 直接用
exec - 进程不在 tmux 中 → 无法操作
- 创建新 tmux 会话 → 用
exec执行tmux new-session(本技能专注于操控已有会话) - Windows 原生(无 WSL) → tmux 不可用,告知用户需要 WSL2
常用会话名称约定
| 会话名 | 用途 |
|---|---|
shared |
主交互会话 |
worker-2 ~ worker-8 |
并行工作会话 |
ssh_prod |
生产环境 SSH |
claude_task |
Claude Code 任务会话 |
常用命令
列出会话
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
发送输入
# 发送文本(不回车)
tmux send-keys -t shared "hello"
# 发送文本并回车
tmux send-keys -t shared "ls -la" Enter
# 特殊按键
tmux send-keys -t shared Enter # 回车
tmux send-keys -t shared Escape # Esc
tmux send-keys -t shared C-c # Ctrl+C(中断)
tmux send-keys -t shared C-d # Ctrl+D(EOF / 退出 REPL)
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 new-session -d -s claude_task 'claude-code /workspace/project'
# 关闭会话
tmux kill-session -t sessionname
# 重命名会话
tmux rename-session -t old new
# 检查会话是否存在
tmux has-session -t my_session 2>/dev/null && echo "存在" || echo "不存在"
安全发送输入(重要)
对于交互式 TUI 程序(Claude Code、Codex 等),必须将文本和 Enter 拆开发送,避免多行粘贴导致的异常:
# ✅ 正确:先发文本,短暂等待,再发 Enter
tmux send-keys -t shared -l -- "Please apply the patch in src/foo.ts"
sleep 0.1
tmux send-keys -t shared Enter
# ❌ 错误:一次性发送可能引发多行粘贴问题
tmux send-keys -t shared "Please apply the patch in src/foo.ts" Enter
Claude Code 会话操作模式
检查会话是否在等待输入
# 查找常见提示符(❯、Yes/No、proceed、permission 等)
tmux capture-pane -t worker-3 -p | tail -10 | grep -E "❯|Yes.*No|proceed|permission|approve"
确认 Claude Code 提示
# 发送 y 确认
tmux send-keys -t worker-3 'y' Enter
# 选择编号选项
tmux send-keys -t worker-3 '2' Enter
向会话发送任务
tmux send-keys -t worker-4 -l -- "Fix the authentication bug in auth.js"
sleep 0.1
tmux send-keys -t worker-4 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
完整工作流示例
启动 Claude Code 并交互
# 1. 创建会话并启动
tmux new-session -d -s coder 'claude-code /workspace'
# 2. 等待启动(约 3 秒),读取初始状态
sleep 3 && tmux capture-pane -t coder -p | tail -20
# 3. 安全发送任务指令
tmux send-keys -t coder -l -- "Refactor the auth module to use JWT tokens"
sleep 0.1
tmux send-keys -t coder Enter
# 4. 等待执行,周期读取输出
sleep 10 && tmux capture-pane -t coder -p -S -100
# 5. 如有确认提示,回答 y
tmux capture-pane -t coder -p | tail -5 | grep -q "proceed" && \
tmux send-keys -t coder 'y' Enter
# 6. 完成后关闭会话
tmux kill-session -t coder
SSH 远程操作
# 建立连接(禁用首次连接确认)
tmux new-session -d -s ssh_prod 'ssh -o StrictHostKeyChecking=no user@10.0.0.1'
# 等待登录完成
sleep 2 && tmux capture-pane -t ssh_prod -p | tail -5
# 执行远程命令
tmux send-keys -t ssh_prod 'df -h && free -m' Enter
sleep 2 && tmux capture-pane -t ssh_prod -p | tail -20
注意事项
capture-pane必须加-p才会输出到 stdout(脚本中必须)-S -读取完整滚动历史;-S -200读取最近 200 行- 目标格式:
会话:窗口.面板(如shared:0.0) - tmux 会话在 SSH 断开后依然存活,无需重新连接
- 任务完成后务必
kill-session,防止僵尸进程堆积 exec工具的安全策略仍然有效,危险命令仍会被拦截
https://skills.sh/steipete/clawdis/tmux
Weekly Installs
4
Repository
countbot-ai/countbotGitHub Stars
210
First Seen
4 days ago
Security Audits
Installed on
claude-code3
openclaw2
gemini-cli2
github-copilot2
codex2
kimi-cli2