In A2A, work is organized around Tasks — structured units of work that flow between a Client Agent and a Remote Agent.
┌─────────┐ ┌────────────┐ ┌──────────┐
│ CREATED │────▶│ IN_PROGRESS│────▶│COMPLETED │
└─────────┘ └──────┬─────┘ └──────────┘
│
┌────▼────┐
│ BLOCKED │ (needs input from client)
└────┬────┘
│
┌────▼────┐
│ FAILED │
└─────────┘
// 1. Client creates a task
POST /a2a/tasks
{
"skill": "book_flight",
"input": {
"origin": "London",
"destination": "New York",
"date": "2026-05-15"
}
}
// 2. Remote agent processes and responds
{
"taskId": "task_abc123",
"status": "IN_PROGRESS",
"updates": [
{ "type": "status", "message": "Searching 5 airlines..." },
{ "type": "status", "message": "Found 12 flights" }
]
}
// 3. Agent might need clarification (BLOCKED)
{
"status": "BLOCKED",
"question": "Do you prefer direct flights only or include layovers?",
"options": ["direct_only", "include_layovers"]
}
// 4. Client responds, agent completes
{
"status": "COMPLETED",
"result": {
"flight": "BA177",
"price": "$542",
"departure": "09:15"
}
}
| Pattern | Description | Use Case |
|---|---|---|
| Fire-and-Forget | Submit task, don't wait | Background processing, batch jobs |
| Request-Response | Submit task, wait for result | Simple delegation (booking, search) |
| Streaming | Receive real-time updates | Research, long-running analysis |
| Negotiation | Propose → Counter → Accept | Price negotiation, scheduling |