One human answer,
delivered exactly once.
Handoff is an open protocol for the moment a program needs a person. A request for a human decision is stated as typed data, reaches someone, comes back exactly once, and leaves a receipt.
Ask, decide, redeem.
Ask
Your agent states the decision as typed fields against a declared schema, with the required authority named on the request itself.
Decide
The request reaches a person. A machine principal can never answer it; the server refuses by principal type, not by role or configuration.
Redeem
The answer authorizes exactly one effect. A retry converges on the original outcome; a second spend is refused.
Every clause is load-bearing.
One human answer
A specific person acted, and the record says who. Clearance is asserted by a human, never inferred from a side effect.
Exactly once
An answer is consumed when it is used. A stored yes cannot be spent a second time by a retry, a replay, or a duplicate delivery.
As typed data
The answer is a value against a declared schema, not free text a prompt has to interpret. Unknown field types are rejected rather than degraded into a text box.
Authorizing one effect
The answer is bound to the specific thing it was shown against. It does not generalize to the next call, the next run, or a similar-looking request.
The decision has a receipt.
Every settled request mints a receipt naming who decided, what was granted, and when. Receipts land on a hash chain, so the record of human decisions is append-only and checkable. This one is real; it settled the exchange above.
- Request
- req_01KYXQ8TGWSVT1JFEN2594DKAY
- Decided by
- usr_01K3M7QW8ZC4YRXB2N6VD9FTHE · human · 2026-08-01T03:54:39Z
- Grants
- {"decision":"retry_once"} · single_use
- Redeemed
- first_redemption: true · a retry converged · a new key was refused
Stated plainly.
Verified live
- 26/26 Level 1 conformance cases pass against the deployed service
- A requester principal cannot answer its own request
- The same effect key converges; a second spend is refused
- Every receipt lands on a hash chain
In the repository
- Protocol v0.1, frozen: 21 invariants, OpenAPI 3.1, signing test vectors
- A Rust reference server, the target of the conformance suite
- TypeScript and Python SDKs with zero runtime dependencies
Not claimed
- It does not resume your program. Your code asks, waits however it prefers, and receives an answer
- Self-hosting does not come with reach. Sender reputation and carrier relationships do not ship in a container
The spec, the server, the suite.
Apache-2.0. One repository holds the frozen v0.1 protocol, the Rust reference server, the 26-case Level 1 conformance suite, and both SDKs.
https://handoff.omegas.dev/v1