{"id":27234463,"url":"https://google.github.io/A2A/","last_synced_at":"2025-04-10T15:56:43.783Z","repository":{"id":287036435,"uuid":"954873280","full_name":"google/A2A","owner":"google","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-09T16:02:14.000Z","size":1692,"stargazers_count":502,"open_issues_count":8,"forks_count":25,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-04-09T17:22:23.068Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-25T18:44:21.000Z","updated_at":"2025-04-09T17:22:15.000Z","dependencies_parsed_at":"2025-04-09T17:33:01.500Z","dependency_job_id":null,"html_url":"https://github.com/google/A2A","commit_stats":null,"previous_names":["google/a2a"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2FA2A","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2FA2A/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2FA2A/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2FA2A/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/A2A/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248247236,"owners_count":21071887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-10T15:56:41.584Z","updated_at":"2025-04-10T15:56:43.681Z","avatar_url":"https://github.com/google.png","language":"Python","funding_links":[],"categories":["📜 Specification \u0026 Core Concepts","Use Cases \u0026 Applications","Blogs/Reference","Getting Started","Tutorials","List of Awesome A2A Servers"],"sub_categories":["Machine Learning \u0026 AI","Blogs"],"readme":"![image info](images/A2A_banner.png)\n\n**_An open protocol enabling communication and interoperability between opaque agentic applications._**\n\n\u003c!-- TOC --\u003e\n\n- [Agent2Agent Protocol A2A](#agent2agent-protocol-a2a)\n    - [Getting Started](#getting-started)\n    - [Contributing](#contributing)\n    - [What's next](#whats-next)\n    - [About](#about)\n\n\u003c!-- /TOC --\u003e\n\nOne 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**. \nWith *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.\n\n### **See A2A in Action**\n\nWatch this demo video to see how A2A enables seamless communication between different agent frameworks:\n\n\u003cvideo width=\"100%\" controls\u003e\n  \u003csource src=\"https://storage.googleapis.com/gweb-developer-goog-blog-assets/original_videos/A2A_demo_v4.mp4?X-Goog-Algorithm=GOOG4-RSA-SHA256\u0026X-Goog-Credential=storage-bucket-access%40gweb-developers-gblog-cms.google.com.iam.gserviceaccount.com%2F20250408%2Fauto%2Fstorage%2Fgoog4_request\u0026X-Goog-Date=20250408T174915Z\u0026X-Goog-Expires=86400\u0026X-Goog-SignedHeaders=host\u0026X-Goog-Signature=089d124afdf68c35b97e8042262f686a66681d24b8e21d0586537026faf36598da2ab9ad3bb2d8312e88cba10f443dda33eeb899c500a22b7374a79cf75c4bffd62ab095b45c07dbb4853d796d925123df94bd4b10b36c7bd4dc63aa984784b5a50e2ae7b238457d04b2410682943e2d514c4b530aa82c1a245ee834322f1676a363fa5913a318fe093f7769be17480303aeaee49f7d102ffbad7f9f5ab674386b5b10204d32bc7037d1524617cf21eccb739745a25d6e88cdce7c9fc121923cebbca5d96de0a7014d17953ee7c1c819f3e3ad150ef6d1fbc4730bd8317eb6e5d2c72cb51aebccdc85a2c78b101bc61852b63df6700ba2fed47f10a9ecfa1c16\" type=\"video/mp4\"\u003e\n  Your browser does not support the video tag.\n\u003c/video\u003e\n\n### Conceptual Overview\n\nThe Agent2Agent (A2A) protocol facilitates communication between independent AI agents. Here are the core concepts:\n\n*   **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.\n*   **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.\n*   **A2A Client:** An application or another agent that consumes A2A services. It sends requests (like `tasks/send`) to an A2A Server's URL.\n*   **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`).\n*   **Message:** Represents communication turns between the client (`role: \"user\"`) and the agent (`role: \"agent\"`). Messages contain `Parts`.\n*   **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).\n*   **Artifact:** Represents outputs generated by the agent during a task (e.g., generated files, final structured data). Artifacts also contain `Parts`.\n*   **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.\n*   **Push Notifications:** Servers supporting `pushNotifications` can proactively send task updates to a client-provided webhook URL, configured via `tasks/pushNotification/set`.\n\n**Typical Flow:**\n\n1.  **Discovery:** Client fetches the Agent Card from the server's well-known URL.\n2.  **Initiation:** Client sends a `tasks/send` or `tasks/sendSubscribe` request containing the initial user message and a unique Task ID.\n3.  **Processing:**\n    *   **(Streaming):** Server sends SSE events (status updates, artifacts) as the task progresses.\n    *   **(Non-Streaming):** Server processes the task synchronously and returns the final `Task` object in the response.\n4.  **Interaction (Optional):** If the task enters `input-required`, the client sends subsequent messages using the same Task ID via `tasks/send` or `tasks/sendSubscribe`.\n5.  **Completion:** The task eventually reaches a terminal state (`completed`, `failed`, `canceled`).\n\n### **Getting Started**\n\n* 📚 Read the [technical documentation](https://google.github.io/A2A/#/documentation) to understand the capabilities\n* 📝 Review the [json specification](/specification) of the protocol structures\n* 🎬 Use our [samples](/samples) to see A2A in action\n    * Sample A2A Client/Server ([Python](/samples/python/common), [JS](/samples/js/src))\n    * [Multi-Agent Web App](/demo/README.md)\n    * CLI ([Python](/samples/python/hosts/cli/README.md), [JS](/samples/js/README.md))\n* 🤖 Use our [sample agents](/samples/python/agents/README.md) to see how to bring A2A to agent frameworks\n    * [Agent Developer Kit (ADK)](/samples/python/agents/google_adk/README.md)\n    * [CrewAI](/samples/python/agents/crewai/README.md)\n    * [LangGraph](/samples/python/agents/langgraph/README.md)\n    * [Genkit](/samples/js/src/agents/README.md)\n* 📑 Review key topics to understand protocol details \n    * [A2A and MCP](https://google.github.io/A2A/#/topics/a2a_and_mcp.md)\n    * [Agent Discovery](https://google.github.io/A2A/#/topics/agent_discovery.md)\n    * [Enterprise Ready](https://google.github.io/A2A/#/topics/enterprise_ready.md)\n    * [Push Notifications](https://google.github.io/A2A/#/topics/push_notifications.md) \n\n### **Contributing**\n\nWe welcome contributions! Please see our [contributing guide](CONTRIBUTING.md) to get started.\\\nHave questions? Join our community in GitHub discussions.\\\nHelp with protocol improvement feedback, in GitHub issues.\\\nWant to send private feedback? use this [Google form](https://docs.google.com/forms/d/e/1FAIpQLScS23OMSKnVFmYeqS2dP7dxY3eTyT7lmtGLUa8OJZfP4RTijQ/viewform)\n\n### **What's next**\n\nFuture plans include improvements to the protocol itself and enhancements to the samples:\n\n**Protocol Enhancements:**\n\n*   **Agent Discovery:**\n    *   Formalize inclusion of authorization schemes and optional credentials directly within the `AgentCard`.\n*   **Agent Collaboration:**\n    *   Investigate a `QuerySkill()` method for dynamically checking unsupported or unanticipated skills.\n*   **Task Lifecycle \u0026 UX:**\n    *   Support for dynamic UX negotiation *within* a task (e.g., agent adding audio/video mid-conversation).\n*   **Client Methods \u0026 Transport:**\n    *   Explore extending support to client-initiated methods (beyond task management).\n    *   Improvements to streaming reliability and push notification mechanisms.\n\n**Sample \u0026 Documentation Enhancements:**\n\n*   Simplify \"Hello World\" examples.\n*   Include additional examples of agents integrated with different frameworks or showcasing specific A2A features.\n*   Provide more comprehensive documentation for the common client/server libraries.\n*   Generate human-readable HTML documentation from the JSON Schema.\n\n### **About**\n\nA2A Protocol is an open source project run by Google LLC, under [License](LICENSE) and open to contributions from the entire community.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/google.github.io%2FA2A%2F","html_url":"https://awesome.ecosyste.ms/projects/google.github.io%2FA2A%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/google.github.io%2FA2A%2F/lists"}