Skip to main content

Agent Observability

Read the agent-run dashboard

The Agent Observability dashboard answers what your agents did lately — failures, cost outliers, round counts and per-app roll-ups — and which of its numbers are not what their labels suggest.

/dashboard is the landing section of the Agent Observability blocklet (blocklets/observability-explorer in the ARC monorepo). It answers one question: what have my agents been doing, and which runs deserve a look?

Verified against the live deployment at https://observability-explorer.afsd.dev, build 35de3a0b, signed in as a registered test user on 2026-08-20. Your rows will differ; the shapes and the caveats are the reusable part.

Re-walked on the current build. The first walk (build 400ce96, 2026-08-15) ran while an authorization bug was live: owning one app granted deployment-wide trace visibility. That was fixed on 2026-08-18, so the earlier walk's rows were partly a symptom. See What you can see for the rule that holds now.

This is one of three sections. The other two are Traces — what happened inside one run — and AI usage — how much AI capacity was consumed. Dashboard and usage count different populations and are not meant to reconcile: the dashboard rolls up agent runs visible to you, the usage face rolls up AI calls attributed to you, and a run can burn tokens without appearing in the other's ledger.

Signed out, nothing renders — the section states Sign in to view this content. rather than drawing an empty chart.

What the page shows

The dashboard: headline metrics, three highlight cards, three tables of outlier runs, and the runs-per-day and tokens-per-day charts

Top to bottom:

BlockWhat it answers
Headline40 runs · 494.8K tokens · 90.0% ok · avg 37.4s — volume, spend, success rate, mean duration
Three cardsThe single worst / most expensive / longest-looping run, each naming the task text and the app
Three tablesThe same three dimensions as lists: failed runs (latest), most expensive runs, most rounds
Two chartsRuns per day, and tokens per day split into Tokens In / Tokens Out
Roll-upsTop models, top hubs, and a per-app table

The lower half: runs-per-day and tokens-per-day charts, top models, top hubs, and the per-app roll-up with runs, tokens, average duration, success rate and last-run time

The per-app table is the most useful block for a deployment owner: it is the only place that puts runs, tokens, average duration, success rate and recency on one row per app. In the walk above it read:

AppRunsInOutAvg durSuccessLast run
todo22243K2.4K38.7s100%2 days ago
observability-explorer536.5K1.9K29.8s100%4 days ago
arch-qa491.1K1.5K54.1s100%8 days ago
aistro4000ms0%6 days ago
aside4107.3K1.8K22.6s100%5 days ago
chain-explorer19.3K17938.3s100%14 days ago

An app with runs but zero tokens, zero duration and 0% success — aistro above — is the shape of a run that never reached the model. Those are the same four runs the "needs attention" card is counting.

Reading it correctly

"today's signal" is not today. The headline is labelled Agent runs · today's signal, but the charts under it span thirteen days (2026-08-04 → 08-16) and the per-app table's "last run" column reaches back two weeks. Read the headline as the current state of everything visible to you, not as a 24-hour window.

"Failed" in the card, interrupted in the table. The attention card says 4 run(s) failed; every one of those rows carries the status interrupted. They are the same four runs under two names. Do not go looking for a separate failed status — there isn't one on this deployment.

The charts arrive late. Both charts render Loading data... for several seconds after the tables are already populated (over six seconds in the walk). A blank chart area on first paint is loading, not zero.

The three outlier tables clip on the right. At a 1440px viewport the APP column of the failed / expensive / rounds tables is cut off mid-word. The information is there — the table just has more columns than the card width affords. Widen the window or read the app name from the card above it.

What you can see

Both this section and Traces read the same run index through the same gate, and the gate has two axes:

  • Your own runs are always yours. That row is a fragment of your own DID Space; the isolation is physical, not a filter.
  • A whole app's runs require membership on that app — same-instance admin/owner, probed per app.

Nothing else is admitted. An owner role on app A grants nothing on app B.

This rule is younger than the page. Until 2026-08-18, authorizedView mapped an owner/admin string on any app to a deployment-wide privilege flag with no app dimension, so one app's owner enumerated every blocklet's runs — task text included — while the usage admin face refused the same caller for the same app. Fixed in ARC #4170 / PR #4269.

You can see both axes at work without a second account — compare the apps appearing in /traces against the portfolio on /usage/admin. On this walk each list had six apps and they overlapped on only three:

Appears inAppsWhat that means
Bothtodo aside observability-explorerOwn runs and membership
Traces onlyarch-qa aistro chain-explorerMy own runs in apps I do not administer — the USER axis
Usage admin onlydiscuss-kit did-space showcaseApps I administer with no runs in the index — discuss-kit has 56 AI calls and zero traces, which is ARC #3207, still open: the index read path only sees this instance's runs

Invisible and non-existent look identical. Listing the traces of an app you may not see returns an empty list, not an error: /dev/observability/traces/places-notebook answered [] on the same session where /dev/observability/traces/todo answered 22 runs.

What it cannot tell you

  • Why a run failed. The dashboard names the run; the reason lives in the trace.
  • Anything about runs outside the two axes above — they contribute nothing to these totals, and the page cannot tell you they exist.
  • Cost in money. Every number here is a token count or a duration; no page in this blocklet converts tokens to currency.

Failures to expect

SymptomWhat it actually is
Sign in to view this content.Not an error — the dashboard has no anonymous projection
Charts stuck on Loading data...Normal for the first few seconds; the tables fill in first
An app with runs but 0 tokens / 0ms / 0%Runs that never reached the model — the interrupted set
Headline says "today", chart shows two weeksKnown label mismatch; the data is the whole visible window
Right-hand column of an outlier table cut offTable wider than the card at this viewport