A forty-step run that went wrong is not one incident, it is forty decisions of which one or two were bad. Logging the request and the response gives you the first and the last. The debugging happens entirely in between.

Why request logging is not enough

The questions people actually arrive with are all cross-step: at which step did it stop making sense, what did it see just before that, why did it call that tool twice, where did the eleven dollars go, and is this the same failure as last Thursday. None of them are answerable from a pair of log lines, and all of them are answerable from a trace with the right attributes.

Use OpenTelemetry rather than inventing a schema. Its GenAI semantic conventions already name the fields — gen_ai.operation.name, gen_ai.request.model, gen_ai.usage.input_tokens, gen_ai.usage.output_tokens, gen_ai.tool.name — which means your traces are readable by tooling you have not chosen yet, and your agent spans sit in the same trace as the HTTP request that started them. That last property is worth more than any agent-specific dashboard.

The span tree