toolkit/packages/skills/swarm-status/SKILL.md
Display comprehensive status dashboard for a swarm team
npx skillsauth add stevengonsalvez/agents-in-a-box swarm-statusInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Display a comprehensive status dashboard for a swarm team.
/swarm-status [team-id]
| Argument | Required | Description |
|----------|----------|-------------|
| team-id | No | Team ID to check. If omitted, shows all teams. |
When you receive this command:
Load Team Data
source {{HOME_TOOL_DIR}}/utils/swarm-lib.sh
if [ -n "$TEAM_ID" ]; then
STATUS=$(swarm_get_status "$TEAM_ID")
else
# List all teams
for team in $(swarm_list_teams); do
swarm_get_status "$team"
done
fi
Fetch Beads Progress (if epic linked)
EPIC_ID=$(echo "$STATUS" | jq -r '.epic_id')
if [ -n "$EPIC_ID" ] && [ "$EPIC_ID" != "null" ]; then
BEADS_STATUS=$(bd swarm status "$EPIC_ID" --json 2>/dev/null || echo '{}')
TOTAL_TASKS=$(echo "$BEADS_STATUS" | jq -r '.total // 0')
COMPLETED_TASKS=$(echo "$BEADS_STATUS" | jq -r '.completed // 0')
PROGRESS_PCT=$((COMPLETED_TASKS * 100 / (TOTAL_TASKS + 1)))
fi
Format Dashboard Output
================================================================
SWARM STATUS: swarm-1738585396
================================================================
OVERVIEW
----------------------------------------------------------------
Epic: bd-epic-platform-rebuild
Created: 2026-02-03 11:23:16
Progress: 6/15 complete (40%)
========---------- 40%
LEADER
----------------------------------------------------------------
Session: swarm-1738585396-leader
Status: * active (coordinating)
Tmux: running
Unread: 2 messages
AGENTS
----------------------------------------------------------------
NAME STATUS TASK DURATION UNREAD
-------- ---------- --------------- -------- ------
agent-1 * working bd-task-007 45m 12s 0
agent-2 o idle (waiting) -- 1
agent-3 * working bd-task-009 12m 03s 0
READY WORK (Unassigned)
----------------------------------------------------------------
bd-task-010 [P1] Implement user profile API
bd-task-011 [P2] Add validation middleware
bd-task-012 [P2] Write integration tests
RECENT MESSAGES
----------------------------------------------------------------
11:45 agent-1 -> leader: "Backend API complete, ready for review"
11:47 leader -> agent-2: "Pick up bd-task-010 when ready"
11:50 agent-3 -> leader: "50% progress on bd-task-009"
COMMANDS
----------------------------------------------------------------
Attach to leader: tmux attach -t swarm-1738585396-leader
Attach to agent-1: tmux attach -t swarm-1738585396-agent-1
Check inbox: /swarm-inbox
Shutdown: /swarm-shutdown swarm-1738585396
================================================================
| Symbol | Meaning |
|--------|---------|
| * | Active/Working |
| o | Idle/Waiting |
| ~ | Starting/Initializing |
| x | Error/Dead |
| + | Running (tmux) |
| - | Not running (tmux) |
get_full_status() {
local team_id="$1"
local team_dir="{{HOME_TOOL_DIR}}/swarm/$team_id"
# Basic team info
local team_json=$(cat "$team_dir/team.json")
local epic_id=$(echo "$team_json" | jq -r '.epic_id')
# Beads progress
local beads_info='{}'
if command -v bd &>/dev/null && [ -n "$epic_id" ]; then
beads_info=$(bd swarm status "$epic_id" --json 2>/dev/null || echo '{}')
fi
# Check tmux sessions
local leader_session=$(echo "$team_json" | jq -r '.leader.session')
local leader_alive=false
tmux has-session -t "$leader_session" 2>/dev/null && leader_alive=true
# Check each agent
local agents_status="[]"
for member in $(echo "$team_json" | jq -c '.members[]'); do
local name=$(echo "$member" | jq -r '.name')
local session=$(echo "$member" | jq -r '.session')
local alive=false
tmux has-session -t "$session" 2>/dev/null && alive=true
# Count unread
local inbox="$team_dir/inbox/$name.jsonl"
local unread=$(wc -l < "$inbox" 2>/dev/null | tr -d ' ' || echo 0)
agents_status=$(echo "$agents_status" | jq \
--argjson m "$member" \
--argjson alive "$alive" \
--argjson unread "$unread" \
'. += [$m + {tmux_alive: $alive, unread: $unread}]')
done
# Get ready work
local ready_work='[]'
if command -v bd &>/dev/null; then
ready_work=$(bd ready --unassigned --json 2>/dev/null || echo '[]')
fi
# Recent messages (from all inboxes)
local recent_messages='[]'
for inbox in "$team_dir"/inbox/*.jsonl; do
if [ -f "$inbox" ]; then
local msgs=$(tail -5 "$inbox" 2>/dev/null || echo '')
if [ -n "$msgs" ]; then
recent_messages=$(echo "$recent_messages" | jq --slurpfile new <(echo "$msgs" | jq -s '.') '. + $new[0]')
fi
fi
done
recent_messages=$(echo "$recent_messages" | jq 'sort_by(.ts) | .[-5:]')
# Combine all
jq -n \
--argjson team "$team_json" \
--argjson beads "$beads_info" \
--argjson leader_alive "$leader_alive" \
--argjson agents "$agents_status" \
--argjson ready "$ready_work" \
--argjson messages "$recent_messages" \
'{
team: $team,
beads: $beads,
leader_alive: $leader_alive,
agents: $agents,
ready_work: $ready,
recent_messages: $messages
}'
}
When no team-id provided:
================================================================
ACTIVE SWARMS
================================================================
TEAM ID EPIC AGENTS PROGRESS
------------------ --------------------- ------ --------
swarm-1738585396 bd-epic-platform 3/4 40%
swarm-1738590000 bd-epic-auth-refactor 2/4 75%
Use: /swarm-status <team-id> for details
================================================================
| Error | Output | |-------|--------| | Team not found | "Error: Team {id} not found. Use /swarm-status to list teams." | | No teams exist | "No active swarms. Create one with /swarm-create" | | Beads unavailable | Progress section shows "N/A" |
documentation
Report reflect drain spend over a time window — tokens split by cached (cache_read), uncached writes (cache_creation), and io (input+output), with a $ estimate, grouped by day / outcome / model / transcript. Reads the drainer's cost log and surfaces outlier runs and cache-reuse health (the 41.5M-token failure mode = low cache reuse + high cache writes). Use to answer "what is reflection costing me" for the last day / week.
development
Show fleet status — every claude session running on the host, merged across ainb + claude-peers broker + background jobs. Use when you need to enumerate sessions before composing an action, see which sessions have a peer registered (broker-routable) vs tmux-only, check the `summary` of each session, or pipe the list into jq for filtering. Default output: text table. Pass --format json for LLM consumption.
testing
Ordered multi-step prompts to fleet targets, ack-gated between steps via JSONL assistant-turn-end detection. Use for cycles like disconnect→reconnect→verify, or any flow where step N+1 requires step N to have completed first. The skill BLOCKS until each target's transcript shows the next assistant turn finishing OR per-step timeout fires (default 300s).
development
Center control panel — enumerate every claude session that is blocked waiting on something: a user answer (AskUserQuestion fired), an API error retry, an idle assistant turn-end with no follow-up, or an explicit WAITING: marker. Returns rich JSON with signal kind + context per session. Use this when you've stepped away from the fleet and want one place to see everything that wants your attention and answer it.