AgentSight Dashboard Guide
The Dashboard is a web UI embedded in the agentsight binary. It reads the same SQLite databases
the tracer writes, so it needs no extra service. Default address: http://127.0.0.1:7396.
Start it
# local only (default)
sudo agentsight serve
# reachable from other hosts
sudo agentsight serve --host 0.0.0.0 --port 7396
The packaged agentsight.service already runs serve --host 0.0.0.0 alongside the tracer, so on a
normal install you only need to open the URL. Binding to 0.0.0.0 exposes the port on every
interface — restrict it in your firewall or cloud security group first.
Authentication
Token authentication is on by default.
| Access path | What is required |
|---|---|
http://127.0.0.1:7396 from the same host | Read-only page requests normally skip authentication; API exceptions apply |
http://<host>:7396 from elsewhere | The Dashboard token, as ?token=<TOKEN> in the URL, as Authorization: Bearer <TOKEN>, or typed into the login form |
Saved Tokenless record lists require the Dashboard credential even on loopback. This changes metadata access control; the existing page, login flow and statistics calculation remain unchanged.

The token is generated on the first serve start (64 hex characters) and stored next to the
databases in /var/log/sysak/.agentsight/.dashboard_token. It is reused across restarts. Read it
with:
sudo agentsight dashboard --no-open
A successful login exchanges the token for an httpOnly session cookie, so you do not have to keep the token in the URL.
An invalid-token message means the server rejected the token; check it with the command above. A connection-error message can also mean the server or a reverse proxy returned an HTTP error. Check that AgentSight is running and reachable, then retry the login.
To turn authentication off — only sensible on a trusted internal network:
{ "server": { "auth": { "enabled": false } } }
sudo systemctl reload agentsight.service
sudo agentsight dashboard --no-openprints the complete token; the login screen links to that command.
Navigation and page availability
The navigation bar only shows pages the host can actually serve. AgentSight probes for companion
components on every page load and reports the result through GET /api/auth/status:
| Page | Appears when |
|---|---|
| Agent Dashboard, Agent Observability, Sessions, Reuse Labels, Optimization, Skill Metrics, Trajectory Viewer, Settings | Always |
| Token Savings | tokenless is installed, its statistics database exists, or a Tokenless API is configured |
| Security Observability, System Audit | agent-sec-core is installed (daemon or CLI) |
| Risk Enforcement | agentsight-enforcer is installed or its socket exists |
So a Dashboard that shows fewer entries than this guide is not broken — the matching component is simply not installed.
A fresh visit to http://<host>:7396/ lands on the Agent Dashboard (#/health). The bare root
renders no page of its own: it redirects to the first entry in navigation order whose capability is
advertised, so a host that does not report agent_health lands on Agent Observability instead.
Agent Observability is reachable at #/observability, whether or not it is the landing page.
Most pages share the same header: a start/end time range with Last 1h / 6h / 24h / 7d shortcuts,
an Agent filter, and a Query button. Pages that show cost or savings figures wait for you to
press Query; the observability pages load the last 24 hours immediately.
Agent Dashboard
Live Agent health plus the interruption inbox: every unresolved event with its type, severity, session, and conversation. Resolve closes an event, Details opens the captured evidence. The latency panel switches between the last 24 hours, 7 days, and 30 days.

"No agents discovered" only means no Agent process is running right now; historical sessions stay visible on the other pages.
Agent Observability
The main analysis page: session count, input/output Tokens, interruption count by severity, Token time series (total and per model), and the session table.

Click a session row to expand the conversations it contains. Each conversation row shows the user query, its Tokens, an interruption badge, and a quality Eval action:

The expanded Session also shows CPU and RSS memory curves for its associated Agent processes. Blue background bands mark captured LLM calls, violet bands mark matched Tool Call intervals, and orange bands mark idle time between observed activities. Values from multiple associated PIDs are summed. The chart is process-level context, so a shared Agent process serving concurrent Sessions cannot be split into exact per-Session resource consumption.
The SAVED TOKENS column is filled in when Tokenless is active for that session.
Sessions
A session browser rather than a metrics page: filter by capture source (eBPF capture versus
Log collection), filter by Agent, or search sessions by meaning — the search uses the configured
optimization LLM to rank candidates by intent, e.g. "fix build error".

Analyze sends the session to the Optimization page.
Opening a session captured by both sources retains its captured steps and Token metrics, and includes its collected subagent trajectories in the ATIF viewer. A captured Codex UUID can resolve children under one matching collected rollout parent; ambiguous rollout parents are not combined. If collected children are unavailable, the captured session remains readable.
Reuse Labels
Reviews collected trajectories for later Agent reuse. Run deterministic triage first, then confirm or override good, bad, useless, or unknown labels individually or in batch. The rules never assign bad; that verdict requires a human decision or an LLM judgement with a cited trajectory step.
The optional model judge is available only after enabling features.reuse_llm_judge and configuring an optimization LLM. It runs billed requests and reports batch progress while it works. The page is advertised through the always-present reuse_labels capability; if reuse.db is unavailable, it remains visible and explains that labels cannot be read.
Token Savings
Compares actual Token consumption against the baseline Tokenless would have consumed, broken down by optimization type, plus a savings ranking and concrete tips.

