用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/andrew-tenkara/CLAUDE-MD --skill tower命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Setup wizard and dashboard for RTK (Bash output filtering) and Headroom (API-side session compression). Run on first use to install and wire both. Run again to see a live savings dashboard.
Queue a sortie to Tower — ticket, file, or text → creates worktree, shows on TUI board. Deploy from TUI with D/R. Requires Tower to be running.
Orchestrate parallel Claude Code agents across Linear tickets. Pulls tickets, reviews them interactively, spawns isolated git worktrees with Claude Code agents in iTerm2 panes, monitors progress, and manages the full lifecycle through code review and push. Use when the user says /sortie, wants to process Linear tickets in parallel, or mentions deploying agents on tickets.
基于 SOC 职业分类
正在显示 SKILL.md
| name | tower |
| description | USS Tenkara Pri-Fly — Full agent orchestration TUI with hotkey-driven agent management and Mini Boss AI |
| command | /tower |
Full agent orchestration dashboard. You are the Air Boss — spawn agents, manage missions, and command from a single pane of glass. All actions via hotkeys. Talk to Mini Boss in its iTerm2 pane for complex orchestration.
textual and watchdog (auto-installed on first launch)claude) in PATH| Tool | Purpose | Install |
|---|---|---|
| CGC | Code graph + fuzzy symbol search (dedup check) | pipx install codegraphcontext — see setup below |
| Serena | Per-worktree code intelligence MCP | uvx --from git+https://github.com/oraios/serena serena |
CGC adds fuzzy symbol search (edit-distance matching) to the dedup check hook. Without it, the hook falls back to Serena find_symbol (exact match) and Grep (regex) — which work fine for most cases. CGC catches near-duplicates that exact search misses.
If installed, setup is:
pipx install codegraphcontext — binary at ~/.local/bin/cgc, FalkorDB Lite backend (zero-config, no Docker)cgc mcp start — register as MCP server (user scope, available across all projects)cgc index /path/to/your-project/src — one-time index, file watcher keeps it current after that.cgcignore at project root to exclude node_modules, build artifacts, test fixturesNotes:
src/ only — do NOT index individual worktree paths (creates duplicate nodes)cgc index --force /path/to/your-project/src (~15s)cgc list-repos to verify, cgc clean for orphaned nodesOpen the commander in a new iTerm2 window (never run the TUI directly via Bash tool):
bash ~/.claude/skills/tower/scripts/launch-commander.sh --project-dir <PROJECT_DIR>
Options:
--project-dir <path> — project root (defaults to git root or cwd)--linear-org <org> — Linear organization slug (saved to config.json)IMPORTANT: Do NOT run commander-dashboard.py directly — it's a Textual TUI that needs a real terminal. Always use launch-commander.sh.
| Key | Action |
|---|---|
D | Deploy — open pane + run directive (full mission kickoff) |
V | Spin up dev server for selected pilot |
O | Open pilot's localhost server in browser |
P | Open pilot's GitHub PR in browser |
B | Open BullBoard for selected pilot |
L | Browse Linear issues (or open pilot's ticket) |
T | Open terminal at worktree (or project root) |
W | Wave-off — hard kill + server cleanup |
Z | Dismiss — debrief + remove worktree |
K | Compact — trigger context compaction |
S | Sync — re-scan worktrees |
M | Relaunch Mini Boss |
F | Toggle flight strip visibility |
Q | Quit |
| Key | Action |
|---|---|
Enter | Deploy selected mission |
L | Open selected mission's Linear ticket |
Del/Backspace/X | Remove from queue |
| Key | Action |
|---|---|
Esc | Return focus to board |
Tab | Cycle focus |
↑/↓ | Select pilot on board |
| Key | Action |
|---|---|
Ctrl+Enter | Send message to agent |
Enter | Newline |
Ctrl+C | Close chat pane |
Esc | Return to Pri-Fly |
Tab | Next chat pane |
Available in the radio/command input:
| Command | Action |
|---|---|
/deploy <ticket> [--model X] | Launch new agent |
/queue <desc> [--priority N] | Add to mission queue |
/linear [--team X] | Browse Linear issues |
/recall <callsign> | Graceful wind-down |
/wave-off <callsign> | Hard kill |
/resume <callsign> | Resume in existing worktree |
/compact <callsign|idle|all> | Trigger compaction |
/auto-compact on|off | Auto-compact idle agents |
/sitrep | Request status from all |
/briefing <callsign> | Show directive |
/auto on|off [max] | Auto-deploy from queue |
/rearm <callsign> <ticket> | Reassign recovered agent |
CLI tools for the Mini Boss (XO) to manage the dashboard:
bash ~/.claude/skills/tower/scripts/xo-tools.sh <command> [args...]
| Command | Action |
|---|---|
board | Show flight deck state |
board-json | Board state as JSON |
health | Full system health report |
set-status <ticket> <status> | Override agent status |
dismiss <ticket> | Force RECOVERED + session-ended |
inject <ticket> <message> | Queue directive for agent |
reassign-model <ticket> <model> | Change model |
clear-stale | Mark dead agents as ended |
tail-agent <ticket> | Tail agent's JSONL stream |
The agent board table has 7 columns. If data looks wrong, use this map to find the right file to edit.
| # | Column | What it shows | Data source |
|---|---|---|---|
| 0 | CALLSIGN | Agent name + mood indicator | pilot.callsign, pilot.mood |
| 1 | MISSION | Ticket ID · title · current phase | pilot.ticket_id, pilot.mission_title, pilot.flight_phase |
| 2 | MODEL | Model name; server URL on 2nd line when running | pilot.model, pilot.status_hint (shown if contains localhost: or 127.0.0.1:) |
| 3 | STATUS | Status icon + label | pilot.status via STATUS_ICONS / STATUS_COLORS |
| 4 | FUEL | Token budget gauge, blinks red below 30% | pilot.fuel_pct |
| 5 | TIME | Elapsed since launch | pilot.launched_at |
| 6 | TOOLS | Tool calls (tx) · errors (✗ red) | pilot.tool_calls, pilot.error_count |
Mission title looks wrong or truncated
The title passes through two truncations:
commands.py:258 — ticket.title[:60] (hard cap, stored on the pilot)widgets.py:739 — clean_title[:50] (display cap)To increase display length: raise the [:50] limit at widgets.py:739.
To increase the stored cap: raise [:60] at commands.py:258 and 642.
Mission title has a double prefix (e.g. [FOO-123] FOO-123: do thing)
Strip logic lives at widgets.py:741–742. Two .replace() calls remove the [TICKET-ID] and TICKET-ID: prefixes before display.
Title is correct in code but wrong in Linear
The title is pulled live from Linear on deploy — no cache. Edit the ticket directly in Linear and re-deploy; no code changes needed.
Server URL not showing under model
status_hint must contain localhost: or 127.0.0.1:. The agent writes this to its flight-status file. Check pilot.status_hint via xo-tools.sh board-json.
To reword these column descriptions
Edit this section of SKILL.md. The inline code comment at widgets.py:684 mirrors it — update both if you change the descriptions.
Mini Boss (Opus) spawns automatically on launch in the first Pit Boss pane. It assesses open worktrees and Linear status on startup. Talk to it directly in its iTerm2 pane for:
| Status | Meaning |
|---|---|
| ON_DECK | Pane open, not using tokens |
| IN_FLIGHT | Pane open, actively consuming tokens |
| ON_APPROACH | Tokens stopped, landing sequence |
| RECOVERED | Pane closed, on deck |
Squadron names assigned per-mission (per ticket), not per model:
All pilots share a SQLite database at <PROJECT_DIR>/.sortie/storage.db. Auto-debriefs are written on session end (pane close or graceful exit), capturing:
The next pilot on the same ticket receives this as ## Prior Intelligence in their directive, plus FTS-ranked cross-ticket insights from agents that touched similar files.