A2a Protocol
TerminalSkills/skills
Builds Agent2Agent (A2A) servers and clients, the open protocol (originally from Google, now under the Linux Foundation) that lets AI agents from different frameworks call each other.
Builds Agent-to-Agent (A2A) servers and clients following Google's open protocol for agent interoperability.
$ npx skills add internet-court/internet-court-skill --skill a2a-protocol -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install internet-court/internet-court-skill a2a-protocol --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/vendored/terminalskills/a2a-protocol .claude/skills/a2a-protocol && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "a2a-protocol" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/terminalskills/a2a-protocol into .claude/skills/a2a-protocol/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2a-protocol", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/internet-court/internet-court-skill/tree/main/vendored/terminalskills/a2a-protocolType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add internet-court/internet-court-skill --skill a2a-protocol -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install internet-court/internet-court-skill a2a-protocol --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .agents/skills && cp -r skills-src/vendored/terminalskills/a2a-protocol .agents/skills/a2a-protocol && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "a2a-protocol" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/terminalskills/a2a-protocol into .agents/skills/a2a-protocol/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2a-protocol", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add internet-court/internet-court-skill --skill a2a-protocol -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install internet-court/internet-court-skill a2a-protocol --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/vendored/terminalskills/a2a-protocol .cursor/skills/a2a-protocol && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "a2a-protocol" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/terminalskills/a2a-protocol into .cursor/skills/a2a-protocol/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2a-protocol", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/internet-court/internet-court-skill.git --path vendored/terminalskills/a2a-protocol--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add internet-court/internet-court-skill --skill a2a-protocol -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install internet-court/internet-court-skill a2a-protocol --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/vendored/terminalskills/a2a-protocol .gemini/skills/a2a-protocol && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "a2a-protocol" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/terminalskills/a2a-protocol into .gemini/skills/a2a-protocol/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2a-protocol", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install internet-court/internet-court-skill a2a-protocolInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add internet-court/internet-court-skill --skill a2a-protocol -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .github/skills && cp -r skills-src/vendored/terminalskills/a2a-protocol .github/skills/a2a-protocol && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "a2a-protocol" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/terminalskills/a2a-protocol into .github/skills/a2a-protocol/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2a-protocol", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add internet-court/internet-court-skill --skill a2a-protocol -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install internet-court/internet-court-skill a2a-protocol --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/vendored/terminalskills/a2a-protocol .opencode/skills/a2a-protocol && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "a2a-protocol" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/terminalskills/a2a-protocol into .opencode/skills/a2a-protocol/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2a-protocol", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
a2a-protocolBuilds Agent-to-Agent (A2A) servers and clients following Google's open protocol for agent interoperability.
A2a Protocol is an agent skill from internet-court/internet-court-skill. Builds Agent-to-Agent (A2A) servers and clients following Google's open protocol for agent interoperability. Use when the user wants to create an A2A-compliant agent, build an Agent Card, implement task management, connect agents across frameworks, set up agent discovery, handle streaming responses, implement push notifications, or orchestrate multi-agent workflows. Trigger words: a2a, agent to agent, agent2agent, a2a protocol, a2a server, a2a client, agent card, agent interoperability, agent collaboration…
Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `_scores.json`). Compatibility notes: Python 3.10+ (a2a-sdk) or Node.js 18+ (@a2a-js/sdk). Go and Java SDKs also available.
It sits in Productivity & Automation, covering Multi-agent orchestration, LLM API integration and Building AI agents. It works with Agent2Agent Protocol and Python. The repository describes itself as: The trust layer for agent-to-agent commerce — natural-language mandates, ERC-7710 delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all… The licence is Apache-2.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit fa89195. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pipnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pip and npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Python 3.10+ (a2a-sdk) or Node.js 18+ (@a2a-js/sdk). Go and Java SDKs also available.
From compatibility in the SKILL.md frontmatter.
A2a Protocol loads about 2.5k tokens when it runs. Until then it costs about 144 tokens; SKILL.md has 443 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from internet-court/internet-court-skill at commit fa89195, republished under its Apache-2.0 licence (© internet-court). 443 words, ~2,457 tokens.
.claude/skills/a2a-protocol/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Implements the Agent2Agent (A2A) open protocol for communication between AI agents built on different frameworks. A2A enables agents to discover each other via Agent Cards, negotiate interaction modalities, manage collaborative tasks, and exchange data — all without exposing internal state, memory, or tools. Supports JSON-RPC 2.0 over HTTP(S), streaming via SSE, gRPC, and async push notifications.
/.well-known/agent.json describing identity, capabilities, skills, endpoint, authpip install a2a-sdk # Core
pip install "a2a-sdk[http-server]" # With FastAPI/Starlette
pip install "a2a-sdk[grpc]" # With gRPCfrom a2a.types import AgentCard, AgentSkill, AgentCapabilities
from a2a.server.agent_execution import AgentExecutor, RequestContext
from a2a.server.events import EventQueue
from a2a.server.apps.starlette import A2AStarletteApplication
from a2a.server.request_handler import DefaultRequestHandler
from a2a.types import Message, TextPart, TaskState, TaskStatus
import uvicorn
agent_card = AgentCard(
name="Research Assistant",
description="Searches the web and answers questions with citations.",
url="https://research-agent.example.com",
version="1.0.0",
capabilities=AgentCapabilities(streaming=True, pushNotifications=True),
skills=[AgentSkill(
id="web-search", name="Web Search",
description="Search the web for current information",
tags=["search", "research"], examples=["Find the latest news about AI regulation"],
)],
defaultInputModes=["text/plain"],
defaultOutputModes=["text/plain", "application/json"],
)
class ResearchAgentExecutor(AgentExecutor):
async def execute(self, context: RequestContext, event_queue: EventQueue):
query = context.get_user_message().parts[0].text
await event_queue.enqueue_event(
TaskStatus(state=TaskState.working, message=Message(
role="agent", parts=[TextPart(text="Searching...")]
))
)
result = await self._research(query)
await event_queue.enqueue_event(
TaskStatus(state=TaskState.completed, message=Message(
role="agent", parts=[TextPart(text=result)]
))
)
async def cancel(self, context: RequestContext, event_queue: EventQueue):
await event_queue.enqueue_event(TaskStatus(state=TaskState.canceled))
async def _research(self, query: str) -> str:
return f"Research results for: {query}"
# Start server — Agent Card auto-served at /.well-known/agent.json
agent_executor = ResearchAgentExecutor()
request_handler = DefaultRequestHandler(agent_executor=agent_executor, task_store=InMemoryTaskStore())
app = A2AStarletteApplication(agent_card=agent_card, http_handler=request_handler)
uvicorn.run(app.build(), host="0.0.0.0", port=8000)from a2a.client import A2AClient
from a2a.types import MessageSendParams, SendMessageRequest, Message, TextPart
client = await A2AClient.get_client_from_agent_card_url(
"https://research-agent.example.com/.well-known/agent.json"
)
# Synchronous request
request = SendMessageRequest(params=MessageSendParams(
message=Message(role="user", parts=[TextPart(text="Latest quantum computing developments?")])
))
response = await client.send_message(request)
if hasattr(response, 'status'):
print(f"Task {response.id}: {response.status.state}")
if response.status.message:
print(response.status.message.parts[0].text)
# Streaming response
async for event in client.send_message_streaming(request):
if hasattr(event, 'status') and event.status.message:
for part in event.status.message.parts:
if hasattr(part, 'text'):
print(part.text, end="", flush=True)npm install @a2a-js/sdkimport { A2AServer, A2AClient, TaskState } from '@a2a-js/sdk';
// Server
const server = new A2AServer({
agentCard: {
name: 'Code Reviewer', description: 'Reviews code for bugs and best practices',
url: 'https://code-reviewer.example.com', version: '1.0.0',
capabilities: { streaming: true },
skills: [{ id: 'review', name: 'Code Review', description: 'Analyze code for issues', tags: ['code', 'review'] }],
defaultInputModes: ['text/plain'], defaultOutputModes: ['text/plain'],
},
async onMessage(context, eventQueue) {
const userText = context.getUserMessage().parts[0].text;
await eventQueue.enqueue({ status: { state: TaskState.WORKING, message: { role: 'agent', parts: [{ text: 'Reviewing...' }] } } });
const review = await reviewCode(userText);
await eventQueue.enqueue({ status: { state: TaskState.COMPLETED, message: { role: 'agent', parts: [{ text: review }] } } });
},
});
server.listen(8000);
// Client
const client = await A2AClient.fromAgentCardUrl('https://code-reviewer.example.com/.well-known/agent.json');
const response = await client.sendMessage({
message: { role: 'user', parts: [{ text: 'Review: function add(a,b) { return a + b; }' }] },
});# Sequential: research → write → review
research_agent = await A2AClient.get_client_from_agent_card_url("https://research-agent.example.com/.well-known/agent.json")
writer_agent = await A2AClient.get_client_from_agent_card_url("https://writer-agent.example.com/.well-known/agent.json")
research_result = await research_agent.send_message(SendMessageRequest(
params=MessageSendParams(message=Message(role="user", parts=[TextPart(text="Research quantum computing breakthroughs 2025")]))
))
article = await writer_agent.send_message(SendMessageRequest(
params=MessageSendParams(message=Message(role="user", parts=[TextPart(text=f"Write blog post: {research_result.status.message.parts[0].text}")]))
))
# Parallel fan-out
import asyncio
results = await asyncio.gather(
query_agent(agent_a, "Analyze market trends"),
query_agent(agent_b, "Analyze competitor products"),
query_agent(agent_c, "Analyze customer feedback"),
)| A2A | MCP | |
|---|---|---|
| Purpose | Agent-to-agent communication | Agent-to-tool communication |
| Actors | Agent ↔ Agent | Agent ↔ Tool/Data source |
| Tasks | Stateful, long-running, async | Stateless function calls |
| Use when | Delegating to another autonomous agent | Calling a specific tool/API |
Input: "Build an A2A server that acts as a customer support router. It receives customer queries and delegates to specialized agents: billing-agent, technical-agent, and sales-agent based on the query content."
Output: A2A server with Agent Card listing routing as its primary skill, message handler that classifies queries, A2A client connections to 3 downstream agents, task forwarding with context preservation, aggregated response, and fallback to human handoff.
Input: "Create a multi-agent code pipeline: code-writer generates code, test-writer creates tests, code-reviewer reviews both. Each is an independent A2A server. Build an orchestrator."
Output: 3 A2A server implementations each with Agent Card and execution logic, orchestrator client with sequential pipeline (write → test → review), streaming updates, and error handling with feedback loops on rejection.
/.well-known/agent.json — this is the standard discovery endpointinput-required state for human-in-the-loop scenarios© internet-court, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in vendored/terminalskills/a2a-protocol of internet-court/internet-court-skill.
Open the folder on GitHubat commit fa89195
We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in internet-court/internet-court-skill, which our catalogue first saw on October 7, 2026.
A2a Protocol next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| A2a Protocol this skillinternet-court/internet-court-skill | 6.5k | 1 repos | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| A2a ProtocolTerminalSkills/skills | 163 | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Swarms Multi-Agent Frameworkkyegomez/swarms | 7.2k | — | ~5.5k | Automated safety check: Pass | Apache-2.0 | |
| Agent Squad Python Guide2FastLabs/agent-squad | 7.8k | — | ~4.7k | Automated safety check: Pass | Apache-2.0 | |
| Olore A2a Latestolorehq/olore | 104 | — | ~721 | Automated safety check: Pass | MIT | |
| Langgraph Docslangchain-ai/docs | 426 | — | ~282 | Automated safety check: Pass | MIT |
TerminalSkills/skills
Builds Agent2Agent (A2A) servers and clients, the open protocol (originally from Google, now under the Linux Foundation) that lets AI agents from different frameworks call each other.
kyegomez/swarms
Teaches the Swarms Python framework: the Agent class, tools, loops, memory and multi-agent structures such as sequential, concurrent and graph workflows.
2FastLabs/agent-squad
Map of the agent-squad Python framework for async multi-agent orchestration: which agent, classifier, storage and tool provider to pick, and the pitfalls to avoid.
olorehq/olore
Local A2A (Agent-to-Agent) protocol documentation (latest). An agent skill from olorehq/olore.
langchain-ai/docs
Fetches and references LangGraph Python documentation to build stateful agents, create multi-agent workflows, and implement human-in-the-loop patterns.
hoodini/ai-agents-skills
Build AI agents with the Strands Agents SDK - the open-source framework (the agent "brain") for writing agent logic, tools, and multi-agent systems in Python.
internet-court/internet-court-skill
Uploads one Kleros-related file per paid request to IPFS through the Kleros x402 gateway for 0.01 USDC on Base, returning a CID that Kleros contracts can reference.
internet-court/internet-court-skill
Guides building on the 0G Compute Network, a decentralized GPU marketplace for AI inference and fine-tuning, with SDK patterns and CLI commands.
internet-court/internet-court-skill
Creates, trades and settles permissionless prediction markets on Solana with any SPL token as collateral, including social-media and custom-oracle markets.
internet-court/internet-court-skill
Connects an agent to the BNB Chain MCP server to read blocks and contracts, move tokens and NFTs, register ERC-8004 agents and use Greenfield storage.
internet-court/internet-court-skill
Specifies how a GenLayer Intelligent Contract decision about an agent's performance becomes an ERC-7710 revocation or policy change, through a relayer or bridge and an EVM controller.
internet-court/internet-court-skill
Specifies how a GenLayer Intelligent Contract should supervise an AI agent, with review rubrics, evidence schemas and continue, warn, constrain or revoke decisions.
Works with
Builds Agent-to-Agent (A2A) servers and clients following Google's open protocol for agent interoperability. A2a Protocol is an agent skill from internet-court/internet-court-skill. Builds Agent-to-Agent (A2A) servers and clients following Google's open protocol for agent interoperability.
A2a Protocol fits situations like: the user wants to create an A2A-compliant agent; build an Agent Card; implement task management; connect agents across frameworks.
Run `npx skills add internet-court/internet-court-skill --skill a2a-protocol -a claude-code`. Or copy the skill folder (vendored/terminalskills/a2a-protocol in internet-court/internet-court-skill) into .claude/skills/a2a-protocol in your project. Claude Code loads it when a task matches its description.
Run `npx skills add internet-court/internet-court-skill --skill a2a-protocol -a codex`. Or copy the skill folder (vendored/terminalskills/a2a-protocol in internet-court/internet-court-skill) into .agents/skills/a2a-protocol in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add internet-court/internet-court-skill --skill a2a-protocol -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/a2a-protocol, .gemini/skills/a2a-protocol, .github/skills/a2a-protocol and .opencode/skills/a2a-protocol in your project.
Going by SKILL.md and its folder, A2a Protocol needs the command-line tools its instructions call (pip and npm). Our summary lists: Python 3; Node.js. Compatibility (from SKILL.md): Python 3.10+ (a2a-sdk) or Node.js 18+ (@a2a-js/sdk). Go and Java SDKs also available..
SKILL.md contains no URLs. Its commands use pip and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
A2a Protocol is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 9.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with A2a Protocol: A2a Protocol (TerminalSkills/skills, 163 stars), Swarms Multi-Agent Framework (kyegomez/swarms, 7.2k stars), Agent Squad Python Guide (2FastLabs/agent-squad, 7.8k stars) and Olore A2a Latest (olorehq/olore, 104 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
internet-court (a GitHub organization) maintains it in internet-court/internet-court-skill, which has 6,471 GitHub stars. The repository holds 80 skills in this directory. The repository was last updated on August 19, 2026.
Source: internet-court/internet-court-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.