From 03f9d0e7bfa4b73da3ee7c7948598b0dd943b722 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Wed, 17 Jun 2026 17:18:56 +0300 Subject: [PATCH 1/6] add agents page --- .../starlight/sidebar-topics/integrate.ts | 8 + .../docs/docs/integrate/omnigraph/agents.mdx | 142 ++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx diff --git a/docs/ensnode.io/config/integrations/starlight/sidebar-topics/integrate.ts b/docs/ensnode.io/config/integrations/starlight/sidebar-topics/integrate.ts index 9585e195b..4069ccfc1 100644 --- a/docs/ensnode.io/config/integrations/starlight/sidebar-topics/integrate.ts +++ b/docs/ensnode.io/config/integrations/starlight/sidebar-topics/integrate.ts @@ -96,6 +96,14 @@ export const integrateSidebarTopic = { label: "ENS Resolution", link: "/docs/integrate/omnigraph/ens-resolution", }, + { + label: "Agents (ENSIP-25)", + link: "/docs/integrate/omnigraph/agents", + badge: { + text: "SOON", + variant: "note", + }, + }, { label: "Protocol Acceleration", link: "/docs/integrate/omnigraph/protocol-acceleration", diff --git a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx new file mode 100644 index 000000000..7da546086 --- /dev/null +++ b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx @@ -0,0 +1,142 @@ +--- +title: Agents (ENSIP-25) +description: Discover, verify, and connect to onchain AI agents through the Omnigraph — ENSIP-25/26 agent records and ERC-8004 identity unified in a single GraphQL query. +--- + +import { Aside } from "@astrojs/starlight/components"; + + + +[ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) gives every onchain AI agent a portable identity (an NFT in an [Identity Registry](https://etherscan.io/address/0x8004a169fb4a3325136eb29fa0ceb6d2e539a432)) plus an **agent card** describing what it does and how to reach it. [ENSIP-25](https://docs.ens.domains/ensip/25) and [ENSIP-26](https://docs.ens.domains/ensip/26) connect that identity to a human-readable **ENS name**: a name can publish agent discovery records and cryptographically attest which agent(s) it controls. + +The Omnigraph brings both sides together. Start from an **ENS name** or from an **agent**, and get the agent card, reputation, and a **verified** name ↔ agent link — in one query, with no contract calls or IPFS fetching on your side. + +## Start from a name + +Most apps already have an ENS name. Ask `domain.resolve.profile.agents` for the agents linked to that name. Each `link` is one ENSIP-25 attestation, with a `verified` flag (the name and the agent confirm each other) and the full indexed agent nested inline. + +```graphql +query AgentsForName { + domain(by: { name: "myagent.eth" }) { + canonical { + name { beautified } + } + resolve { + profile { + agents { + context # the agent-context record (ENSIP-26) + links { + verified # true only when name ↔ agent confirm each other (ENSIP-25) + agent { + agentId + chain { name } + card { + name + description + x402Support + supportedTrust + } + reputation { + feedbackCount + averageScore + } + } + } + } + } + } + } +} +``` + +- **`verified`** — gate on this before trusting a link. A name can list an agent without the agent confirming it (and vice versa); only `verified: true` means both sides agree. +- **A name may link to several agents** — `links` is a list, so iterate and pick what you need. +- **Everything in one round trip** — the agent card and reputation come back nested under each link; no second request to look the agent up. + +## Start from an agent + +When you already have an agent (from a registry, a wallet, or search), query it directly. `domains.links` is the reverse view: the ENS names that link to this agent, each with the same `verified` semantics. + +```graphql +query AgentById { + agent(by: { chain: ETHEREUM, identityRegistry: "0x8004…432", agentId: "31814" }) { + agentId + owner { address } + card { + name + description + supportedTrust + } + reputation { + feedbackCount + averageScore + } + domains { + links { + verified + name { beautified } + } + } + } +} +``` + +## Search for agents + +Find agents by chain, owner, or card name. + +```graphql +query FindAgents { + agents( + first: 20 + where: { + chain: { eq: ETHEREUM } + name: { contains: "trading" } + } + ) { + totalCount + edges { + node { + agentId + card { name description } + domains { + links { verified name { beautified } } + } + } + } + } +} +``` + +## Connect to an agent + +Once you have a `verified` link, read the endpoint you want to talk to from the agent card and connect. + +```graphql +query AgentEndpoint { + domain(by: { name: "myagent.eth" }) { + resolve { + profile { + agents { + links { + verified + agent { + card { + services { + protocol # MCP, A2A, X402, WEB, … + endpoint + } + } + } + } + } + } + } + } +} +``` + +Filter to `verified: true`, pick the service for the protocol you need (for example `MCP`), and use its `endpoint`. From 7875fdfe224c60ba53c314fd35337ec5c4f1482f Mon Sep 17 00:00:00 2001 From: sevenzing Date: Wed, 17 Jun 2026 20:15:43 +0300 Subject: [PATCH 2/6] apply fixes for agent docs page --- .../docs/docs/integrate/omnigraph/agents.mdx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx index 7da546086..82c14ea30 100644 --- a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx +++ b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx @@ -12,13 +12,13 @@ import { Aside } from "@astrojs/starlight/components"; [ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) gives every onchain AI agent a portable identity (an NFT in an [Identity Registry](https://etherscan.io/address/0x8004a169fb4a3325136eb29fa0ceb6d2e539a432)) plus an **agent card** describing what it does and how to reach it. [ENSIP-25](https://docs.ens.domains/ensip/25) and [ENSIP-26](https://docs.ens.domains/ensip/26) connect that identity to a human-readable **ENS name**: a name can publish agent discovery records and cryptographically attest which agent(s) it controls. -The Omnigraph brings both sides together. Start from an **ENS name** or from an **agent**, and get the agent card, reputation, and a **verified** name ↔ agent link — in one query, with no contract calls or IPFS fetching on your side. +The Omnigraph brings both sides together. Start from an **ENS name** or from an **agent**, and get the agent card, reputation, and a **verified** name-to-agent link — in one query, with no contract calls or IPFS fetching on your side. ## Start from a name Most apps already have an ENS name. Ask `domain.resolve.profile.agents` for the agents linked to that name. Each `link` is one ENSIP-25 attestation, with a `verified` flag (the name and the agent confirm each other) and the full indexed agent nested inline. -```graphql +```graphql ins={8-27} query AgentsForName { domain(by: { name: "myagent.eth" }) { canonical { @@ -27,9 +27,9 @@ query AgentsForName { resolve { profile { agents { - context # the agent-context record (ENSIP-26) + context links { - verified # true only when name ↔ agent confirm each other (ENSIP-25) + verified agent { agentId chain { name } @@ -111,9 +111,9 @@ query FindAgents { } ``` -## Connect to an agent +## Read the services of agent -Once you have a `verified` link, read the endpoint you want to talk to from the agent card and connect. +Once you have a `verified` link, read the endpoint you want to talk to from the agent card and connect. `protocol` is an `AgentServiceProtocol` enum (`MCP`, `A2A`, `X402`, `WEB`, …), and you can pass `protocols` to fetch only the services you care about. ```graphql query AgentEndpoint { @@ -125,8 +125,8 @@ query AgentEndpoint { verified agent { card { - services { - protocol # MCP, A2A, X402, WEB, … + services(protocols: [MCP, A2A]) { + protocol endpoint } } @@ -139,4 +139,4 @@ query AgentEndpoint { } ``` -Filter to `verified: true`, pick the service for the protocol you need (for example `MCP`), and use its `endpoint`. +Filter to `verified: true`, pass the `protocols` you need (for example `[MCP]`), and use the returned `endpoint`. From e5984ef340eae01b85a1be86c951ffb58aec3eae Mon Sep 17 00:00:00 2001 From: sevenzing Date: Thu, 18 Jun 2026 15:10:54 +0300 Subject: [PATCH 3/6] apply fixes for lightwalker review --- .../starlight/sidebar-topics/integrate.ts | 22 ++- .../docs/docs/integrate/omnigraph/agents.mdx | 142 ------------- .../omnigraph/complementary/erc8004.mdx | 187 ++++++++++++++++++ 3 files changed, 201 insertions(+), 150 deletions(-) delete mode 100644 docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx create mode 100644 docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx diff --git a/docs/ensnode.io/config/integrations/starlight/sidebar-topics/integrate.ts b/docs/ensnode.io/config/integrations/starlight/sidebar-topics/integrate.ts index 4069ccfc1..844165abf 100644 --- a/docs/ensnode.io/config/integrations/starlight/sidebar-topics/integrate.ts +++ b/docs/ensnode.io/config/integrations/starlight/sidebar-topics/integrate.ts @@ -96,18 +96,24 @@ export const integrateSidebarTopic = { label: "ENS Resolution", link: "/docs/integrate/omnigraph/ens-resolution", }, - { - label: "Agents (ENSIP-25)", - link: "/docs/integrate/omnigraph/agents", - badge: { - text: "SOON", - variant: "note", - }, - }, { label: "Protocol Acceleration", link: "/docs/integrate/omnigraph/protocol-acceleration", }, + { + label: "Complementary protocols", + collapsed: false, + items: [ + { + label: "Agents / ERC-8004", + link: "/docs/integrate/omnigraph/complementary/erc8004", + badge: { + text: "SOON", + variant: "note", + }, + }, + ], + }, { label: "Examples", collapsed: true, diff --git a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx deleted file mode 100644 index 82c14ea30..000000000 --- a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Agents (ENSIP-25) -description: Discover, verify, and connect to onchain AI agents through the Omnigraph — ENSIP-25/26 agent records and ERC-8004 identity unified in a single GraphQL query. ---- - -import { Aside } from "@astrojs/starlight/components"; - - - -[ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) gives every onchain AI agent a portable identity (an NFT in an [Identity Registry](https://etherscan.io/address/0x8004a169fb4a3325136eb29fa0ceb6d2e539a432)) plus an **agent card** describing what it does and how to reach it. [ENSIP-25](https://docs.ens.domains/ensip/25) and [ENSIP-26](https://docs.ens.domains/ensip/26) connect that identity to a human-readable **ENS name**: a name can publish agent discovery records and cryptographically attest which agent(s) it controls. - -The Omnigraph brings both sides together. Start from an **ENS name** or from an **agent**, and get the agent card, reputation, and a **verified** name-to-agent link — in one query, with no contract calls or IPFS fetching on your side. - -## Start from a name - -Most apps already have an ENS name. Ask `domain.resolve.profile.agents` for the agents linked to that name. Each `link` is one ENSIP-25 attestation, with a `verified` flag (the name and the agent confirm each other) and the full indexed agent nested inline. - -```graphql ins={8-27} -query AgentsForName { - domain(by: { name: "myagent.eth" }) { - canonical { - name { beautified } - } - resolve { - profile { - agents { - context - links { - verified - agent { - agentId - chain { name } - card { - name - description - x402Support - supportedTrust - } - reputation { - feedbackCount - averageScore - } - } - } - } - } - } - } -} -``` - -- **`verified`** — gate on this before trusting a link. A name can list an agent without the agent confirming it (and vice versa); only `verified: true` means both sides agree. -- **A name may link to several agents** — `links` is a list, so iterate and pick what you need. -- **Everything in one round trip** — the agent card and reputation come back nested under each link; no second request to look the agent up. - -## Start from an agent - -When you already have an agent (from a registry, a wallet, or search), query it directly. `domains.links` is the reverse view: the ENS names that link to this agent, each with the same `verified` semantics. - -```graphql -query AgentById { - agent(by: { chain: ETHEREUM, identityRegistry: "0x8004…432", agentId: "31814" }) { - agentId - owner { address } - card { - name - description - supportedTrust - } - reputation { - feedbackCount - averageScore - } - domains { - links { - verified - name { beautified } - } - } - } -} -``` - -## Search for agents - -Find agents by chain, owner, or card name. - -```graphql -query FindAgents { - agents( - first: 20 - where: { - chain: { eq: ETHEREUM } - name: { contains: "trading" } - } - ) { - totalCount - edges { - node { - agentId - card { name description } - domains { - links { verified name { beautified } } - } - } - } - } -} -``` - -## Read the services of agent - -Once you have a `verified` link, read the endpoint you want to talk to from the agent card and connect. `protocol` is an `AgentServiceProtocol` enum (`MCP`, `A2A`, `X402`, `WEB`, …), and you can pass `protocols` to fetch only the services you care about. - -```graphql -query AgentEndpoint { - domain(by: { name: "myagent.eth" }) { - resolve { - profile { - agents { - links { - verified - agent { - card { - services(protocols: [MCP, A2A]) { - protocol - endpoint - } - } - } - } - } - } - } - } -} -``` - -Filter to `verified: true`, pass the `protocols` you need (for example `[MCP]`), and use the returned `endpoint`. diff --git a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx new file mode 100644 index 000000000..088fcf576 --- /dev/null +++ b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx @@ -0,0 +1,187 @@ +--- +title: ERC-8004 (AI Agent Discovery) +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, gated behind a future ERC-8004 ENSNode plugin. +--- + +import { Aside, LinkCard } from "@astrojs/starlight/components"; + + + +[ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) is an 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. + +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. + +## Why this is complementary to ENS + + + +## 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): + +- 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. + + + +## 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**. + + +## Find ERC-8004 agents associated with an ENS name + +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. + +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 { + domain(by: { name: "myagent.eth" }) { + canonical { + name { beautified } + } + resolve { + profile { + erc8004agents { + context + attestations(where: { verification: [VERIFIED, ONLY_ENS, ONLY_AGENT] }) { + verification # ONLY_ENS | ONLY_AGENT | VERIFIED + identityRegistry { chainId address } + agentId + erc8004agent { + agentId + chain { name } + card { + 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 cover 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 threory 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, owner, or card name. + +```graphql +query FindErc8004Agents { + erc8004agents( + first: 20 + where: { + chainName: { eq: ETHEREUM } + cardName: { contains: "trading" } + ensName: { constains: "eth" } + } + ) { + 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 + 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`. From 17b3245b852707a764c3890a87e20470ad629707 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Thu, 18 Jun 2026 15:17:41 +0300 Subject: [PATCH 4/6] small fixes --- .../docs/docs/integrate/omnigraph/complementary/erc8004.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx index 088fcf576..1411108ca 100644 --- a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx +++ b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx @@ -1,6 +1,6 @@ --- title: ERC-8004 (AI Agent Discovery) -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, gated behind a future ERC-8004 ENSNode plugin. +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. --- import { Aside, LinkCard } from "@astrojs/starlight/components"; @@ -17,7 +17,7 @@ The ENS Omnigraph API will bring both sides together: start from an **ENS name** ## Why this is complementary to ENS -[ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) is an 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. +[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. 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. ## Why this is complementary to ENS @@ -88,11 +88,11 @@ query AgentsForName { } ``` -- **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 cover three cases: +- **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 threory name can have several agents so `attestations` is a list. Iterate and pick what you need. +- **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 @@ -130,7 +130,7 @@ query AgentById { ## Search for ERC-8004 agents by indexed metadata -Find agents by chain, owner, or card name. +Find agents by chain, card name, or ENS name. ```graphql query FindErc8004Agents { @@ -139,7 +139,7 @@ query FindErc8004Agents { where: { chainName: { eq: ETHEREUM } cardName: { contains: "trading" } - ensName: { constains: "eth" } + ensName: { contains: "eth" } } ) { totalCount From 7d1b9d1c593c8117ec44bd70613cbc503c359e56 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Thu, 18 Jun 2026 15:24:08 +0300 Subject: [PATCH 6/6] p lint --- .../integrate/omnigraph/complementary/erc8004.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx index a7b47e192..26e26cf47 100644 --- a/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx +++ b/docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/complementary/erc8004.mdx @@ -24,6 +24,7 @@ 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. + ## Plugin @@ -41,11 +42,10 @@ ERC-8004 data is **not** part of core ENS. The fields on this page come from `er ## 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 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**. - ## Find ERC-8004 agents associated with an ENS name 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. @@ -89,9 +89,9 @@ query AgentsForName { ``` - **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. + - **`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. @@ -102,7 +102,7 @@ The reverse view `domains.attestations` returns the ENS names that attest to thi ```graphql query AgentById { - erc8004agent(by: { + erc8004agent(by: { chainName: ETHEREUM, agentId: "34820" }) {