Choose your wallet

Select your wallet, then approve the connection in its extension.

No wallet detected. Enable Rabby or MetaMask in this browser, unlock it, then reload this page. On mobile, open NOMEN in your wallet’s built-in browser.

Connecting does not send a payment or request a transaction signature.

Subgraph

The registries, indexed

The subgraph indexes the three ERC-8004 registries on Sepolia and the NOMEN registrar, from events only, so every entity can be reproduced from the logs. The activity API can consume a deployed instance through NOMEN_SUBGRAPH_URL. Without that configuration it returns 503 and the interface shows unavailable, not zero activity. Version v0.3.0 is deployed to Graph Studio on Sepolia and connected to the app. The activity panel reports its current indexed block and warns when it is catching up. Deployment alone does not establish that historical indexing is complete.

Deployment

The Studio development endpoint is https://api.studio.thegraph.com/query/1760110/nomen/v0.3.0. This is a testnet Studio deployment, not a publication on the decentralized Graph Network. Published descriptions supply candidate capabilities. The Graph is required for Sepolia and Arc AI matching: current and historical ownership and metadata URI are compared before ranking, and the remaining registry facts are passed to DeepSeek. Missing or stale evidence withholds candidates on the affected network. Immutable identity checkpoints record each registration, URI update and transfer. The server selects the last checkpoint at or before the snapshot block, so the comparison survives pruning of mutable entity history.

Arc Testnet scope

Arc Studio version v0.1.1 is deployed at https://api.studio.thegraph.com/query/1760110/nomen-arc/v0.1.1, configured through NOMEN_ARC_SUBGRAPH_URL. It follows identity, reputation and validation events for the 249 explicitly listed catalog IDs. It does not index the entire Arc registry and contains no ENS registrar. Event filters and the ID list are reproducible from subgraph/subgraph.arc.yaml and subgraph/arc-scope.json.

The catalog was refreshed on September 11, 2026, at block 61,552,064. Ownership, URI and metadata were re-read for all 249 listed records. Excluded records outside this set keep their older observations. The refresh manifest records that limited scope. AI results show freshness, eligibility and withheld records separately for each network. An unavailable Arc index pauses Arc recommendations while Sepolia can continue.

Entities

EntityWhat it holds
Agentowner, current URI, how many times the URI moved, transfers since mint, feedback count, distinct reviewers, current NOMEN name.
IdentityCheckpointimmutable owner and URI after each identity event, with block and event order. AI matching uses these rows to compare the current identity with the published snapshot.
AgentMetadataonchain key/value metadata set through MetadataSet.
Feedbackone review: reviewer, value, decimals, tags, endpoint, URI, and whether it was later revoked.
AgentClientone (agent, reviewer) pair, so distinct reviewers are counted exactly rather than inferred.
Validationa validation request and, when it arrives, the response.
NomenNamea subname: label, agent, owner, expiry, revocation flag and reason. The indexed live flag means not revoked; use isNamed for current endorsement.
Scanevery merkle root the registrar ever published, with its source.
Registryone row of totals within the indexed scope.

Event signatures

These are the event signatures currently configured in the manifest; deployment requires checking the target addresses and start blocks:

Registered(uint256 indexed agentId, string agentURI, address indexed owner)
URIUpdated(uint256 indexed agentId, string newURI, address indexed updatedBy)
MetadataSet(uint256 indexed agentId, string indexed indexedMetadataKey, string metadataKey, bytes metadataValue)
NewFeedback(uint256 indexed agentId, address indexed clientAddress, uint64 feedbackIndex, int128 value,
            uint8 valueDecimals, string indexed indexedTag1, string tag1, string tag2, string endpoint,
            string feedbackURI, bytes32 feedbackHash)
FeedbackRevoked(uint256 indexed agentId, address indexed clientAddress, uint64 indexed feedbackIndex)
ValidationRequest(address indexed validatorAddress, uint256 indexed agentId, string requestURI, bytes32 indexed requestHash)
ValidationResponse(address indexed validatorAddress, uint256 indexed agentId, bytes32 indexed requestHash,
                   uint8 response, string responseURI, bytes32 responseHash, string tag)

A query worth running

{
  agents(first: 20, orderBy: distinctClients, orderDirection: desc, where: { feedbackCount_gt: 0 }) {
    agentId owner feedbackCount distinctClients uriUpdates
    name { label live }
    feedback(first: 3, orderBy: createdAt, orderDirection: desc) { client value valueDecimals tag1 revoked }
  }
}

Agents whose feedback all comes from one wallet and agents whose feedback comes from many are different things; distinctClients is how to tell them apart.