Skip to main content
RunAgain organizes agent activity into traces and spans, following OpenTelemetry semantics with a gen_ai-aware data model.

Traces & spans

  • A trace is one end-to-end run (e.g. a single agent invocation, or a Claude Code session). Spans in a trace share a trace_id.
  • A span is a single operation within a trace — an LLM call, a tool call, a retrieval step. Spans carry timing, status, and attributes.

Observation types

Every span is classified so the UI can render it meaningfully:
TypeMeaning
generationAn LLM call — carries provider, model, token counts, and cost.
toolA tool / function call — carries the tool name and result status.
spanA generic step (planning, retrieval, orchestration).
RunAgain promotes the common gen_ai attributes to typed columns so they’re fast to query and chart:
  • Model — request and response model
  • Tokens — input, output, cache-read, cache-write, reasoning, total
  • Cost — computed from tokens, or taken from a provider-supplied cost_usd
  • Identitysession_id, conversation_id, user_id
  • Tooltool_name, status
Large input / output payloads are offloaded to blob storage above a size threshold and referenced by hash, keeping queries fast.

Sessions

Spans that share a session_id (or, for Claude Code, session.id) are grouped, so you can follow a whole conversation or terminal session as one trace.

See it in the app

The Traces page renders the span waterfall, tokens, cost and status.