-
Notifications
You must be signed in to change notification settings - Fork 19
add agents page #2309
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add agents page #2309
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -100,6 +100,20 @@ export const integrateSidebarTopic = { | |||||
| label: "Protocol Acceleration", | ||||||
| link: "/docs/integrate/omnigraph/protocol-acceleration", | ||||||
| }, | ||||||
| { | ||||||
| label: "Complementary protocols", | ||||||
| collapsed: false, | ||||||
|
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @sevenzing Yes I think best to collapse by default 👍 |
||||||
| items: [ | ||||||
| { | ||||||
| label: "Agents / ERC-8004", | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Does that fit, or does it make the value too long for display in the nav bar? |
||||||
| link: "/docs/integrate/omnigraph/complementary/erc8004", | ||||||
| badge: { | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think best to remove any badge here. The idea that it's coming soon just needs to be on the page itself. |
||||||
| text: "SOON", | ||||||
| variant: "note", | ||||||
| }, | ||||||
| }, | ||||||
| ], | ||||||
| }, | ||||||
| { | ||||||
| label: "Examples", | ||||||
| collapsed: true, | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,187 @@ | ||||||||||||||||||||||||
| --- | ||||||||||||||||||||||||
| title: ERC-8004 (AI Agent Discovery) | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I assume we should rename this page from
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
| description: Preview of ERC-8004 AI agent discovery in the ENS Omnigraph API — find agents associated with an ENS name, look up the names behind an agent, and read agent service profiles. | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
| --- | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| import { Aside, LinkCard } from "@astrojs/starlight/components"; | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| <Aside type="caution" title="Preview — coming soon"> | ||||||||||||||||||||||||
| ERC-8004 support in the ENS Omnigraph API is still being built. The shapes on this page are a | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
| preview and may change before release. Expected to be available **before July 2026**. | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
| </Aside> | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| [ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) is a new standard that gives an onchain AI agent a portable identity (an NFT in an Identity Registry) plus an **agent card** describing what it does and how to reach it. On the ENS side, [ENSIP-25](https://docs.ens.domains/ensip/25) and [ENSIP-26](https://docs.ens.domains/ensip/26) are ENS standards that let an **ENS name** publish agent discovery records and **attest** which ERC-8004 agent(s) it controls. | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| The ENS Omnigraph API will bring both sides together: start from an **ENS name** or from an **ERC-8004 agent**, and get the agent card, reputation, and the attested name-to-agent relationship in one query, with no contract calls or IPFS fetching on your side. | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ## Why this is complementary to ENS | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| <Aside type="note" title="A fast-follower opportunity for ENS"> | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
| AI agent discovery is a new area where ENS names can act as the human-readable, portable | ||||||||||||||||||||||||
| identity layer for autonomous agents. **ERC-8004 is one possible complementary standard** for this — it | ||||||||||||||||||||||||
| is still early and conceptual. | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ENS is already exploring this space: **ENSIP-25 and ENSIP-26** define how ENS names relate to onchain | ||||||||||||||||||||||||
| agent identities and discovery records. ENS Omnigraph API lets ENS be a **fast follower** — if ERC-8004 or related protocols become popular, | ||||||||||||||||||||||||
| support can be added as a plugin and accessed through the same unified API. | ||||||||||||||||||||||||
|
Comment on lines
+24
to
+26
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| </Aside> | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ## Plugin | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ERC-8004 data is **not** part of core ENS. The fields on this page come from `erc8004` [ENSNode plugin](/docs/integrate/integration-options/ensnode-plugins): | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| - Each ENSNode operator chooses which plugins to activate on their instance. | ||||||||||||||||||||||||
| - The ERC-8004 fields described here resolve to non-null values when ENSNode has `erc8004` plugin. | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| <LinkCard | ||||||||||||||||||||||||
| title="ENSNode Plugins" | ||||||||||||||||||||||||
| description="How operators customize which onchain data an ENSNode instance indexes and exposes." | ||||||||||||||||||||||||
| href="/docs/integrate/integration-options/ensnode-plugins" | ||||||||||||||||||||||||
| /> | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ## Who this feature is for | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| - **AI agent developers** — you publish an **agent** under ERC-8004 and want a human-readable ENS **name** to be shown in ENS related services. | ||||||||||||||||||||||||
| - **AI Apps and services** — you want to discover **agents** and show trustworthy identity, reputation, endpoints and connection to ENS. | ||||||||||||||||||||||||
| - **Apps with ENS integration** - you want to include information about ENSIP-25 **agent** into profile card of a **name** or show all **agents** of an **address**. | ||||||||||||||||||||||||
|
Comment on lines
+45
to
+47
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ## Find ERC-8004 agents associated with an ENS name | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It seems we should create a H2 (Heading 2) for "Example Queries" and then change the heading for all the example queries from H2 to H3. |
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Most apps already have an ENS name. The agent data lives under `domain.resolve.profile.erc8004agents` — this is **interpreted ENS Resolution** (see [ENS Resolution](/docs/integrate/omnigraph/ens-resolution)): the ENS Omnigraph API reads the underlying ENSIP-25/26 records and returns clean, structured fields instead of raw text records. | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "Most apps already have an ENS name." I don't understand the idea we are trying to communicate here? This doesn't sound right.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is there a more specific anchor link we could use for deeper-linking to background information about "interpreted" resolution? Just linking to the ENS resolution page overall isn't so good because there's so much info there.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should cite here how if you want to query the raw records associated with ENSIP-25/26 that the ENS Omnigraph API supports that too through |
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Each entry in `attestations` is one ENSIP-25 attestation, with its `verification` status and the indexed ERC-8004 agent nested inline. By default `attestations` returns only `VERIFIED` attestations; pass `where` to include the partial ones. | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ```graphql ins={8-29} | ||||||||||||||||||||||||
| query AgentsForName { | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It seems to me it would be more interesting to change this into Then, the data requested in the query could include the ENS primary name of that address, the profile of that primary name, and info about any ERC-8004 agents that might be associated with the address. |
||||||||||||||||||||||||
| domain(by: { name: "myagent.eth" }) { | ||||||||||||||||||||||||
| canonical { | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It doesn't seem so important to include this |
||||||||||||||||||||||||
| name { beautified } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| resolve { | ||||||||||||||||||||||||
| profile { | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We're missing a key part of the story here. Please see my feedback above on the "Who this feature is for" section. We aren't building this feature for people who only want to query ERC-8004. There's no point for us to do that. Other APIs for that already exist. What makes our case special and gives it value is because it COMBINES ENS with ERC-8004. The example queries here are all ERC-8004 only. This needs to change. Each example query needs to be updated so that it combines ENS with ERC-8004 in a way that feels practical and valuable and demonstrates a real use case. |
||||||||||||||||||||||||
| erc8004agents { | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Seems we should rename this? Here's a few possible ideas:
Suggested change
Suggested change
My overall preference would be for the value we choose here to be exactly the same as the ENSNode plugin name. Also, it would be helpful if you added some comments in the code here. For example I understand this field is actually exposing an interpreted resolution of ENSIP-25 / 26 values? It would be helpful to make it more clear exactly which fields would be exposed here as interpreted resolution outputs from these ENSIPs on this field. |
||||||||||||||||||||||||
| context | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This context field seems curious to me. What's the idea here? |
||||||||||||||||||||||||
| attestations(where: { verification: [VERIFIED, ONLY_ENS, ONLY_AGENT] }) { | ||||||||||||||||||||||||
| verification # ONLY_ENS | ONLY_AGENT | VERIFIED | ||||||||||||||||||||||||
| identityRegistry { chainId address } | ||||||||||||||||||||||||
| agentId | ||||||||||||||||||||||||
| erc8004agent { | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is there a special reason why this is called |
||||||||||||||||||||||||
| agentId | ||||||||||||||||||||||||
| chain { name } | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could this also include a |
||||||||||||||||||||||||
| card { | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where's fields for things like the services exposed by the agent, such as MCP or other stuff? |
||||||||||||||||||||||||
| name | ||||||||||||||||||||||||
| description | ||||||||||||||||||||||||
| x402Support | ||||||||||||||||||||||||
| supportedTrust | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| reputation { | ||||||||||||||||||||||||
| feedbackCount | ||||||||||||||||||||||||
| averageScore | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| - **Gate on `verification`** — since ENSIP-25 is **bidirectional** relationship, an ENS name can attest to an agent, and an agent can reference an ENS name. This enum covers three cases: | ||||||||||||||||||||||||
| - **`VERIFIED`** — both sides agree: the ENS name attests the agent, and the agent references the name. | ||||||||||||||||||||||||
| - **`ONLY_ENS`** — the ENS name attests the agent, but the agent does not reference the name back. | ||||||||||||||||||||||||
| - **`ONLY_AGENT`** — the agent references the name, but the ENS name does not attest the agent. | ||||||||||||||||||||||||
| - **A name may have several attestations** — in theory name can have several agents so `attestations` is a list. Iterate and pick what you need. | ||||||||||||||||||||||||
| - **Everything in one round trip** — the agent card and reputation come back nested under each attestation; no second request. | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ## Look up the ENS names associated with an ERC-8004 agent | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| When you already have an agent (from a registry, a wallet, or search), query it directly. | ||||||||||||||||||||||||
| The reverse view `domains.attestations` returns the ENS names that attest to this agent. | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ```graphql | ||||||||||||||||||||||||
| query AgentById { | ||||||||||||||||||||||||
| erc8004agent(by: { | ||||||||||||||||||||||||
| chainName: ETHEREUM, | ||||||||||||||||||||||||
| agentId: "34820" | ||||||||||||||||||||||||
| }) { | ||||||||||||||||||||||||
| agentId | ||||||||||||||||||||||||
| owner { address } | ||||||||||||||||||||||||
| card { | ||||||||||||||||||||||||
| name | ||||||||||||||||||||||||
| description | ||||||||||||||||||||||||
| supportedTrust | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| reputation { | ||||||||||||||||||||||||
| feedbackCount | ||||||||||||||||||||||||
| averageScore | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| domains { | ||||||||||||||||||||||||
| attestations(where: { verification: [VERIFIED, ONLY_ENS, ONLY_AGENT] }) { | ||||||||||||||||||||||||
| verification | ||||||||||||||||||||||||
| context | ||||||||||||||||||||||||
| name { beautified } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ## Search for ERC-8004 agents by indexed metadata | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Find agents by chain, card name, or ENS name. | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ```graphql | ||||||||||||||||||||||||
| query FindErc8004Agents { | ||||||||||||||||||||||||
| erc8004agents( | ||||||||||||||||||||||||
| first: 20 | ||||||||||||||||||||||||
| where: { | ||||||||||||||||||||||||
| chainName: { eq: ETHEREUM } | ||||||||||||||||||||||||
| cardName: { contains: "trading" } | ||||||||||||||||||||||||
| ensName: { contains: "eth" } | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm. What's the big idea here? Suggest to refine it to be more clear |
||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| ) { | ||||||||||||||||||||||||
| totalCount | ||||||||||||||||||||||||
| edges { | ||||||||||||||||||||||||
| node { | ||||||||||||||||||||||||
| agentId | ||||||||||||||||||||||||
| card { name description } | ||||||||||||||||||||||||
| domains { | ||||||||||||||||||||||||
| attestations { verification name { beautified } } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ## Read an ERC-8004 agent service profile | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Read the endpoint you want to talk to from the agent card. `attestations` returns only `VERIFIED` attestations by default, so no `where` filter is needed here. `protocol` is an `AgentServiceProtocol` enum (`MCP`, `A2A`, `X402`, `WEB`, ...), and you can pass `protocols` to fetch only the services you care about. | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| ```graphql | ||||||||||||||||||||||||
| query AgentServices { | ||||||||||||||||||||||||
| domain(by: { name: "myagent.eth" }) { | ||||||||||||||||||||||||
| resolve { | ||||||||||||||||||||||||
| profile { | ||||||||||||||||||||||||
| erc8004agents { | ||||||||||||||||||||||||
| attestations { | ||||||||||||||||||||||||
| verification | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Seems no value to include this field in the response then? |
||||||||||||||||||||||||
| erc8004agent { | ||||||||||||||||||||||||
| card { | ||||||||||||||||||||||||
| services(protocols: [MCP, A2A]) { | ||||||||||||||||||||||||
| protocol | ||||||||||||||||||||||||
| endpoint | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Since only `VERIFIED` attestations are returned by default, pass the `protocols` you need (for example `[MCP]`) and use the returned `endpoint`. | ||||||||||||||||||||||||

There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Other nav entries are capitalizing each word