用途
tmux-aware 用于在 TMUX 会话中管理服务与后台进程。当用户要求“在 tmux 中启动服务”“检查 tmux 窗格输出”“管理后台进程”或“在 tmux 中运行服务器”时使用该技能。其核心目标是在不弄乱当前视图的前提下,把 Claude 创建的所有窗格集中到一个名为 claude-controlled 的专用窗口中。
主要能力
- 在专用窗口 claude-controlled 中创建窗格,避免污染用户当前窗口。
- 按名称(窗格标题)查找已有窗格或窗口,而不是按进程查找。
- 发送启动命令后捕获输出,检测常见错误模式。
- 在无法按名称找到窗格时,列出可用选项并询问用户。
- 支持停止服务、查看日志、重启进程等操作。
- 支持同时运行多个服务,并可通过布局命令重新平衡窗格。
使用方式
启动服务的一般流程:
- 检查是否存在 claude-controlled 窗口:
tmux list-windows -F '#{window_index}:#{window_name}' | grep ':claude-controlled$'
- 如需要则创建窗口:
tmux new-window -n "claude-controlled"
- 为服务创建命名窗格:
tmux split-window -t claude-controlled -v
tmux select-pane -t claude-controlled -T "api-server"
- 发送启动命令:
tmux send-keys -t "claude-controlled:0.api-server" "npm run dev" Enter
- 验证是否启动成功:
sleep 2
tmux capture-pane -t "claude-controlled:0.api-server" -p -S -20
查找已有窗格:
tmux list-panes -a -F '#{window_name}:#{pane_index}:#{pane_title}'
捕获输出:
tmux capture-pane -t "pane-target" -p -S -50
停止服务:
tmux send-keys -t "pane-target" C-c
sleep 1
tmux capture-pane -t "pane-target" -p -S -10
命名约定
- 窗口:claude-controlled,所有 Claude 创建的窗格都放在这里。
- 窗格标题:小写、连字符分隔,与服务匹配,例如 api-server、redis、vite-dev、postgres。
错误检测
发送命令后捕获输出,查找常见错误模式,例如 Error:、ERROR、error:、Exception、exception、Failed、FAILED、failed、Cannot、cannot、提示符中的退出码、堆栈跟踪。发现问题时主动报告,例如“已启动服务器,但检测到错误:[片段]”。
多服务处理
- 使用垂直分割(-v)让日志并排显示。
- 每个窗格按服务命名,便于定位。
- 使用
tmux select-layout -t claude-controlled even-vertical重新平衡布局。 - 如果服务超过 3 个,考虑使用独立窗口而不是继续分割窗格。
适用场景
- 在 tmux 中启动 API 服务器、Redis、Vite 开发服务器、Postgres 等持久化服务。
- 检查某个服务的日志或运行状态。
- 重启或停止后台进程。
- 同时管理多个后台服务并查看各自输出。
限制与注意事项
- 不适用于一次性命令(如 git status、ls),这类命令无需持久窗格。
- 不要在用户当前窗口中创建窗格,不要破坏用户已有布局。
- 非 tmux 环境下,如果 tmux 检测失败,应回退到标准 Bash。
- 快速检查若用 Bash 工具捕获输出即可满足,则不必使用该技能。
- 任务完成后不要自动杀死窗格,用户可能希望保持服务运行;如用户要求清理,可执行
tmux kill-window -t claude-controlled。 - 如果启动服务后任务失败,应说明该窗格仍在运行。
示例工作流
用户:“启动一个 Redis 服务器”
- 检查 claude-controlled 窗口(已存在)。
- 创建新窗格:
tmux split-window -t claude-controlled -v - 命名:
tmux select-pane -T "redis" - 启动 Redis:
tmux send-keys -t "claude-controlled:redis" "redis-server" Enter - 等待并捕获:
sleep 2 && tmux capture-pane -t "claude-controlled:redis" -p -S -20 - 报告:“已在窗格 'redis'(claude-controlled 窗口)中启动 Redis 服务器。服务器已在端口 6379 就绪。”
用户:“检查 Redis 是否仍在运行”
- 列出窗格,找到 “redis”。
- 捕获输出:
tmux capture-pane -t "claude-controlled:redis" -p -S -30 - 根据输出报告状态。