Repository navigation
v0.1.0 — Initial public release
First public cut of Switchboard — a live browser dashboard for tmux sessions, purpose-built for watching a swarm of Claude Code agents without the tab-fight.
Highlights
Kanban dashboard
- Sessions become columns, every tmux window becomes a card; status colors call out idle / running / waiting / failed at a glance.
- Drag to reorder columns and tiles within a column.
- Sticky header with quick session / window creation.
Live terminal modal
- xterm.js bridged over WebSocket with auto-reconnect on transient drops.
- Robust input — bracketed paste, buffered text, image paste from the clipboard.
- Modal header chips: branch, PR #, CI rollup, zoom controls.
- Interactive prompts (menu / y-n / press-enter) rendered as a click-or-keyboard overlay over the terminal.
- Kill / rename / new-window controls without leaving the modal.
Claude Code awareness
- Detects spinner with elapsed, recap of the last assistant line, branch + PR + CI, and pending-input across menu / y-n / press-enter / free-form question shapes.
- Per-pane context-window percent and per-session cost surfaced inline.
- Rolling-window Claude usage pill with plan-% scraping.
Notifications & glance-ability
- Native browser notifications when any agent flips to waiting; favicon dot mirrors the state.
- Status legend explains every color and glyph.
Discoverability
- ⌘K command palette — send keys to the focused pane from anywhere, with localStorage-backed recents.
?shortcuts sheet.- First-run interactive tour, replayable from Settings.
- In-app Docs tab with architecture diagrams.
- ✨ Auto-rename — Anthropic Haiku suggests a window name for every pane in a session, with per-row preview / edit / skip before applying.
Editor & GitHub linkifiers
- Clickable file paths in pane output open in your configured IDE; ⚙️ Settings picks from probed-and-installed editors.
- Clickable
PR #Nchips open the GitHub PR in a new tab.
Themes & accessibility
- Four themes: dark / light / high-contrast / phosphor.
- Every interactive surface, including the xterm.js 256-color palette, clears WCAG AA contrast — wired up to a CI audit .
Requirements
- Backend: Python ≥ 3.11,
tmux,uv(FastAPI + pydantic-settings). - Frontend: Node ≥ 20 (Vite + React 19, xterm.js).
- Optional: an editor on the IDE allowlist (
code,cursor, …) for path-click open,ghfor PR / CI chip enrichment.
Quickstart
```bash
cd backend && uv sync && cd ..
cd frontend && npm install && cd ..
git config core.hooksPath scripts/hooks # one-time
./scripts/dev.sh # backend :8765, frontend :5173
```
Then open http://localhost:5173. Full instructions, env vars, and a seeded-tmux dev script in the README.
Notable bug fixes baked into this cut
- Reject typed numbered lists as menu prompts so the prompt overlay no longer pops up mid-typing (#69).
- Stabilize the
test_openclientfixture against theclaude_usageprewarm thread to eliminate the CI race seen on #68 (#68). - Free-form question detection picks up "let me know", "awaiting your …", and the modern ⏺ assistant marker.
- Per-agent context % survives the brain-emoji status bar across Claude Code builds.
- Branch cache TTL dropped to 2 s so a
git checkoutinside a pane lights up the dashboard in the next poll.
Full changelog: https://github.com/tdody/switchboard/commits/v0.1.0
