Skip to main content

Agent-to-Agent (A2A) Communication Guide

⚠️ OUTDATED (2026-06-20). This guide describes the retired Google ADK / InMemoryTaskManager / AgentCommunicationService model. The current design runs A2A over Temporal tasks + the workflow event stream. See:
  • docs/adr/2026-06-20-a2a-transport-correctness.md — how an A2A task produces and returns a result (authoritative).
  • docs/plans/2026-03-10-agent-delegation-remote-mcp.md — delegation via A2AAgentTool.
  • docs/plans/2026-03-10-a2a-spec-compliance.md — A2A v0.3.0 wire contract.
The sections below are kept for historical context only.
Welcome to the AgentArea agent-to-agent communication documentation.
This feature allows an agent A to request work from agent B by creating a task for it via the A2A-protocol API. Under the hood it is powered by:
  • AgentCommunicationService – orchestration layer that issues tasks and tracks their results
  • InMemoryTaskManager – default store used to register the delegated tasks
  • Google ADK “ask_agent” tool – automatically injected into your LlmAgent so it can call helper agents from within its reasoning chain.

1. When to Use


2. Architecture Overview

  • ask_agent tool → validates input, generates a unique task-id, calls TaskManager (tasks/send) with metadata:
  • Service stores an asyncio.Event and waits (max configurable 60 s) for TaskCompleted/Failed.
  • Result (or error) is transparently returned to the calling agent so it can continue its reasoning.

3. Prerequisites

  • AgentArea backend running (uvicorn core.agentarea.main:app --reload)
  • Google ADK installed (pip install google-adk)
  • Event broker configured (Redis/Kafka) – required for task status events
  • Agents you want to communicate must exist in the database (see CLI or REST /agents/).

4. Enabling / Disabling Communication

Global flag is set in startup.py when AgentCommunicationService is registered.
Per-run override:
If disabled the ask_agent tool is not injected and direct calls raise ValueError.

5. Using the ask_agent Tool (inside an agent)

Tool specification (autogenerated)

Output:

Example Prompt

The library will serialize the call, await completion (if wait_for_response=true) and inject the result into the conversation.

6. Manual Task Creation (REST)

You can simulate the same process via HTTP:
Track status:

7. Full Example Script

examples/agent_to_agent_example.py demonstrates:
  1. Creating primary & helper agents
  2. Primary agent delegating a math task
  3. Waiting for completion
  4. Local simulation without backend (Google ADK only)
Run:

8. Configuration Options


9. Troubleshooting

Enable debug logs:

10. Security Considerations

  • All delegated tasks inherit user_id of the caller (if provided) – use RBAC to restrict cross-agent calls.
  • Validate metadata size to avoid abuse.
  • When exposing externally, protect the /tasks/send endpoint with authentication.

Happy collaborating! Your agents can now talk to each other and share the workload seamlessly.
For questions join our Discord #agent-to-agent channel.