Agentic Data Plane

See What Your Agent Did

Use an agent’s transcripts to read a record of each conversation, turn by turn. Each transcript captures the conversation between the user, the agent, any LLM calls, and any tools it invoked, along with token usage, latency, and any errors.

How much of that a transcript holds depends on the agent’s transcript recording mode: an agent set to record metadata only keeps the conversation’s shape without its content, and an agent with recording off produces no transcripts at all.

For conceptual background on the underlying OpenTelemetry data model, see How Observability Works.

After reading this page, you will be able to:

  • Open a transcript from an agent’s Transcripts tab

  • Read a transcript as a turn-by-turn conversation, including tool calls and token usage

  • Investigate errors and slow turns from the transcript detail view

Prerequisites

  • A running agent with at least one execution.

  • Access to read transcripts. The Admin role grants it, and so does any policy that links a built-in template, from Read only up. Otherwise, an access policy granting the Transcript actions does.

Transcripts can hold full conversation content, including prompts, model responses, and tool arguments and results. Linking any built-in policy template, even Read only, grants read access to them. Grant transcript access only to people who need it.

Open an agent’s transcripts

  1. Open Agents in the sidebar and select the agent.

  2. Open the Transcripts tab.

The tab lists the agent’s recent conversations, one row per conversation.

Read the transcripts list

Each row represents one conversation. Columns include:

  • Conversation: The conversation ID, with the conversation title when one exists.

  • User: The end user the conversation ran for, or Unattributed when no turn recorded one. See Who a conversation ran for.

  • Started: When the conversation began.

  • Duration: End-to-end wall-clock time.

  • Turns: Number of turns in the conversation.

  • Status: Completed, Error, or Running.

  • Tokens: Total tokens across the conversation.

Click the Started, Duration, Turns, or Tokens column header to order the list by that value, newest or largest first. The order applies to the whole list rather than the page on screen, and it’s kept in the page URL, so a sorted view is shareable. The Conversation, User, and Status columns don’t sort.

Filter the list

  • Use the search box to match part of a conversation ID or title. The match ignores case and covers the whole list, not just the page on screen.

  • Use the status dropdown to narrow the list to Completed, Error, or Running conversations.

  • Use the User filter to narrow the list to one end user. It offers the end users recorded on the page you’re looking at, and takes an identity you type in full for one that isn’t listed. Select Clear user filter to go back to the full list.

The User filter matches exactly. It doesn’t ignore case, and a partial identity matches nothing. It matches a conversation when any of its turns recorded that end user, so a conversation can match on a turn whose user isn’t the one in the User column. Like the search box and the status filter, it’s kept in the page URL.

The User filter isn’t available in every environment. If Status is the only filter beside the search box, your environment doesn’t have it.

The list is paged, with a rows-per-page selector in the footer. Use the page controls to move through older conversations, and use the refresh control to pick up new ones. The page you are on and the rows-per-page setting are kept in the page URL too, so a link to the list reopens the view you shared.

Who a conversation ran for

The User column, the initiator in a transcript’s summary header, and the label on each turn all report the same thing: the end user the agent’s runtime recorded for that turn.

The agent asserts that value, and nothing checks it. Read it as a label the agent chose, not as proof of who acted: an agent can send any string, and the reach of a wrong value stops at its own environment’s transcripts. Access policies, budgets, and cost reporting read the identity derived from the agent’s credential instead. Wherever no value was recorded, a transcript reads Unattributed.

A conversation can involve more than one person, such as an agent answering in a shared channel, so each turn carries its own end user and the summary header reports the first turn that recorded one.

For a managed agent, the runtime records the email address of the caller it authenticated, so the value reflects who called rather than a label the agent picked. When one agent runs on a person’s behalf, it records that person’s address rather than the calling agent’s service account. A run that carries no authenticated email address records nothing, and its turns read Unattributed.

For a self-managed agent, the value is whatever the agent’s own instrumentation sets. See End user attribution.

To read only the conversations one end user took part in, filter the list by user. See Filter the list.

Open a transcript

Click any row to open the conversation detail view. The view has two parts: a summary header and the conversation.

Summary header

The summary header reports:

  • The conversation ID and a status badge (Completed, Error, or Running).

  • The start time, end-to-end duration, and turn count.

  • The end user recorded for the conversation, taken from the first turn that recorded one, or Unattributed. See Who a conversation ran for.

  • A total-tokens chip.

  • A Chat / Detailed view toggle. Chat shows the user-visible exchange; Detailed adds per-turn metadata such as latency, token splits, and tool calls, and lets you expand a tool call to read what was sent and what came back.

If the conversation ended in failure, the status badge reads Error, and the detail is on the turn or tool call that failed. See Errors.

Read the conversation

The conversation is grouped into turns. A turn pairs a user message with the agent’s response and any tool calls the agent made to answer it. When a system prompt was recorded, it appears in its own block at the start of the conversation.

Detailed view shows each turn as a card with the user message, the agent’s response, and a side panel. The side panel lists the turn’s tool calls, each with a status indicator and its duration, followed by the turn’s metrics: its latency, its LLM and tool call counts, and its input and output token totals. The LLM call count is the number of calls the agent made to the model to finish that turn, which is often more than one. Tool calls are counted separately. The user side of the card is labeled with that turn’s end user, so a conversation with several senders attributes each turn to its own. See Who a conversation ran for.

A turn’s response carries the text from every one of those model calls, in the order the agent produced them, one paragraph per message. An agent that says what it is about to do, calls a tool, and then answers shows both messages in the turn rather than the final answer alone. A message that repeats the one before it appears once. A turn already recorded isn’t rewritten unless its conversation records more activity, so a conversation that finished earlier can still show only the last message of each turn.

