Every integration was a private deal.
One vendor wrote a custom adapter for every other vendor they wanted to call. N agents. N squared adapters. The math did not work.
a workshop on the A2A protocol / one hour / your terminal
Two software agents. Each speaks the same lightweight protocol over HTTP. Agent A sends a request. Agent B returns a result. That is the whole point. No SDK lock-in, no shared database, no shared model.
Analogy. If REST is how two services talk, and MCP is how a model talks to its tools, then A2A is how two agents talk to each other. Different agents. Different vendors. Same wire.
One vendor wrote a custom adapter for every other vendor they wanted to call. N agents. N squared adapters. The math did not work.
JSON-RPC 2.0 over HTTP. One spec. Every agent that ships an agent card becomes callable by every other agent. Same wire for all of them.
A scheduling agent calls a search agent calls a payment agent. Different teams. Different stacks. No SDK glue. The protocol is the glue.
→ a2a-protocol.org · 150+ orgs signed on · April 2026 retro
"I bring tools to one model."
"I let two agents talk to each other."
→ Most production stacks run both. MCP for tool-use inside one agent. A2A between agents. The next slide shows the full picture.
TCP shakes hands in three packets. TLS shakes hands in four. A2A shakes hands in two HTTP round-trips. First, A reads B's agent card. Then A calls a skill listed on it.
The agent card is a single JSON file an agent serves at a well-known URL. It declares the agent's name, version, skills, auth shape, and endpoints. Any peer can fetch it without an account. The card answers "who are you and how do I call you" in one round trip.
{
"$schema": "https://a2a-protocol.org/spec/agent-card/v1",
"name": "immersive-commons-floor10",
"version": "1.15.0",
"url": "https://www.immersivecommons.com",
"provider": {
"organization": "Immersive Commons",
"url": "https://www.immersivecommons.com"
},
"auth": {
"type": "bearer",
"format": "agt_<base64url-32bytes>",
"scopes": [ "highlights:submit", "events:rsvp", ... ]
},
"capabilities": { "streaming": true, "pushNotifications": true },
"skills": [
{ "id": "ic_signal_get_latest", "name": "Latest Signal issue" },
{ "id": "ic_events_list_upcoming", "name": "Upcoming events" }
],
"endpoints": {
"a2a": "https://www.immersivecommons.com/api/a2a",
"mcp": "https://www.immersivecommons.com/api/mcp"
},
"policy": {
"discoveryMode": "open",
"license": "CC-BY-SA-4.0"
}
}
→ Live shape from immersivecommons.com/.well-known/agent-card.json · 17,578 bytes. 14 capabilities. 19 scopes.
Well-known URIs are an old web idea (RFC 8615). A site declares standardised facts about itself at a fixed path under /.well-known/. Apps and browsers can fetch them without coordination. A2A uses the same trick.
/.well-known/agent-card.json. No discovery service needed.Siblings on the same path. ai-agent.json (richer manifest), mcp.json (tool index), openapi.json (legacy REST). Browsers, search engines, and security scanners check these without asking.
https://immersivecommons.com └─ /.well-known/ (RFC 8615 reserved prefix) ├─ agent-card.json A2A · who you are ├─ ai-agent.json richer manifest ├─ mcp.json MCP · your tools └─ openapi.json legacy REST
→ Try it now: curl https://www.immersivecommons.com/.well-known/agent-card.json · 17,578 bytes back, no auth needed.
→ Each row gets its own slide. Then a working attack. Then two RFCs in plain English.
A2A's task model already carried inputs, outputs, and state. It did not carry settlement. AgentCore is the first managed runtime where settlement is a peer of those.
Read this as the vendor signal: "agents talk" has been replaced by "agents transact." Every threat in this act assumes there is real money on the wire.
→ aws.amazon.com/blogs/machine-learning · agents-that-transact · 2026-05-07. Echoed by Stripe Link wallet for agents · TechCrunch · 2026-04-30.
Replay (re-spend a single signed payment). Race (front-run between pay and serve). Misrouting (facilitator MITM swaps the recipient). Identity-bind drift (agent card swap mid-session). Refund-loop drain (poisoned receipt triggers compensating tx).
None of these break the cryptography. They break the choreography. The fixes live in RFC 9421 signatures, freshness windows, and bound identities. See s2.6.
→ Vaziry et al. arXiv:2605.11781 · cs.CR · 2026-05-13. Paired with Vaziry et al. arXiv:2507.19550 (ledger-anchored agent identities).
Spec maturity matters less than who deploys it. Anthropic crossing OpenAI on Ramp means the most-cited frontier model in production right now ships with Claude Code, Skills, MCP, and Managed Agents. Each is a native A2A vector.
Paired with: Anthropic + SpaceX Colossus compute deal (2026-05-06, $5 to $10B per year), Claude Platform on AWS GA (2026-05-11), Managed Agents launch (2026-05-07).
→ Business Insider · Ramp Index · 2026-05-15. CNBC · SpaceX deal · 2026-05-06. AWS What's New · Claude Platform · 2026-05-11.
→ Habler et al. Building A Secure Agentic AI Application Leveraging Google's A2A Protocol · ACSAC Workshops 2025 · DOI 10.1109/ACSACW69556.2025.00043. Corroborated by Anbiaee et al. arXiv:2602.11327 (12 protocol-level risks, creation/operation/update phases). Fix is on the next slide.
A Bearer token is the envelope. Anyone who steals the envelope can resend it. RFC 9421 melts a wax seal across the envelope flap and the writing inside. If anyone forwards or replays, the seal breaks.
Concretely, the caller signs a covering set of fields (method, authority, target-uri, content-digest, created timestamp) with Ed25519. The peer verifies the signature against a published public key. Sixty-second freshness window kills replay.
Used by Cloudflare Web Bot Auth and now by IC's agent card. The same standard the browser-bot world adopted to authenticate AI crawlers.
→ RFC 9421 · HTTP Message Signatures. Layer 01 of IC's defense stack. Same signature scheme Habler et al. recommend in their s2.5 mitigation.
You can't type on a smart TV. So Netflix shows a short code, you open netflix.com/tv on your phone, type the code, and the TV is logged in. RFC 8628 is exactly that, written down.
Agents are the smart TV. They have no browser, no keyboard, no password manager. They ask the auth server for a device code, hand the human a URL plus a code, then poll until the human approves. No password ever touches the agent.
This is why A2A v1.0.0 retired implicit-flow and password-grant OAuth and shipped device-code + PKCE as the standard. The agent never gets a long-lived secret. It gets a scoped token, revocable, auditable.
→ RFC 8628 · OAuth 2.0 Device Authorization Grant. A2A v1.0.0 ships device-code + PKCE by default. Layer 02 of IC's defense stack.
→ synthesis · recon-news, May 2026. zero new posts about agent-card schema. all the news is about money.
A lab is a copy.paste action with a visible result. You run a command, you see a real API answer. Labs 01, 02, 03 happen here in the room (about 15 minutes total). Labs 04 and 05 are scaffolds you clone at home (a FastAPI MCP server and an x402 paywall worker).
→ every lab links to a runnable page under /lab. open one in a second tab. follow along.
→ apex redirects to www (307). pass -L or you will see 15 bytes of nothing. this is PITFALL P29.
$ curl -sL https://immersivecommons.com/.well-known/agent-card.json | jq
{
"$schema": "https://a2a-protocol.org/schemas/agent-card/v1.json",
"name": "immersive-commons-floor10",
"version": "1.15.0",
"endpoints": {
"a2a": "https://www.immersivecommons.com/api/a2a",
"mcp": "https://www.immersivecommons.com/api/mcp",
"feedback": "https://www.immersivecommons.com/api/agent/feedback"
},
"auth": {
"type": "bearer",
"format": "agt_<base64url-32bytes>",
"signup": {
"kind": "rfc8628-device-code",
"start_url": ".../api/agent/signup/start",
"poll_url": ".../api/agent/signup/poll"
}
},
"capabilities": [ 14 entries ... ]
}
Stable agent identity. The string an agent registry indexes on.
Where peer agents POST JSON.RPC envelopes (agent/info, tasks/send).
Where MCP clients (Claude Desktop, Cursor) hit tools/call.
No copy.paste. Agent prints a code, human signs in elsewhere, token mints.
The tool surface. Each one is a verb an agent can call.
Self.healing loop. Agent reports schema drift, operator fixes.
→ 17,578 bytes. 14 capabilities. 19 scopes. one fetch. this is what production discovery looks like in 2026.
→ set Accept to BOTH types. the server picks one. parse both. PITFALL P36.
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [
{
"type": "text",
"text": {
"slug": "issue-008-2026-05-12",
"title": "Signal #008 · the protocol that won",
"published_at": "2026-05-12T16:00:00Z",
"stories": [
{ "headline": "A2A v1.0 ships", "score": 94 },
{ "headline": "MCP 37.tool surface live", "score": 88 },
{ "headline": "x402 crosses $24M", "score": 81 }
],
"story_count": 7
}
}
],
"isError": false
}
}
JSON.RPC envelope. id echoes your request so concurrent calls reconcile.
MCP wraps everything in a content array. type can be text, image, resource.
JSON.RPC errors live in the body, NOT the HTTP status. 200 can still be an error.
The tool's own schema. Five public ic_signal_* tools, no auth, all the same shape.
→ status 200 + body.error means failure. naive clients miss this and treat all errors as success. (proposed P38.)
→ omit auth and you publish a public.by.default agent. set it on purpose, even to "none". PITFALL P21.
{
"$schema": "https://a2a-protocol.org/spec/agent-card/v1",
"name": "my-first-agent",
"version": "0.1.0",
"description": "First agent. Friday demo.",
"url": "https://my-domain.com",
"provider": {
"name": "Your Name",
"url": "https://linkedin.com/in/you"
},
"auth": { "type": "none" },
"capabilities": [
{
"name": "hello",
"description": "Returns a greeting.",
"method": "GET",
"url": "https://my-domain.com/api/hello"
},
{
"name": "list_things",
"description": "Returns a list of things.",
"method": "GET",
"url": "https://my-domain.com/api/things"
}
],
"endpoints": {
"a2a": "https://my-domain.com/api/a2a"
},
"policy": { "discoveryMode": "public", "license": "CC-BY-SA-4.0" }
}
agentify audit · 30 point preview
score: 0 / 30 → 8 / 30. average public site: 38 / 100. nothing above 70.
→ 8 free points in 5 minutes. labs 04 + 05 take you past 17. (CF April 2026 study.)
Streamable.http transport. Bearer auth. Five seed tools. Deploy to Render or Fly in one command. Wires into the agentify scaffold. Local probe at /.well‑known/mcp.json the moment uvicorn boots.
Open Lab →Cloudflare Worker. Returns 402 with a payment quote. Verifies USDC on Base via Coinbase facilitator. Settles. Returns 200 + the asset. Economic gating IS auth for agents.paying.agents.
Open Lab →→ x402 itself processed $24M in 100M+ transactions, May 2025 to Dec 2025. live, not vapor.
→ ADK: from google.adk.a2a.utils.agent_to_a2a import to_a2a · LangGraph: langgraph‑api ≥ 0.4.21 · agent card at /a2a/{assistant_id}.
Two steps. First the model retrieves relevant passages from your data (docs, tickets, code, papers). Then it generates an answer grounded in those passages. The model still writes the prose, but the facts come from your index, not its training set.
retrieve: a question goes in. similarity + keyword search ranks the top.k passages out of your private corpus.
generate: passages + question + system prompt → model. answer cites the passages, not its training memory.
→ why bother? the model gets your private data without retraining. and you get citations, so you can verify.
Classic RAG is one shot. Ask, retrieve, answer. But real questions are messy. The first retrieval often misses. Sometimes you need to refine the query, retrieve from a different index, or reason across multiple passages. That work belongs to agents, not to a single ranker.
when
retrieval needs a second pass.
the first pass returned 5 passages, none of them about 2026. the reasoner detects the gap and asks the retriever to widen the date filter.
when
one model can't hold all the context.
retriever ranks. reasoner synthesizes. composer cites. each is a smaller agent with its own card, called via A2A, parallelizable.
when
you want auditable hops.
every inter.agent message is a JSON.RPC envelope with an id. you can replay the conversation. you can verify the citation chain.
when
the indexes are owned by different teams.
retriever.A owns the legal corpus. retriever.B owns the engineering wiki. one orchestrator fans the query out. A2A makes the seams legible.
→ next slide: the swarm in motion. retriever → reasoner → composer, each one its own agent card.
SRCarXiv:2501.09136 · 2505.02279 · 2505.03864 · 2508.01332 · 2507.19550 · 2602.11327 · 2605.06285 — agentic-RAG × A2A intersection · each arrow is a JSON-RPC envelope · each box has its own agent-card.
A2A-card-discoverable. Live concierge agents. Booking + upsell. Each property publishes its own agent-card.
a2aregistry.orgSpecialized agents on SAP S/4HANA. Logistics handoff via A2A. Co-announced GTC 2026.
blogs.nvidia.comAP2 + A2A. 60+ orgs at the April 2026 launch. Mandate proofs of consent before any agent settles.
linuxfoundation.orgCross-vendor claim handoff. Each carrier publishes its own card. Adjusters never see the other vendor's UI.
salesforce.com75+ orgs. Kubernetes ops agents. Production deploys at SoftServe × Webex, Swisscom.
agntcy.org→ LF April 2026 retro. Azure AI Foundry, Amazon Bedrock AgentCore, Google Cloud all carry A2A in their runtimes.
A status code finally got a job. HTTP 402 sat dormant for 28 years. In 2025 Coinbase turned it into the wire for agent-to-agent payments.
Think of a vending machine that returns a price tag instead of a drink when you swipe an empty card. Tap again with funds, drink falls out. Same request. No login. No invoice.
An agent calls a tool. Server answers 402 with a quote. Agent pays USDC on Base via a Coinbase facilitator. Same request retries. Server returns 200 plus the asset. The whole exchange takes one round trip. No accounts. No checkout flow. No human in the loop.
→ $24M processed in 100M+ transactions, May to Dec 2025. Facilitators: Coinbase, Cloudflare, Google. Stripe shipped Base x402 USDC in Feb 2026.
A trust contract for agents that aren't people. ERC-8004 puts agent identity, reputation, and validation onchain. Three registries. One standard.
Think of a passport stamped by every customs officer it has met. The passport lives on a public wall. Anyone can read the stamps before letting the agent through their door.
Trustless agents need three things from each other. Who are you. What have you done. Did your last claim verify. ERC-8004 gives each of those a contract on Ethereum mainnet. The signed A2A agent-card now points at an onchain anchor. The same identity travels across organizations without a federation deal.
→ Vaziry, Garzon, Küpper. arXiv:2507.19550. Ledger-anchored AgentCards on Ethereum mainnet, live since January 2026. Zero academic papers cite ERC-8004 directly yet. We cite the spec.
HTTP 402 returns a price quote. The agent pays USDC on Base via the Coinbase facilitator. Server returns 200 with the asset. No accounts. No invoices. No checkout.
→ Vaziry et al. arXiv:2507.19550
Trustless agents on Ethereum mainnet. Identity plus Reputation plus Validation. Live since Jan 2026. Pairs with A2A's signed agent cards.
→ Vaziry x402 paper. Ledger-anchored cards
Cisco-led. Content-addressed agent records. OCI/ORAS artifact distribution. Sigstore provenance. Discovery you can actually pin.
→ Muscariello et al. arXiv:2509.18787
→ AP2 authorizes via consent mandates. x402 settles the rails. ERC-8004 identifies the chain. AGNTCY pins the directory. Four layers, one substrate.
Cisco's answer to the "where do agents live" question. AGNTCY is the directory + group-comms layer that sits over A2A and MCP, not against them.
Think of npm for agents, signed by Sigstore. Each record is content-addressed, so the address IS the hash, so tampering breaks the link. Pin it, and discovery becomes reproducible.
A2A handles peer talk. MCP handles tool access. Neither tells you where the next agent lives. AGNTCY's Open Agent Schema Framework wraps both, ships records over a Kademlia DHT with OCI/ORAS distribution, signs everything with Sigstore. 75+ orgs joined by July 2025. Five LF formative members. Already in production at SoftServe × Cisco Webex and Swisscom.
→ Muscariello, Pandey, Polic. arXiv:2509.18787. LF members: Cisco, Dell Technologies, Google Cloud, Oracle, Red Hat. Donated to Linux Foundation 2025-07-29.
An agent-native venue at Floor 10. Humans walk in. Agents call in. Same building.
→ immersivecommons.com. Live. The QR on the GO FORTH slide gets you a guest pass.
Malicious agents are coming. We build sweet, sticky places for them to land. Then we audit who showed up.
Honeypots positioned as legitimate agent-discoverable surfaces. When a hostile agent crawls them, we record the agent-card it presents, the calls it makes, and the patterns it leaves. Audit reports go to operators who need the receipts.
The Habler ACSAC paper, BlockA2A, the Anbiaee threat model. Every major 2025+ security paper says A2A's discovery layer is the attack surface. We answer with infrastructure, not a whitepaper. Applying to Anthropic CVP and OpenAI TAC as a defender.
→ lobsterhoney.com. Co-founded with Kevin and Michalis. Brand v1.0 shipped 2026-04-21.
Two halves of the same fix. Skew makes pages that read to agents. Agentify tells you how close yours already is.
Supply-side flip. The CC-PRO design engine, weaponized for landing pages that agents can actually parse. Schema.org. JSON-LD. /llms.txt. /.well-known/agent-card.json. Designers stop sloppfooding the agent.
skew.site25-point readiness audit. Claude skill. Point it at a repo. It scores you, plans the missing layers, scaffolds the templates, verifies the deploys, registers you on the agentic web. Discovery + execution + trust in one pass.
isitagentready.com→ both publish their own /.well-known/agent-card.json. you can call them right now.
→ live, right now. an A2A client could call this deck and ask which slide is on screen. agents have already been here.
There is no shared lexicon for what an agent is allowed to want.
A protocol is a contract. An agent without a budget is a bug.
musicIvan Linn · Wavv. Open-source music AI. Musica large music model.
venueFrontier Tower. Floor 10. The room you are sitting in.
cohortClawCamp. The campfire.
stackA2A protocol. MCP. AGNTCY. RFC 8628. RFC 9421.
deckThis deck. One file. Callable by agents. Open the dev tools.
YOUR MOVE.
→ Rayyan Zahid · vibe-coding-a2a.vercel.app · 2026-05-18 · room CAMP
CAMP
vibe-coding-a2a.vercel.app/?as=remote&room=CAMP
waiting for phone…
tap outside or press ESC