Context
Running 20 Claude Code agents in parallel is invisible — terminal tabs, JSONL log files, status spinners. We wanted a spatial metaphor: a pixel-art office where each agent is a sprite with a name, an emotion, a workstation, and an activity. Walked rooms cluster agents by domain (frontend, backend, design, ops). Stats sidebar surfaces uptime, online count, working/idle ratio.
Approach
Vanilla Node WebSocket server reads `~/.claude/projects/**/*.jsonl` via Chokidar, parses tool-use and assistant events, maps each Claude session to an in-office agent. Vite-built frontend renders 60fps Canvas 2D — no React. Twenty-three modules in src/: sprite atlas, room layouts, HVAC particles, click handling with nested-clickable priority, websocket reconnect with backoff. Playwright E2E for spawn / move / interact flows.
Outcome
Live on Fly.io, deployed 22 times during build. Now the canonical way to know "what is my parallel agent pool doing right now" — better than reading 20 terminal panes. The wall editor, sprint preview, and bottom-zone redesign all shipped iteratively from spec to prod. Currently powering @btw_aitech sprint reports via TG bot integration.
Have a similar project?
We reply within 24 hours. Usually faster.




