Assivy

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.

On this page