The explicit outcome on the parent span is the part I would carry into delivery systems. I would add the authorisation decision and the downstream mutation result beside the tool arguments. A trace that says an agent called transfer_funds still leaves two operational questions open: was the call within the granted scope, and did the target system actually change state? Recording the approved scope, decision source, and returned mutation ID would make the trace useful during both a security review and a replay exercise. The span tells you what the agent attempted; the downstream record tells you what the system accepted.
This is a great reminder that once AI agents start doing real work, “it ran successfully” isn’t really enough information anymore.
I particularly liked the focus on tracing the agent’s full journey rather than treating the LLM call as the only interesting part. Seeing the tool calls, decisions, errors, latency, and downstream effects in one trace makes debugging a completely different problem.
The governance side is important too. An agent can technically make a successful tool call while still doing something outside the intended scope, so having that context available in the trace feels much more useful than simply logging prompts and responses.
The OpenTelemetry approach also makes a lot of sense here. If agent observability can build on infrastructure teams already understand instead of creating another completely separate monitoring stack, adoption becomes much easier.
Definitely the kind of topic that becomes more important once agents move from demos into systems where people actually depend on them. Great practical guide. 👍