1. load SPA 2. WebSocket /ws 3. prompt + permission responses 4. session_update events (replay) 5. ACP lifecycle 6. stdio JSON-RPC 7. updates + permissions file ops shell I/O Browser React SPA UI Components · Agent Panel · Workspace Panel · File Tree · Monaco Editor · Terminal (xterm.js) httpserver Serves SPA + /ws bridge · WebSocket ⇄ ACP · Event broadcast · Permission routing · History replay agent ACP session lifecycle files Workspace file API terminal PTY per connection mockagent Demo agent (testing) ACP Agent (claude-code-acp / Gemini CLI) JSON-RPC over stdio session_update · permission_request Go backend bridges browser WebSockets to ACP stdio, broadcasting agent updates to all connected browsers while routing permissions back to the waiting call.