Skip to main content

Human Approvals for High-Risk Actions

When a governed agent's questionnaire says its high-risk actions need a human (question A4), Clevername pauses those tool calls and asks you through SignedApproval. You approve with a passkey; the decision comes back as an Ed25519-signed receipt that Clevername verifies before the call is allowed to run.

Key Concepts

What SignedApproval is

SignedApproval (signedapproval.net) is a separate, free-for-individuals service from the same team as Clevername. It does one thing: it asks a named human to approve an action and returns cryptographic proof of the answer. Clevername uses it as the approver of record for the A4 gate. Your agents never talk to SignedApproval directly; hub-core does, and it verifies every signature itself.

When it appears

Only when an agent is in an approval context. You will see SignedApproval mentioned in three places and nowhere else: under question A4 in the questionnaire once you answer “yes”, on an agent’s Governance page when A4 is on but no approver is connected, and under Settings → Notifications where the connection lives. Agents without A4 never see it, and Clevername never prompts you about it on unrelated dashboards.

What it costs

SignedApproval is free for individuals and small teams (unlimited approvals and verifications). Enterprise plans exist for SCIM, on-prem signing keys, and SLAs. Clevername does not charge for the integration.

How a gated call flows

  1. 1

    Agent calls a tool

    Through the MCP gateway or the governed proxy, as usual.

  2. 2

    The gate matches A4

    hub-core checks the call against the agent's high-risk action patterns and risk categories from its guardrail profile.

  3. 3

    The call is parked

    Nothing executes. The agent receives a pending-approval response with a request_id it can poll.

  4. 4

    You get asked

    SignedApproval shows who is asking, what the action is, the redacted arguments, and why it was flagged.

  5. 5

    You decide with a passkey

    Approve or deny. The decision is signed with Ed25519; Clevername verifies the signature before acting on it.

  6. 6

    The call resumes or stays blocked

    Approved: the parked call executes once, bound to the exact arguments you saw. Denied or expired: it never runs.

Important
If A4 is on and no SignedApproval account is connected, the gate fails closed: the high-risk action is refused with approval_unavailable and no request is created. Nothing is skipped or auto-approved. Connect an approver before you rely on A4.
Connect SignedApproval
1

Start from an approval context

Click Connect SignedApprovalunder question A4 in the questionnaire, on the agent’s Governance page banner, or from Settings → Notifications → SignedApproval.

2

Authorize on signedapproval.net

You are sent to signedapproval.net to sign in (Google, passkey, or email) and authorize Clevername. A free account is created if you don’t have one. Register a passkey when prompted; that passkey is what signs your decisions.

3

Choose where you will approve

The web dashboard at signedapproval.net lists pending requests and approves with your passkey. The iOS app adds push notifications and Face ID — download it from the App Store. Either surface produces the same signed receipt.

4

Send a test push

Back in Clevername, Settings → Notifications → SignedApproval shows Connected as <email>. Use Send test push to confirm delivery before an agent needs it.

What the approver sees

  • Who: the agent’s name, type, and approved purpose.
  • What: the tool and operation, plus a redacted, size-capped summary of the arguments. Secrets and PII are masked before anything leaves hub-core.
  • Why: the risk category and the pattern or argument finding that triggered the gate.
  • Binding: the signed action text includes a fingerprint of the arguments, so an approval for “delete user A” can never authorize “delete user B”.

Receipts and verification

Every decision is an Ed25519 signature over the request, the action text, and the decision. hub-core verifies the signature against SignedApproval’s published key before it releases or discards the parked call, and records the result with the approval. Each receipt has a public verify link of the form signedapproval.net/verify/<request_id> that anyone (an auditor, a customer) can open to confirm the decision without a Clevername login. Parked requests, decisions, and expiries are visible in the approvals queue and in the audit trail.

Tuning and shadow mode

The approval policy is per agent and lives on the agent’s Governance page. You can narrow or widen the high-risk patterns, pre-authorize risk categories that are in-mandate, and set how out-of-mandate destructive arguments are handled (observe, block, or approve). Start new agents in observe/shadow mode: the gate records what it would have asked about without parking anything, so you can see the request volume before turning on real approvals. Free and Pro orgs approve their own agents; Team and Enterprise orgs can route approvals to a named approver.

Troubleshooting

SymptomCauseFix
Tool call fails with "requires human approval, but no SignedApproval account is connected"The agent has A4 on, but the agent owner has not connected SignedApproval. The gate fails closed: it refuses the action rather than running it unapproved, and no request is created.Connect SignedApproval from Settings > Notifications (or the banner on the agent's Governance page), then retry the action. One connection covers every agent you own.
Error code -32404 / status "pending"The call is parked and waiting for a decision. This is the gate working.Approve or deny in SignedApproval. Agents can poll the request_id returned with the error until the decision lands.
Request shows as expiredNobody decided within the org's approval TTL (12 hours by default; configurable per org). Expired requests are treated like a denial: the parked call never runs.Have the agent re-issue the action. A fresh request is created with the same redaction and a new expiry.
You were not notifiedPush notifications require the SignedApproval iOS app (free on the App Store). The web dashboard at signedapproval.net always lists pending requests.Check the SignedApproval dashboard, then use "Send test push" under Settings > Notifications > SignedApproval to confirm delivery. Re-notify from the approvals queue when one is shown for a parked request.
Too many requests for routine actionsThe agent's high-risk patterns or risk categories are broader than its real job.Tune the approval policy on the agent's Governance page: narrow the patterns, pre-authorize in-mandate categories, or start in a shadow mode that records what would have been gated without blocking.
Tip
SignedApproval’s own documentation (API, SDKs, iOS app, receipts) lives at signedapproval.net/docs. For the questionnaire side of this, see The Questionnaire (question A4).