# Overview

Self Agent ID is an on-chain identity registry that binds AI agent identities to Self Protocol human proofs. Each agent receives a **soulbound ERC-721 NFT** backed by a ZK passport verification, enabling trustless proof-of-human for autonomous agents.

The system implements the [ERC-8004 Proof-of-Human extension](https://eips.ethereum.org/EIPS/eip-8004) and provides SDK implementations in TypeScript, Python, and Rust with identical feature parity.

## Who This Is For

| Audience | What You Do |
|----------|-------------|
| **Agent builders** | Register an agent identity, sign outbound requests with `SelfAgent` |
| **Service/API teams** | Verify inbound agent signatures with `SelfAgentVerifier` middleware |
| **Protocol/infra teams** | Gate smart contracts, query on-chain state, compose with registry interfaces |

## How It Works

1. **Human scans passport** with the Self app (ZK proof generated locally on phone)
2. **Hub V2 verifies the proof** on-chain and calls back to the registry
3. **Registry mints a soulbound NFT** binding the agent key to a unique human nullifier
4. **Agent signs requests** using the SDK; services verify signatures against the on-chain registry

:::note
No personal data ever leaves the user's device. Only a ZK proof and nullifier are submitted on-chain.
:::

## Key Properties

- **Trustless**: On-chain verification with no central authority
- **Private**: ZK proofs reveal nothing about the human's identity
- **Composable**: A single registry call integrates into any EVM contract, backend, or agent framework
- **Sybil-resistant**: Each human maps to a unique nullifier, preventing unlimited agent registration
- **Time-bounded**: Proofs expire (default: 1 year or document expiry), requiring periodic re-authentication
- **ERC-8004 compliant**: Implements the standard Identity Registry interface with a Proof-of-Human extension

## Networks

| Network | Chain ID | Registry Address | Passport Required |
|---------|----------|-----------------|-------------------|
| Celo Mainnet (default) | `42220` | `0xaC3DF9ABf80d0F5c020C06B04Cced27763355944` | Real passport via Self app |
| Celo Sepolia (testnet) | `11142220` | `0x043DaCac8b0771DD5b444bCC88f2f8BBDBEdd379` | Mock documents via Self app |

:::warning
**Mainnet is the default.** Registration requires a real passport scanned with the Self app. Testnet also requires the Self app, but you can generate mock documents within the app instead of using a real passport. Testnet is for development and testing only.
:::

:::warning
Celo Sepolia chain ID is **11142220**, not 44787 (deprecated Alfajores).
:::

## Live Deployment

- Web app: [https://selfagentid.xyz](https://selfagentid.xyz)
- GitHub: [https://github.com/selfxyz/self-agent-id](https://github.com/selfxyz/self-agent-id)

## A2A Protocol

Agents can interact programmatically via the A2A JSON-RPC endpoint at `/api/a2a`. This supports registration, verification, lookup, deregistration, and proof freshness checks — all through structured intents or natural language.

Send `{ "intent": "help" }` to get a full list of capabilities and a decision guide for choosing the right registration mode.

## Architecture

The system consists of three on-chain registries:

- **SelfAgentRegistry** — Core identity registry (ERC-8004 + Proof-of-Human extension, soulbound ERC-721)
- **SelfReputationRegistry** — ERC-8004 Reputation Registry for aggregated feedback with document-type weighted signals
- **SelfValidationRegistry** — ERC-8004 Validation Registry for on-demand third-party validation

Plus SDKs in TypeScript, Python, and Rust with identical feature parity for signing requests, verifying agents, and interacting with the registry.

## Next Steps

- [Registration Modes](/docs/agent-id/registration-modes/) — Choose how to register your agent
- [SDK Integration](/docs/agent-id/sdk-integration/) — Sign and verify agent requests
- [Smart Contracts](/docs/agent-id/smart-contracts/) — On-chain gating, queries, and the full ERC-8004 interface
- [A2A Protocol & REST API](/docs/agent-id/rest-api/) — Programmatic agent interaction via JSON-RPC
