1 billion AI agents are coming. None of them have an identity.
AgentID is an open protocol for AI agent identification — free, decentralized, and verifiable. Built on Base L2.
🌐 Website: agentid.md
📄 Protocol Spec: CONCEPT.md
⛓ Contract: AgentRegistry.sol
- No trust — Agent A can't verify Agent B is who it claims
- No accountability — No audit trail of WHO acted
- No discovery — Agents can't find each other by capability
- No portability — Identity locked to platform
Every agent gets an agentid.md file — a passport:
---
id: rem-a7f3x2
name: Rem
type: assistant
capabilities: [code, research, memory]
trust_level: 2 # 🟢 platform-verified
public_key: ed25519:MC4CAQ...
registry: base:0x742d35Cc...
---| Layer | What | Where |
|---|---|---|
| L1 Identity Registry | agentId + publicKey + trustLevel | Base L2 (on-chain) |
| L2 Metadata | Capabilities, model, endpoints | IPFS |
| L3 Resolver | REST API for lookup/search | api.agentid.md |
| Level | Name | How | Like |
|---|---|---|---|
| ⚪ 0 | Self-registered | Agent registered itself | Self-signed cert |
| 🔵 1 | Owner-verified | Human signed challenge | DV SSL |
| 🟢 2 | Platform-verified | Platform attested | OV SSL |
| ⭐ 3 | Cross-verified | Multiple verifications | EV SSL |
Agent A wants to verify Agent B:
1. A → api.agentid.md/resolve/rem-a7f3x2 → { publicKey, trustLevel }
2. A → B: challenge (nonce + timestamp)
3. B signs challenge with private key
4. A verifies signature against on-chain public key
5. Valid + trust ≥ minimum → ✅ interaction proceeds
import { AgentID } from '@agentid/sdk'
const agent = await AgentID.register({
name: 'MyAgent',
capabilities: ['chat', 'code']
})
const result = await AgentID.verify('rem-a7f3x2')
console.log(result.trustLevel) // 2 ✓from agentid import AgentID
agent = AgentID.register(name="MyAgent", capabilities=["research"])
result = AgentID.verify("rem-a7f3x2")
assert result.valid# Register
curl -X POST api.agentid.md/v1/register \
-d '{"name":"MyAgent","capabilities":["chat"]}'
# Resolve
curl api.agentid.md/v1/resolve/rem-a7f3x2Network: Base L2 (Chain ID: 8453)
Testnet: Base Sepolia
License: MIT
36/36 tests passing ✅
cd foundry
forge test -vv┌─────────────┐ ┌──────────┐ ┌──────────────┐
│ Agent / │────▶│ Relayer │────▶│ Base L2 │
│ SDK │ │ (gasless)│ │ Contract │
└─────────────┘ └──────────┘ └──────────────┘
│ │
│ ┌──────────┐ │
└───────────▶│ IPFS │◀────────────┘
│ Metadata │ (metadataURI)
└──────────┘
│
┌──────────┐
│ Resolver │
│ API │
└──────────┘
| Threat | Solution |
|---|---|
| Impersonation | Challenge-response with on-chain public key |
| Tampering | IPFS content hash verified on-chain |
| Key compromise | On-chain revocation + key rotation |
| Replay attack | Nonce + timestamp in challenges |
| Sybil attack | Trust levels (L0 = untrusted) |
- Protocol spec
- Smart contract (AgentRegistry.sol)
- Test suite (36 tests, 100% pass)
- Deploy to Base Sepolia
- SDK (TypeScript + Python)
- Resolver API
- Deploy to Base mainnet
- IPFS integration
- Platform verifier onboarding
MIT — use however you want.
AgentID is infrastructure for the agent economy. Like DNS made the web navigable, AgentID makes the agent ecosystem trustworthy.