Identity, discovery, and trust for AI agents
Project description
AgentID
Identity, discovery, and trust for AI agents.
The internet was built for humans. AI agents have no standard way to identify themselves, find each other, or verify that messages are genuine. AgentID is the missing protocol layer.
from agentid import Agent
# Every agent gets a cryptographic identity
agent = Agent.create(
name="research-agent",
capabilities=["web-search", "summarization"],
owner="team@company.com",
registry_url="https://agentid-commercial-features-production.up.railway.app",
)
print(agent.did)
# did:agentid:7sP3V2mNkQxRtYbLcDfHgJwAeUiMoZnXvBqKpTsWyE
# Find agents by what they can do
results = Agent.find(capability="web-search", registry_url="https://agentid-commercial-features-production.up.railway.app")
# Sign and verify messages between agents
signed = agent.sign({"task": "summarize this document"})
Agent.verify_from_did(signed) # → True
What it solves
Multi-agent systems break down without trust infrastructure:
- Who is this agent? No standard identity — every team hand-rolls auth
- Which agent can do X? No discovery — agents are hardcoded or manually configured
- Did this message come from who it claims? No signing — outputs can be spoofed or tampered
AgentID fixes all three with a single open protocol.
Installation
macOS users: use
pip3instead ofpipifpipis not found.
pip3 install agentid-protocol
For the LangChain integration:
pip3 install agentid-protocol langchain-agentid
For AutoGen:
pip3 install agentid-protocol autogen-agentid
For CrewAI:
pip3 install agentid-protocol crewai-agentid
Core concepts
Identity
Every agent gets a DID (Decentralized Identifier) derived from an Ed25519 keypair:
did:agentid:<base58-encoded-public-key>
No central authority issues it. Any agent generates one instantly, offline.
Capabilities
Agents declare what they can do using string identifiers:
capabilities=["web-search", "code-review", "translation"]
Registry
A registry stores agent documents and makes them discoverable. Use the hosted registry or run your own.
Signed messages
Every agent can sign payloads. Any third party can verify a signature using only the signer's DID — no shared secrets, no central authority.
Usage
Local registry (dev, no server needed)
from agentid import Agent
# Create
agent = Agent.create(
name="my-agent",
capabilities=["search", "summarize"],
owner="you@company.com",
)
# Discover
agents = Agent.find(capability="search")
# Resolve a DID
doc = Agent.resolve("did:agentid:...")
# Sign
signed = agent.sign({"task": "analyze this dataset"})
# Verify
Agent.verify_from_did(signed) # → True
Remote registry (production, shared across machines)
Use the hosted public registry or run your own:
REGISTRY_URL = "https://agentid-commercial-features-production.up.railway.app"
agent = Agent.create(
name="my-agent",
capabilities=["search"],
owner="you@company.com",
registry_url=REGISTRY_URL,
)
agents = Agent.find(capability="search", registry_url=REGISTRY_URL)
Load an existing agent
# Load by DID — private key is stored locally in ~/.agentid/keys/
agent = Agent.load("did:agentid:...")
signed = agent.sign({"task": "run pipeline"})
LangChain integration
Give any LangChain agent a verifiable identity in 3 lines:
from agentid.integrations.langchain import (
AgentIDCallbackHandler,
AgentIDFindTool,
AgentIDVerifyTool,
)
# 1. Create identity
identity = AgentIDCallbackHandler(
name="research-agent",
capabilities=["web-search", "summarization"],
owner="team@company.com",
)
print(f"Agent DID: {identity.did}")
# 2. Add discovery tools
tools = [
AgentIDFindTool(), # lets the agent find other agents by capability
AgentIDVerifyTool(), # lets the agent verify messages from other agents
...your_other_tools,
]
# 3. Wire up
executor = AgentExecutor(agent=agent, tools=tools, callbacks=[identity])
Every output from this executor is automatically signed. Verify it downstream:
from agentid.integrations.langchain import verify_langchain_output
result = executor.invoke({"input": "Research the latest AI papers"})
verify_langchain_output(result) # → True
AutoGen integration
from autogen_agentid import create_agentid_agent
agent = create_agentid_agent(
name="research-bot",
capabilities=["research", "summarization"],
owner="team@company.com",
system_message="You are a research assistant.",
)
print(agent.agentid_did) # did:agentid:...
Every message sent by this agent is automatically signed. Recipients can verify using the DID.
CrewAI integration
from crewai_agentid import create_agentid_crew_agent, AgentIDObserver
agent = create_agentid_crew_agent(
role="Senior Researcher",
goal="Research AI topics",
backstory="Expert researcher with 10 years experience",
capabilities=["research", "summarization"],
owner="team@company.com",
)
print(agent.agentid_did) # did:agentid:...
# Sign task outputs
observer = AgentIDObserver(signing_agent=agent)
signed_result = observer.sign_task_result("Summary: AI is advancing rapidly.")
Registry server
The hosted public registry is at https://agentid-commercial-features-production.up.railway.app.
# Check it's live
curl https://agentid-commercial-features-production.up.railway.app/health
# Resolve any DID
curl https://agentid-commercial-features-production.up.railway.app/agents/<did>
# Search by capability (paginated)
curl "https://agentid-commercial-features-production.up.railway.app/agents?capability=research&limit=50&offset=0"
Or run your own:
cd registry
pip3 install -r requirements.txt
DATABASE_URL=postgresql://... uvicorn server:app --host 0.0.0.0 --port 8000
REST API:
POST /agents Register an agent (proof required)
GET /agents/{did} Resolve a DID
GET /agents?capability=&limit=&offset= Discover agents (paginated, max 500)
POST /agents/{did}/verify Verify a signature → {valid, did, reason}
DELETE /agents/{did} Deregister (signed proof required)
GET /health Health check
Note: Registration requires a cryptographic
prooffield — an Ed25519 signature proving you own the private key for the DID. The SDK handles this automatically.
Pro features
The hosted registry includes commercial features for teams:
| Feature | Free | Pro | Enterprise |
|---|---|---|---|
| Agents | 100 | 10,000 | Unlimited |
| Audit log exports (CSV/JSON) | — | ✓ | ✓ |
| Analytics dashboard | — | ✓ | ✓ |
| Verified identity badges | — | — | ✓ |
Dashboard: bekisol.github.io/agentid/dashboard.html
Contact agentid@bekisol.com for a Pro or Enterprise API key.
Protocol
AgentID uses:
- Ed25519 — fast, small, battle-tested signatures
- W3C DID format —
did:agentid:<base58-public-key> - JSON canonical form — deterministic serialization for signing
- Mandatory proof-of-ownership — registration requires signing the document with the private key
Project structure
sdk/python/agentid/
agent.py Agent class — create, load, sign, verify, find
identity.py DID generation, Ed25519 keypairs
crypto.py Sign and verify payloads
registry.py Local file-based registry
http_registry.py Remote HTTP registry client
integrations/
langchain.py LangChain callback handler + tools
integrations/
langchain-agentid/ Standalone LangChain package
autogen-agentid/ Standalone AutoGen package
crewai-agentid/ Standalone CrewAI package
registry/
server.py FastAPI registry server
spec/
protocol.md Open protocol specification
Roadmap
- Ed25519 identity + DIDs
- Local and remote registry
- LangChain integration
- AutoGen integration
- CrewAI integration
- Hosted public registry
- Pro: audit log exports (CSV/JSON)
- Pro: analytics dashboard
- Enterprise: verified identity badges
- TypeScript SDK
- Stripe self-serve signup
- Interaction receipts + reputation layer
Contributing
AgentID is an open protocol. The more frameworks adopt it as the default identity layer, the more useful it becomes for everyone building multi-agent systems.
PRs welcome — especially framework integrations and SDK ports.
git clone https://github.com/bekisol/agentid
cd agentid/sdk/python
pip3 install -e ".[dev]"
pytest
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentid_protocol-0.1.3.tar.gz.
File metadata
- Download URL: agentid_protocol-0.1.3.tar.gz
- Upload date:
- Size: 18.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa5d27f4d0f53270c0adc5c09b784668dffcabe9ea87f9634919e3db921506b1
|
|
| MD5 |
01de3941e200d81a87aa58b77831fb39
|
|
| BLAKE2b-256 |
8bea0cd90d5e7a77b9225484d49c129e6059b8783d84470c7215ae5a69049d20
|
File details
Details for the file agentid_protocol-0.1.3-py3-none-any.whl.
File metadata
- Download URL: agentid_protocol-0.1.3-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f9c29ad086a70927fb2d8dd42e56d74439612ba5a21ff0e161851cb1c721cf8
|
|
| MD5 |
e202307ec4d3bfd768a36ec2f648f2ea
|
|
| BLAKE2b-256 |
0a380b8996e45a7e42773604152fe7255b2b8676ebb842d8be3689e3ddaa87cd
|