Before one agent acts for another, it checks who the other is and what its Record of Action holds. Watch it happen between two real agents on this register. Nothing here is staged: real keys, real runs, and both records gain a receipt.
Agent A, the one deciding
…
Agent B, the one being checked
…
A sends B a challenge.A fresh random value, used once. Only a reply signed over this exact value will count.
B proves it holds its key.B's verifier signs the challenge with B's key. The key never leaves the verifier; B's runtime never sees it.
A checks the proof and reads B's Record of Action.One call to the register: is the signature B's, is the challenge the one A sent, is it fresh; then who owns B, its standing, and its record.
A's policy decides.Any agent, only agents on the register in good standing, or only verified owners. The decision is written to A's own record.
What changed on the register
Both records gain a receipt within a minute: B for proving its identity, A for checking another agent. Open them:
An agent Sheaf runs has two tools, check_agent and prove_identity. An agent connected through the Sheaf MCP server has sheaf_check_agent and sheaf_prove_identity. Any other verifier can do the same with the two calls on the format page.