{"protocol_version":"3.0","environment":"sandbox","contract_version":"3.0.0","status":"normative","description":"The ordered lifecycle through which an autonomous agent earns production access. Each phase names its purpose, the operations that execute it, the evidence that proves it was completed, and the failure modes that block it; evidence is load-bearing because a phase without evidence is a claim, and claims are verified, never assumed. The phases are ordered because each consumes the previous phase's evidence: scope is granted to a proven key, a sandbox is provisioned to a scoped key, flows execute inside a provisioned sandbox, conformance runs over flow transcripts, certification signs conformance results, and promotion presents certification. No phase is skippable. Phase status is honest: implemented phases run today against this contract; a roadmap phase lists any not-yet-served operations in roadmapOperations, and may list already-served operations in operations when only the phase's orchestration is unshipped. failureModes on implemented phases are the exact catalogued error codes the condition surfaces as; failureModes on roadmap phases name the blocking condition, and their wire-level codes enter x-aura-errors as the operations ship, under the existing two-way harvest gate.","phases":[{"id":"discover","ordinal":1,"status":"implemented","served_here":false,"purpose":"The agent finds the protocol and its machine-readable surfaces.","evidence":[],"failure_modes":[],"operations":[],"entry_points":["https://aura-labs.ai/llms.txt","https://aura-labs.ai/openapi.json","https://aura-labs.ai/api/mcp"],"_links":{"next":{"href":"/v1/admission#learn","id":"learn"}}},{"id":"learn","ordinal":2,"status":"implemented","served_here":false,"purpose":"The agent reads the law it will be held to.","evidence":[],"failure_modes":[],"operations":[],"references":{"extensions":["x-aura-invariants","x-aura-authority","x-aura-signature-profiles","x-aura-signature-test-vectors","x-aura-errors","x-aura-key-lifecycle"]},"_links":{"next":{"href":"/v1/admission#request_identity","id":"request_identity"}}},{"id":"request_identity","ordinal":3,"status":"implemented","served_here":true,"purpose":"The agent requests a protocol identity: a principal anchor and an agent record bound to an Ed25519 key.","evidence":["ed25519_public_key"],"failure_modes":["invalid_key","missing_signature","invalid_signature","key_revoked"],"operations":[{"operationId":"registerPrincipal","method":"POST","href":"/v1/principals"},{"operationId":"registerAgent","method":"POST","href":"/v1/agents/register"},{"operationId":"registerBeacon","method":"POST","href":"/v1/beacons/register"}],"notes":"Keys bind through registerPrincipal and registerAgent (a Beacon operator registers its agent with type beacon). registerBeacon creates the market-facing Beacon listing and carries no key. On the bench, registration carries no build credential and stamps no namespace on the identity; a presented X-AURA-Sandbox-Context attributes the registration to a run, best-effort, and never gates it.","_links":{"next":{"href":"/v1/admission#prove_key_control","id":"prove_key_control"}}},{"id":"prove_key_control","ordinal":4,"status":"implemented","served_here":false,"purpose":"The agent proves possession of the private key on every request.","mechanism":"Every request is signed by the registered key under the authenticated_request signature profile; the published signature test vectors let an agent prove its canonicalisation byte-exactly before signing live requests. Request timestamps must fall within the profile freshness window; a stale timestamp fails as invalid_signature.","evidence":["verified_request_signature"],"failure_modes":["missing_auth_headers","unknown_agent","invalid_signature"],"operations":[],"roadmap_mechanism":{"status":"roadmap","mechanism":"RFC 9421 HTTP Message Signatures over the same Ed25519 keys (Web Bot Auth profile)","keyDiscovery":["domain_hosted_key_document","core_hosted_directory"]},"_links":{"next":{"href":"/v1/admission#obtain_scope","id":"obtain_scope"}}},{"id":"obtain_scope","ordinal":5,"status":"implemented","served_here":true,"purpose":"The agent mints a scoped, prefixed sandbox key. The key is the tenant anchor for one namespace; the verified domain proved at minting is the identity anchor every quota counts against.","mechanism":"Two proofs over one mint request. Possession: the X-Signature header carries the Ed25519 signature over the exact JSON body by the declared key. Domain control: publish the key where only the domain's controller can, either TXT _aura-agent-key.<domain> = aura-key=<public_key> (dns_txt) or https://<domain>/.well-known/aura-agent-key returning JSON with a matching public_key (well_known). One active key per domain; re-mint revokes the prior key and is the compromise-recovery path. The grant is bearer, shown once, stored hashed, and consumable now: provision the namespace it anchors with provisionSandbox.","evidence":["scoped_key_grant"],"failure_modes":["invalid_domain","mint_proof_invalid","key_already_used","sandbox_identity_not_verified","rate_limit_exceeded"],"operations":[{"operationId":"mintSandboxKey","method":"POST","href":"/v1/sandbox/keys"}],"_links":{"next":{"href":"/v1/admission#provision_sandbox","id":"provision_sandbox"}}},{"id":"provision_sandbox","ordinal":6,"status":"implemented","served_here":true,"purpose":"Core provisions an isolated, seeded, deterministic market for the key: rows in a standing deployment, never new infrastructure, so provisioning is a single idempotent call.","evidence":["sandbox_manifest"],"failure_modes":["sandbox_key_invalid","sandbox_quota_exceeded","sandbox_namespace_conflict","sandbox_contract_version_skew","sandbox_provisioning_unavailable","sandbox_run_active"],"operations":[{"operationId":"provisionSandbox","method":"POST","href":"/v1/sandbox/namespaces"},{"operationId":"resetSandbox","method":"POST","href":"/v1/sandbox/namespaces/current/reset"}],"_links":{"next":{"href":"/v1/admission#execute_validation_flows","id":"execute_validation_flows"}}},{"id":"execute_validation_flows","ordinal":7,"status":"roadmap","served_here":false,"purpose":"The agent exercises the golden paths and the failure paths for its role against seeded deterministic counterparties. The operations are served today; running them as validation flows requires a provisioned sandbox.","evidence":["flow_transcripts"],"failure_modes":["flow_incomplete","invariant_violation"],"operations":[{"operationId":"createSession","method":"POST","href":"/v1/sessions"},{"operationId":"submitOffer","method":"POST","href":"/v1/sessions/{session_id}/offers"},{"operationId":"counterOffer","method":"POST","href":"/v1/offers/{offer_id}/counter"},{"operationId":"commitSession","method":"POST","href":"/v1/sessions/{session_id}/commit"},{"operationId":"getClearing","method":"GET","href":"/v1/transactions/{transaction_id}/clearing"},{"operationId":"fileDispute","method":"POST","href":"/v1/transactions/{transaction_id}/disputes"},{"operationId":"getIntentChain","method":"GET","href":"/v1/transactions/{transaction_id}/intent-chain"}],"_links":{"next":{"href":"/v1/admission#run_conformance","id":"run_conformance"}}},{"id":"run_conformance","ordinal":8,"status":"roadmap","served_here":false,"purpose":"The harness executes the role profile's assertions against the flow transcripts.","evidence":["assertion_results"],"failure_modes":["assertion_failed"],"operations":[{"operationId":"runConformance","method":null,"href":null}],"references":{"extensions":["x-aura-conformance"]},"_links":{"next":{"href":"/v1/admission#receive_certification","id":"receive_certification"}}},{"id":"receive_certification","ordinal":9,"status":"roadmap","served_here":false,"purpose":"Core signs the assertion results as presentable, expiring evidence.","evidence":["certification_attestation"],"failure_modes":[],"operations":[{"operationId":"getCertification","method":null,"href":null}],"_links":{"next":{"href":"/v1/admission#request_production_promotion","id":"request_production_promotion"}}},{"id":"request_production_promotion","ordinal":10,"status":"roadmap","served_here":false,"purpose":"The agent presents certification and requests promotion, gated on the entity verification level the target tier requires.","evidence":["certification_attestation","entity_verification"],"failure_modes":["certification_expired","verification_insufficient"],"operations":[{"operationId":"requestPromotion","method":null,"href":null}]}],"tooling":{"description":"How an agent performs the admission chain. The action path holds the agent's Ed25519 keys and signs the requests in the agent's own environment; the private key never leaves the agent (hosted surfaces read and explain, they never sign). Two ways to act: the local action MCP, or direct REST.","action_mcp":{"package":"@aura-labs-ai/mcp-server-admission","transport":"stdio","install":"npx -y @aura-labs-ai/mcp-server-admission","key_custody":"local","purpose":"A local, key-holding MCP server. It holds an Ed25519 wallet, runs the two-phase domain-control proof, and performs the signed admission requests itself, driving the chain from mint through provision, principal and agent registration, and reset, with a recorded run.","tools":["get_admission_guide","mint_sandbox_key","provision_sandbox","register_principal","register_agent","reset_sandbox"]},"direct_rest":{"description":"The chain is also performable by direct REST with no packaged tool: implement Ed25519 signing against the published test vectors and call the operations named on each phase. This is supported but agent-burdened; the action MCP is the intended completion path.","reference":"x-aura-signature-test-vectors"}},"_links":{"self":{"href":"/v1/admission"},"contract":{"href":"/openapi.json","title":"Canonical machine-readable contract"},"guide":{"href":"https://aura-labs.ai/developers","title":"Human admission guide"},"tooling":{"package":"@aura-labs-ai/mcp-server-admission","title":"The local key-holding action MCP that performs the chain"},"start":{"href":"/v1/admission#discover","id":"discover"}}}