Press Query after choosing a range; the page starts empty on purpose. Setup: Integrations.
With tokenless_api configured, Query refreshes statistics for captured tool-call IDs
before computing savings. The existing page and controls stay unchanged. Only uniquely associated
active records returned by the source query contribute; source failures display an error instead
of stale totals. The existing AgentSight login is required, including on loopback. Saved metadata
and explicitly requested content remain available through the recording API.
Export CSV downloads the displayed sessions from the last successful query as
token-savings.csv, in their displayed order. It includes session IDs, Agent names,
request counts and Token metrics; rates use fractions (for example, 0.4 means 40%).
The export omits tool content and uses UTF-8 with a BOM for spreadsheet compatibility.
Text beginning with a spreadsheet formula prefix is prefixed with an apostrophe.
Export is disabled while querying, after a query error, or when there are no sessions.
To compare a subset, check the box on each session row (or the box in the table header to select or clear every session) and press Export Selected (N). The download uses the same columns, escaping, units and file lifecycle as the full export, keeps the displayed row order, and reads only the already loaded results — it never issues another request. Checking a box does not expand or collapse the row; the selection is keyed by session ID, and it is cleared whenever a new successful query replaces the snapshot. The button stays disabled while querying, after a query error, or while nothing is selected.
Optimization
Runs LLM-assisted analysis over one session in six dimensions: perf, perf-issues, cost,
cost-waste, accuracy, and summary. Analyses need an LLM configured on the Settings page and
take roughly 10–60 seconds; results are stored, so the page also lists earlier runs.

Skill Metrics
Skill adoption computed on demand from GenAI events: analyzed calls, discovered Skills, load counts, usage ratio, per-call distribution, and a weekly hotness ranking. The unit of counting is one LLM call.

Security Observability and System Audit
Present when agent-sec-core is installed. Security Observability shows scan verdicts (prompt injection, PII, code scanning) per session and run; System Audit aggregates audit events into cases you can review and, with the enforcer present, contain.

Trajectory Viewer
Loads any session or conversation as an ATIF v1.7 trajectory: Agent metadata, step and Token totals, Tokenless comparison, and the full interaction timeline — system preamble, each round, tool calls, and results. Download JSON exports the trajectory; Import JSON replays one captured elsewhere.

This is the page to open when you need to know exactly what the Agent sent and received.
Filter round content searches the currently selected trajectory locally. It matches a case-insensitive literal substring in messages, reasoning, tool names, arguments, and result content, and shows the matching/total round count. Clear filter restores the full list. The selected round detail stays visible while filtering; selecting another trajectory or importing/loading a new document clears the filter. Searching sends no model request and leaves Download JSON unchanged.
Settings
The SQLite storage card consumes schema v2 from authenticated GET /api/storage/status. On Linux,
it includes every AgentSight-owned store plus the external Tokenless target, including the new reuse
and causal entries. Each card shows the effective retention and size policy, physical and logical usage,
cleanup state, and coverage (full, partial, or external). Trajectories, security audit, reuse,
causal, and enforcement are partial because maintenance intentionally protects bookkeeping,
active graphs, the newest cache entry, human decisions, or live control state.
The same card now shows scheduled, worker_running, the worker heartbeat, last attempt, last
successful attempt, last_result, consecutive failures, and the next run. These runtime fields describe
only the process serving the endpoint; an unscheduled trace-owned store does not prove that a separate
trace process is stopped. A lock_busy result means another process held that database's maintenance lock. Do not infer worker health from
within_policy: logical usage can be within the limit while a job is unscheduled, the worker is
stopped, or recent attempts failed. Logical usage excludes reusable freelist pages, so a large
physical file can also be healthy. The API never exposes filesystem paths.
This page also configures the LLM used by optimization and semantic search (provider, base URL,
model, API key, and the semantic-search ranking timeout). A timed-out ranking returns no results and
is recorded as a server warning. The key is masked when read back and stored in
optimization_config.json next to the databases.
Language
The UI follows the browser language and offers a manual switch in the top-right corner; the choice persists across reloads.
Query the API instead
Everything on these pages comes from the HTTP API, and the route list is served by the API itself:
curl -s http://127.0.0.1:7396/api/docs | python3 -m json.tool | head -30
# remote access needs the token
curl -s -H "Authorization: Bearer $TOKEN" http://<host>:7396/api/sessions
See Data and storage for the endpoint groups.
Related pages
- Interruption detection — what the badges mean
- Configuration — authentication switch
- Troubleshooting — 401, unreachable port, empty pages