Reading a call
One call in full: the turns, the tools, the state after each, the latency, the verdicts.
Every call leaves a log: each turn, each tool call and its result, each change of state, the latency of each turn, and at the end what it cost and how the judges answered. This page is how to read one, in the console and from a terminal.
What a call is made of#
The log is a list of entries in order, each with a seq. A judge's verdict cites the seqs it rests on, so
every claim about a call points at a line of it.
| Entry | What it records |
|---|---|
call.started |
who, on which channel, in the sandbox or production; the state the call opened in, and the persona when one played the caller |
turn.user, turn.agent |
what each side said; an agent turn carries its metrics |
tool.call |
a tool the model called, with its arguments |
state.changed |
the agent's whole state after a change |
docs.sources, memory.ops |
what a lookup returned, and the facts memory recalled or wrote |
call.ended |
why the call ended and who ended it |
call.summary |
the outcome in one line, duration, turns and cost |
call.score |
every judge's verdict, with its reason and the seqs it cites |
In the console#
Open Calls, then a call, or paste a call id into the search box. The page follows a live call as it happens and stays on the same URL when it ends.
The middle of the page reads four ways, and the browser keeps your choice for the next call:
| View | Shows |
|---|---|
| Chat | bubbles, each tool one line |
| Transcript | the turns, the tool calls with their arguments and output, confirmations, a supervisor's moves |
| Log | every entry in seq order, turns with their latencies, state changes, lookups |
| Trace | each exchange on a time axis: caller speaking, end of turn, model (first token marked), voice (first byte), tools, agent speaking |
On the right: the agent's state, the room and its participants, the prompt block by block (name, hash and length, never the text), and the metrics.
When the call is over#
The pane opens with what it came to:
- the outcome, and the score: each judge's verdict, its sentence, and the seqs it cites as links into the log;
- the latency per measure, median and worst, with the silence before a reply and the agent's share of the talking;
- Where the time went: every second given to one part (the caller, the agent, both at once, waiting on a tool, on hold) so the parts add up to the call's length;
- the cost by model, and the recording when the call kept one.
At the foot of the log: Re-check by code (Replaying a real call), Promote to a golden, Erase this call and Do not call this number. Attach a judge scores a call nobody judged.
From a terminal#
$ pinecall sessions --limit 3
clinica-norte · 3 calls
● call_314b0306e2a64daba6b6dbab129540c0 web inbound 16m 27s live —
call_df5aaa81ac7142f5a2c6f9b77033d23e web inbound 31s caller_hung_up $0.0000 Clínica Norte, good morning…
call_29d7c7b6cdd643de9c659984a0125c8c web inbound 3s caller_hung_up $0.0205 Perfect. On Thursday we have…
pinecall sessions <call> prints one call's ending: the outcome, why and when it ended, the cost with a line
per priced row, and the score, one line per judge with its question and, when it did not hold, its reason.
$ pinecall sessions call_5b1f0e9d2c7a4e8f9a1b3c5d7e9f1a2b
call_5b1f0e9d2c7a4e8f9a1b3c5d7e9f1a2b
outcome Understood, Ana. Your Thursday appointment at ten with Dr. Vidal stands for now.
ended caller_hung_up · 1m 24s · 4 turns
cost $0.0505
api.anthropic.com claude-haiku-5-5 17,621 input_tokens $0.0018
api.anthropic.com claude-haiku-5-5 312 output_tokens $0.0002
Cartesia sonic-3 623 characters $0.0312
Deepgram flux-general-multi 80.6 audio_seconds $0.0105
twilio twilio-inbound/+1 2 minutes $0.0068
The score follows the cost: a line saying whether every judge held, then one line per judge.
It reads the sandbox's calls; add --prod for production's, and --agent <slug> outside the agent's
directory. --json prints what the gateway answered.
A call can end with no score. Then
sessionssays not judged and why, for example when the org turned judging off. A call nobody judged is neither a pass nor a failure.
What to read first#
- A judge that broke: follow its seqs into the Log view. The reason names the turn.
- A slow call: the Trace view shows which stage took the time: the ears, the model, a tool or the voice.
- A wrong answer: the
state.changedbefore that turn and thedocs.sourcesof that turn. Thenpinecall prompt --state <file>prints the prompt that state produces. - A call worth keeping:
pinecall runs promote <call-id>writes it totest/candidates/as a golden candidate. Edit it and move it intogoldens/yourself.