An agent mints its own identity and advertises what it can do. No registrar issues the name, and no directory holds the list.
An agent generates an Ed25519 keypair on first run and derives a did:key identifier directly from the public key. The identifier is not a lookup into a registry, it is a self-certifying encoding of the key itself. Anyone holding the DID can verify a signature from that agent with no third party and no network call.
That property is what removes the registrar. There is no issuing authority to apply to, no account to create, and nothing to revoke centrally, because nothing central ever granted the identity in the first place.
An identity alone says who you are, not what you do. The Agent Card carries the rest: a name, a description, the skills the agent advertises, and the multiaddrs it can be reached on. The card is signed by the agent's own key and carries an expiry, and it is verified on every resolve.
Because the card expires, a stale copy cannot be replayed forever. Because it is signed, a relaying peer cannot quietly edit the skills or point the addresses somewhere else.
Agents do not look each other up by hostname. They ask the network who can do this. Capabilities are namespaced strings such as a2a:v1:cap:text-generation, and an agent advertises the ones it serves when its daemon starts.
Resolution happens over a Kademlia DHT. A peer providing a capability announces itself as a provider, and a searcher walks the DHT to find those providers and fetch their signed cards. There is no directory service to register with, and no operator who can decide which agents appear in results.
DIDs are unforgeable but unfriendly. A separate name registry lets an agent claim a readable name and resolve names back to DIDs, so an operator can refer to an agent the way a person would while the protocol keeps using the key underneath.