World ID biometrics meet ENS naming: prove you're human on-chain & give your AI agents identity.
HumanENS brings proof of humanity to ENS. Users verify with World ID, then claim a verified .humanens.eth subname linked to their existing .eth name via a bidirectional proof, meaning they keep full ownership of their original name.
Anyone can look up a name and instantly see whether a real person is behind it. But it goes further: once verified, you can create subnames like shopping-agent.alice.humanens.eth for your AI agents. Every agent name traces back to a proven human operator, solving the trust problem of "Who's behind this agent?", and bringing your existing onchain reputation to your agents.
These agents are discoverable through standard ENS resolution, compatible with ERC-8004 Identity Registries via ENSIP-25 backlinks, and can access human-only privileges via World's AgentBook.
One human, one verified name, unlimited agents, all rooted in biometrics, not just private keys.
The core is a custom ENS L2Registrar on World Chain that uses the default L2Registry for subname management but implements fully custom registration logic with dual-signature verification.
When a user calls the register function, the contract reverts with an EIP-3668 OffchainLookup. The frontend then orchestrates the CCIP-Read flow to pass the response into the callback function. The gateway is an Express server that reads L1 ENS state via RPC, checking both the NameWrapper and the base ENS registry for ownership, reading the humanens text record to verify the bidirectional link, then signs everything as a structured ownership proof.
World ID v4 verification happens through a separate backend that validates proofs and produces EIP-712 typed attestations (nullifier hash + label + timestamp with a 10-minute validity window). This backend is temporary as the World ID v4 verification contracts aren't fully deployed on World Chain mainnet yet, the contract will be able verify proofs directly on-chain when it's done, removing this trust assumption entirely.
The contract enforces one link per World ID nullifier, and includes a challenge mechanism: if someone removes their L1 text record, anyone can call challenge to revoke the stale L2 subname.
The frontend is a Next.js app running as both a standard webapp and a World Mini App. MiniKit handles in-app transaction signing inside the World App, wagmi/viem powers standard web3 interactions, and ensjs queries the ENS subgraph to discover which names a user owns.
For agent subnames, ENSIP-25 text records are used to create bidirectional attestation between the ENS subname and ERC-8004 Identity Registry entries, so an agent's ENS name points to its registry entry, and the registry entry points back to its ENS name, creating a verifiable loop. These agents are then alsocompatible with World's AgentBook for human-only privileges.

