Skip to content

Web UI

sivtr web serves a local web UI and a read-only JSON API over the unified archive (archive.db). Use it to browse terminal and agent sessions and to run full-text search ranked by BM25 relevance without opening the TUI.

Terminal window
sivtr web

Then open http://127.0.0.1:8080 in a browser.

Option Meaning
--port <PORT> TCP port to bind (default 8080)
--host <HOST> Loopback bind address (default 127.0.0.1). Non-loopback values are rejected.
  • Session browser — filter sessions by provider, open a session, and copy its refs for use with sivtr show.
  • Search — press / anywhere to focus the search box; choose BM25, semantic, or hybrid ranking. BM25 is ranked per source; source=all concatenates the agent list then the terminal list.
  • Usage and activity — the dashboard shows catalog-priced token usage, unpriced events, archive counts, and active days.

The same surface is available as a read-only JSON API:

Endpoint Purpose
GET /api/v1/health Server health check
GET /api/v1/providers List registered providers
GET /api/v1/sessions?provider=&limit=&offset= List sessions with optional filters
GET /api/v1/sessions/{provider}/{session_id} One full session
GET /api/v1/search?q=&source=all|all:agent|all:terminal|<selector>&limit=&semantic=&hybrid= BM25, semantic, or hybrid search
GET /api/v1/usage?provider=&session_id=&since=&until= Token usage and costs
GET /api/v1/stats?provider=&since=&until= Activity, outcomes, projects, privacy, and usage statistics

The server binds loopback only (127.0.0.1, localhost, ::1). Non-loopback --host values are rejected, so the unauthenticated UI cannot be exposed on the network. The HTTP API is read-only; startup may refresh the local archive via ensure_fresh(). With a loopback bind, data never leaves the machine. The server also validates the browser Host header to guard against DNS rebinding.

Changing --port also changes the accepted Host, so requests must target the same host:port the server is bound to.