Every surface is a client
The engine owns the workspace. These just render it.
Thin clients that render the engine's events. The web client runs agent sessions in cloud sandboxes through the cloud controller — sign in with GitHub, pick a repo, watch it work live and review its changes. The terminal TUI is also available. No client owns the workspace — the engine does.
Featured client
Web client
in developmentA browser client for the CodeLoom cloud controller. Sign in with GitHub, register or pick a repository, start a session in an isolated sandbox, then watch the agent work live. It talks REST plus a WebSocket at /sessions/{id}/stream that carries the engine's JSON events and commands, relayed by the controller.
- ·Streaming markdown transcript with collapsible tool-call cards and inline word-level diffs for edits.
- ·Multi-agent graph — orchestrator to child agents — with sub-agent cards showing tokens, cost and duration.
- ·Inspect panel: Agents, Changes (git staged / unstaged / untracked) and Files, plus a highlighted file viewer that switches to a diff.
- ·Status board with Working / Attention / Finished columns across all repos.
- ·Composer with Stop and a per-message model picker; permission cards (Allow / Deny / Always allow) and an Auto toggle.
- ·Live footer with branch, tokens, cached tokens, calls and cost; ended sessions keep a replayable transcript.
run it locally
$ cp .env.example .env.local $ npm install $ npm run dev
NEXT_PUBLIC_API_URL defaults to http://localhost:8000; the controller's FRONTEND_ORIGIN must match http://localhost:3000.
More clients
Same events, other surfaces.
TUI
A terminal workspace: explorer, file viewer, and a persistent agent pane in one frame. Modal by default, mouse optional — built for people who already live in tmux.
github.com/iresharma/codeloom.TUIClients render events; they don't call models.
No client talks to a model directly. The web client reaches the engine through the cloud controller, which relays the engine's JSON events and commands over a WebSocket; the TUI speaks the same protocol over the engine's local Unix socket. A new client is a rendering problem, not an agent-building one.