Skip to content
This repository was archived by the owner on Aug 5, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
142 changes: 142 additions & 0 deletions docs/ensnode.io/src/content/docs/docs/integrate/omnigraph/agents.mdx
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 ↔ 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" }) {
Comment thread
sevenzing marked this conversation as resolved.
Outdated
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 } }
}
}
}
}
}
Comment thread
sevenzing marked this conversation as resolved.
Outdated
```

## 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`.
Loading