From ai-protocols
Expert guidance for the A2A (Agent2Agent) Protocol — an open HTTP-based protocol for independent, opaque AI agents to collaborate as peers. Covers v1.0: data model (Agent Card, Task, Message, Part, Artifact, Extension); operations (`SendMessage`, `SendStreamingMessage`, `GetTask`, `ListTasks`, `CancelTask`, `SubscribeToTask`, the `*TaskPushNotificationConfig` family, `GetExtendedAgentCard`); task lifecycle and multi-turn flows; three protocol bindings (JSON-RPC, gRPC, HTTP+JSON/REST) and custom bindings; agent discovery (well-known URI, registries, signed Agent Cards); enterprise security (TLS, OAuth 2.0 / OIDC / mTLS, in-task authorization); SSE streaming and webhook push notifications; the extension framework; A2A↔MCP relationship; and the six SDKs (`a2a-python`, `a2a-js`, `a2a-java`, `a2a-go`, `a2a-dotnet`, `a2a-rs`). Always invoke for A2A, Agent2Agent, agent card, A2A tasks / messages / artifacts / parts, push notification configs, A2A extensions, Agent Card signing, or any of the six SDK package names.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-protocols:a2a-knowledgeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are an expert in the **Agent2Agent (A2A) Protocol** — an open standard for
references/definitions.mdreferences/sdk/index.mdreferences/sdk/python.mdreferences/sdk/python/conf.pyreferences/sdk/python/index.rstreferences/specification.mdreferences/topics/a2a-and-mcp.mdreferences/topics/agent-discovery.mdreferences/topics/custom-protocol-bindings.mdreferences/topics/enterprise-ready.mdreferences/topics/extension-and-binding-governance.mdreferences/topics/extensions.mdreferences/topics/key-concepts.mdreferences/topics/life-of-a-task.mdreferences/topics/streaming-and-async.mdreferences/topics/what-is-a2a.mdreferences/tutorials/python/1-introduction.mdreferences/tutorials/python/2-setup.mdreferences/tutorials/python/3-agent-skills-and-card.mdreferences/tutorials/python/4-agent-executor.mdYou are an expert in the Agent2Agent (A2A) Protocol — an open standard for communication and interoperability between independent, opaque AI agents. A2A defines how agents discover each other, exchange messages, share long-running stateful tasks, stream incremental results, and authenticate — over standard HTTP with pluggable wire formats (JSON-RPC 2.0, gRPC, HTTP+JSON/REST).
A2A is the peer-to-peer layer of the AI ecosystem. Where MCP standardizes how a
single agent talks to its tools and resources (vertical), A2A standardizes how
two agents talk to each other (horizontal). Agents are treated as opaque systems:
a client agent never sees the remote agent's internal memory, tools, or chain of
thought — only its published AgentCard, the Message and Artifact objects
it returns, and the lifecycle of any Task it accepts.
Three actors participate in every A2A interaction:
A2A is at v1.0.0 (current and stable). Older versions 0.3.0, 0.2.6, and
0.1.0 exist as historical references on a2a-protocol.org. v1.0 introduced
breaking changes from 0.3: enum values switched from kebab-case to
SCREAMING_SNAKE_CASE, compound IDs (tasks/{id}) were replaced with plain
UUIDs, polymorphism dropped the kind discriminator in favor of JSON
member-based detection, and OAuth implicit / password flows were removed in
favor of Authorization Code + PKCE and Device Code (RFC 8628). Use v1.0 for
all new work. Detailed migration notes live in references/whats-new-v1.md and
Appendix A of references/specification.md.
supportedInterfaces field is a v1.0 AgentInterface
list, one entry per reachable endpoint with that interface's protocolBinding
and protocolVersion (§4.4.6 / §5.2). Functions as a digital business card;
discoverable via a well-known URI, a registry, or a signed JWS for
trust-bootstrapping.SCREAMING_SNAKE_CASE (TASK_STATE_SUBMITTED →
TASK_STATE_WORKING → TASK_STATE_INPUT_REQUIRED /
TASK_STATE_AUTH_REQUIRED → TASK_STATE_COMPLETED / TASK_STATE_FAILED /
TASK_STATE_CANCELED / TASK_STATE_REJECTED). Long-running work is modeled
as a task; short Q&A is just a message.role (user or agent), a
messageId, and one or more Part objects. Sent via SendMessage (unary)
or SendStreamingMessage (SSE).text (string), raw (inline bytes), url (external reference), or
data (structured JSON). Also carries mediaType, filename, metadata.artifactId, a name, one or more Parts, and
can be streamed incrementally.A2A-Extensions request header.contextId) — server-generated identifier that groups related
tasks across a multi-step user goal.Each file under references/ is a verbatim copy of the upstream A2A
documentation at submodules/A2A/docs/. The only modification is a generated
table-of-contents prepended to references/specification.md.
| File | Content |
|---|---|
references/specification.md | Full v1.0 normative spec (~3,600 lines). 14 numbered sections plus migration and MCP-relationship appendices. Has a TOC at the top — jump to sections via the anchors. |
references/definitions.md | Pointer to the canonical Protobuf schema and JSON Schema. The --8<-- directives are mkdocs snippets and do not inline content here; read the proto file directly. |
references/whats-new-v1.md | v1.0 release notes: maturity, type safety, developer experience, enterprise features, breaking changes vs v0.3. |
The canonical Protobuf schema lives at submodules/A2A/specification/a2a.proto.
| File | Content |
|---|---|
references/topics/what-is-a2a.md | High-level overview, problems A2A solves, example use cases. |
references/topics/key-concepts.md | Glossary walkthrough of actors, Agent Card, Task, Message, Part, Artifact. |
references/topics/life-of-a-task.md | Task lifecycle and state machine; multi-turn input-required resumes. |
references/topics/streaming-and-async.md | SSE streaming, polling, and push-notification trade-offs. |
references/topics/agent-discovery.md | Well-known URI, registries, programmatic discovery, retrieval and caching. |
references/topics/enterprise-ready.md | TLS, server identity, OAuth 2.0 / OIDC / API key / mTLS, monitoring. |
references/topics/extensions.md | Extension framework: data-only, profile, method, state-machine kinds; negotiation. |
references/topics/extension-and-binding-governance.md | Governance model for extensions and new protocol bindings. |
references/topics/custom-protocol-bindings.md | Rules for implementing a binding beyond JSON-RPC / gRPC / REST. |
references/topics/a2a-and-mcp.md | A2A vs MCP comparison, complementarity, integration patterns. |
| File | Content |
|---|---|
references/tutorials/python/1-introduction.md | Goals and prerequisites. |
references/tutorials/python/2-setup.md | Environment and a2a-python installation. |
references/tutorials/python/3-agent-skills-and-card.md | Authoring the Agent Card and declaring skills. |
references/tutorials/python/4-agent-executor.md | The executor that handles SendMessage and emits task updates. |
references/tutorials/python/5-start-server.md | Wiring the Starlette server and starting it. |
references/tutorials/python/6-interact-with-server.md | Writing a client; fetching Agent Card; unary send; reading results. |
references/tutorials/python/7-streaming-and-multiturn.md | SendStreamingMessage SSE; resuming TASK_STATE_INPUT_REQUIRED. |
references/tutorials/python/8-next-steps.md | Pointers to further samples and framework integrations. |
| File | Content |
|---|---|
references/sdk/index.md | Matrix of the 6 official SDKs with repository links. |
references/sdk/python.md | One-line redirect stub from the upstream mkdocs build. |
references/sdk/python/index.rst | Sphinx root for the Python API reference. |
references/sdk/python/conf.py | Sphinx config used to generate the upstream Python API HTML. |
Use this matrix as the first stop. Most questions resolve in one or two files.
| User is asking about... | Read |
|---|---|
| What A2A is, why it exists, when to use it | topics/what-is-a2a.md then topics/key-concepts.md |
| Glossary / core objects (Task, Message, Part, Artifact) | topics/key-concepts.md then specification.md §4 |
| Agent Card structure and fields | specification.md §8 (and §4.4 for the schema) |
| Well-known URI / agent registries / discovery | topics/agent-discovery.md then specification.md §8.2 |
| Agent Card signing (JWS, RFC 8785 canonicalization) | specification.md §8.4 |
| Task lifecycle / state transitions / multi-turn | topics/life-of-a-task.md then specification.md §3.3–§3.4 |
| Streaming with SSE | topics/streaming-and-async.md then specification.md §3.5 |
Resubscribing to a task's event stream (SubscribeToTask) | specification.md §3.1 and §9.4.6 |
Authenticated extended Agent Card (GetExtendedAgentCard) | specification.md §9.4.8 and §13.3 |
| Push notifications (webhooks, signing, replay protection) | specification.md §4.3 and §13.2 |
| Authentication / OAuth 2.0 / OIDC / mTLS / API keys | topics/enterprise-ready.md then specification.md §7 |
| In-task authorization, scoped consent | specification.md §7.6 |
| JSON-RPC binding (methods, error codes) | specification.md §9 |
| gRPC binding (service definition, streaming) | specification.md §10 |
| HTTP+JSON/REST binding (URL patterns, query params) | specification.md §11 |
| Choosing or migrating between bindings | specification.md §5 then §9 / §10 / §11 |
| Writing a custom protocol binding | topics/custom-protocol-bindings.md then specification.md §12 |
| Extensions: declaring, kinds, negotiation | topics/extensions.md then specification.md §4.6 |
| Extension or binding governance | topics/extension-and-binding-governance.md |
| Security considerations / threat model | specification.md §13 |
| IANA registrations (media types, headers, well-known URI) | specification.md §14 |
| Migrating from v0.3 or earlier | whats-new-v1.md then specification.md Appendix A |
| Worked examples (basic, streaming, multi-turn, push, files) | specification.md §6 |
| Canonical Protobuf or JSON schema | submodules/A2A/specification/a2a.proto (indexed by definitions.md) |
| Relationship with MCP | topics/a2a-and-mcp.md then specification.md Appendix B |
| Building a Python agent from scratch | tutorials/python/1-introduction.md (read 1–8 in order) |
| Python API reference | sdk/python/index.rst (or the rendered upstream docs) |
| Which SDK to use / language matrix | sdk/index.md |
Paths in this table are relative to references/.
A2A maintains six official SDKs. Their depth in this skill differs: Python has authored API-reference scaffolding (the upstream Sphinx config is included), and the other five are indexed as pointers to their upstream repositories. Treat each SDK's repo README and issue tracker as the source of truth for ergonomics; the A2A spec itself is what guarantees on-the-wire interoperability between them.
| SDK / language | Package | Repository | Depth in this skill |
|---|---|---|---|
| Python | a2a-python | https://github.com/a2aproject/a2a-python | API reference + tutorial |
| JavaScript / TypeScript | a2a-js | https://github.com/a2aproject/a2a-js | Pointer only |
| Java | a2a-java | https://github.com/a2aproject/a2a-java | Pointer only |
| Go | a2a-go | https://github.com/a2aproject/a2a-go | Pointer only |
| C# / .NET | a2a-dotnet | https://github.com/a2aproject/a2a-dotnet | Pointer only |
| Rust | a2a-rs | https://github.com/a2aproject/a2a-rs | Pointer only |
For Python specifically, the tutorial under references/tutorials/python/ is
the fastest end-to-end path; the Sphinx-generated API reference lives in
references/sdk/python/. Cross-language samples (multi-agent setups, framework
integrations such as ADK, LangGraph, CrewAI, Semantic Kernel) live at
https://github.com/a2aproject/a2a-samples.
A2A and MCP are complementary, not competing. They sit at different layers of an agent stack:
A production system frequently uses both: each agent exposes MCP servers
inward to its tools and an A2A endpoint outward to other agents. For the full
comparison and integration patterns see references/topics/a2a-and-mcp.md and
Appendix B of references/specification.md. The companion skill mcp-knowledge
in this repo covers MCP in equivalent depth.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub 46ki75/claude-plugins --plugin ai-protocols