Skip to main content

Live Dashboard

Open http://127.0.0.1:18790/dashboard. The dashboard is a single-page app (self-hosted fonts/CSS, works offline) with these panels:

RoutePanel
#/overviewOverview
#/companyLive Company (pixel-agents)
#/monitorLive Monitor
#/sessionsSessions
#/recordingsRecordings (session replay)
#/memoryMemory
#/configConfig (secrets masked to ***)
#/featuresFeatures (live capability status)
#/logsLogs
#/agentsAgents
#/sopsSOPs

The dashboard mounts on the WebChat app and is only available when WebChat is enabled and dashboard.enabled is true. It also surfaces a Features panel (live capability status) and Recordings (session replay).

Authentication (dashboard.auth_token)

Empty = no auth (fine for the default localhost bind; a non-loopback bind requires it). When set, a deny-by-default middleware gates every route on the shared app — all /api/* (including /api/status), /dashboard, the FastAPI docs, and unknown paths (401, no route disclosure). Public exceptions: /, /health, /dashboard/static/*, and the self-authenticating /webhook/*. Both WebSockets (/ws/chat, /ws/dashboard) check the Origin header and the token before accepting the upgrade (close 1008 otherwise). The token is accepted (in precedence order) via the aethon_dash cookie, an Authorization: Bearer <token> header, or a ?token=<token> query param.

The usual flow when a token is set:

# Open once with the token; the server sets the aethon_dash cookie for you.
http://127.0.0.1:18790/dashboard?token=YOUR_TOKEN

# API calls (Bearer header):
curl -H "Authorization: Bearer YOUR_TOKEN" http://127.0.0.1:18790/api/config

# WebSocket (cookie or ?token=):
ws://127.0.0.1:18790/ws/dashboard?token=YOUR_TOKEN

:::note Liveness/health GET /health always returns {"status": "ok"}, even when a dashboard token is set. :::

Session recording & replay

When session_recorder.enabled is on, AETHON records the timeline + state snapshots to a ZIP. Browse, inspect, and resume recordings from the dashboard's Recordings tab. See Capabilities for the config.