agent-feed
v0 protocol / shipped 2026-04-27 / MIT

The agentic web's git log. And the place to see how it disagrees with itself.

Agent endpoints are described across MCP server cards, A2A registries, agents.json, llms.txt, and a half-dozen GitHub catalogs. They drift. They disagree. When an API mutates underneath an agent, the agent breaks silently. There is no robots.txt for telling agents the world has moved. This is that announcement layer — plus a public observatory of the existing ecosystem's disagreements.

composes with MCP A2A ANP OpenAPI · not a competitor
observations indexed
2,787
across 3 source adapters
mcp-registry
500
servers · refreshed 12m ago
a2a-registry
50
agents · refreshed 12m ago
cross-source divergences
1
and counting
data: /api/corpus/counts · respects robots.txt · schemas-only · opt-out at /api/corpus/optout
§ 01 — DOCTRINE

Two artifacts, two URLs.

spec → §3 artifacts
SNAPSHOT
/.well-known/agent-card.json

The current state. What this origin is, right now. Versioned, signed, fetched on first contact. Photograph.

name · version · protocolVersion · endpoints[] · did:web · sig (Ed25519)
STREAM
/.well-known/agent-feed.xml

The history. Append-only. Schema migrations, deprecations, canonical endpoint moves — every change announced, every entry signed. Testimony.

entry/migrated · entry/deprecated · entry/moved · since · sig (Ed25519)

Snapshot ≠ stream. The agent-card answers what is true now. The feed answers how did we get here, and what's ahead. Conflating them is why migrations break agents silently. Both are signed; both are required.

§ 02 — COMPOSITION

The change-history layer beneath what you already run.

agent ↔ agent
MCP · A2A · ANP
how agents talk
agent ↔ api
OpenAPI · agents.json
how agents act
agent ↔ context
llms.txt
how agents read
agent ↔ change
agent-feed
how the world announces it moved

MCP and A2A solved how agents talk. Nothing solved how the world announces it changed. agent-feed sits beneath all of them — protocol-agnostic, bring-your-own-schema. We are not trying to be the agentic web. The web doesn't live in DNS; we don't either.

§ 03 — FOR ORIGIN OPERATORS

From "what's this random tool" to publishing, in three commands.

Run an MCP server, an A2A agent, or any service with a machine-readable surface? See how the public world describes you. Make your description authoritative.

01 · paste
Drop your origin
https://example.com or a GitHub repo. The dashboard fans out across every source we crawl.
02 · review
See what the world says
Per-source observation cards with confidence pills. Disagreements highlighted. Every value is sourced. None of it is signed.
03 · sign
Draft, signed for you
We pre-fill an entry from the highest-confidence observation. bunx agent-feed sign with your did:web key.
04 · publish
Drop it at /.well-known/
One file. agent-feed.xml. From the next crawl on, your origin is authoritative.
# after step 02 — the dashboard hands you this
$ bunx agent-feed init --from-corpus example.com
# reviewing 3 observations · drafting agent-feed.xml
$ bunx agent-feed sign --key did:web:example.com#k0
$ cp agent-feed.xml ./public/.well-known/
# done. on next crawl, all unsigned observations defer to you.
§ 04 — FOR AGENT OPERATORS

Your agent hit a 404. Now what?

Schema drift breaks agents silently. The dashboard answers a single question fast: does the world agree about this endpoint, and is anyone authoritative?

  • Stale registry? See last-crawled timestamps per source.
  • No signed feed? File an issue with the dashboard URL — the publisher sees their own divergence.
  • Endpoint moved? If signed, you'll see moved entries with since timestamps.
  • Pin it. Subscribe to the feed; CI fails on breaking entries before your agent does.
# in your agent's CI
$ bunx agent-feed verify https://api.example.com
origin          api.example.com
signed          true  // did:web:api.example.com
last-entry      2026-04-26T11:02:00Z
breaking-since  your pin (2026-03-01):
  - /v1/orders        deprecated 2026-04-12
  + /v2/orders        canonical  2026-04-12

# exit 1 — your agent will break. fix the pin.
§ 05 — IMPLEMENTATION

What's shipped, today.

v0 · 2026-04-28
§ 06 — SKEPTICAL FAQ

Push back. We push back at ourselves first.

Why not just use MCP Server Cards?
Because snapshots ≠ streams. A server card answers what is true now. It can't tell a depending agent that /v1/orders was deprecated three weeks ago, or that the canonical endpoint moved. That's a stream — append-only, signed, with since timestamps. The MCP SEP we filed is precisely about preserving this split.
Are you scraping my site?
We respect robots.txt. We pull schemas only — agent cards, A2A descriptors, registry entries, README catalogs that exist to be machine-read. No prose, no human pages. Opt out any origin at /api/corpus/optout; the entry disappears on the next crawl.
Is this trying to be the entire agentic web?
No. We're the change-history layer beneath the protocols you already run. Bring your own MCP / A2A / ANP / OpenAPI. The web doesn't live in DNS; we don't either. agent-feed is a layer, not a runtime.
Why should I sign feeds?
Because once one of your dependents is an agent, your silent migrations cost them money. Signed feeds are how you put your migration log on the record before anyone's CI catches the breakage. It's not a marketing surface — it's a contract.
Aren't observations and signed feeds the same kind of thing?
No, and we are doctrinal about this. Signed is testimony — first-party, cryptographically attested, did:web-rooted. Observed is a photograph — third-party, possibly stale, and always tagged UNSIGNED. The site never blurs them. Different kinds of facts, not a quality gradient.
Who's behind this?
Independent. MIT-licensed. The two architecture roundtables that produced the trust-plane separation are in the repo verbatim. No company, no funding, no signup. agent-feed.dev — not app.agent-feed.dev.