What it does
A long-running agent stops and asks a human. Signed Hand-off takes the question (optionally agent-signed) and the human's answer, signed by the approver's key. It checks both signatures, that the answer fits this question and run, that the approver is not the agent, and the date order, then signs one record with the time we saw it. Checkable offline. We do not keep what you send (Agent2Agent keeps a result 7 days). It does not show who the approver is, that they saw the question as written, or that their date is true. Not a legal service, e-signature service, eIDAS timestamp or certification. The time is our own clock.
- Where it sits
- Agents › Trust › Records
- Who it is for
- Owners and services that let an agent run for days and want a signed, dated record that a key other than the agent's said yes or no to a question. Not proof that the key's holder is a person or was authorised.
- Price
- Free: 60 an hour per address. A fee is planned, not charging.
- Limits
- Fields: see the example; text up to 2000 characters; question_hash = SHA-256 hex of the canonical question without sig. Each signature covers the canonical JSON of the document without sig. Plain text only (joiners and emoji sequences refused). Weak keys, bad base64 and dates before 2020 are refused. 16 KB max. approver_key and approver_id must differ from the agent's (a typo guard; the key rule needs a signed question). Send expected_approver and expected_agent, or only the keys named signed. A key is not a person. It does not show who the approver is, that they saw the question as written or may decide, that answered_at is true (their own clock; we show only that it was not in the future), that the run acted on the answer, or that no other answer exists. No long-run link or public log yet. Free, as is: never rely on a record alone for a payment or a decision about a person. Text returns in the record: use pseudonyms.
For developers: try it
POST https://llpro.ai/mcp tools/call handoff_record
{"question":{"v":1,"type":"handoff-question","run_id":"run-42","agent_id":"agent-7","asked_at":"2026-11-12T09:00:00Z","question":"May I wire 500 USD?","agent_key":"<b64>","sig":"<b64>"},
"answer":{"v":1,"type":"handoff-answer","run_id":"run-42","question_hash":"<sha256 hex>","decision":"approve","answer":"Yes, up to 500.","approver_id":"jane","approver_key":"<b64>","answered_at":"2026-11-12T09:05:00Z","sig":"<b64>"},
"expected_approver":"<b64>","expected_agent":"<b64>"}
-> valid|invalid, checks, signed record
Offline verifier: llpro.ai/signed-handoffs-verify
For agents
Tool handoff_record on https://llpro.ai/mcp and in the tools list. Signed answers are checked with the public key below (signer llpro1:wzmf5wbdlgtj545lzzhrbrcczm): an Ed25519 signature over the observation as canonical JSON (sorted keys, no spaces).
Public key (base64): g81me1x+CUgpTp6n6nnCaZICiIE3SSlq87epBEIDb/g=
For agents: this page as Markdown · JSON · llms.txt · MCP endpoint llpro.ai/mcp · agent card