Agent-to-agent communication is most useful when one agent owns a capability that another team or system should not have to rebuild. A travel agent might ask a pricing agent for a quote. A support agent might ask a billing agent to check a disputed charge. Each agent can keep its own tools and rules while exchanging a well-defined task and result.
Start with ownership
Ask what the second agent knows that the first one does not, and why it should remain a separate service. If the answer is only “we can make an HTTP call,” a normal API may be simpler. A2A becomes more interesting when the remote capability has its own lifecycle, permissions, availability, and way of completing work.
Keep the hand-off specific
A useful task says what is being requested, for which tenant, with what deadline and constraints. The response should distinguish a completed result from a refusal, a request for more information, and work that is still running. Do not send an entire conversation when a few relevant facts and a traceable task ID will do.
Do not outsource responsibility
The requesting agent still has to check whether the result is relevant and whether it may use it. The receiving agent still has to enforce its own permissions. Neither should treat the other’s text as proof that a high-impact action is safe. Keep approvals, secrets, idempotency, and audit records at the service boundary where the side effect occurs.
Use it where the boundary helps
A2A can make a multi-team architecture clearer when agents have distinct ownership and real workflows. It can also add latency, failure modes, and confusing debugging to a small application. Begin with one valuable hand-off, define the task contract, test timeouts and duplicate messages, and keep an ordinary API available when the problem does not need agent autonomy.