What structure does an ingested agent trace have?
Three fixed levels, always in this order. A session holds everything one user has done across their interaction with your agent. A trace is one turn inside that session, one thing the user asked for and waited on. A span is one step inside that turn, an LLM call, a tool call, a retrieval, or a sub-agent invocation, and spans can nest when a turn does its work in stages. Each level carries the ids your instrumentation already produces, so nothing about the shape has to be relearned once you already emit OpenTelemetry. What lands on a span is its actual content, not just its shape: the prompt and completion, the tool’s arguments and result, and whatever documents it pulled in, so a reader can see exactly what happened at that step, not just that a step happened.