Run it
http://127.0.0.1:<port> — the port is printed on startup.
The server binds to 127.0.0.1 only. It has no multi-user auth. Do not expose it beyond localhost without your own auth layer in front — see Security.
What you get
- Streaming chat —
ChatStreamEventevents over NDJSON. See Streaming chat. - Tool cards — a card per tool call, rendered by BEUI components in
web/design. See Tool cards. - Session list — resume, fork, or search sessions. See Sessions.
- Model picker — swap providers and models mid-session.
- Slash commands —
/login,/refine, and everything else you’d get in the TUI.
How it plugs into the runtime
The browser never imports agent packages directly. Only the web server adapter (web/server/src/event-mapper.ts) imports @earendil-works/* — it translates AgentSessionEvent from the agent runtime into ChatStreamEvent NDJSON for the browser and AgentSessionEvent SSE for out-of-turn events.
Contracts stay in web/protocol (chat-protocol.ts, fleet-contract.ts) and must be updated in lockstep with the adapter.
Related
- Web API reference — HTTP routes and event shapes.
- Architecture — where the adapter sits in the stack.