Search projects, hackathons, sponsors and tech

    ← All projects

    Xovi Agents

    Agents pay over x402 to propose clips. Only a human confirms, and asserts it in an EAS attestation.

    Demo

    About

    Xovi (https://xovi.axolodao.org/) is a conservation dApp built around the public livestream of an axolotl museum in Mexico. People watch, mark behaviours they see, submit them as clips, and other people confirm or reject them. Xovi Agents adds a machine to that loop in the one position where a machine belongs: it proposes, and a person decides. A person connects a wallet on Base Sepolia and is offered an enrolment of three steps, each optional: verify with World ID in the page, with the proof bound to that wallet and checked on the server; take a name under xovi.eth, issued as a row and resolved through Zenbit's gateway with the ENS reference offchain resolver; and receive a machine credential minted by Xovi for that wallet. A wallet that declines still reaches the board and pays every read. The board offers screened windows of the museum's own footage by day and species, each cell carrying its recording and what one read costs, and never a count of what was withheld. Pay and run delegates one action: a paid read presents an x402 payment signed from the person's wallet as an EIP-3009 authorization in USDC, settled on Base Sepolia through the public testnet facilitator; a free read is proved from the wallet's own signature and settles nothing. The agent reads the windows of the cell it paid for, forms one proposal, submits it to Xovi under the wallet's own credential, and stops. A wallet whose credential was never minted ends at not submitted, as the disclosure states. A wallet a verified person stands behind gets free reads each day, two on the public deployment, counted against the person and not the keypair, and every read after that pays. A human operator confirms or rejects the proposal exactly as for a clip a person submitted. The operator asserts that confirmation in an EAS attestation anchored on Ethereum Sepolia with an onchain timestamp, a subgraph on The Graph indexes it, and the result is served through a paid query over MCP. The attestation asserts who confirmed and when; it certifies no identity, no reputation, no payment and no biological fact. Account shows the person's own settlements read back from the receipts ledger, Record shows the check a stranger can run, and Not yet names what the repository does not do. Nothing writes to a mainnet, nothing handles real funds, and no credential the agent holds can confirm or attest.

    How it's made

    The service is a Next.js application with route handlers and no middleware. The paid endpoint is an x402 resource server over @x402/core: an unpaid request gets a 402 with the price, asset, recipient and network in the challenge, and the client signs an EIP-3009 transferWithAuthorization for USDC on Base Sepolia that the public testnet facilitator verifies and settles. Two payers share one code path, the browser wallet on the page and a command line agent, and both refuse anything above a one dollar ceiling before signing. Every settlement is written to a receipts ledger keyed by the payer from the facilitator's settlement answer, guarded against a fabricated receipt, and the page's Account is drawn from that table alone. The per person allowance reads World ID's AgentBook on World Chain, where an agent address resolves to the nullifier of the person who registered it; the service keeps only a keyed digest of that identifier for thirty days and counts free reads against it, so a fresh keypair earns nothing new. The agent's identity is an ENS name on Ethereum Sepolia whose address record must equal the paying key, compared as an equality with the chain id checked first, never used as a lookup. Windows come from a small computer vision pipeline over the museum's recorded stream, screened by a person and signed off before a file is committed, and the board serves on offer or none per cell so no count leaks what was withheld. The human confirmation is a signed EIP-191 message recovered on the page, then attested offchain with EAS under a frozen schema and anchored with an onchain timestamp on Ethereum Sepolia; a subgraph on The Graph filters attestations by that schema identifier and an MCP server charges for the query with the same x402 rail, returning the 402 as a tool result. The delegated run is streamed to the browser as newline delimited JSON from the same invocation that does the work, so there is no shared state and no polling. Hacky and proud of it: the whole free read and settlement path was rehearsed against the real facilitator the night before the video, which is how the payer's own ceiling was found refusing the ruled price before it could sign.