SuperAPI AI 工具集

tmux-aware

部署与运维

查看项目

更新于 10-16 04:08

技能介绍

用途

tmux-aware 用于在 TMUX 会话中管理服务与后台进程。当用户要求“在 tmux 中启动服务”“检查 tmux 窗格输出”“管理后台进程”或“在 tmux 中运行服务器”时使用该技能。其核心目标是在不弄乱当前视图的前提下,把 Claude 创建的所有窗格集中到一个名为 claude-controlled 的专用窗口中。

主要能力

  • 在专用窗口 claude-controlled 中创建窗格,避免污染用户当前窗口。
  • 按名称(窗格标题)查找已有窗格或窗口,而不是按进程查找。
  • 发送启动命令后捕获输出,检测常见错误模式。
  • 在无法按名称找到窗格时,列出可用选项并询问用户。
  • 支持停止服务、查看日志、重启进程等操作。
  • 支持同时运行多个服务,并可通过布局命令重新平衡窗格。

使用方式

启动服务的一般流程:

  1. 检查是否存在 claude-controlled 窗口:
tmux list-windows -F '#{window_index}:#{window_name}' | grep ':claude-controlled$'
  1. 如需要则创建窗口:
tmux new-window -n "claude-controlled"
  1. 为服务创建命名窗格:
tmux split-window -t claude-controlled -v
tmux select-pane -t claude-controlled -T "api-server"
  1. 发送启动命令:
tmux send-keys -t "claude-controlled:0.api-server" "npm run dev" Enter
  1. 验证是否启动成功:
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 服务器”

  1. 检查 claude-controlled 窗口(已存在)。
  2. 创建新窗格:tmux split-window -t claude-controlled -v
  3. 命名:tmux select-pane -T "redis"
  4. 启动 Redis:tmux send-keys -t "claude-controlled:redis" "redis-server" Enter
  5. 等待并捕获:sleep 2 && tmux capture-pane -t "claude-controlled:redis" -p -S -20
  6. 报告:“已在窗格 'redis'(claude-controlled 窗口)中启动 Redis 服务器。服务器已在端口 6379 就绪。”

用户:“检查 Redis 是否仍在运行”

  1. 列出窗格,找到 “redis”。
  2. 捕获输出:tmux capture-pane -t "claude-controlled:redis" -p -S -30
  3. 根据输出报告状态。