agents-deck - Real-Time Multi-Agent AI Dashboard
Real-time dashboard to orchestrate 3 to 5 AI coding agents (Claude Code, Codex, Cursor, Kimi) running in parallel. Answers "who's doing what, who's blocked, who's waiting on whom" at a glance. Zero-DB philosophy: the Git repo IS the database via YAML files. Manifest auto-discovery (project.yml), 5 artifacts (Ticket, Backlog, Message, Reply, Changelog), 3 roles (coordinator, executor, oversight). Status = location (a ticket's folder IS its status, git mv = transition). Dual source of truth (agent status.yml vs coordinator state.yml) with conflict detection. Isolation via Git branches/worktrees, ~17,500 LOC TypeScript.
Zero-DB Architecture: the Git repo IS the database
Real-time dashboard watching versioned YAML files in the target repo. No self-managed persistence.
Node.js + Express Backend
TypeScript server, ~6,400 LOC. 32 specialized parsers (parser-yml-*, parser-state, parser-git, parser-messages...). Ajv validation against 14 JSON Schema Draft-07 files. chokidar watcher + SSE event bus for real-time push to the frontend.
React + Vite Frontend
SPA, ~11,100 LOC. 37 components, 10 pages, react-router 7, Tailwind + Radix UI, framer-motion. Live updates via EventSource. Multi-project switcher (XDG local registry), agent detail modal (Tickets/Messages/Replies in one bundle).
YAML Data Model
5 artifacts (T_* ticket, B_* backlog, M_* message, R_* reply, C_* changelog) + 3 roles (coordinator, executor, oversight). A single project.yml at the target repo root declares agents, phases, paths, conventions — the dashboard reconfigures itself. Zero hardcode.
Git Isolation + Worktrees
Each agent works on its own agent/<id>/active branch, optionally in a separate worktree mounted :ro into the container. A ticket's status = its folder (planned/, working/, done/, ...) → git mv = state transition. No field can drift.
Key Features
Manifest auto-discovery
A single project.yml at the root declares agents, phases, paths, roles. The dashboard reconfigures itself, zero hardcode. Forking onto another repo = copy project.yml.
Zero-DB philosophy
No self-managed persistence. State is reconstructed at every request from YAML + git refs. Container restart = zero loss. Backup = git push. Audit trail = git log.
Status = location
A ticket's status is its folder (planned/drafts/blocked/working/waiting/done/cancelled). git mv = transition. No field can drift from disk truth.
Dual source of truth
status.yml (what the agent says it does) vs state.yml (what the coordinator expects). Divergence → conflict card on the dashboard, mandatory investigation.
Worktree isolation
Each agent on its own dedicated branch, optionally a separate worktree. Mounted :ro Docker-side. Two agents can never edit the same file at the same time.
Server-Sent Events
Real-time push of file changes to the browser via chokidar + event bus. No polling, sub-second refresh.
6-state machine
closed > deploying > blocked > waiting_for_review > working > standby. Computed from status.yml with git-signal fallback (commits ahead, last activity, dirty files).
Multi-project via XDG registry
Switch between several observed repos. Local registry at ~/.config/agents-deck/projects.json. API /api/v2/projects to register/switch/remove.
Tech Stack
Express 4, ESM modules, built via tsc + tsx watch in dev
Strict YAML parsing + validation against 14 JSON Schema Draft-07 files
Filesystem watcher + event bus + Server-Sent Events to the browser
SPA, 37 components, 10 pages, route-based code-splitting
Design system, accessible primitives (scroll-area, select, switch, tabs, tooltip)
/v2/* routes (canonical YAML) + / (legacy) with contextual sidebar
TypeScript built in the builder stage, Alpine runtime with git installed for git status --porcelain
One agent/<id>/active branch per agent, worktrees mounted :ro into the container
Results & Metrics
Technical Performance
Technical Challenges & Solutions
Avoiding state drift
Multi-agent coordination without bottleneck
File collisions between agents
Restart without losing context
Demonstrated Skills
System architecture
TypeScript backend
React frontend
Advanced Git tooling
DevEx & packaging
Interested in this project?
Contact me to discuss similar projects or for more information.