{"id":"598bc9be-6307-4294-83ef-357d1582133e","entityType":"agent","slug":"clawhub-wangjipeng977-a2a-agent-protocol","name":"A2A Agent Protocol","canonicalUrl":"https://www.xpersona.co/agent/clawhub-wangjipeng977-a2a-agent-protocol","canonicalPath":"/agent/clawhub-wangjipeng977-a2a-agent-protocol","generatedAt":"2026-10-11T15:14:38.826Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:54:04.546Z","emptyReason":null},"description":"Use when (1) building an AI agent that needs to communicate with other agents over the Agent2Agent (A2A) protocol, (2) publishing an AgentCard for discovery,...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s179qwqch3yp9926afz4rxbz0h85z9mm:a2a-agent-protocol","sourceUrl":"https://clawhub.ai/wangjipeng977/a2a-agent-protocol","homepage":"https://clawhub.ai/wangjipeng977/skills/a2a-agent-protocol","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/wangjipeng977/a2a-agent-protocol","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/wangjipeng977/skills/a2a-agent-protocol","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"A2A Agent Protocol technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:54:04.546Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:54:04.546Z","emptyReason":null},"stars":null,"forks":null,"downloads":1062,"packageName":null,"latestVersion":"1.0.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:54:04.479Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T12:54:04.546Z","lastCrawledAt":"2026-10-11T12:54:04.479Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T12:54:04.479Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.0","createdAt":"2026-05-14T07:58:02.427Z","changelog":"a2a-protocol 1.0.0 - Initial release introducing a comprehensive skill for building, connecting, and operating Agent2Agent (A2A) protocol-compliant agents. - Provides detailed guidance and operational modes for agent discovery, task delegation, streaming updates, push notifications, and publishing AgentCards. - Covers the A2A protocol’s main data structures, workflow, and integration patterns, including support across frameworks and protocol bindings (JSON-RPC, REST, gRPC). - Includes a local mock A2A server for testing and practice where execution is supported. - Equips agents to overcome isolation, enabling capability negotiation and structured data exchange across diverse agent ecosystems.","fileCount":16,"zipByteSize":30524}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s179qwqch3yp9926afz4rxbz0h85z9mm:a2a-agent-protocol","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s179qwqch3yp9926afz4rxbz0h85z9mm:a2a-agent-protocol` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/wangjipeng977/a2a-agent-protocol before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T15:14:38.825Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wangjipeng977-a2a-agent-protocol/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:54:04.546Z","emptyReason":null},"readme":"Skill: A2A Agent Protocol\n\nOwner: wangjipeng977\n\nSummary: Use when (1) building an AI agent that needs to communicate with other agents over the Agent2Agent (A2A) protocol, (2) publishing an AgentCard for discovery,...\n\nTags: a2a:1.0.0, agent:1.0.0, dev-tools:1.0.0, latest:1.0.0\n\nVersion history:\n\nv1.0.0 | 2026-05-14T07:58:02.427Z | auto\n\na2a-protocol 1.0.0\n\n- Initial release introducing a comprehensive skill for building, connecting, and operating Agent2Agent (A2A) protocol-compliant agents.\n- Provides detailed guidance and operational modes for agent discovery, task delegation, streaming updates, push notifications, and publishing AgentCards.\n- Covers the A2A protocol’s main data structures, workflow, and integration patterns, including support across frameworks and protocol bindings (JSON-RPC, REST, gRPC).\n- Includes a local mock A2A server for testing and practice where execution is supported.\n- Equips agents to overcome isolation, enabling capability negotiation and structured data exchange across diverse agent ecosystems.\n\nArchive index:\n\nArchive v1.0.0: 16 files, 30524 bytes\n\nFiles: CONTRIBUTING.md (1396b), README_zh.md (2960b), README.md (3303b), references/a2a-overview.md (3634b), references/agent-card-template.md (4985b), references/data-model.md (3998b), references/operations.md (5415b), references/quickstart.md (6198b), scripts/mock_a2a_server.py (20418b), scripts/requirements.txt (114b), scripts/setup.sh (267b), scripts/validate_agent_card.py (3347b), skill-card.md (2930b), SKILL.md (14527b), tests/test_skill.py (6160b), _meta.json (137b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: a2a-protocol\ndescription: >\n  Use when (1) building an AI agent that needs to communicate with other agents over the\n  Agent2Agent (A2A) protocol, (2) publishing an AgentCard for discovery, (3) acting\n  as an A2A client or server, or (4) integrating A2A capabilities into an existing\n  agent framework. Solves agent isolation — enabling discovery, capability negotiation,\n  task delegation, and structured data exchange across different frameworks and vendors.\nlicense: MIT\nmetadata:\n  version: \"1.0\"\n  category: dev-tools\n  author: wangjipeng\n  sources:\n    - https://a2a-protocol.org/latest/specification/\n    - https://github.com/a2aproject/A2A\n    - https://github.com/a2aproject/a2a-python\n---\n\n# A2A Protocol Skill\n\nAn AI agent skill for building, connecting, and operating A2A-compliant agents.\nThis skill is the definitive guide for agents participating in the Agent2Agent protocol ecosystem.\n\n## Core Position\n\nThis skill is **NOT** a general API wrapper — it is a protocol education and implementation guide.\nIt teaches agents what A2A is, how to structure AgentCards for discovery, which operations to\nperform in which order, and how to handle the multi-turn task lifecycle.\n\nThis skill is **NOT** framework-specific. It guides agents regardless of whether they are built\nwith LangGraph, BeeAI, Google ADK, or custom code. The A2A protocol is language-agnostic.\n\nThis skill covers the JSON-RPC 2.0 over HTTP binding (the most common) plus key concepts for\ngRPC and HTTP+REST bindings.\n\n## What Problem This Solves\n\nAI agents today operate in silos. Even when they share the same infrastructure, they have no\nstandard way to:\n- Discover what capabilities other agents expose\n- Send a task to a remote agent and track its lifecycle\n- Handle streaming updates or push notifications from a remote agent\n- Exchange files, structured data, or multi-part messages\n\nThe A2A protocol solves all of the above. This skill makes an AI agent A2A-aware.\n\n## Modes\n\n### `/a2a-protocol`\n\nDefault mode. Learn A2A concepts, data structures, and operation semantics.\n\n**Preferred opening:** *\"The A2A protocol enables agents to discover each other and collaborate\nwithout exposing internal state. Here is the protocol overview:\"*\n\nUse it when:\n- The user asks what A2A is, how it works, or why it matters\n- You need to explain the difference between A2A and MCP\n- You want to understand the AgentCard structure and discovery mechanism\n- You need to understand the full task lifecycle (submitted → working → completed)\n\n### `/a2a-protocol build-card`\n\nGenerate an AgentCard JSON for the agent. The AgentCard is the public identity document that\nother agents use to discover capabilities, auth requirements, and connection endpoints.\n\n**Preferred opening:** *\"To publish this agent in the A2A ecosystem, I will generate an AgentCard\nat `/.well-known/agent.json` declaring: name, version, capabilities, and auth requirements.\"*\n\nUse it when:\n- You are building an A2A server agent and need to publish its capabilities\n- You need a starting-point AgentCard template to customize\n- The user wants to register an agent in the A2A ecosystem\n\n**Output:** Writes `agent-card.json` to the workspace with the complete AgentCard.\n\n### `/a2a-protocol send-task`\n\nSend a task to a remote A2A agent via `tasks/send`. Includes building the request, interpreting\nthe response (synchronous or task ID for async), and handling errors.\n\n**Preferred opening:** *\"To delegate this task to the remote agent, I will: (1) fetch its AgentCard,\n(2) validate capability compatibility, (3) construct a SendMessageRequest and POST it.\"*\n\nUse it when:\n- You need to delegate a subtask to another agent\n- You are acting as an A2A client initiating work on a remote agent\n- The user says \"send this task to the X agent\" or \"delegate to agent Y\"\n\n**Output:** Resolves to `artifacts[].parts` from the completed Task.\n\n### `/a2a-protocol stream-task`\n\nSet up streaming task delivery via `tasks/sendSubscribe` with SSE (Server-Sent Events), receive\nincremental `TaskStatusUpdateEvent` and `TaskArtifactUpdateEvent` blocks, and reassemble the\nfinal artifact.\n\n**Preferred opening:** *\"This remote task will take time. I will subscribe via SSE to receive\nreal-time status transitions and partial artifacts as they arrive.\"*\n\nUse it when:\n- A remote agent's task will take time and you want real-time progress updates\n- You need to stream partial results as they become available\n- The user says \"track the task progress\" or \"watch for updates\"\n\n**Output:** Reassembles the final `Artifact` from accumulated streaming events.\n\n### `/a2a-protocol subscribe-task`\n\nSubscribe to a task's push notification channel via `tasks/subscribe`, using either SSE\nstreaming or webhook delivery to receive final results.\n\n**Preferred opening:** *\"I will register a push notification subscription so the remote agent\ndelivers the result to our callback endpoint rather than requiring us to poll.\"*\n\nUse it when:\n- You want the remote agent to push results back to you rather than polling\n- You need asynchronous result delivery to a callback URL\n- The user says \"notify me when done\" or \"push results to this endpoint\"\n\n**Output:** Receives and validates the push payload; extracts `taskId` + `artifacts`.\n\n### `/a2a-protocol mock-server`\n\nStart a local mock A2A server for experimentation. The mock server is a fully functional A2A agent that serves its own AgentCard, accepts tasks via all supported operations, and responds with realistic simulated results.\n\n**Preferred opening:** *\"To experiment with A2A locally, I will start a mock A2A server on a free port. This gives us a real A2A endpoint to practice against.\"*\n\nUse it when:\n- You want to test A2A interactions without a real remote agent\n- You need a safe sandbox to practice `send-task`, `stream-task`, or `subscribe-task`\n- You want to verify that the agent correctly implements the A2A protocol before deploying\n- The user says \"try it out\", \"test A2A\", \"run locally\", or \"experiment\"\n\n\n**Output:** Starts an HTTP server at `http://localhost:<port>/a2a/` with a ready AgentCard.\n\n\n> This mode is a no-op for agents without Python execution capability. If the host cannot run Python scripts, skip this mode.\n\n## Execution Steps\n\n### Mode: `/a2a-protocol` (Learn)\n\n1. **You** read the A2A spec overview from `references/a2a-overview.md`\n2. **You** review the data model objects from `references/data-model.md`\n3. **You** answer the user's question using the reference material\n4. If the user asks for a specific operation, **you** switch to the appropriate mode\n\n### Mode: `/a2a-protocol build-card`\n\n1. **You** read `references/agent-card-template.md` for the full AgentCard schema\n2. **You** determine which capabilities the agent exposes (text, forms, media, streaming)\n3. **You** determine auth scheme (none, API key, OAuth2, mTLS)\n4. **You** determine push notification support (SSE, webhook, both, neither)\n5. **You** generate a completed AgentCard JSON and write it to `agent-card.json`\n6. **You** confirm the agent card URL path (default: `/.well-known/agent.json`)\n\n### Mode: `/a2a-protocol send-task`\n\n1. **You** read `references/operations.md` — SendMessage operation details\n2. **You** identify the target agent's URL (from its AgentCard or given address)\n3. **You** check the target agent's auth requirements (from its AgentCard)\n4. **You** construct a `SendMessageRequest` with `taskId`, `sessionId`, `message`, and `context`\n5. **You** send POST JSON-RPC 2.0 request to the target agent's A2A endpoint\n6. **You** handle the response: immediate result (synchronous) or `taskId` for async polling\n7. If async: **you** use `tasks/get` to poll for completion or `tasks/sendSubscribe` for streaming\n8. On completion: **you** extract `artifacts[].parts` from the task result and return them\n\n### Mode: `/a2a-protocol stream-task`\n\n1. **You** read `references/operations.md` — SendStreamingMessage operation + streaming events\n2. **You** construct a `SendMessageRequest` and set `stream: true` in configuration\n3. **You** send `tasks/sendSubscribe` POST to the target agent's A2A endpoint\n4. **You** receive SSE stream of `TaskStatusUpdateEvent` (status transitions) and\n   `TaskArtifactUpdateEvent` (partial artifact updates)\n5. **You** accumulate events until `TaskStatusUpdateEvent` with `state: completed`/`failed`/`canceled`\n6. **You** close the SSE stream and extract the final artifact from accumulated data\n\n### Mode: `/a2a-protocol subscribe-task`\n\n1. **You** read `references/operations.md` — SubscribeToTask operation + push notification setup\n2. **You** determine delivery mode: SSE stream (server-push via `tasks/sendSubscribe`) or\n   webhook push (agent registers a callback URL via `tasks/sendSubscribe` with `pushConfig`)\n3. For webhook mode: **you** register `PushNotificationConfig` with the target's\n   `tasks/sendSubscribe` including `pushConfig.url` and `pushConfig.authentication`\n4. **You** wait for delivery; validate the incoming `tasks/push` payload using the `AuthenticationInfo`\n5. **You** extract `taskId` and `artifacts` from the validated push payload and return them\n\n### Mode: `/a2a-protocol mock-server`\n\n\n1. **You** locate `scripts/mock_a2a_server.py` in the skill directory\n2. **You** start the server: `python3 scripts/mock_a2a_server.py --port <PORT> --name <NAME> --skills <SKILLS>`\n3. **You** fetch the AgentCard from `http://localhost:<PORT>/.well-known/agent.json` to confirm it started\n4. **You** optionally run `scripts/validate_agent_card.py` against the fetched AgentCard\n5. **You** use `send-task`, `stream-task`, or `subscribe-task` against the local endpoint to test interactions\n6. When done: **you** stop the server (Ctrl+C or SIGTERM)\n\n## Mandatory Rules\n\n### Do not\n\n- **Do not** hardcode any AgentCard endpoint URLs — always use the supplied or discovered URL\n- **Do not** assume unauthenticated access — always check the target agent's `AgentCard.authentication`\n- **Do not** send a task without a `sessionId` if the operation requires multi-turn context\n- **Do not** discard `TaskStatusUpdateEvent` blocks — they signal working/progress states\n- **Do not** treat A2A as a replacement for MCP — A2A is for agent-to-agent collaboration,\n  MCP is for agent-to-tool/resource connectivity; use both together\n- **Do not** expose the agent's internal memory, tool implementations, or proprietary state\n  in the AgentCard or in task payloads — A2A preserves agent opacity\n- **Do not** return the raw `task` object — always extract and return `artifacts[].parts`\n- **Do not** close an SSE stream before receiving `final: true` on a `TaskStatusUpdateEvent`\n\n### Do\n\n- Always validate capability compatibility before sending a task\n  (check `targetAgent.capabilities.streaming` and `pushNotifications`)\n- Always handle streaming with proper event accumulation — never treat partial events as final\n- Always close SSE streams when the task reaches a terminal state\n- Always use idempotent task IDs when retrying a failed `tasks/send`\n- Always include `context.contextId` to thread multi-turn conversations across agents\n- Always return structured output (`artifacts[].parts`) not raw JSON-RPC responses\n\n## Quality Bar\n\nA good A2A interaction **must** satisfy all of:\n- AgentCard fetched from `/.well-known/agent.json` (HTTP 200, valid JSON, has required fields)\n- JSON-RPC 2.0 request has `jsonrpc: \"2.0\"`, `method`, `params.taskId` (or server-generated), and `id`\n- Task state machine transitions are followed: no `completed` before a `working` signal received\n- Streaming: `TaskStatusUpdateEvent.final: true` received before closing stream\n- Artifact extraction: `parts[].text` or `parts[].data` returned, not raw `task` object\n- Auth: correct scheme used (Bearer token → `Authorization: Bearer`, API key → `X-API-Key`, etc.)\n- Error handling: JSON-RPC error codes `-32700`/`-32600`/`-32603` recognized and surfaced as errors\n\nA bad A2A interaction exhibits any of:\n- No capability check before sending (assumes all agents accept all tasks)\n- SSE stream closed before receiving `final: true` on the terminal status event\n- Raw `task` object returned instead of extracted `artifacts[].parts`\n- Wrong HTTP method used (GET instead of POST, or wrong path for the operation)\n- Auth credentials omitted when `AgentCard.authentication.credentials: \"required\"`\n\n## Good vs. Bad Examples\n\n### Good: Sending a task with full capability check\n\n```\n1. Fetch AgentCard from https://target-agent/.well-known/agent.json\n2. Verify capabilities.streaming or dataStreamingSupported matches our needs\n3. Check authentication.schemes and prepare credentials if credentials: \"required\"\n4. Construct SendMessageRequest: taskId=uuid(), sessionId, message with parts\n5. POST to https://target-agent/a2a/tasks/send with Authorization header\n6. Receive { task: { taskId: \"abc123\", status: { state: \"submitted\" } } }\n7. Poll tasks/get until status.state === \"completed\"\n8. Return artifacts[0].parts[0].text  ← structured output\n```\n\n### Bad: Sending a task without discovery\n\n```\n1. POST to https://target-agent/a2a/tasks/send with hardcoded payload\n2. Assume success without checking status.state\n3. Return raw task object instead of artifacts[].parts\n```\n\n### Good: AgentCard with complete capability declaration\n\n```json\n{\n  \"name\": \"data-analysis-agent\",\n  \"description\": \"Specialized in financial data extraction and reporting\",\n  \"version\": \"1.0\",\n  \"capabilities\": {\n    \"streaming\": \"SUPPORTED\",\n    \"pushNotifications\": \"SUPPORTED\",\n    \"agentPrivilege\": false,\n    \"signedAgentCard\": false\n  },\n  \"skills\": [\n    { \"id\": \"financial-data\", \"name\": \"Financial Data Extraction\", \"description\": \"...\" }\n  ],\n  \"authentication\": {\n    \"schemes\": [\"httpBearer\"],\n    \"credentials\": \"required\"\n  }\n}\n```\n\n### Bad: Generic AgentCard without capability detail\n\n```json\n{\n  \"name\": \"agent\",\n  \"description\": \"An AI agent\"\n}\n```\n\n## References\n\n- `references/a2a-overview.md` — A2A protocol overview, key goals, A2A vs MCP comparison\n- `references/data-model.md` — Core data model (Task, Message, Part, Artifact, AgentCard, streaming events)\n- `references/operations.md` — All A2A operations reference (send, get, subscribe, push, cancel, list)\n- `references/agent-card-template.md` — AgentCard JSON schema with full annotated example\n- `references/quickstart.md` — Full end-to-end example: AgentCard → discovery → send → streaming → result\n- `scripts/mock_a2a_server.py` — Start a local mock A2A agent for experimentation and testing\n\nFile v1.0.0:README.md\n\n---\nname: a2a-protocol\nlicense: MIT\n---\n\n# a2a-protocol\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n![Version](https://img.shields.io/badge/version-1.0.0-blue)\n\n> Use when building A2A-compliant agents, publishing an AgentCard for discovery, sending tasks\n> to remote agents, or integrating the Agent2Agent protocol into an existing agent framework.\n\n## What Problem This Solves\n\nAI agents operate in silos. Even when they share infrastructure, they have no standard way to\ndiscover peers, delegate tasks, track lifecycle, or exchange structured data across frameworks.\n\nThe A2A (Agent2Agent) protocol — an open standard maintained by Google and the a2aproject\ncommunity — solves agent interoperability. This skill makes an AI agent A2A-aware, guiding it\nthrough discovery, task submission, streaming, push notifications, and multi-turn collaboration.\n\n**When triggered:** When the user wants to connect agents, delegate tasks, build an A2A server,\npublish an AgentCard, or understand the A2A/MCP relationship.\n\n## Features\n\n- **Protocol education** — full A2A overview, data model, and operation reference\n- **AgentCard builder** — generate discovery-ready JSON identity documents\n- **Task operations** — send, poll, stream, subscribe to remote agent tasks\n- **Multi-turn support** — session and context threading across agent boundaries\n- **Enterprise auth** — guidance on API key, Bearer, OAuth2, and mTLS schemes\n- **Streaming events** — real-time TaskStatusUpdateEvent and TaskArtifactUpdateEvent handling\n\n## Quick Start\n\n### Installation\n\n```bash\n# Via ClawHub\nclawhub install a2a-protocol\n\n# Or manually\ncp -r a2a-protocol/ ~/.openclaw/skills/\n```\n\n### Usage\n\n```bash\n# Learn A2A concepts\n/a2a-protocol\n\n# Build an AgentCard for discovery\n/a2a-protocol build-card\n\n# Send a task to a remote A2A agent\n/a2a-protocol send-task\n\n# Stream real-time task updates from a remote agent\n/a2a-protocol stream-task\n\n# Subscribe to push notifications from a remote agent\n/a2a-protocol subscribe-task\n```\n\n### Example: Send a Task\n\n```\n/a2a-protocol send-task --agent https://target-agent/.well-known/agent.json --task \"Analyze Q3 revenue\"\n```\n\n## Directory Structure\n\n```\na2a-protocol/\n├── SKILL.md                    # Entry point (this skill)\n├── LICENSE                    # MIT\n├── README.md                  # This file\n├── README_zh.md              # Chinese version\n├── CONTRIBUTING.md           # Contribution guide\n├── .gitignore\n├── references/\n│   ├── a2a-overview.md       # Protocol overview and key concepts\n│   ├── data-model.md         # Core data model (Task, Message, Part, Artifact, AgentCard)\n│   ├── operations.md         # All A2A operations reference\n│   └── agent-card-template.md # AgentCard JSON schema with annotations\n└── scripts/                  # (reserved for future helpers)\n```\n\n## References\n\n- [A2A Protocol Specification](https://a2a-protocol.org/latest/specification/)\n- [A2A on GitHub](https://github.com/a2aproject/A2A)\n- [Python SDK (a2a-sdk)](https://github.com/a2aproject/a2a-python)\n\n## License\n\nThis project is licensed under the MIT License — see [LICENSE](LICENSE) for details.\n\n---\n\nPowered by [MiniMax](https://minimax.io).\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn70zthc74p61mvctddrancx0s832g4r\",\n  \"slug\": \"a2a-agent-protocol\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778745482427\n}\n\nFile v1.0.0:references/a2a-overview.md\n\n# A2A Protocol Overview\n\n> Reference: https://a2a-protocol.org/latest/specification/\n\n## What is A2A?\n\nThe Agent2Agent (A2A) protocol is an **open specification** enabling AI agents built on\ndifferent frameworks by different vendors, running on separate servers, to communicate\nand collaborate — as agents, not just as tools.\n\nA2A provides a common language for agents, fostering a more interconnected AI ecosystem.\n\n## Key Goals\n\n| Goal | Description |\n|------|-------------|\n| **Break Down Silos** | Connect agents across different ecosystems and frameworks |\n| **Enable Complex Collaboration** | Allow specialized agents to work together on tasks a single agent cannot handle alone |\n| **Promote Open Standards** | Community-driven approach to agent communication |\n| **Preserve Opacity** | Agents collaborate without exposing internal memory, proprietary logic, or tool implementations |\n\n## Core Concepts\n\n### Agent\n\nAn AI application that:\n- Exposes capabilities via an **AgentCard**\n- Communicates via A2A operations (SendMessage, GetTask, etc.)\n- Can act as A2A **server** (receives tasks), **client** (sends tasks), or both\n\n### AgentCard\n\nA JSON document at `/.well-known/agent.json` that declares:\n- Agent name, version, description\n- Capabilities (streaming, push notifications, authentication)\n- Skills (specific capabilities exposed)\n- Endpoints and auth requirements\n\n### Task\n\nThe central unit of work in A2A:\n- Has a unique `taskId`\n- Has a full lifecycle: `submitted` → `working` → `completed`/`failed`/`canceled`\n- Carries a `Message` (the work to be done)\n- Produces `Artifact[]` (results, as `Part[]`)\n\n### Message\n\nA `Message` contains a `role` (user/agent) and `parts[]` — the actual content blocks.\n\n### Part\n\nThe content unit. Types:\n- `TextPart` — plain text\n- `DataPart` — structured JSON data\n- `FilePart` — file with inline bytes or remote URL\n\n### Artifact\n\nA collection of related parts forming a deliverable output (e.g., a report document,\na generated image, a data table).\n\n## A2A vs MCP\n\n| Aspect | A2A | MCP |\n|--------|-----|-----|\n| **Purpose** | Agent-to-agent collaboration | Agent-to-tool/resource connectivity |\n| **Focus** | Task delegation, status tracking, multi-agent workflows | Tool invocation, resource access |\n| **State** | Long-running tasks with full lifecycle | Stateless tool calls |\n| **Communication** | Rich messages, artifacts, streaming events | JSON-RPC request/response |\n| **Discovery** | AgentCard at `/.well-known/agent.json` | MCP server registry |\n\n**Use both together**: MCP connects an agent to tools and resources; A2A connects\nagents to each other.\n\n## Protocol Binding\n\nA2A supports multiple wire protocols:\n- **JSON-RPC 2.0 over HTTP** — most common, agents `POST tasks/send`\n- **gRPC** — for high-performance agent interop\n- **HTTP+REST/JSON** — for simple integrations\n\n## Task Lifecycle\n\n```\n[Client]                    [Server/Remote Agent]\n   |                              |\n   |--- tasks/send -------------->| (submit task)\n   |<-- taskId + status=submitted -|\n   |                              |\n   |<-- streaming events (SSE) ----| (working, partial artifacts)\n   |                              |\n   |<-- tasks/get -----------------| (poll for completion)\n   |--> task with status=completed|\n   |                              |\n   |--> artifacts[].parts -------->| (result delivered)\n```\n\n## A2A and Enterprise\n\nA2A is enterprise-ready with:\n- Authentication schemes: API key, HTTP Bearer, OAuth2, mTLS, OpenID Connect\n- Push notifications via web hooks\n- AgentCard signing for trusted discovery\n- Version negotiation between agents\n\nFile v1.0.0:references/agent-card-template.md\n\n# AgentCard Template and Reference\n\n> Reference: https://a2a-protocol.org/latest/specification/ Section 8\n\nThe AgentCard is a JSON document that represents an agent's public identity and capabilities.\nIt is served at `/.well-known/agent.json` on the agent's host.\n\n## Minimal AgentCard\n\n```json\n{\n  \"name\": \"string (required)\",\n  \"description\": \"string (required)\",\n  \"version\": \"string (required)\",\n  \"capabilities\": {\n    \"streaming\": \"SUPPORTED | NOT_SUPPORTED\",\n    \"pushNotifications\": \"SUPPORTED | NOT_SUPPORTED\",\n    \"agentPrivilege\": false,\n    \"signedAgentCard\": false\n  },\n  \"authentication\": {\n    \"schemes\": [\"string\"],\n    \"credentials\": \"required | optional\"\n  }\n}\n```\n\n## Annotated AgentCard (Complete)\n\n```json\n{\n  \"name\": \"financial-analysis-agent\",\n  \"description\": \"Specialized agent for financial data extraction, ratio analysis, and trend reporting\",\n  \"version\": \"1.0\",\n  \"provider\": {\n    \"organization\": \"Acme Corp\",\n    \"description\": \"Acme financial analytics division\",\n    \"url\": \"https://acme.example.com\"\n  },\n  \"capabilities\": {\n    \"streaming\": \"SUPPORTED\",\n    \"pushNotifications\": \"SUPPORTED\",\n    \"agentPrivilege\": false,\n    \"signedAgentCard\": false,\n    \"dataStreamingSupported\": true,\n    \"supportsAuthenticatedExtendedAgentCard\": true\n  },\n  \"skills\": [\n    {\n      \"id\": \"financial-data-extraction\",\n      \"name\": \"Financial Data Extraction\",\n      \"description\": \"Extracts financial metrics from raw CSV, Excel, and JSON data sources\",\n      \"tags\": [\"finance\", \"extraction\", \"csv\", \"excel\"],\n      \"examples\": [\"Extract revenue and EBITDA from Q3 report.csv\"]\n    },\n    {\n      \"id\": \"ratio-analysis\",\n      \"name\": \"Ratio Analysis\",\n      \"description\": \"Computes liquidity, profitability, and leverage ratios from financial statements\",\n      \"tags\": [\"finance\", \"ratios\", \"analysis\"],\n      \"examples\": [\"Calculate current ratio and ROIC for FY2025\"]\n    },\n    {\n      \"id\": \"trend-reporting\",\n      \"name\": \"Trend Reporting\",\n      \"description\": \"Generates time-series trend visualizations and narrative reports\",\n      \"tags\": [\"finance\", \"reporting\", \"trends\", \"charts\"],\n      \"examples\": [\"Generate a 5-year revenue trend report\"]\n    }\n  ],\n  \"authentication\": {\n    \"schemes\": [\"httpBearer\"],\n    \"credentials\": \"required\"\n  },\n  \"defaultInputModes\": [\"text\", \"json\"],\n  \"defaultOutputModes\": [\"text\", \"json\", \"png\"],\n  \"endpoint\": \"https://financial-agent.acme.example.com/a2a/\",\n  \"url\": \"https://financial-agent.acme.example.com\"\n}\n```\n\n## Field Reference\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `name` | Yes | Unique agent name within the deployment |\n| `description` | Yes | Human-readable description of what the agent does |\n| `version` | Yes | Semantic version string for capability negotiation |\n| `capabilities` | Yes | Declares streaming, push notification, and auth support |\n| `capabilities.streaming` | Yes | `SUPPORTED`, `NOT_SUPPORTED`, or `STREAMABLE` |\n| `capabilities.pushNotifications` | Yes | `SUPPORTED` or `NOT_SUPPORTED` |\n| `capabilities.agentPrivilege` | No | If true, agent can act with elevated privileges |\n| `capabilities.signedAgentCard` | No | If true, AgentCard is cryptographically signed |\n| `capabilities.dataStreamingSupported` | No | If true, agent can stream data parts (not just status) |\n| `capabilities.supportsAuthenticatedExtendedAgentCard` | No | If true, agent exposes extended card with auth |\n| `authentication.schemes` | Yes | Auth methods: `apiKey`, `httpBearer`, `oauth2`, `mutualTLS`, `openIdConnect` |\n| `authentication.credentials` | Yes | `required` or `optional` |\n| `provider` | No | Provider organization info |\n| `skills` | No | Array of `AgentSkill` objects describing exposed capabilities |\n| `defaultInputModes` | No | MIME types the agent accepts (e.g., `text`, `json`, `image/png`) |\n| `defaultOutputModes` | No | MIME types the agent produces (e.g., `text`, `json`, `image/png`) |\n| `endpoint` | No | Explicit A2A endpoint URL (if not inferable from `url`) |\n| `url` | No | Base URL for the agent service |\n\n## skills[] — Capability Declaration\n\nThe `skills` array declares specific capabilities other agents can request:\n\n```json\n{\n  \"id\": \"skill-id (required, unique within agent)\",\n  \"name\": \"Human-readable skill name\",\n  \"description\": \"What this skill does and when to request it\",\n  \"tags\": [\"optional\", \"category\", \"tags\"],\n  \"examples\": [\"Example invocation phrases\"]\n}\n```\n\n## AgentCard Discovery Flow\n\n```\n1. Client fetches GET https://<target-agent>/.well-known/agent.json\n2. Client reads capabilities, skills, auth requirements\n3. Client verifies capability compatibility\n4. Client constructs and sends task via appropriate A2A operation\n```\n\n## AgentCard Caching\n\n- **Servers** should set `Cache-Control: max-age=3600` (or similar) on the AgentCard endpoint\n- **Clients** should cache the AgentCard for the duration of a session; re-fetch on explicit refresh\n- Extended AgentCard (authenticated) should NOT be cached\n\nFile v1.0.0:references/data-model.md\n\n# A2A Data Model Reference\n\n> Reference: https://a2a-protocol.org/latest/specification/ Section 4\n\n## Core Objects\n\n### Task\n\n```json\n{\n  \"taskId\": \"string (required)\",\n  \"sessionId\": \"string (optional, for multi-turn threading)\",\n  \"contextId\": \"string (optional, for conversation threading)\",\n  \"status\": \"TaskStatus (required)\",\n  \"metadata\": \"object (optional, arbitrary metadata)\",\n  \"artifacts\": [\n    \"Artifact[] (optional, produced during or after task)\"\n  ],\n  \"messages\": [\n    \"Message[] (optional, history if retained)\"\n  ]\n}\n```\n\n### TaskStatus\n\n```json\n{\n  \"state\": \"TaskState (required)\",\n  \"message\": \"string (optional, human-readable status message)\",\n  \"timestamp\": \"ISO-8601 datetime (required)\"\n}\n```\n\n### TaskState\n\n| State | Meaning |\n|-------|---------|\n| `submitted` | Task received, not yet processing |\n| `working` | Task is actively processing |\n| `completed` | Task finished successfully |\n| `failed` | Task encountered an error |\n| `canceled` | Task was cancelled by client |\n\n### Message\n\n```json\n{\n  \"role\": \"Role (required) — 'user' or 'agent'\",\n  \"parts\": [\n    \"Part[] (required, content blocks)\"\n  ],\n  \"messageId\": \"string (optional)\"\n}\n```\n\n### Role\n\n| Value | Who |\n|-------|-----|\n| `user` | The initiating human or client agent |\n| `agent` | The responding server agent |\n\n### Part\n\nA `Part` is a discriminated union with a `kind` field:\n\n```json\n// TextPart\n{ \"kind\": \"text\", \"text\": \"string\" }\n\n// DataPart\n{ \"kind\": \"data\", \"data\": object }\n\n// FilePart\n{ \"kind\": \"file\", \"file\": { \"name\": \"string\", \"mimeType\": \"string\", \"bytes\": \"base64\", \"url\": \"https://...\" } }\n```\n\n### Artifact\n\n```json\n{\n  \"artifactId\": \"string\",\n  \"name\": \"string (optional)\",\n  \"description\": \"string (optional)\",\n  \"parts\": [\n    \"Part[] (required, content blocks)\"\n  ],\n  \"metadata\": \"object (optional)\"\n}\n```\n\n### AgentCard\n\n> Full schema with all optional fields — see `references/agent-card-template.md` for a complete annotated example.\n\nMinimal AgentCard:\n\n```json\n{\n  \"name\": \"string (required)\",\n  \"description\": \"string (required)\",\n  \"version\": \"string (required)\",\n  \"capabilities\": {\n    \"streaming\": \"SUPPORTED | NOT_SUPPORTED\",\n    \"pushNotifications\": \"SUPPORTED | NOT_SUPPORTED\",\n    \"agentPrivilege\": \"boolean\",\n    \"signedAgentCard\": \"boolean\"\n  },\n  \"authentication\": {\n    \"schemes\": [\"string\"],\n    \"credentials\": \"required | optional\"\n  }\n}\n```\n\n### AgentCapabilities\n\n```json\n{\n  \"streaming\": \"SUPPORTED | NOT_SUPPORTED | STREAMABLE\",\n  \"pushNotifications\": \"SUPPORTED | NOT_SUPPORTED\",\n  \"agentPrivilege\": \"boolean\",\n  \"signedAgentCard\": \"boolean\",\n  \"dataStreamingSupported\": \"boolean\",\n  \"supportsAuthenticatedExtendedAgentCard\": \"boolean\"\n}\n```\n\n### AgentSkill\n\n```json\n{\n  \"id\": \"string (required)\",\n  \"name\": \"string (required)\",\n  \"description\": \"string (required)\",\n  \"tags\": [\"string[] (optional)\"],\n  \"examples\": [\"string[] (optional)\"]\n}\n```\n\n## Streaming Events\n\n### TaskStatusUpdateEvent\n\n```json\n{\n  \"kind\": \"TaskStatusUpdateEvent\",\n  \"taskId\": \"string\",\n  \"status\": \"TaskStatus\",\n  \"final\": \"boolean (true when task reaches terminal state)\"\n}\n```\n\n### TaskArtifactUpdateEvent\n\n```json\n{\n  \"kind\": \"TaskArtifactUpdateEvent\",\n  \"taskId\": \"string\",\n  \"artifact\": \"Artifact\",\n  \"final\": \"boolean\"\n}\n```\n\n## Push Notification Objects\n\n### PushNotificationConfig\n\n```json\n{\n  \"id\": \"string\",\n  \"taskId\": \"string\",\n  \"pushProviderName\": \"string\",\n  \"pushProviderUrl\": \"string\",\n  \"authentication\": \"AuthenticationInfo\",\n  \"payload\": {\n    \"secret\": \"string (optional)\"\n  }\n}\n```\n\n### AuthenticationInfo\n\n```json\n{\n  \"kind\": \"APIKeyAuthenticationInfo | HTTPBearerAuthenticationInfo | OAuth2AuthenticationInfo\",\n  \"credentials\": \"string or object\"\n}\n```\n\n## Security Objects\n\n### SecurityScheme ( discriminated union)\n\n| Kind | Auth Type |\n|------|-----------|\n| `apiKey` | X-API-Key header |\n| `httpBearer` | Authorization: Bearer <token> |\n| `oauth2` | OAuth 2.0 flow |\n| `mutualTLS` | Mutual TLS certificate |\n| `openIdConnect` | OIDC token |\n\nFile v1.0.0:references/operations.md\n\n# A2A Protocol Operations Reference\n\n> Reference: https://a2a-protocol.org/latest/specification/ Section 3\n\nAll operations are JSON-RPC 2.0 over HTTP POST to the agent's A2A endpoint.\nBase URL pattern: `https://<agent-host>/a2a/`\n\n---\n\n## Core Operations\n\n### tasks/send — Send Message\n\n**Purpose:** Submit a new task to a remote agent.\n\n**Request:**\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tasks/send\",\n  \"params\": {\n    \"taskId\": \"string (optional — server generates if omitted)\",\n    \"sessionId\": \"string (optional)\",\n    \"contextId\": \"string (optional)\",\n    \"message\": {\n      \"role\": \"user | agent\",\n      \"parts\": [{ \"kind\": \"text\", \"text\": \"...\" }]\n    },\n    \"configuration\": {\n      \"stream\": false,\n      \"pushNotificationConfig\": null\n    }\n  },\n  \"id\": 1\n}\n```\n\n**Response (sync):**\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"task\": { ... Task object with status=completed ... },\n    \"artifacts\": [ ... ]\n  }\n}\n```\n\n**Response (async — task requires time):**\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"task\": { \"taskId\": \"abc123\", \"status\": { \"state\": \"submitted\" } }\n  }\n}\n```\n\n---\n\n### tasks/sendSubscribe — Send Streaming Message\n\n**Purpose:** Submit a task and receive real-time SSE stream of status/artifact updates.\n\n**Request:** Same as `tasks/send` with `configuration.stream: true`\n\n**Response:** SSE stream of events:\n```\nevent: task_status_update\ndata: { \"kind\": \"TaskStatusUpdateEvent\", \"taskId\": \"abc123\", \"status\": { \"state\": \"working\" }, \"final\": false }\n\nevent: task_artifact_update\ndata: { \"kind\": \"TaskArtifactUpdateEvent\", \"taskId\": \"abc123\", \"artifact\": { ... }, \"final\": false }\n\nevent: task_status_update\ndata: { \"kind\": \"TaskStatusUpdateEvent\", \"taskId\": \"abc123\", \"status\": { \"state\": \"completed\" }, \"final\": true }\n```\n\n---\n\n### tasks/get — Get Task\n\n**Purpose:** Retrieve the current state of a task by ID.\n\n**Request:**\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tasks/get\",\n  \"params\": { \"taskId\": \"string (required)\" },\n  \"id\": 2\n}\n```\n\n**Response:**\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"task\": {\n      \"taskId\": \"abc123\",\n      \"status\": { \"state\": \"completed\", \"timestamp\": \"...\" },\n      \"artifacts\": [ ... ],\n      \"messages\": [ ... ]\n    }\n  }\n}\n```\n\n---\n\n### tasks/list — List Tasks\n\n**Purpose:** List tasks, optionally filtered by session or context.\n\n**Request:**\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tasks/list\",\n  \"params\": {\n    \"sessionId\": \"string (optional)\",\n    \"contextId\": \"string (optional)\",\n    \"pageSize\": 10,\n    \"continuationToken\": \"string (optional)\"\n  },\n  \"id\": 3\n}\n```\n\n---\n\n### tasks/cancel — Cancel Task\n\n**Purpose:** Cancel a running task.\n\n**Request:**\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tasks/cancel\",\n  \"params\": { \"taskId\": \"string (required)\" },\n  \"id\": 4\n}\n```\n\n---\n\n### tasks/subscribe — Subscribe to Task Updates\n\n**Purpose:** Subscribe to push notifications for a task (webhook or SSE delivery).\n\n**Request:**\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tasks/subscribe\",\n  \"params\": {\n    \"taskId\": \"string (required)\",\n    \"pushConfig\": {\n      \"pushProviderName\": \"string\",\n      \"pushProviderUrl\": \"https://...\",\n      \"authentication\": { \"kind\": \"apiKey\", \"credentials\": \"...\" },\n      \"payload\": { \"secret\": \"...\" }\n    }\n  },\n  \"id\": 5\n}\n```\n\n---\n\n### tasks/push — Receive Push Notification (webhook endpoint)\n\n**Purpose:** Incoming push notification webhook (agent implements this endpoint).\n\n```\nPOST /a2a/tasks/push\nContent-Type: application/a2a+json\n\n{\n  \"taskId\": \"abc123\",\n  \"result\": { ... },\n  \"pushNotificationConfigId\": \"string\"\n}\n```\n\n---\n\n### pushNotificationConfig/create — Create Push Config\n\n### pushNotificationConfig/get — Get Push Config\n\n### pushNotificationConfig/list — List Push Configs\n\n### pushNotificationConfig/delete — Delete Push Config\n\n### agent/getExtendedAgentCard — Get Authenticated Extended Agent Card\n\n---\n\n## Operation Semantics\n\n### Idempotency\n\n- `tasks/send` is idempotent if `taskId` is supplied by the client (same `taskId` = same task)\n- Without a client-supplied `taskId`, the server generates a unique one\n\n### Capability Validation\n\nBefore sending, client should verify:\n1. Target agent supports the required operation (check AgentCard)\n2. Authentication requirements are met\n3. Streaming preference is supported (if streamingRequested)\n\n### Error Handling\n\nStandard JSON-RPC 2.0 error codes:\n\n| Code | Meaning |\n|------|---------|\n| `-32700` | Parse error — malformed JSON |\n| `-32600` | Invalid request |\n| `-32603` | Internal error |\n| Agent-specific codes in `data` object |\n\n### Multi-Turn Threads\n\n| Field | Purpose |\n|-------|---------|\n| `sessionId` | Groups all messages in a single conversation session |\n| `contextId` | Threads related sessions into a broader context |\n| `contextId` + `sessionId` together enable multi-turn cross-agent conversations |\n\n---\n\n## URL Patterns (HTTP+JSON binding)\n\n| Operation | Method | Path |\n|-----------|--------|------|\n| `tasks/send` | POST | `/a2a/tasks/send` |\n| `tasks/sendSubscribe` | POST | `/a2a/tasks/sendSubscribe` |\n| `tasks/get` | POST | `/a2a/tasks/get` |\n| `tasks/list` | POST | `/a2a/tasks/list` |\n| `tasks/cancel` | POST | `/a2a/tasks/cancel` |\n| `tasks/subscribe` | POST | `/a2a/tasks/subscribe` |\n| `tasks/push` | POST | `/a2a/tasks/push` |\n| AgentCard | GET | `/.well-known/agent.json` |\n| Extended AgentCard | GET | `/a2a/agent/extendedCard` |\n\nFile v1.0.0:references/quickstart.md\n\n# A2A Quickstart — Full End-to-End Example\n\n> This document walks through a complete A2A interaction from discovery to task completion.\n> All JSON-RPC requests and responses are shown in full — copy and adapt directly.\n\n---\n\n## Scenario\n\n- **Server Agent**: `data-agent` — receives a data extraction task, outputs structured JSON\n- **Client Agent**: `orchestrator` — discovers `data-agent`, sends a task, retrieves results\n\nBoth agents are A2A-compliant. The client does not know the server's internal implementation.\n\n---\n\n## Step 1: Server Agent publishes its AgentCard\n\nThe server agent serves `/.well-known/agent.json`:\n\n```bash\n# Server: GET https://data-agent.example.com/.well-known/agent.json\n```\n\n```json\n{\n  \"name\": \"data-agent\",\n  \"description\": \"Specialized in extracting financial metrics from raw CSV and JSON data sources\",\n  \"version\": \"1.0\",\n  \"provider\": {\n    \"organization\": \"Acme Corp\",\n    \"url\": \"https://acme.example.com\"\n  },\n  \"capabilities\": {\n    \"streaming\": \"SUPPORTED\",\n    \"pushNotifications\": \"NOT_SUPPORTED\",\n    \"agentPrivilege\": false,\n    \"signedAgentCard\": false,\n    \"dataStreamingSupported\": true,\n    \"supportsAuthenticatedExtendedAgentCard\": false\n  },\n  \"skills\": [\n    {\n      \"id\": \"csv-extraction\",\n      \"name\": \"CSV Financial Extraction\",\n      \"description\": \"Extracts revenue, EBITDA, and net income from CSV files\",\n      \"tags\": [\"finance\", \"csv\", \"extraction\"],\n      \"examples\": [\"Extract revenue from Q3_2025.csv\"]\n    }\n  ],\n  \"authentication\": {\n    \"schemes\": [\"httpBearer\"],\n    \"credentials\": \"required\"\n  },\n  \"defaultInputModes\": [\"text\", \"json\", \"csv\"],\n  \"defaultOutputModes\": [\"json\"],\n  \"endpoint\": \"https://data-agent.example.com/a2a/\"\n}\n```\n\n---\n\n## Step 2: Client discovers the server's AgentCard\n\n```bash\nGET https://data-agent.example.com/.well-known/agent.json\n```\n\nClient reads the AgentCard and confirms:\n- `capabilities.streaming = SUPPORTED` ✓ (we want streaming)\n- `authentication.schemes = [\"httpBearer\"]` → need a Bearer token\n- `skills[0].id = \"csv-extraction\"` matches the task\n\n---\n\n## Step 3: Client sends a task (streaming)\n\nClient constructs and sends a streaming task:\n\n```bash\nPOST https://data-agent.example.com/a2a/tasks/sendSubscribe\nContent-Type: application/a2a+json\nAuthorization: Bearer eyJhbGciOiJSUzI1NiJ9...\n```\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tasks/sendSubscribe\",\n  \"params\": {\n    \"taskId\": \"task-abc-123\",\n    \"sessionId\": \"session-xyz-456\",\n    \"message\": {\n      \"role\": \"user\",\n      \"parts\": [\n        {\n          \"kind\": \"data\",\n          \"data\": {\n            \"instruction\": \"Extract revenue and EBITDA from Q3_2025.csv\",\n            \"fileUrl\": \"https://storage.acme.example.com/data/Q3_2025.csv\"\n          }\n        }\n      ]\n    },\n    \"configuration\": {\n      \"stream\": true\n    }\n  },\n  \"id\": 1\n}\n```\n\n---\n\n## Step 4: Server responds with streaming SSE events\n\n```\nevent: task_status_update\ndata: {\"kind\":\"TaskStatusUpdateEvent\",\"taskId\":\"task-abc-123\",\"status\":{\"state\":\"submitted\",\"message\":\"Task received\",\"timestamp\":\"2026-05-14T07:00:01Z\"},\"final\":false}\n\nevent: task_status_update\ndata: {\"kind\":\"TaskStatusUpdateEvent\",\"taskId\":\"task-abc-123\",\"status\":{\"state\":\"working\",\"message\":\"Fetching file\",\"timestamp\":\"2026-05-14T07:00:02Z\"},\"final\":false}\n\nevent: task_artifact_update\ndata: {\"kind\":\"TaskArtifactUpdateEvent\",\"taskId\":\"task-abc-123\",\"artifact\":{\"artifactId\":\"art-001\",\"name\":\"partial-extract\",\"parts\":[{\"kind\":\"data\",\"data\":{\"status\":\"parsing\",\"rows_processed\":42}}]},\"final\":false}\n\nevent: task_status_update\ndata: {\"kind\":\"TaskStatusUpdateEvent\",\"taskId\":\"task-abc-123\",\"status\":{\"state\":\"completed\",\"message\":\"Extraction complete\",\"timestamp\":\"2026-05-14T07:00:05Z\"},\"final\":true}\n```\n\nClient accumulates events, then extracts the final result.\n\n---\n\n## Step 5: Client extracts the final artifact\n\nFrom the completed task (via `tasks/get` if polling instead of streaming):\n\n```json\n{\n  \"task\": {\n    \"taskId\": \"task-abc-123\",\n    \"sessionId\": \"session-xyz-456\",\n    \"status\": {\n      \"state\": \"completed\",\n      \"message\": \"Extraction complete\",\n      \"timestamp\": \"2026-05-14T07:00:05Z\"\n    },\n    \"artifacts\": [\n      {\n        \"artifactId\": \"art-001\",\n        \"name\": \"Q3-2025-financials\",\n        \"description\": \"Extracted financial metrics from Q3_2025.csv\",\n        \"parts\": [\n          {\n            \"kind\": \"data\",\n            \"data\": {\n              \"revenue\": 4523000,\n              \"ebitda\": 1234000,\n              \"net_income\": 891000,\n              \"currency\": \"USD\",\n              \"source_file\": \"Q3_2025.csv\",\n              \"rows_processed\": 847\n            }\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\nClient returns `artifacts[0].parts[0].data` to the user — structured output, not the raw task object.\n\n---\n\n## Error Handling Example\n\n### Version Negotiation Failure\n\n```json\n// Client sends (declares A2A version):\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tasks/send\",\n  \"params\": {\n    \"message\": { \"role\": \"user\", \"parts\": [{\"kind\": \"text\", \"text\": \"do stuff\"}] }\n  },\n  \"id\": 1,\n  \"a2aVersion\": \"0.9\"   // ← old version\n}\n```\n\n```json\n// Server responds:\n{\n  \"jsonrpc\": \"2.0\",\n  \"error\": {\n    \"code\": -32001,\n    \"message\": \"Version negotiation failed\",\n    \"data\": {\n      \"supportedVersions\": [\"1.0\"],\n      \"requestedVersion\": \"0.9\"\n    }\n  }\n}\n```\n\nClient retries with `a2aVersion: \"1.0\"`.\n\n---\n\n## MCP + A2A Combined Scenario\n\n```\nUser ──→ Orchestrator Agent (A2A Client)\n              │\n              ├── MCP: calls search_tool → gets raw CSV URL\n              │\n              └── A2A: sends task to data-agent\n                        │ (with CSV URL in message.data)\n                        ▼\n                   data-agent\n                        │ (extracts, computes)\n                        ▼\n                   returns artifacts[].parts[].data\n                        │\n                        ▼\n              Orchestrator ──→ MCP: calls report_tool → generates PDF\n```\n\nIn this flow:\n- **MCP** connects the orchestrator to tools and storage\n- **A2A** connects the orchestrator to the specialized data-agent\n- Both protocols coexist — they solve different problems\n\nFile v1.0.0:scripts/requirements.txt\n\n#!/usr/bin/env python3\n# Requirements for validate_agent_card.py\n# (no external dependencies — uses stdlib only)\n\nFile v1.0.0:CONTRIBUTING.md\n\n# Contributing to a2a-protocol\n\nThank you for your interest in contributing to the A2A Protocol skill.\n\n## How to Contribute\n\n1. **Fork the repository** on GitHub\n2. **Clone your fork**:\n   ```bash\n   git clone https://github.com/<your-username>/a2a-protocol.git\n   cd a2a-protocol\n   ```\n3. **Create a feature branch**:\n   ```bash\n   git checkout -b feat/your-feature-name\n   ```\n4. **Make your changes** — follow the SKILL.md structure standards\n5. **Run the audit**:\n   ```bash\n   python ~/.openclaw/workspace/skills/skill-factory/scripts/audit_skill.py . --all\n   ```\n6. **Commit and push**:\n   ```bash\n   git commit -m \"feat(<feature>): add ...\"\n   git push origin feat/your-feature-name\n   ```\n7. **Open a Pull Request** with a clear description of what and why\n\n## Skill Structure Standards\n\n- `SKILL.md` must have valid YAML frontmatter with `name`, `description`, `license`, `metadata`\n- `description` must contain trigger conditions, not just capability statements\n- All scripts must have shebangs and `requirements.txt`\n- No hardcoded API keys or secrets\n\n## Reporting Issues\n\n- Use GitHub Issues for bug reports and feature requests\n- Search existing issues before creating a new one\n- Include A2A protocol version reference when applicable\n\n## Code of Conduct\n\nThis project follows the [A2A Protocol Code of Conduct](https://github.com/a2aproject/A2A/blob/main/CODE_OF_CONDUCT.md).\n\nFile v1.0.0:README_zh.md\n\n---\nname: a2a-protocol\nlicense: MIT\n---\n\n# a2a-protocol\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n![Version](https://img.shields.io/badge/version-1.0.0-blue)\n\n> 当需要构建 A2A 兼容智能体、发布 AgentCard 发现文档、向远程智能体发送任务，\n> 或将 Agent2Agent 协议集成到现有智能体框架时使用此技能。\n\n## 解决什么问题\n\nAI 智能体长期处于孤岛状态。即使共享基础设施，也没有标准方式实现：\n跨框架发现能力、委托任务、跟踪生命周期或交换结构化数据。\n\nA2A（Agent2Agent）协议是由 Google 与 a2aproject 社区共同维护的开放标准，\n解决了智能体互操作性问题。本技能使 AI 智能体具备 A2A 能力，覆盖发现、\n任务提交、 streaming 、推送通知和多轮协作场景。\n\n**触发条件：** 当用户想要连接智能体、委托任务、构建 A2A 服务器、\n发布 AgentCard，或理解 A2A/MCP 关系时使用。\n\n## 功能特性\n\n- **协议学习** — 完整 A2A 概述、数据模型和操作参考\n- **AgentCard 生成** — 构建用于发现的 JSON 身份文档\n- **任务操作** — 发送、轮询、stream、订阅远程智能体任务\n- **多轮支持** — 跨智能体会话与上下文线程\n- **企业级认证** — API Key、Bearer、OAuth2、mTLS 方案指导\n- **流式事件** — 实时 TaskStatusUpdateEvent 和 TaskArtifactUpdateEvent 处理\n\n## 快速开始\n\n### 安装\n\n```bash\n# 通过 ClawHub\nclawhub install a2a-protocol\n\n# 或手动安装\ncp -r a2a-protocol/ ~/.openclaw/skills/\n```\n\n### 使用方式\n\n```\n/a2a-protocol              # 学习 A2A 概念\n/a2a-protocol build-card   # 为发现服务生成 AgentCard\n/a2a-protocol send-task    # 向远程 A2A 智能体发送任务\n/a2a-protocol stream-task  # 从远程智能体实时获取任务更新\n/a2a-protocol subscribe-task # 订阅来自远程智能体的推送通知\n```\n\n## 目录结构\n\n```\na2a-protocol/\n├── SKILL.md                    # 入口点\n├── LICENSE                     # MIT 协议\n├── README.md                   # 英文说明\n├── README_zh.md                # 本文件（中文）\n├── CONTRIBUTING.md             # 贡献指南\n├── .gitignore\n├── references/\n│   ├── a2a-overview.md         # 协议概述与核心概念\n│   ├── data-model.md           # 核心数据模型\n│   ├── operations.md           # 所有 A2A 操作参考\n│   └── agent-card-template.md # AgentCard JSON 模式与注解\n└── scripts/                   # （预留辅助脚本）\n```\n\n## 参考资料\n\n- [A2A 协议规范](https://a2a-protocol.org/latest/specification/)\n- [A2A GitHub 仓库](https://github.com/a2aproject/A2A)\n- [Python SDK (a2a-sdk)](https://github.com/a2aproject/a2a-python)\n\n## 协议\n\n本项目采用 MIT 协议 — 详见 [LICENSE](LICENSE)。\n\n---\n\nPowered by [MiniMax](https://minimax.io)。\n\nFile v1.0.0:skill-card.md\n\n## Description:\n\nGuides agents through Agent2Agent protocol concepts, AgentCard publishing, task delegation, streaming updates, push notifications, and local mock-server testing for interoperable agent workflows.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[wangjipeng977](https://clawhub.ai/user/wangjipeng977)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to build A2A-aware agents, publish AgentCards, send and track tasks across remote agents, handle streaming or push delivery, and test interactions with a local mock A2A server.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The mock A2A server can expose task data if run in an untrusted network environment.\n\nMitigation: Run it only in a trusted local environment, or modify it to bind to 127.0.0.1 and require authentication before shared use.\n\nRisk: Remote A2A agents and webhook callback URLs are external systems that may receive task content or callback payloads.\n\nMitigation: Avoid sending secrets or confidential data unless intended, validate destination agents and callback URLs, and use the target agent's declared authentication scheme.\n\nRisk: Published AgentCards can disclose endpoint, capability, and authentication details.\n\nMitigation: Review generated AgentCards before publishing and omit internal memory, private tool details, proprietary state, or unnecessary operational metadata.\n\n## Reference(s):\n\n- [A2A Protocol Specification](https://a2a-protocol.org/latest/specification/)\n- [A2A GitHub Repository](https://github.com/a2aproject/A2A)\n- [A2A Python SDK](https://github.com/a2aproject/a2a-python)\n- [ClawHub Skill Page](https://clawhub.ai/wangjipeng977/skills/a2a-agent-protocol)\n- [A2A Protocol Overview](artifact/references/a2a-overview.md)\n- [A2A Data Model Reference](artifact/references/data-model.md)\n- [A2A Operations Reference](artifact/references/operations.md)\n- [AgentCard Template](artifact/references/agent-card-template.md)\n- [A2A Quickstart](artifact/references/quickstart.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with JSON AgentCard examples, Python or shell commands, configuration snippets, and structured task artifact parts.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can write agent-card.json or start a local mock HTTP server when the corresponding mode is used; task modes should return artifacts[].parts instead of raw task objects.]\n\n## Skill Version(s):\n\n1.0.0 (source: server release metadata and README badge)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: A2A Agent Protocol Owner: wangjipeng977 Summary: Use when (1) building an AI agent that needs to communicate with other agents over the Agent2Agent (A2A) protocol, (2) publishing an AgentCard for discovery,... Tags: a2a:1.0.0, agent:1.0.0, dev-tools:1.0.0, latest:1.0.0 Version history: v1.0.0 | 2026-05-14T07:58:02.427Z | auto a2a-protocol 1.0.0 - Initial release introducing a comprehensive skill for building, ","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"1. Fetch AgentCard from https://target-agent/.well-known/agent.json\n2. Verify capabilities.streaming or dataStreamingSupported matches our needs\n3. Check authentication.schemes and prepare credentials if credentials: \"required\"\n4. Construct SendMessageRequest: taskId=uuid(), sessionId, message with parts\n5. POST to https://target-agent/a2a/tasks/send with Authorization header\n6. Receive { task: { taskId: \"abc123\", status: { state: \"submitted\" } } }\n7. Poll tasks/get until status.state === \"completed\"\n8. Return artifacts[0].parts[0].text  ← structured output"},{"language":"text","snippet":"1. POST to https://target-agent/a2a/tasks/send with hardcoded payload\n2. Assume success without checking status.state\n3. Return raw task object instead of artifacts[].parts"},{"language":"json","snippet":"{\n  \"name\": \"data-analysis-agent\",\n  \"description\": \"Specialized in financial data extraction and reporting\",\n  \"version\": \"1.0\",\n  \"capabilities\": {\n    \"streaming\": \"SUPPORTED\",\n    \"pushNotifications\": \"SUPPORTED\",\n    \"agentPrivilege\": false,\n    \"signedAgentCard\": false\n  },\n  \"skills\": [\n    { \"id\": \"financial-data\", \"name\": \"Financial Data Extraction\", \"description\": \"...\" }\n  ],\n  \"authentication\": {\n    \"schemes\": [\"httpBearer\"],\n    \"credentials\": \"required\"\n  }\n}"},{"language":"json","snippet":"{\n  \"name\": \"agent\",\n  \"description\": \"An AI agent\"\n}"},{"language":"bash","snippet":"# Via ClawHub\nclawhub install a2a-protocol\n\n# Or manually\ncp -r a2a-protocol/ ~/.openclaw/skills/"},{"language":"bash","snippet":"# Learn A2A concepts\n/a2a-protocol\n\n# Build an AgentCard for discovery\n/a2a-protocol build-card\n\n# Send a task to a remote A2A agent\n/a2a-protocol send-task\n\n# Stream real-time task updates from a remote agent\n/a2a-protocol stream-task\n\n# Subscribe to push notifications from a remote agent\n/a2a-protocol subscribe-task"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: a2a-protocol\ndescription: >\n  Use when (1) building an AI agent that needs to communicate with other agents over the\n  Agent2Agent (A2A) protocol, (2) publishing an AgentCard for discovery, (3) acting\n  as an A2A client or server, or (4) integrating A2A capabilities into an existing\n  agent framework. Solves agent isolation — enabling discovery, capability negotiation,\n  task delegation, and structured data exchange across different frameworks and vendors.\nlicense: MIT\nmetadata:\n  version: \"1.0\"\n  category: dev-tools\n  author: wangjipeng\n  sources:\n    - https://a2a-protocol.org/latest/specification/\n    - https://github.com/a2aproject/A2A\n    - https://github.com/a2aproject/a2a-python\n---\n\n# A2A Protocol Skill\n\nAn AI agent skill for building, connecting, and operating A2A-compliant agents.\nThis skill is the definitive guide for agents participating in the Agent2Agent protocol ecosystem.\n\n## Core Position\n\nThis skill is **NOT** a general API wrapper — it is a protocol education and implementation guide.\nIt teaches agents what A2A is, how to structure AgentCards for discovery, which operations to\nperform in which order, and how to handle the multi-turn task lifecycle.\n\nThis skill is **NOT** framework-specific. It guides agents regardless of whether they are built\nwith LangGraph, BeeAI, Google ADK, or custom code. The A2A protocol is language-agnostic.\n\nThis skill covers the JSON-RPC 2.0 over HTTP binding (the most common) plus key concepts for\ngRPC and HTTP+REST bindings.\n\n## What Problem This Solves\n\nAI agents today operate in silos. Even when they share the same infrastructure, they have no\nstandard way to:\n- Discover what capabilities other agents expose\n- Send a task to a remote agent and track its lifecycle\n- Handle streaming updates or push notifications from a remote agent\n- Exchange files, structured data, or multi-part messages\n\nThe A2A protocol solves all of the above. This skill makes an AI agent A2A-aware.\n\n## Modes\n\n### `/a2a-protocol`\n\nDefault mode. Learn A2A concepts, data structures, and operation semantics.\n\n**Preferred opening:** *\"The A2A protocol enables agents to discover each other and collaborate\nwithout exposing internal state. Here is the protocol overview:\"*\n\nUse it when:\n- The user asks what A2A is, how it works, or why it matters\n- You need to explain the difference between A2A and MCP\n- You want to understand the AgentCard structure and discovery mechanism\n- You need to understand the full task lifecycle (submitted → working → completed)\n\n### `/a2a-protocol build-card`\n\nGenerate an AgentCard JSON for the agent. The AgentCard is the public identity document that\nother agents use to discover capabilities, auth requirements, and connection endpoints.\n\n**Preferred opening:** *\"To publish this agent in the A2A ecosystem, I will generate an AgentCard\nat `/.well-known/agent.json` declaring: name, version, capabilities, and auth requirements.\"*\n\nUse it when:\n- You are building an A2A server agent and need to publish "},{"path":"README.md","content":"---\nname: a2a-protocol\nlicense: MIT\n---\n\n# a2a-protocol\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n![Version](https://img.shields.io/badge/version-1.0.0-blue)\n\n> Use when building A2A-compliant agents, publishing an AgentCard for discovery, sending tasks\n> to remote agents, or integrating the Agent2Agent protocol into an existing agent framework.\n\n## What Problem This Solves\n\nAI agents operate in silos. Even when they share infrastructure, they have no standard way to\ndiscover peers, delegate tasks, track lifecycle, or exchange structured data across frameworks.\n\nThe A2A (Agent2Agent) protocol — an open standard maintained by Google and the a2aproject\ncommunity — solves agent interoperability. This skill makes an AI agent A2A-aware, guiding it\nthrough discovery, task submission, streaming, push notifications, and multi-turn collaboration.\n\n**When triggered:** When the user wants to connect agents, delegate tasks, build an A2A server,\npublish an AgentCard, or understand the A2A/MCP relationship.\n\n## Features\n\n- **Protocol education** — full A2A overview, data model, and operation reference\n- **AgentCard builder** — generate discovery-ready JSON identity documents\n- **Task operations** — send, poll, stream, subscribe to remote agent tasks\n- **Multi-turn support** — session and context threading across agent boundaries\n- **Enterprise auth** — guidance on API key, Bearer, OAuth2, and mTLS schemes\n- **Streaming events** — real-time TaskStatusUpdateEvent and TaskArtifactUpdateEvent handling\n\n## Quick Start\n\n### Installation\n\n```bash\n# Via ClawHub\nclawhub install a2a-protocol\n\n# Or manually\ncp -r a2a-protocol/ ~/.openclaw/skills/\n```\n\n### Usage\n\n```bash\n# Learn A2A concepts\n/a2a-protocol\n\n# Build an AgentCard for discovery\n/a2a-protocol build-card\n\n# Send a task to a remote A2A agent\n/a2a-protocol send-task\n\n# Stream real-time task updates from a remote agent\n/a2a-protocol stream-task\n\n# Subscribe to push notifications from a remote agent\n/a2a-protocol subscribe-task\n```\n\n### Example: Send a Task\n\n```\n/a2a-protocol send-task --agent https://target-agent/.well-known/agent.json --task \"Analyze Q3 revenue\"\n```\n\n## Directory Structure\n\n```\na2a-protocol/\n├── SKILL.md                    # Entry point (this skill)\n├── LICENSE                    # MIT\n├── README.md                  # This file\n├── README_zh.md              # Chinese version\n├── CONTRIBUTING.md           # Contribution guide\n├── .gitignore\n├── references/\n│   ├── a2a-overview.md       # Protocol overview and key concepts\n│   ├── data-model.md         # Core data model (Task, Message, Part, Artifact, AgentCard)\n│   ├── operations.md         # All A2A operations reference\n│   └── agent-card-template.md # AgentCard JSON schema with annotations\n└── scripts/                  # (reserved for future helpers)\n```\n\n## References\n\n- [A2A Protocol Specification](https://a2a-protocol.org/latest/specification/)\n- [A2A on GitHub](https://github.com/a2aproject/A2A)\n- [Pyth"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70zthc74p61mvctddrancx0s832g4r\",\n  \"slug\": \"a2a-agent-protocol\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778745482427\n}"},{"path":"references/a2a-overview.md","content":"# A2A Protocol Overview\n\n> Reference: https://a2a-protocol.org/latest/specification/\n\n## What is A2A?\n\nThe Agent2Agent (A2A) protocol is an **open specification** enabling AI agents built on\ndifferent frameworks by different vendors, running on separate servers, to communicate\nand collaborate — as agents, not just as tools.\n\nA2A provides a common language for agents, fostering a more interconnected AI ecosystem.\n\n## Key Goals\n\n| Goal | Description |\n|------|-------------|\n| **Break Down Silos** | Connect agents across different ecosystems and frameworks |\n| **Enable Complex Collaboration** | Allow specialized agents to work together on tasks a single agent cannot handle alone |\n| **Promote Open Standards** | Community-driven approach to agent communication |\n| **Preserve Opacity** | Agents collaborate without exposing internal memory, proprietary logic, or tool implementations |\n\n## Core Concepts\n\n### Agent\n\nAn AI application that:\n- Exposes capabilities via an **AgentCard**\n- Communicates via A2A operations (SendMessage, GetTask, etc.)\n- Can act as A2A **server** (receives tasks), **client** (sends tasks), or both\n\n### AgentCard\n\nA JSON document at `/.well-known/agent.json` that declares:\n- Agent name, version, description\n- Capabilities (streaming, push notifications, authentication)\n- Skills (specific capabilities exposed)\n- Endpoints and auth requirements\n\n### Task\n\nThe central unit of work in A2A:\n- Has a unique `taskId`\n- Has a full lifecycle: `submitted` → `working` → `completed`/`failed`/`canceled`\n- Carries a `Message` (the work to be done)\n- Produces `Artifact[]` (results, as `Part[]`)\n\n### Message\n\nA `Message` contains a `role` (user/agent) and `parts[]` — the actual content blocks.\n\n### Part\n\nThe content unit. Types:\n- `TextPart` — plain text\n- `DataPart` — structured JSON data\n- `FilePart` — file with inline bytes or remote URL\n\n### Artifact\n\nA collection of related parts forming a deliverable output (e.g., a report document,\na generated image, a data table).\n\n## A2A vs MCP\n\n| Aspect | A2A | MCP |\n|--------|-----|-----|\n| **Purpose** | Agent-to-agent collaboration | Agent-to-tool/resource connectivity |\n| **Focus** | Task delegation, status tracking, multi-agent workflows | Tool invocation, resource access |\n| **State** | Long-running tasks with full lifecycle | Stateless tool calls |\n| **Communication** | Rich messages, artifacts, streaming events | JSON-RPC request/response |\n| **Discovery** | AgentCard at `/.well-known/agent.json` | MCP server registry |\n\n**Use both together**: MCP connects an agent to tools and resources; A2A connects\nagents to each other.\n\n## Protocol Binding\n\nA2A supports multiple wire protocols:\n- **JSON-RPC 2.0 over HTTP** — most common, agents `POST tasks/send`\n- **gRPC** — for high-performance agent interop\n- **HTTP+REST/JSON** — for simple integrations\n\n## Task Lifecycle\n\n```\n[Client]                    [Server/Remote Agent]\n   |                              |\n   |--- tasks/send -------------->| (submit ta"},{"path":"references/agent-card-template.md","content":"# AgentCard Template and Reference\n\n> Reference: https://a2a-protocol.org/latest/specification/ Section 8\n\nThe AgentCard is a JSON document that represents an agent's public identity and capabilities.\nIt is served at `/.well-known/agent.json` on the agent's host.\n\n## Minimal AgentCard\n\n```json\n{\n  \"name\": \"string (required)\",\n  \"description\": \"string (required)\",\n  \"version\": \"string (required)\",\n  \"capabilities\": {\n    \"streaming\": \"SUPPORTED | NOT_SUPPORTED\",\n    \"pushNotifications\": \"SUPPORTED | NOT_SUPPORTED\",\n    \"agentPrivilege\": false,\n    \"signedAgentCard\": false\n  },\n  \"authentication\": {\n    \"schemes\": [\"string\"],\n    \"credentials\": \"required | optional\"\n  }\n}\n```\n\n## Annotated AgentCard (Complete)\n\n```json\n{\n  \"name\": \"financial-analysis-agent\",\n  \"description\": \"Specialized agent for financial data extraction, ratio analysis, and trend reporting\",\n  \"version\": \"1.0\",\n  \"provider\": {\n    \"organization\": \"Acme Corp\",\n    \"description\": \"Acme financial analytics division\",\n    \"url\": \"https://acme.example.com\"\n  },\n  \"capabilities\": {\n    \"streaming\": \"SUPPORTED\",\n    \"pushNotifications\": \"SUPPORTED\",\n    \"agentPrivilege\": false,\n    \"signedAgentCard\": false,\n    \"dataStreamingSupported\": true,\n    \"supportsAuthenticatedExtendedAgentCard\": true\n  },\n  \"skills\": [\n    {\n      \"id\": \"financial-data-extraction\",\n      \"name\": \"Financial Data Extraction\",\n      \"description\": \"Extracts financial metrics from raw CSV, Excel, and JSON data sources\",\n      \"tags\": [\"finance\", \"extraction\", \"csv\", \"excel\"],\n      \"examples\": [\"Extract revenue and EBITDA from Q3 report.csv\"]\n    },\n    {\n      \"id\": \"ratio-analysis\",\n      \"name\": \"Ratio Analysis\",\n      \"description\": \"Computes liquidity, profitability, and leverage ratios from financial statements\",\n      \"tags\": [\"finance\", \"ratios\", \"analysis\"],\n      \"examples\": [\"Calculate current ratio and ROIC for FY2025\"]\n    },\n    {\n      \"id\": \"trend-reporting\",\n      \"name\": \"Trend Reporting\",\n      \"description\": \"Generates time-series trend visualizations and narrative reports\",\n      \"tags\": [\"finance\", \"reporting\", \"trends\", \"charts\"],\n      \"examples\": [\"Generate a 5-year revenue trend report\"]\n    }\n  ],\n  \"authentication\": {\n    \"schemes\": [\"httpBearer\"],\n    \"credentials\": \"required\"\n  },\n  \"defaultInputModes\": [\"text\", \"json\"],\n  \"defaultOutputModes\": [\"text\", \"json\", \"png\"],\n  \"endpoint\": \"https://financial-agent.acme.example.com/a2a/\",\n  \"url\": \"https://financial-agent.acme.example.com\"\n}\n```\n\n## Field Reference\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `name` | Yes | Unique agent name within the deployment |\n| `description` | Yes | Human-readable description of what the agent does |\n| `version` | Yes | Semantic version string for capability negotiation |\n| `capabilities` | Yes | Declares streaming, push notification, and auth support |\n| `capabilities.streaming` | Yes | `SUPPORTED`, `NOT_SUPPORTED`, or `STREAMABLE` |\n| `capabilities.pushNotifications` | Yes "}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1714,"uniquenessScore":42,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T12:54:04.546Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T12:54:04.546Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:14:38.826Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}