Where the specs become real
The specifications are paper. OpenA2A AIM (Agent Identity Management) is the working steel, the reference platform for AIP and ATX behind a developer experience that fits on one line: secure("my-agent"). It mints identities, obtains ATX credentials from the OpenA2A Registry and verifies them, enforces authorization, and keeps its own audit log, so a developer gets the stack without assembling it by hand. Four pieces live elsewhere: ATX issuance, did:opena2a resolution and the ATP trust authority with its transparency log run in the OpenA2A Registry, and the AAP credential broker is a library in Secretless, not yet reachable from its shipped daemon (agent-authorization-protocol#1).
What AIM does at each layer
A note on names
AIM is the reference implementation and is converging on the spec vocabulary as the standards finalize (for example, the credential naming is aligning to ATX). AIP defines no DID method; provider-scoped identifiers usedid:web; pre-1.1 did:aip:aim_ identifiers are deprecated aliases (AIP §3.2). The reference implementation status note in that section (2026-09-08) records that AIM's resolver answers only the did:aip:aim_ form and that the did:web route is not implemented. did:opena2ais the Registry-anchored method, registered in the W3C DID Extensions registry (did-extensions #717) and specified by did-method-opena2a. OpenA2A's issuing node is the OpenA2A Registry service, and OpenA2A AIM (Agent Identity Management) verifies ATX and does not issue it. Treat the specs as the normative source; AIM as the place they run.The developer workflow
From a developer's seat, the whole stack collapses into install, one call, and one decorator. Everything else happens underneath.
- 11Install the SDK
Python (pip install aim-sdk) or Java (from source in sdk/java in the AIM repo; Maven Central publication pending). The steps below are this server path. TypeScript: npm install @opena2a/aim-core runs AIM's local mode without a server, through new AIMCore({ agentName }) rather than secure().
- 22Register the agent
secure("my-agent") generates an Ed25519 keypair, registers the public key, and returns an identity + DID. The private key stays local.
- 33Declare a capability
Wrap a function with @agent.perform_action(capability="db:read"). That declaration is what authorization checks against.
- 44Call, and get verified
On each call the SDK signs the request; the backend runs 5-step authorization before the function executes.
- 55Everything is logged
Outcome, trust-score update and audit entry are written automatically. Nothing extra to wire up.
from aim_sdk import secure
agent = secure("weather-agent") # identity + DID, one line
@agent.perform_action(capability="weather:fetch", risk_level="low")
def get_weather(city: str):
return requests.get(API, params={"q": city}).json()
get_weather("San Francisco")
# → request signed, 5-step authorization runs, action logged,
# trust score updated, all automatically5-step fine-grained authorization
This is AIM's implementation of AAP's enforcement, run on every action. The first four steps each carry a latency budget under 10 ms in the AIM README; only the riskiest calls pay for the deepest check.
- 11 · CapabilityIs this capability declared?budget < 10 ms
The agent must have declared the capability it is now invoking.
- 22 · AttributeAre the request attributes allowed?budget < 10 ms
Fields, data classes and parameters checked against policy.
- 33 · ContextDo the contextual rules pass?budget < 10 ms
Time, location, data sensitivity and similar conditions.
- 44 · ChainIs the delegation chain valid?budget < 10 ms
For agent-to-agent calls: trust attenuates with each hop; depth is bounded.
- 55 · IntentWhat is the agent trying to do?high-risk
An intent classifier screens high-risk actions (exfiltration, privilege escalation) before they run.
Trust gates access
Each capability carries a minimum trust threshold, low-risk actions need little, critical ones (payments, PII) need a high score. Trust from AIP, carried by ATX, is what these gates read.What's in the box
- Backend, the registration, authorization, trust-scoring and audit services.
- SDKs, Python, Java and TypeScript, with auto-detection for popular agent frameworks.
- Dashboard, agents, trust-score breakdowns, alerts, audit log, policies and webhooks.
- Observability, OpenTelemetry traces, metrics and logs, exported by the backend over OTLP/gRPC to a collector the operator configures (default target
localhost:4317).
Two ways in
Start here is the five-minute tour; the layered stack explains why the order matters. For readers fluent in PKI, the web analogy maps every piece to something the web already uses.