Observability
Traces, metrics, and logs behind one filter bar.
Every turn is recorded three ways, on one page: Tracing. A trace is the shape of the turn, metrics are its rollups, logs are what it said. One filter bar sits above the three tabs, and its agent and date window apply to the active tab. Traces and Logs share theirs, so moving between them keeps the context; Metrics keeps its own.
The page needs trace:read. Owners and admins hold it; plain members don't,
because traces carry prompts, tool arguments, and model output verbatim.
Traces
The table lists turns for one agent — there is no "all agents" view, and the first agent is picked for you. Expand a row for its span chain; click a span for the drawer with payloads. Thread and sort filters are traces-only. With no window set, the table covers all time.
The drawer's Logs tab opens on the logs written while that span was active, with a toggle to show the whole trace.
Metrics
Tokens used, agent runs (with completed and failed jobs), token usage per
model over time, and top agents and top models by token usage. The window
defaults to the last 24 hours, and an empty agent means all agents, which is
when the top-agents table renders. Clicking an agent row opens its traces; a
model row just switches to the Traces tab, since traces have no model filter.
The series endpoint buckets by 1m, 5m, 1h (default), or 1d.
Logs
Structured records from three writers: tools and hooks calling log(), the
API service itself, and the ingestion service. The list filters by agent,
window, trace, request id, minimum severity, and free text. A log's trace chip
opens that trace; a span drawer lists its logs. The two views link both ways
because they are the same turn seen from opposite ends.
Where logs come from
Tools and hooks write logs with log(). See Function tools
and Turn hooks. A failed source's logs are its trace's logs, which
hold the full failure text its status line can't fit.