Skip to content

Dashboard

diegosouzapw edited this page Jul 8, 2026 · 1 revision

The Dashboard

OmniGlyph ships a full local dashboard inside the npm package — offline, single-file, zero external requests. Start the proxy and open it:

npx omniglyph          # proxy + dashboard on 127.0.0.1:47821

Six pages, all updated live over SSE (GET /events/stream) as requests flow, with 2-second polling as fallback. Light and dark themes, OmniRoute-family visual language.

Pages

page what it shows
Overview Mission control: savings % (cache-weighted), $ saved, requests (imaged / passthrough), latency p95, first-byte p50, cache hits, errors, imaged chars — plus a savings sparkline and a live event feed.
Live Flow The pipeline as a node graph: client → gate → renderer / passthrough → Anthropic API → response. Each real request fires an animated particle down the branch it took.
Telemetry A token/$ odometer and a live request timeline. Click any request to open the image-vs-text breakdown and read the exact source text behind every rendered page.
Benchmarks The harness receipts rendered straight from benchmarks/*/results/*.jsonl — one row per model·config experiment — plus in-UI benchmark runs (below).
Sessions Top sessions ranked by tokens saved, cross-referenced with Claude Code sessions.
History Every event on disk: statuses, token totals, durations, cache behavior.

Running benchmarks from the UI

The Benchmarks page can execute the two harnesses directly:

  • Dry-run ($0) — runs --dry-run (billing predictions / cost table, no API calls) and streams the harness stdout live into a terminal card.
  • Live run — disabled unless ANTHROPIC_API_KEY is set in the proxy's environment, and requires an explicit confirmation that warns about cost. Results are appended to benchmarks/*/results/ by the harnesses themselves (the dashboard never writes there).

Safety model: the server only accepts a closed enum (harness × mode) — no client string ever reaches the spawned process; processes run without a shell; one run at a time, cancellable. These endpoints exist on the local Node host only.

Honesty rules (same as the README numbers)

  • Every savings percentage derives from the cache-weighted pair (baseline_input_weighted vs actual_input_weighted) — never raw count_tokens, which over-states savings whenever the prefix would have been a cheap cache read.
  • A weighted net loss renders as a loss (red), never masked.
  • The per-request cost split only shows once the sample is large enough; before that it says so.
  • The density scorecard shows one row per (model, config) experiment — a per-model rollup would blend production-config reads with deliberately-overdense experiments and misstate both.

Kill switch & model chips

The top bar of every page carries the compression kill switch (resets to ON at restart) and the model chips — toggle which Claude models are allowed to receive imaged context at runtime (persist with OMNIGLYPH_MODELS).

Clone this wiki locally