# show-sprint-status
> Launch a live sprint status dashboard from BMAD sprint-status.yaml. Creates a Python web server with WebSocket updates, dark mode UI, auto-shutdown when no clients connected. Use when user wants to view sprint progress, monitor story status, or needs a visual dashboard for BMAD projects.
- Author: Neal Sanche
- Repository: nealsanche/nealsanche-claude-plugins
- Version: 20251215171701
- Stars: 0
- Forks: 0
- Last Updated: 2026-02-07
- Source: https://github.com/nealsanche/nealsanche-claude-plugins
- Web: https://mule.run/skillshub/@@nealsanche/nealsanche-claude-plugins~show-sprint-status:20251215171701
---
---
name: show-sprint-status
description: Launch a live sprint status dashboard from BMAD sprint-status.yaml. Creates a Python web server with WebSocket updates, dark mode UI, auto-shutdown when no clients connected. Use when user wants to view sprint progress, monitor story status, or needs a visual dashboard for BMAD projects.
---
Launch a beautiful, real-time sprint status dashboard that reads from BMAD's sprint-status.yaml file. The server runs in the background, updates via WebSocket when the YAML file changes, and auto-shuts down when all browser clients disconnect.
1. Find sprint-status.yaml in the current BMAD project using Glob tool
2. Start a NEW server in background (auto-assigns a free port)
3. Parse the server output to get the assigned port
4. Open the dashboard in the default browser at the correct port
5. Server auto-shuts down when browser tab closes (no clients connected for 30s)
Use Glob tool to find `**/sprint-status.yaml` in the current project.
Expected locations:
- `docs/sprint-artifacts/sprint-status.yaml`
- `sprint-status.yaml`
If not found, inform user that sprint-status.yaml is required and suggest running sprint-planning workflow.
- DO NOT kill existing servers - multiple dashboards can run simultaneously on different ports
- Each server auto-assigns its own free port (no conflicts)
- Parse the server's stdout to get the actual port, not lsof/grep
Execute these as SEPARATE Bash tool calls:
**Step 1: Start server in background**
Use Bash with `run_in_background: true`:
```bash
PYTHONUNBUFFERED=1 uv run "${CLAUDE_PLUGIN_ROOT}/skills/show-sprint-status/server.py" --yaml-path "{absolute_yaml_path}"
```
Note: Do NOT specify --port; let it auto-assign a free port.
PYTHONUNBUFFERED=1 ensures output is immediately available for parsing.
Save the background task ID returned.
**Step 2: Wait for server startup**
```bash
sleep 2
```
**Step 3: Get port from server output**
Use TaskOutput tool with the background task ID (non-blocking: `block: false`) to read the server's output.
Parse the output to find the line containing `PORT=` and extract the port number.
Example output to parse:
```
Starting server on http://localhost:9876
Watching: /path/to/sprint-status.yaml
PORT=9876
Server ready at http://localhost:9876
```
**Step 4: Open browser with correct port**
```bash
open "http://localhost:{extracted_port}"
```
- Project name and current date
- Epic progress bars with completion percentage
- Story cards grouped by epic showing status (backlog, ready-for-dev, in-progress, review, done)
- Color-coded status indicators
- Last updated timestamp
- Auto-refresh indicator
- backlog: gray (#6b7280)
- ready-for-dev: blue (#3b82f6)
- in-progress: yellow (#eab308)
- review: purple (#a855f7)
- done: green (#22c55e)
- WebSocket connection to server
- File watcher on sprint-status.yaml
- Pushes updates when file changes
- Reconnection logic if connection drops
Server tracks connected WebSocket clients. When last client disconnects, starts 30-second countdown. If no new clients connect within 30 seconds, server shuts down gracefully.
```bash
# Find and kill a specific server by its port
lsof -ti :{port} | xargs kill
# Or kill all sprint dashboard servers
pkill -f "show-sprint-status/server.py"
```
- Sprint status YAML file found in project
- Server started successfully in background
- Port extracted from server output (not guessed via lsof)
- Browser opens to dashboard at the correct port
- Dashboard displays current sprint status with correct data
- WebSocket connection established (green indicator)
- Server shuts down automatically when browser tab closed
If sprint-status.yaml not found, inform user:
"No sprint-status.yaml found. This skill requires a BMAD project with sprint tracking enabled. Run sprint-planning workflow first."
If TaskOutput shows an error or no PORT= line:
1. Check the full error message in the task output
2. Ensure `uv` is installed (`brew install uv` or `pip install uv`)
3. Check that the yaml path is valid and readable
NEVER use `lsof | grep python` to find the port - this finds ANY Python server.
ALWAYS parse the background task output for the `PORT=` line to get the correct port.