The three columns are resizable. Drag either divider in a turn card, or focus a divider and use the arrow keys, to widen the column you are reading. The change applies to every turn in the conversation at once, and the browser you are working in remembers the widths for your next visit. Each column keeps a minimum width, and on a narrow screen the columns scroll sideways rather than being cut off.

Click a tool call to expand it in place and read the exact call: the Arguments the agent sent and the Result it got back, both as JSON, and the error message when the call failed. A tool call with none of those recorded doesn’t expand. Which of them a transcript holds depends on the agent’s recording mode: an agent set to Metadata only strips tool content, so its tool calls keep their name, status, and duration, and don’t expand. See Transcript recording.

Chat view reads the turns as a message thread between the user and the agent, with each turn’s tool calls shown as labeled indicators above the agent’s response. The first message in each user block is labeled with the end user whose turn it was, or User when the turn recorded none, and a change of sender starts a new block, so a conversation that several people took part in shows who said what. See Who a conversation ran for.

Each tool call is labeled with the name the model called. For a tool served by an MCP server, that name includes the server it came from, such as servicenow__lookup_user. Tool calls that do not go through an MCP server, such as an agent delegating to a subagent, appear the same way.

Errors

A conversation that ended in failure shows an Error status badge in the summary header. The failure detail is on the turn or tool call that failed, not in a conversation-level notice.

A turn that failed carries its own Turn failed notice, under the agent’s response in Detailed view and in the agent’s message in Chat view. The notice names the failure’s error code when one was recorded, and shows the message the failure returned, or says the turn failed without error details when the failure recorded no message. A turn that failed before producing a response or a tool call still appears, with the notice in place of the response.

A tool call that failed shows an error status indicator on that tool call in its turn. Expand the tool call to read the error message it returned.

Common investigation tasks

These workflows cover the most frequent reasons to open a transcript.

Debug errors

  1. Set the status dropdown to Error.

  2. Open the failing transcript and find the turn carrying a Turn failed notice, or the tool call marked with an error status. Read the error message it shows.

  3. Read that turn’s user message and agent response for the context the failure happened in.

Investigate performance issues

  1. Click the Duration column header to bring the slowest conversations to the top.

  2. Open a slow transcript, switch to the Detailed view, and scan the per-turn latency to find the bottleneck turn.

  3. For tool-bound bottlenecks, compare the durations of the turn’s tool calls in the side panel to find the slow call.

Find the step that owns the time

The Detailed view reports a turn’s total latency and the duration of each tool call, but not the duration of each model call. Read a slow turn from its leaves up instead. Subtract the tool time, and what remains belongs to the model.

Suppose a conversation near the top of the Duration sort opens to a single turn whose metrics read 6.65 seconds of latency, 2 LLM calls, and 1 tool call, and whose side panel lists one tool call, get_quote, at 0.4 seconds.

  • The tool call took 0.4 seconds, so the tool isn’t the bottleneck.

  • The remaining time, about 6.2 seconds, belongs to the two model calls: one before the tool call, to decide to make it, and one after, to compose the answer.

  • The model owns the time. The fixes are on the model side: a lower-latency model tier for this agent, a shorter system prompt or conversation history, or fewer iterations. See Slow response times and Why iterations matter.

If the side panel had instead shown get_quote at 5 seconds, the tool would own the time, and the fix would be on the tool’s side: the system behind it, its query, or its timeout. A tool call that failed shows an error status indicator in the same panel, so a slow call and a failed call read the same way.

The same run as raw spans, with a duration on every span, is the hierarchy in Typical agent execution flow.

Analyze tool usage

Open a transcript in the Detailed view to read each turn’s tool calls in its side panel, with the tool name, a status indicator, and the call’s duration. Expand a call to see the arguments it was given and the result it returned. Each tool call is grouped with the turn whose response it produced, including tool calls that do not go through an MCP server, such as an agent delegating to a subagent.

Monitor LLM interactions and cost

The transcript shows token usage per turn. For spend analysis across agents, models, and users, open Cost and usage in the sidebar (see Analyze Cost and Usage), or use breakdown queries through SpendingService.

Limitations

  • The list loads in pages from most recent backward. If the conversation you need is old, use the page controls to reach older pages, or search for its conversation ID.

Troubleshooting

Symptoms you might hit in the transcript list, and what they mean.

Transcript stuck in Running

A transcript shows Running while any of its turns is unfinished. Common causes:

  • The agent or MCP server is still executing (this is normal: Wait, or open a newer transcript).

  • The root span never flushed because the process was killed mid-execution. Expect this to resolve after the OTLP ingestion lag clears; if it doesn’t after several minutes, the trace is likely orphaned.

Turns are missing token counts, latency, or tool detail

For a self-managed agent, a transcript shows only what the agent’s own instrumentation exports, and some frameworks don’t emit model steps, token counts, or tool arguments as attributes a transcript can read. See Framework caveats and Message content capture. For a managed agent set to Metadata only, tool calls keep their name, status, and duration but not their arguments and results. See Transcript recording.

Transcript missing entirely

  • Confirm the agent or MCP server actually ran: Check its logs and the corresponding session or task topic.

  • For a self-managed agent, confirm the agent is exporting spans and they pass validation: Check the validation log at the bottom of the agent’s Setup tab, then the exporter-side checks in Validate ingestion. An export authorized with a token that isn’t the agent’s own credential is rejected without appearing in that agent’s validation log.

  • Confirm your user can read transcripts. Outside the Admin role, transcript reads come from a built-in policy template (Read only or higher) or an access policy naming the Transcript actions. Check the Access page for a policy that covers your user or one of its groups, and for a forbid that overrides it. See Transcript permissions.