The observation layer for agent-to-agent protocol traffic. Today it observes the protocol, not your traffic — what A2A specifies, what it structurally cannot express, and what this surface has actually witnessed.
Messages witnessed here: 0. The animation above is decorative.
Generic A2A telemetry is a category with incumbents in it. This is the other half of the picture, and nobody publishes it: a six-dimension assessment of what five agent-interoperability protocols can and cannot express. Not what they carry slowly — what they have no vocabulary for at all.
| Protocol | G1Membership | G2Deliberation | G3Voting | G4Dissent preservation | G5Human escalation | G6Audit and replay | Coverage |
|---|---|---|---|---|---|---|---|
| MCP v1.1 | absent | absent | absent | absent | absent | partial | 1/12 |
| A2A v1.0.1 | partial | absent | absent | absent | absent | absent | 1/12 |
| ACP | partial | partial | absent | absent | absent | absent | 2/12 |
| ANP | absent | absent | absent | absent | absent | absent | 0/12 |
| ERC-8004 | partial | absent | absent | absent | absent | partial | 2/12 |
Governance Gaps in Agent Interoperability Protocols: What MCP, A2A, and ACP Cannot Express — Richard Kang, Yudho Diponegoro, submitted 2026-06-30, arXiv:2606.31498. arXiv preprint. Their finding, quoted: “Voting and dissent preservation are universally absent across all five protocols.” Scores are the paper's; this site has not re-scored the protocols.
Version drift, stated: This paper was submitted 2026-06-30. MCP shipped its largest revision since launch on 2026-07-28 — the version string is literally "2026-07-28"; the C# SDK calls its implementation v2.0 and much of the press calls it MCP 2. The paper therefore scores MCP v1.1, which is superseded. Read against the 2026-07-28 release notes, that revision is about transport and deployment shape, not community governance: a stateless request/response core, an Extensions framework, Tasks moved out to the io.modelcontextprotocol/tasks extension, MCP Apps, Enterprise Managed Authorization, Multi Round-Trip Requests, and authorization hardening (RFC 9207 issuer validation, Dynamic Client Registration replaced by Client ID Metadata Documents). Roots, Sampling, Logging and the legacy HTTP+SSE transport are deprecated on a twelve-month window. Nothing in it adds membership, deliberation, voting, dissent preservation, human escalation or tamper-evident replay. So the G1-G6 row is very unlikely to have moved — but this site has NOT re-scored it, and 'unlikely to have moved' is not a measurement. The 2026-07-28 release notes.
“Protocol encodes admission, invitation, removal, and role assignment for community participants.”
Agent Cards declare capabilities and can be registered in directories.
There is no protocol-native admission, invitation, or removal primitive. A card says what an agent claims it can do; nothing in A2A says whether it was allowed to join, or how it leaves.
box-and-box deontic rung (rung 3 of eight) and the delegatic OS-006 governance shim.The kernel answers 'is this permitted' with a certificate attached, over a floor that cannot be weakened. 118 enforced property-tested laws and 3 declared-open.
“Protocol encodes structured argument exchange with turn-taking, challenge, and response semantics.”
Messages and tasks. An argument can be sent as text.
Nothing distinguishes an argument from a message, a challenge from a reply, or a turn from a retry. Structure has to be re-invented above the protocol by every party, which means no two parties agree on it.
deliberatic — Dung's argumentation framework extended to weighted bipolar (wBAF), graded semantics.Specified, no implementation. Its own page says so.
“Protocol encodes preference aggregation with quorum, rounds, and position resolution.”
Nothing. A vote is an ordinary message.
No quorum, no round, no resolution rule. Two agents cannot disagree in a way the protocol can settle.
deliberatic argues explicitly against majority voting and specifies graded semantics instead; agentromatic covers bidding, debate and election.Specified, no implementation.
“Protocol ensures minority positions are retained in decision outputs, not silently dropped.”
Nothing. A losing position is a message nobody reads again.
A decision transported over A2A carries its result and not its objections. The disagreement that produced it is unrecoverable from the wire.
deliberatic makes attacks first-class in the formal tuple (R-), and specifies that three vindicated dissents trigger constitutional review.Specified, no implementation.
“Protocol defines conditions and mechanisms for routing decisions to human authority.”
Push notifications, and TASK_STATE_INPUT_REQUIRED / TASK_STATE_AUTH_REQUIRED as interrupted states.
Those are transport and status. Neither says under what condition a human MUST be reached, who counts as the authority, or what happens if nobody answers. An agent can ask; nothing obliges the escalation.
The RRABBIT mailbox. A message is 4 lanes x <=32 bits, so it carries an escalation signal and never prose. Mailbox is the only role with no ports, so 'beside the road' is forced by the algebra rather than chosen. Unread is a projection, never a stored count, because otherwise reading a message mutates the world.node test/mail.mjs -> 68 passed, 0 failed (run 2026-08-17).
“Protocol produces tamper-evident event logs enabling deterministic reconstruction of the decision process.”
A Traceability extension exists.
The paper scores this absent despite that extension, because it does not define tamper-evident logs or replay semantics. You can observe the traffic; you cannot prove the log was not edited, and you cannot re-run it.
REPLAY — typed refusals, no silent repair. A step whose road is gone is refused by name, never remapped.Five typed refusal codes: TRACK_EMPTY, TRACK_ROAD_GONE, TRACK_ROAD_CLOSED, TRACK_WINDOW_GONE, TRACK_BUSY (RRABBIT/docs/TRACKS_HANDOFF.md:135). An internal review said six; the file says five, and the file wins.
The matrix above is an outside reading of five wire protocols. The Periodic Table of Agent Invariants is an inside census of the measurements a system needs to know what position it is in and what authority that grants — 43 cells, ten groups, built for a different purpose by different people. Laid side by side they point at the same places.
| Dimension | A2A | Invariant cell | Status here |
|---|---|---|---|
| G1 membership | partial | ⊘ No cycles · IV Governance⊆ Monotonic · IV Governance⊥ Deny default · IV Governance |
provedprovedproved |
| Membership is admission, removal and role assignment. The authority graph answers all three structurally: delegation cannot cycle, a child cannot exceed its parent, and absence of a grant is refusal. That is a membership rule a protocol could carry but does not. | |||
| G2 deliberation | absent | ? Convergence · V Deliberation? Seal integrity · V Deliberation |
missingmissing |
| Both cells are missing. The table names convergence and seal integrity as the measurements a deliberation would need; neither exists. This dimension is as empty here as it is on the wire. | |||
| G3 voting | absent | no cell exists | none |
| There is no cell for voting anywhere in the table. deliberatic argues against majority voting and specifies graded semantics instead, at spec rung — so the absence may be deliberate rather than an oversight, but an absent cell is an absent cell. | |||
| G4 dissent preservation | absent | ? Dissent durability · V Deliberation |
sketched |
| Dissent durability is the single cell in the table that names this, and it is sketched. It is also the strongest thing either census has to say about a dimension the paper finds absent in all five protocols. | |||
| G5 human escalation | absent | ? Escalation monotonicity · VII Tier / Budget |
missing |
| Escalation monotonicity is missing, and it is filed under Tier / Budget (OS-005, model tier adaptation) — escalating to a bigger model, not to a person. Read strictly, the table has no human-escalation cell at all; the working artifact is the RRABBIT mailbox, which is live_local and not in this table. | |||
| G6 audit and replay | absent | ⊕ Append-only · IV Governance? Non-replay · X Security & Federation |
provedmissing |
| Append-only audit is proved: history cannot be rewritten, which is half of what the dimension asks. The other half — deterministic reconstruction — maps to non-replay in Security & Federation, and that is missing. So this dimension is genuinely split, and the page should not round it up. | |||
Which invariant answers which governance dimension is a reading, not a measurement. Nobody has published a mapping between these two vocabularies, the two were built independently and for different purposes, and no test enforces the correspondence. DOCTRINE.md rule 1: where a condition cannot be settled by a command, say that it is a judgement and whose. This is one, and it is mine. The A2A scores are the paper's. The invariant statuses are extracted from the canonical table by tools/sync-invariants.mjs and re-derived on every build. Only the arrows between them are argued.
The short reading: where A2A is least weak, this stack is strongest — G1 and G6 land on invariants that are proved, and four of the six proved cells in the whole table are the one governance group. Where A2A is empty, this stack is also mostly empty. That is not a marketing result. It says the delegation-and-audit half of agent governance has been done here and the deliberation half has been specified and not built — and that no shipping protocol has either.
Fetches /.well-known/agent-card.json
from a domain and reads it against the v1.0 shape. This runs
entirely in your browser — nothing is sent to this server,
and nothing is logged. Most agents will refuse the
cross-origin read; when that happens you get the exact
curl to run instead, not a spinner.
Limit: a browser cannot read a cross-origin URL that does not
send Access-Control-Allow-Origin. That is the
common case, so the common result of this tool is a refusal
that tells you what to run in a terminal.
It does verify an ES256
signature, in your browser, canonicalising the card per RFC 8785
and fetching the key the signature's own
jku names. This paragraph used to say
it could not, and that a reader in a page could not honestly claim
to — which was simply wrong, and was corrected when this site
signed its own card and had to read its own limit back.
A verified signature proves the card has not changed since it was
signed. It does not prove who signed it, and when the key
is served by the same origin as the card the result says so:
that is a tick for TLS, not for the signature.
A2A v1.0 requires supportedInterfaces[] on every
Agent Card — there is no spec-valid way to say “discoverable but not
serving”. For 19 days this surface declared
https://a2atraffic.com/a2a/json and served nothing there, so the
card stayed a draft at a draft path and the discovery path returned
404 on purpose.
That interface answers now, so the card is published at the discovery path. It was measured on 2026-09-05, against the deployed site rather than against the intention to deploy it:
// the interface base URL — not an A2A method, a human-readable descriptor curl -sS -o /dev/null -w '%{http_code} %{content_type}' https://a2atraffic.com/a2a/json 200 application/json // ListTasks — an empty page, because the list is empty curl -sS https://a2atraffic.com/a2a/json/tasks 200 application/a2a+json {"tasks": [], "nextPageToken": "", "pageSize": 50, "totalSize": 0} // GetTask — no id has ever been issued, in the google.rpc.Status shape §11.6 requires curl -sS https://a2atraffic.com/a2a/json/tasks/task-123 404 application/a2a+json error.status NOT_FOUND, details[0].reason TASK_NOT_FOUND, domain a2a-protocol.org // SendStreamingMessage — refused by the capability the card declares false curl -sS -X POST https://a2atraffic.com/a2a/json/message:stream 400 application/a2a+json UNSUPPORTED_OPERATION // SendMessage — an example the card advertises, answered out of records/gap-matrix.json curl -sS -X POST https://a2atraffic.com/a2a/json/message:send -H 'content-type: application/a2a+json' -d '{"message":{"messageId":"1","role":"ROLE_USER","parts":[{"text":"Score MCP against the governance taxonomy."}]}}' 200 application/a2a+json role ROLE_AGENT, skill gap-matrix, and the answer carries the preprint caveat with it
What it does not do, stated where the claim is made. It holds no state, so nothing it says can depend on anything you said before. It has no model. Requests reach a skill by keyword match, not by understanding, and an unmatched request says so and lists what it can answer rather than guessing. It answers only out of /records/*.json — the same published records this page is generated from, read at request time over this origin's own asset store, so the agent and the page cannot disagree. The card IS signed (ES256, A2A §8.4, key at /.well-known/jwks.json) — but the verifying key is published on the same domain as the card, so the signature proves the card has not changed since signing, not who signed it. Anyone able to serve you a forged card could serve a forged key beside it. TLS carries the domain binding; the signature is not a second opinion about the same channel.
The agent holds no state, so it creates no Tasks: SendMessage answers with a Message, the arm of SendMessageResponse's oneof that promises nothing retrievable. ListTasks returns an empty page because the list IS empty, and GetTask returns TaskNotFoundError because no id has ever been issued. Those are true answers, not stubs. The four methods the card marks unsupported are
refused by name, each citing the capability that refuses it:
SendStreamingMessage → UnsupportedOperationError · SubscribeToTask → UnsupportedOperationError · CreateTaskPushNotificationConfig → PushNotificationNotSupportedError · GetExtendedAgentCard → ExtendedAgentCardNotConfiguredError.
The retraction stays.
An earlier draft of this section promised the discovery path returned
404 and invited you to check. The inspector
below — written for this page, pointed at this domain as its own first
test — came back
200 text/html; charset=utf-8
(2026-08-17, before this build was deployed, the site's own index.html, served in full — 77,879 bytes). The fix was a root
404.html; re-measured
404 text/html; charset=utf-8
on 2026-08-17, immediately after deploying commit fd387b4
measured.
It was never this domain's alone: OPEN 2026-08-17, measured on 4 spot-checked siblings: runefort.com 200 (35,111 B) · fleetprompt.com 200 (41,975 B) · computedriven.com 200 (164,656 B) · specprompt.com 200 (38,795 B). Widened to 24 affected domains before the fix went out.
CLOSED 2026-08-17. Found here, fixed everywhere: 24 domains shipped a root 404.html and all 24 re-measured 404 — agentelic, agentromatic, bendscript, computedriven, delegatic, deliberatic, fleetprompt, geofleetic, graphonomous, opensentience, runefort, specprompt, ticktickclock, webhost.systems, ampersandboxdesign, wrand.cc, academy, pulse, weave, workbench, traaviis, code, trvm, wrl. docs.ampersandboxdesign.com and prism.opensentience.org already answered 404 and were left alone.
A page that shows only the number that flatters it is not showing the
retraction, and the fault is only checkable against what repaired it.
It is signed. A2A v1.0 §8.4 binds a card to a domain with
a detached JWS over the card canonicalised by
RFC 8785, with
signatures[] itself excluded from what is
signed. This one is ES256, signed
2026-09-05, over a canonical payload whose SHA-256 is
e7612d215a8f18cf…. The
verifying key is published at
/.well-known/jwks.json, which is
the jku in the signature's own protected
header, and its kid is the key's RFC 7638
thumbprint rather than a name — a name can be reused after a rotation and
point at a different key.
What the signature does not prove. It proves this card
was signed by whoever holds that key and has not changed since. It does
not prove who that is: the key is published on this domain, so anyone who
could serve you a forged card could serve you a forged key beside it. That
is the ordinary limit of jku-on-the-same-origin
discovery, and TLS is what is actually carrying the domain binding. A
signature is not a second opinion about the same channel.
So are the records underneath it. A signed card that
points at unsigned evidence moves the problem rather than solving it, so
all 7 published records —
every file this page is generated from — carry their own detached
signature under the same key, listed at
/.well-known/records-signatures.json,
which is itself signed so an entry cannot be quietly removed. Each entry
also states the plain SHA-256 of the bytes served, so the cheap check needs
sha256sum and nothing else. Two files are
deliberately outside it: the manifest, which carries its own signature, and
the public key, because a key vouching for itself adds nothing — whoever
could swap it could swap a signature over it.
The build never signs — ECDSA is randomised, so a build that signed would not be byte-identical to the one before it. The signature is a committed input and the build only verifies it, refusing to publish when the card has changed since it was signed. A stale signature is worse than none: it claims authenticity over content that has since moved.
{
"name": "a2a-traffic-observatory",
"description": "Publishes what the A2A protocol specifies, what it structurally cannot express, and what this surface has witnessed. Read-only. Observes; does not orchestrate.",
"supportedInterfaces": [
{
"url": "https://a2atraffic.com/a2a/json",
"protocolBinding": "HTTP+JSON",
"protocolVersion": "1.0"
}
],
"provider": {
"organization": "ComputeDriven",
"url": "https://computedriven.com"
},
"version": "0.2.0",
"documentationUrl": "https://a2atraffic.com/#protocol",
"capabilities": {
"streaming": false,
"pushNotifications": false,
"extendedAgentCard": false
},
"defaultInputModes": [
"text/plain"
],
"defaultOutputModes": [
"application/json",
"text/plain"
],
"skills": [
{
"id": "gap-matrix",
"name": "Governance gap matrix",
"description": "Returns the six-dimension governance assessment (G1 membership, G2 deliberation, G3 voting, G4 dissent preservation, G5 human escalation, G6 audit and replay) for a named agent-interoperability protocol, with the source citation and the coverage score.",
"tags": [
"governance",
"a2a",
"mcp",
"acp",
"assessment"
],
"examples": [
"What can A2A not express about membership?",
"Score MCP against the governance taxonomy."
]
},
{
"id": "protocol-reference",
"name": "A2A v1.0 reference",
"description": "Returns verified facts about the A2A protocol: the discovery path, the three protocol bindings, the nine task states, the v1.0 method names, and the v0.3 to v1.0 migration deltas. Every entry carries the primary source it was derived from.",
"tags": [
"a2a",
"reference",
"migration",
"v1.0"
],
"examples": [
"What is the well-known path for an Agent Card?",
"What replaced preferredTransport in v1.0?"
]
}
],
"signatures": [
{
"protected": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiI5RkpTVEVHZ2NPMmRmd19KV196Q3h5cGpzc3dQNzJwOFJuWERhdGFSQWFFIiwiamt1IjoiaHR0cHM6Ly9hMmF0cmFmZmljLmNvbS8ud2VsbC1rbm93bi9qd2tzLmpzb24ifQ",
"signature": "VJCo6RQ1MANP0r28859dZ_13LbKburD6m59t0WAB1Xwr6kzrxA0g-qenZTooQm3tJAVRu0PbfkQ7k8bpF6W22Q"
}
]
}
Served at /.well-known/agent-card.json,
emitted from records/agent-card.draft.json
with its annotation keys stripped. The interface it declares is
https://a2atraffic.com/a2a/json
(HTTP+JSON,
protocol version 1.0).
Every fact below was read from the specification or from
a2a.proto on
2026-08-17, not
copied from a summary. Where a field is marked required, that
is google.api.field_behavior on the
proto field, read directly.
// the standard path — RFC 8615 GET https://{agent-server-domain}/.well-known/agent-card.json // NOT this. An earlier-draft path. It is the one this site shipped until 2026-08-17. GET https://{agent-server-domain}/.well-known/agent.json
| Mechanism | How it works |
|---|---|
| Well-Known URI | The agent hosts its card at the standardised path. Public or domain-controlled discovery. |
| Curated registries | A catalog service holds cards and answers queries by skill or tag. The spec does not yet prescribe a registry API. |
| Direct configuration | Hardcoded details, config files, environment variables. For known, static relationships. |
If you built against v0.3, this is the migration. It is not a rename pass — the Agent Card, the Part object and the stream events all changed shape.
| Area | v0.3 | v1.0 |
|---|---|---|
| Agent Card | url, preferredTransport, additionalInterfaces, protocolVersion at top level |
supportedInterfaces[] — each entry carries url, protocolBinding, protocolVersion, tenantOne ordered list, first entry preferred. Protocol version is now per-interface, so an agent can serve 0.3 and 1.0 side by side. |
| Task state | "working" |
"TASK_STATE_WORKING"All states became SCREAMING_SNAKE_CASE with a TASK_STATE_ prefix. Nine values. |
| Message role | "user" / "agent" |
"ROLE_USER" / "ROLE_AGENT"Same normalisation. |
| Part | separate TextPart / FilePart / DataPart with a kind discriminator |
one Part with oneof content: text, raw, url, dataDiscriminate by member presence — 'text' in part — not by part.kind. mimeType became mediaType; filename applies to all kinds. |
| Stream events | { kind: "status-update", …, final: true } |
{ statusUpdate: { … } } / { artifactUpdate: { … } }Wrapper-based discrimination. The final boolean is gone; closing the stream signals completion. |
| HTTP+JSON paths | POST /v1/message:send |
POST /message:sendThe /v1 prefix was dropped; version lives on the interface. |
| Pagination | page / perPage |
pageSize / pageToken / nextPageToken, with totalSize on the responsePage-token based. ListTasksRequest carries page_size and page_token; ListTasksResponse carries next_page_token, page_size and total_size. Corrected 2026-09-05 — see drift_2026_09_05. |
| Errors | RFC 9457 application/problem+json |
google.rpc.Status under an `error` key, application/a2a+jsonErrors carry a details[] whose first entry is a google.rpc.ErrorInfo with reason in UPPER_SNAKE_CASE and domain a2a-protocol.org, beside error.code (the HTTP status) and error.status (the gRPC status name). Required because several A2A errors share one HTTP status. Media type corrected 2026-09-05 — see drift_2026_09_05. |
| OAuth | implicit and password flows |
device code (RFC 8628); pkce_required on authorization codeThe two deprecated flows were removed. |
| Agent Card trust | unsigned |
signatures[] — JWS (RFC 7515) over JCS-canonicalised JSON (RFC 8785)A card can now be cryptographically bound to a domain. |
| Multi-tenancy | — |
tenant on every request and on AgentInterfaceRoute to one agent among many behind a shared endpoint. |
| Capabilities | supportsAuthenticatedExtendedCard at top level |
capabilities.extendedAgentCardMoved inside the capability set. |
9 states — 4 terminal, 2 interrupted, 2 open, 1 unknown. An interrupted task is waiting on somebody, which is the only place a human can currently be reached — see G5 for why that is not the same as escalation.
| v1.0 | was (v0.3) | What it does |
|---|---|---|
SendMessage |
message/send |
Send a message; may create a task. |
SendStreamingMessage |
message/stream |
Same, with a stream of updates back. |
GetTask |
tasks/get |
Read one task. |
ListTasks |
— (new in 1.0) |
Enumerate tasks. Cursor-paginated. |
CancelTask |
tasks/cancel |
Request cancellation. |
SubscribeToTask |
tasks/resubscribe |
Re-attach to a task's event stream. |
GetExtendedAgentCard |
agent/getAuthenticatedExtendedCard |
Fetch the authenticated extended card. |
CreateTaskPushNotificationConfig |
tasks/pushNotificationConfig/set |
Register a push target for a task. |
| protocolBinding | Name | Notes |
|---|---|---|
JSONRPC |
JSON-RPC 2.0 | The original binding. Methods are called by name over a single endpoint. |
GRPC |
gRPC | Address form is hostname:port, e.g. grpc.example.com:443. |
HTTP+JSON |
HTTP+JSON / REST | Custom-verb paths, e.g. POST /message:send. The /v1 prefix was dropped in 1.0. |
'This is an open form string... The core ones officially supported are JSONRPC, GRPC and HTTP+JSON.' Three is the count of officially supported bindings, not a closed set.
Agent to tool. An agent reaches a server to call a tool or read a resource.
Agent to agent. Two independent agents discover each other, delegate a task, and exchange artifacts.
They are not competitors and a system usually runs both: A2A across the agent graph, MCP down from each agent to its tools. Both are now Linux Foundation projects. The A2A documentation states the two are 'highly complementary' and 'designed to work together'.
The spec identifies itself by date — the version string is "2026-07-28". The official C# SDK calls its implementation v2.0 and much of the coverage calls it MCP 2; the specification does not. It is billed as the largest revision of the protocol since it launched.
Nothing for agent-to-agent communication, and nothing for governance — no membership, deliberation, voting, dissent preservation, human escalation or tamper-evident replay. It sharpens the boundary rather than blurring it. Both protocols now have a task concept, so 'A2A has tasks, MCP does not' is no longer the distinction — the distinction is the axis: MCP went further down toward tools and infrastructure, A2A stays across peers. And a stateless MCP makes the governance question louder, not quieter: a protocol that deliberately holds no session state is not the layer that will remember who was permitted to do what.
the 2026-07-28 specification announcement · The gap matrix above scores MCP v1.1, because that is what the paper assessed and the paper predates this release by 28 days. It has not been re-scored here. See the version-drift note.
Created by Google, announced April 2025, donated to the Linux Foundation June 2025. It is maintained by a Technical Steering Committee under the Linux Foundation.
Reported August 2026: Google is transferring A2A into the Agentic AI Foundation, the Linux Foundation entity formed 2025-12-09 that already holds MCP, goose and AGENTS.md. Stated here as reported, not as verified — the primary source cited for it returned HTTP 403 and could not be read. reported
Technical Steering Committee: AWS · Cisco · Google · IBM Research · Microsoft · Salesforce · SAP · ServiceNow
Adoption, as reported by the Linux Foundation on 2026-04-09: 150+ organizations, 22,000+ GitHub stars, SDKs in Python, JavaScript, Java, Go, .NET. press release
These are design notes for a product that does not exist. Every card below is proposed. A card flips to implemented when a receipt exists in the witness log and not before — which is the rule that would have stopped the previous version of this page.
Follow one task across agent hops — client initiation, delegation, artifact, completion — as a single chain rather than four unrelated POSTs.
proposed
Topology built from Agent Cards: who has been discovered, what they declare, whether their card is signed, and what changed since it was last read.
proposed
State transitions across the nine TASK_STATE values, including how often a task ends interrupted and never returns.
proposed
The unified v1.0 Part — text, raw, url, data — read by member presence, with mediaType and filename surfaced.
proposed
Tool calls beneath an agent and messages between agents on the same clock. Two protocols, one execution graph.
proposed
SSE streams for SendStreamingMessage: throughput, dropped connections, and the fact that v1.0 removed the final flag so closure is the signal.
proposed
The only place a traffic number on this site may come from.
There is no collector. This surface serves static files; nothing routes A2A traffic through it and no agent has been instrumented to report to it. Zero is not a placeholder for a number we have not looked up — it is the measurement.
A receipt. One witnessed A2A message, recorded with its task id, context id, the two endpoints, the protocol binding, and a hash. Until a receipt exists in this file, the canvas on this page is a simulation and says so, and no capability card may flip from proposed to implemented.
Declared now, so the empty state is a schema and not a shrug.
| Field | Value |
|---|---|
id | sha256 of the canonicalised record |
witnessed_at | ISO 8601 UTC, millisecond precision |
method | one of the v1.0 method names in protocol.json |
protocol_binding | JSONRPC | GRPC | HTTP+JSON |
task_id | string |
context_id | string |
from | agent card origin |
to | agent card origin |
task_state | one of the TASK_STATE_* values in protocol.json |
card_signature_verified | boolean | null — null when the card carried no signatures[] |
This surface observes the A2A protocol, not your traffic. It publishes what the specification says, re-derived from primary sources on 2026-08-17; what a governance assessment finds the protocol structurally cannot express; and a count of the A2A messages it has itself witnessed, which is zero.
records/protocol.json was derived from a2a-protocol.org/latest and a2aproject/A2A@main/specification/a2a.proto. records/gap-matrix.json was re-read from arxiv.org/html/2606.31498v1 Table II and Table III. records/witness.json is zero because there is no collector.
There is no product. Nothing here proxies, captures, traces or stores A2A traffic, and no agent has been instrumented to report to this domain. The capability cards in the design section are proposed and labelled; none is implemented. The gap matrix is one preprint's reading of one version of five protocols, not our re-scoring of them, and the preprint is not peer-reviewed.
There is no witness and the page says so. This surface specifies an observatory; it collects nothing. The only thing on it that RUNS is the Agent Card inspector, which is client-side and is labelled live_local where it appears. Everything else is a reading of published documents, which is exactly what a spec rung permits.
Retract out loud, in the same place it was published. These claims were served from this domain until today.
| Deferred | Blocked on |
|---|---|
compose_ledger blocked | Blocked on the [TRAVIS] shared-facts ruling and on a COMPOSE record existing. See records/witness.json compose_seam. |
wrl_block blocked | Blocked on the grammar freeze, same dependency as every other surface's WRL block. |
replay_hero blocked | The canvas graduates from labelled simulation to replay of a real receipt when a receipt exists. There are none. |
So far: the map. When there is traffic, the number above changes and the animation stops being a decoration. Until then, this page is a reading of published documents — which is a real thing to be, and a checkable one.