An open API service indexing awesome lists of open source software.

https://github.com/google/A2A


https://github.com/google/A2A

Last synced: 14 days ago
JSON representation

Awesome Lists containing this project

README

        

![image info](images/A2A_banner.png)

**_An open protocol enabling communication and interoperability between opaque agentic applications._**

- [Agent2Agent Protocol A2A](#agent2agent-protocol-a2a)
- [Getting Started](#getting-started)
- [Contributing](#contributing)
- [What's next](#whats-next)
- [About](#about)

One of the biggest challenges in enterprise AI adoption is getting agents built on different frameworks and vendors to work together. That’s why we created an open *Agent2Agent (A2A) protocol*, a collaborative way to help agents across different ecosystems communicate with each other. Google is driving this open protocol initiative for the industry because we believe this protocol will be **critical to support multi-agent communication by giving your agents a common language – irrespective of the framework or vendor they are built on**.
With *A2A*, agents can show each other their capabilities and negotiate how they will interact with users (via text, forms, or bidirectional audio/video) – all while working securely together.

### **See A2A in Action**

Watch this demo video to see how A2A enables seamless communication between different agent frameworks:


Your browser does not support the video tag.

### Conceptual Overview

The Agent2Agent (A2A) protocol facilitates communication between independent AI agents. Here are the core concepts:

* **Agent Card:** A public metadata file (usually at `/.well-known/agent.json`) describing an agent's capabilities, skills, endpoint URL, and authentication requirements. Clients use this for discovery.
* **A2A Server:** An agent exposing an HTTP endpoint that implements the A2A protocol methods (defined in the [json specification](/specification)). It receives requests and manages task execution.
* **A2A Client:** An application or another agent that consumes A2A services. It sends requests (like `tasks/send`) to an A2A Server's URL.
* **Task:** The central unit of work. A client initiates a task by sending a message (`tasks/send` or `tasks/sendSubscribe`). Tasks have unique IDs and progress through states (`submitted`, `working`, `input-required`, `completed`, `failed`, `canceled`).
* **Message:** Represents communication turns between the client (`role: "user"`) and the agent (`role: "agent"`). Messages contain `Parts`.
* **Part:** The fundamental content unit within a `Message` or `Artifact`. Can be `TextPart`, `FilePart` (with inline bytes or a URI), or `DataPart` (for structured JSON, e.g., forms).
* **Artifact:** Represents outputs generated by the agent during a task (e.g., generated files, final structured data). Artifacts also contain `Parts`.
* **Streaming:** For long-running tasks, servers supporting the `streaming` capability can use `tasks/sendSubscribe`. The client receives Server-Sent Events (SSE) containing `TaskStatusUpdateEvent` or `TaskArtifactUpdateEvent` messages, providing real-time progress.
* **Push Notifications:** Servers supporting `pushNotifications` can proactively send task updates to a client-provided webhook URL, configured via `tasks/pushNotification/set`.

**Typical Flow:**

1. **Discovery:** Client fetches the Agent Card from the server's well-known URL.
2. **Initiation:** Client sends a `tasks/send` or `tasks/sendSubscribe` request containing the initial user message and a unique Task ID.
3. **Processing:**
* **(Streaming):** Server sends SSE events (status updates, artifacts) as the task progresses.
* **(Non-Streaming):** Server processes the task synchronously and returns the final `Task` object in the response.
4. **Interaction (Optional):** If the task enters `input-required`, the client sends subsequent messages using the same Task ID via `tasks/send` or `tasks/sendSubscribe`.
5. **Completion:** The task eventually reaches a terminal state (`completed`, `failed`, `canceled`).

### **Getting Started**

* πŸ“š Read the [technical documentation](https://google.github.io/A2A/#/documentation) to understand the capabilities
* πŸ“ Review the [json specification](/specification) of the protocol structures
* 🎬 Use our [samples](/samples) to see A2A in action
* Sample A2A Client/Server ([Python](/samples/python/common), [JS](/samples/js/src))
* [Multi-Agent Web App](/demo/README.md)
* CLI ([Python](/samples/python/hosts/cli/README.md), [JS](/samples/js/README.md))
* πŸ€– Use our [sample agents](/samples/python/agents/README.md) to see how to bring A2A to agent frameworks
* [Agent Developer Kit (ADK)](/samples/python/agents/google_adk/README.md)
* [CrewAI](/samples/python/agents/crewai/README.md)
* [LangGraph](/samples/python/agents/langgraph/README.md)
* [Genkit](/samples/js/src/agents/README.md)
* πŸ“‘ Review key topics to understand protocol details
* [A2A and MCP](https://google.github.io/A2A/#/topics/a2a_and_mcp.md)
* [Agent Discovery](https://google.github.io/A2A/#/topics/agent_discovery.md)
* [Enterprise Ready](https://google.github.io/A2A/#/topics/enterprise_ready.md)
* [Push Notifications](https://google.github.io/A2A/#/topics/push_notifications.md)

### **Contributing**

We welcome contributions! Please see our [contributing guide](CONTRIBUTING.md) to get started.\
Have questions? Join our community in GitHub discussions.\
Help with protocol improvement feedback, in GitHub issues.\
Want to send private feedback? use this [Google form](https://docs.google.com/forms/d/e/1FAIpQLScS23OMSKnVFmYeqS2dP7dxY3eTyT7lmtGLUa8OJZfP4RTijQ/viewform)

### **What's next**

Future plans include improvements to the protocol itself and enhancements to the samples:

**Protocol Enhancements:**

* **Agent Discovery:**
* Formalize inclusion of authorization schemes and optional credentials directly within the `AgentCard`.
* **Agent Collaboration:**
* Investigate a `QuerySkill()` method for dynamically checking unsupported or unanticipated skills.
* **Task Lifecycle & UX:**
* Support for dynamic UX negotiation *within* a task (e.g., agent adding audio/video mid-conversation).
* **Client Methods & Transport:**
* Explore extending support to client-initiated methods (beyond task management).
* Improvements to streaming reliability and push notification mechanisms.

**Sample & Documentation Enhancements:**

* Simplify "Hello World" examples.
* Include additional examples of agents integrated with different frameworks or showcasing specific A2A features.
* Provide more comprehensive documentation for the common client/server libraries.
* Generate human-readable HTML documentation from the JSON Schema.

### **About**

A2A Protocol is an open source project run by Google LLC, under [License](LICENSE) and open to contributions from the entire community.