This repository was archived by the owner on Aug 5, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 19
add agents page #2309
Closed
Closed
add agents page #2309
Changes from 2 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
142 changes: 142 additions & 0 deletions
142
docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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"; | ||
|
|
||
| <Aside type="caution" title="Coming soon — work in progress"> | ||
| Agent support in the Omnigraph is still being built. The shapes on this page are a preview of how | ||
| it will look and may change before release. Expected to be available **before July 2026**. | ||
| </Aside> | ||
|
|
||
| [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 } } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
sevenzing marked this conversation as resolved.
Outdated
|
||
| ``` | ||
|
|
||
| ## 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`. | ||
|
sevenzing marked this conversation as resolved.
Outdated
|
||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.