Eight surfaces
In the order the product's own navigation lists them, each with the question it answers and a drawing of what it shows.
Runs
Every top-level agent span becomes one row, whether it arrived as OpenTelemetry GenAI conventions, OpenInference or the Vercel AI SDK. Open a run and it reads as a tree: the agent at the root, each model call and each tool call beneath it in the order they ran, nested agents indented under theirs. Spans that speak no GenAI, like an HTTP call inside a tool, stay in the tree so the timings add up.
Which call failed, how long each step took, and what the run cost.
- model
- tokens in / out / cached
- cost
- tool calls
- error
- duration
Runs, drawn. Values illustrative. Sessions
Runs that share a conversation id are threaded into one session, in the order they happened. A support thread, a ticket that went back and forth, or a user who asked the same thing four times reads as one exchange with its total cost, instead of nine unrelated rows in a list.
What happened across the whole conversation, and what it cost end to end.
- conversation id
- user
- runs in order
- session cost
- first and last turn
Sessions, drawn. Values illustrative. Cost
Every model call is priced as it lands, from a maintained price list or from the price you set on the model, with cached tokens priced as cached. Spend then rolls up by agent, by model and by day, so a jump shows which agent caused it and which model it went to.
Where the money went this week, and which agent or model moved the line.
- spend by day
- by agent
- by model
- tokens
- cost per run
Cost, drawn. Values illustrative. Evals
Build a dataset from real runs, fixtures or a CSV. An experiment replays it through up to four prompts or models side by side, with write tools stripped so nothing is changed, and scores every answer: the claims guardrail, a JSON check, or a judge model on your rubric. Online scoring does the same for a share of live runs as they land.
Is the new prompt or model better than the old one, on the cases that matter.
- dataset
- up to 4 variants
- score per case
- mean score
- cost per variant
Evals, drawn. Values illustrative. Review
Runs that scored low online, or that someone flagged, collect in one queue. A reviewer reads the run, gives it a thumb, a label and a note, and with one click adds it to a dataset, so the failure that reached production becomes a case every later experiment is scored on.
Which runs a person should look at, and how a bad one becomes a test.
- score
- thumbs
- label
- note
- add to dataset
Review, drawn. Values illustrative. Prompts
Prompts live in e-volv as named, numbered versions. An agent fetches one by name and label, such as production, so moving the label ships a prompt change without a deploy. Each version carries the cost and score of the runs that used it, so a rollback is a decision made on numbers.
Which prompt version is live, and whether it is cheaper or better than the last.
- name
- version
- label
- runs
- cost
- score
Prompts, drawn. Values illustrative. Alerts
Set rules on spend per day, error rate and p95 duration, per agent. When a line crosses its threshold the alert goes to the same channels as every other alert in the workspace, so an agent that starts looping at night is caught by the rule, not by the invoice.
Did an agent get slower, fail more, or spend more than it should.
- spend per day
- error rate
- p95 duration
- threshold
- channel
Alerts, drawn. Values illustrative. Usage
Agent spans counted this month against the allowance, with retention alongside. The meter fills as runs land, so the ceiling is something you watch coming and plan for, not something you find out about when ingest stops.
How close this month is to the allowance.
- spans this month
- allowance
- retention
Usage, drawn. Values illustrative.
What happens to a run
One run, from the span your agent emits to the score it gets. Each stage is named the way the code names it, so you can go and find it.
Span
Your agent emits invoke_agent, chat and execute_tool spans, through OpenTelemetry or through @e-volv/agents and evolv-agents, which set the same attributes without a collector.
Rollup
After the span is stored, the trace is read back and every top-level agent span becomes an agent_run row: tokens summed from the model calls, tool calls counted, the cost priced per call.
Score
A share of runs you choose goes to the scorers as it lands: the claims guardrail, a JSON check, a judge model on your rubric. Low scores join the review queue.
Replay
Any run with its prompt captured can be replayed on a new prompt or model, read only, and diffed against what it said the first time.
How runs get in
Already on OpenTelemetry? Point your exporter at the Berserker endpoint and nothing else changes. Not on OpenTelemetry? Two thin packages set the same attributes without a collector, and both are on their registries now.
- OpenTelemetryOTLP over HTTP to the traces endpoint, with the GenAI, OpenInference or Vercel AI SDK attributes read as they arrive. Docs
- Node.jsnpm install @e-volv/agents
- Pythonpip install evolv-agents
Trace your first agent
Works with or without e-volv Observer. Free for 50,000 agent spans a month with 14 days of retention, and included with e-volv Observer paid or Studio at 1,000,000 spans and 30 days.