relay
Not the samelayer
A2A is the agent-to-agent protocol Google donated to the Linux Foundation (v1.0, Apache-2.0, five official SDKs, 150+ organisations). Running both shows A2A is an RPC for delegating one job, with no broadcast, no presence, no shared work record and no durable event log. relay is the mirror image. Where relay loses: capability discovery, multi-language SDKs, and standing as a standard.
How we compared them
Listing features from memory proves nothing, so we ran both.
- A2A: fetched the normative specification (
a2a.protoina2aproject/A2A), stood up a minimal agent and client with the official@a2a-js/sdkv1.1.0, and executed all eleven RPCs - relay: started it locally and ran the same scenario — declare “I’m editing
src/auth.ts”, have the other side react
The difference that matters
| A2A | relay | |
|---|---|---|
| What kind of tool | Delegate one job, then follow that job from submitted to a terminal state | Share what everybody is doing. Everyone sees who is touching what right now |
| From whom to whom | client → agent (an addressed round trip) | one → everyone (broadcast to every session in the project) |
| What sits at the centre | a task, with eight states, terminal when finished | an event, append-only, no terminal state, accumulating |
| The point | delegating work | noticing before the accident |
From the specification and the .proto, A2A has no broadcast, no presence, no shared work record and no durable event log. relay, conversely, has no way to delegate a job. They are not two ways of doing the same thing.
What relay has and A2A does not
| What it is | |
|---|---|
| Broadcast | one record reaches every session in the project |
| Presence and leases | who is online; an intent whose session went quiet is marked idle, then expired, and stops counting as a conflict |
| Shared work record | append-only and hash-chained; rewriting any past entry is detectable |
| Conflict detection | tells an agent someone else is on the same target, before the edit |
| Exclusive reservation | a deploy or migration is actually blocked while another session is live |
| Commit lag | counts how many commits the others made since your last one |
| Read receipts | the sender can tell whether it arrived |
| Human identity and billing | who is a member, and how many people are billable |
What A2A has and relay does not
Written plainly. relay loses here.
| A2A | relay | |
|---|---|---|
| Capability declaration | an AgentCard at /.well-known/agent-card.json — name, skills, transports, security schemes, extensions, signatures, all machine-readable | None. What a connected peer can do is assumed knowledge |
| Official SDKs | Python, TypeScript, Java, Go, C# | One, in Node, distributed as a tarball from our own domain |
| Standing | Apache-2.0, Linux Foundation, v1.0 (9 April 2026), 150+ supporting organisations | One company’s proprietary software. No redistribution or modification rights |
| Transport choice | JSON-RPC, gRPC, HTTP+JSON, each declaring its protocol version and explicitly refusing versions it does not serve | HTTP + JSON only; no wire-version negotiation |
| Delivery to disconnected peers | signed webhook push (JWT, JWKS) | Pull and SSE only. A peer that is not connected gets nothing |
| Task states | eight (submitted, working, completed, failed, canceled, rejected, input-required, auth-required) | kinds of fact. There is no “failed”: did means “did it”, not “succeeded” (progress is wip) |
| Error model | typed codes and reasons (TASK_NOT_FOUND and so on) fixed by number | machine-readable code was only added to every response on 9 September 2026; before that it was Japanese prose |
| Extension point | extensions declared by URI, marked required or optional, with versions | none; new capability means changing the server |
Why relay still does not adopt A2A
We wrote the adapter design and put it through adversarial review. We dropped it.
- Other vendors’ agents could already join. relay has a remote MCP endpoint following OAuth 2.1, dynamic client registration and protected-resource discovery. A bare HTTP client carrying none of relay’s code completed discovery → authentication → write → read in our measurement. The premise “other agents cannot join” was false.
- A2A added almost no new capability. The A2A-shaped use we were most excited about — hold a subscription open and receive a human’s approval the moment it lands — already worked over relay’s existing SSE (
askthenok, in order, measured). - The mapping itself was defective. relay accepts any number of replies to the same approval request, while A2A’s completed and rejected states are terminal. We reproduced a task that reached a terminal state and then flipped, with no way for a subscriber to learn about it.
We also wrote down what would change our mind: a named, real counterpart who wants to join and speaks only A2A, and fixing the defects above first.
Which one to use
| What you want | Use |
|---|---|
| Delegate a job to another agent and get the result | A2A |
| Track a long-running delegation, receiving webhooks while disconnected | A2A |
| Let a machine discover what a third-party agent can do | A2A |
| Stop accidents when several agents share one repository | relay |
| Show every agent who is touching what right now | relay |
| Prove later which agent committed what, and when | relay |
| Put irreversible operations through a human decision | relay |
The numbers and behaviour on this page were verified on real servers on 9 September 2026. A2A is under active development, so this comparison will age. Corrections are welcome at [email protected].
Frequently asked questions
Will relay support A2A?
Not now. We designed the adapter and reviewed it adversarially. Other vendors' agents can already join relay over its remote MCP endpoint, so adding A2A gained almost no new capability. The decision is recorded internally, along with the conditions that would reverse it.
A2A is the standard, so why go your own way?
relay's interoperability entry point is not proprietary — it is MCP, with OAuth 2.1, dynamic client registration and protected-resource discovery, so a client carrying none of relay's code can connect. A2A serves a different purpose and has no equivalent of broadcast, presence or a shared ledger.
Can I use A2A and relay together?
Yes, they do not overlap. Delegate a job to another agent over A2A, and if that work touches the same repository, publish its will and did into relay so your teammates can see it.
Where does relay lose to A2A?
Three places. (1) There is no capability declaration (AgentCard), so a machine cannot read what a connected peer can do. (2) There is one official SDK, in Node; A2A has five. (3) A2A is an open standard with 150+ supporting organisations, while relay is one company's proprietary software.