Observed since 21 Oct, 10:33 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Give an AI agent a verifiable AIDR identity: enroll from code, sign requests, LangChain and LlamaIndex tools.
Give an AI agent a verifiable AIDR identity from its first run. Apache-2.0.
pip install "aidr-agent[requests]" # add ,langchain or ,llamaindex for the tools
from aidr_agent import Agent
agent = Agent.load_or_enroll("research-01", audiences=["https://shop.example"])
agent.session().get("https://shop.example/products") # signed; other sites get anonymous requests
AIDR_ENROLLMENT_TOKEN where the agent runs. The first run generates the key on that
machine, enrolls, proves the key and saves the identity; later runs load it. The token is then
no longer needed.on_unlisted="refuse". Plain http is never
signed, except to localhost.Python 3.10+. Extras: requests (for agent.session() / agent.auth()), langchain (the tools, on
langchain-core), llamaindex (the same tools, on llama-index-core), langchain-community (the RequestsToolkit wrapper). It installs aidr-crypto
and aidr-core, the same signing code the registry runs.
| Store | Use it for | How |
|---|---|---|
FileKeyStore (default) | laptops, VMs, persistent volumes | ~/.aidr/agents/<name>/identity.json, mode 0600 (AIDR_AGENT_HOME moves it) |
EnvKeyStore | containers, serverless | python -m aidr_agent enroll --name <name> --print-identity, then store the line as the secret AIDR_AGENT_IDENTITY |
A container that starts with an empty disk would enroll a new agent on every start and spend a use of
the token each time: use AIDR_AGENT_IDENTITY there.
agent.session(): a requests.Session. agent.auth(): for requests.get(url, auth=…).agent.httpx_auth(): for httpx.Client and httpx.AsyncClient.agent.sign_headers(method, url): the headers themselves, for any other client.from aidr_agent.langchain import aidr_http_tools
tools = aidr_http_tools(agent) # http_get, http_post: signed, and limited to the agent's sites
The tools reach only the origins they are given (by default the agent's allowed audiences). An LLM
choosing URLs is how a prompt-injected agent would present its identity somewhere it should not, or
reach internal addresses. For code still on langchain-community's RequestsToolkit,
signed_requests_wrapper(agent) is a drop-in TextRequestsWrapper that signs, sync and async.
langchain-community is being sunset, so new code should use the tools.
from aidr_agent.llamaindex import aidr_http_tools
from llama_index.core.agent.workflow import FunctionAgent
workflow = FunctionAgent(tools=aidr_http_tools(agent), llm=llm) # the same two tools, same limits
aidr-agent enroll --name research-01 --audience https://shop.example
aidr-agent whoami --name research-01
(python -m aidr_agent … is the same command.)
The token is read only from AIDR_ENROLLMENT_TOKEN, never from the command line.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.2.0 | 21 Oct 2026 | 6 |
This describes our collected data; it is not a security assessment.
Observed since 21 Oct, 10:33 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:0877d62e4ba3ddccfe4ce0bbd053d7fea4dd6236e2e1655c29fc43ed5cdf0915