Requests API reference for AI agent approvals
Learn how to create, inspect, and cancel Contro1 requests for approvals, clarifications, and escalations.
Framework guides
Give your OpenClaw personal AI assistant a real, unbypassable guardrail: signed human approval for sensitive actions, a durable audit of everything it does autonomously, and one review queue across many assistants.
Updated Jul 20, 2026
OpenClaw runs autonomously in the background on the channels you already use. Contro1 gives it a signed human approval gate for the few actions that matter and a durable audit trail for everything else.
Copy this skill link into your code agent to add OpenClaw and Contro1 to your system.
OpenClaw is an open-source personal AI assistant that runs on your own machine and answers you on the channels you already use: WhatsApp, Telegram, iMessage, Signal, Slack, Discord, and more. It is not a chatbot. It keeps persistent memory about you, your projects, and your people, it can browse the web, fill forms, run shell commands, manage email and calendar, and it can even write and improve its own skills. It works while you are asleep or at work.
That autonomy is the point, and it is also the risk. An assistant that can book, buy, deploy, delete, message people, and run code on your behalf will eventually reach an action you would not want it to take on its own authority. The question is not whether it is capable. It is which actions should stop for you, and how you know what it did when they did not.
This connector puts a governance layer around OpenClaw without slowing down the assistant. It does two jobs.
First, it turns the assistant's sensitive actions into signed, role-routed human approvals. OpenClaw already knows how to stop before a risky host command; the connector routes that decision to Contro1, waits for a signed answer, verifies it, and only then lets the action run. Second, it gives you a durable audit trail: every approved, denied, and auto-allowed action, plus - through an agent-side skill - the autonomous actions the assistant took that never needed an approval at all.
If you already talk to your assistant in WhatsApp, routing approvals somewhere else can look like a step sideways. It is not, and the reason is the nature of the work. OpenClaw runs in the background and takes many small actions on its own. You do not want a chat ping for each one, and you should not have to babysit the thread to stay safe.
What you actually want is two different things at once: to be interrupted only for the few actions that genuinely need an accountable, signed decision, and to have a complete record of everything else it did while you were busy. A chat reply is a casual "ok". A Contro1 approval is a signed, time-stamped, role-attributed decision with evidence attached - the right instrument when the action moves money, changes access, or cannot be undone. The two are not the same tool, and high-stakes actions deserve the stronger one.
A dedicated review surface also scales in a way a chat thread cannot. If you run more than one assistant - or a team runs several - WhatsApp gives you one noisy thread per assistant. Contro1 gives you one queue for all of them, with routing so the right owner gets the right decision and coverage so nothing waits on a single person being online.
OpenClaw is self-hosted, so it is normal to end up with several: one per person, one per project, one per device. Each one is autonomous, and each one occasionally needs a human.
Point every instance's bridge at the same Contro1 organization and their approvals land in one queue. A single reviewer, or a rota, can clear approvals from all of them, and role routing sends a finance action to finance and a deploy to platform no matter which assistant raised it. Evidence for every instance is searchable in one place, which is what an auditor or an incident review actually needs.
A guardrail that lives in the prompt is a suggestion: a capable, self-improving agent can reason its way around an instruction. This connector does not rely on instructions. OpenClaw enforces exec approvals out-of-process, on the execution host itself - the openclaw process on the gateway machine, or the companion app on a node. The model that decides to run a command is not the thing that runs it. It can only request; the host holds the gate.
Because enforcement is external, the way to make it truly unbypassable is to deny the assistant any authority to loosen it. Three rules do that, and they are all things you configure once:
Contro1 is where the approval decision happens and where evidence is kept. You create an API key and choose who reviews risky OpenClaw actions.
The connector is the small server in the repo. Deploy examples/typescript on any host that can receive HTTPS: Cloud Run, ECS, Kubernetes, Render, Fly.io, or a VM. It runs as an OpenClaw operator client, outside the gateway process.
Set PUBLIC_BASE_URL to the public address of that server. Contro1 posts the signed decision to PUBLIC_BASE_URL/contro1/callback, the bridge verifies the signature, and only then resolves the approval in OpenClaw.
The bridge can only govern actions OpenClaw stops for. OpenClaw exec mode has five values: deny, allowlist, ask, auto, and full. Set it to ask, or to auto with a conservative allowlist, so misses pause instead of running.
Then keep the fallback closed. When a prompt is required but no approver is reachable, askFallback decides what happens: deny, allowlist, or full. Keep it deny so an unreachable bridge means the action is denied, never run. This single setting is what makes the approval a gate rather than a suggestion.
The connector ships two skill files, and they do different jobs. The contro1-openclaw skill is the build guide for whoever sets up the bridge. The contro1-openclaw-agent skill installs into the assistant's own skills directory and teaches it the cooperative behavior: how to give a reviewer clear, factual context when an action needs approval, and to POST a short audit note to the bridge after each autonomous action.
Be clear about the split. The agent-side skill improves quality and completeness - good context, honest logging. It is not the enforcement. A well-behaved assistant follows it; an adversarial one cannot escape the approval path either way, because that path does not trust the assistant to call anything. Enforcement is the host guardrail; the skill is the good manners on top.
Use OPENCLAW_TRANSPORT=mock while evaluating the repo. This needs no OpenClaw install: you POST an approval to /mock/approvals as if OpenClaw had raised one, and watch it flow to Contro1.
Without a CONTRO1_API_KEY, the bridge runs in simulated mode and logs the request it would create, so you can read the exact payload before connecting a real reviewer.
Switch to OPENCLAW_TRANSPORT=cli against a real gateway once the operator token, exec mode, and public callback URL are ready.
An approval is permission for one exact action, not a standing licence. OpenClaw enforces this on its own side: it stores the canonical systemRunPlan at approval time and rejects a forwarded run whose command, cwd, agentId, or sessionKey changed after approval. It even re-binds a script to one concrete file and denies the run if that file changed after approval.
The bridge mirrors that rule on the Contro1 side. It hashes the machine-observed facts the reviewer saw, and before resolving an approved decision it re-reads the approval and re-checks the hash. Any drift, or an approval that is no longer pending, is a hard denial.
Policy classifies each approval from machine-observed facts only: the command OpenClaw captured, the agent id, and the session key. Text the assistant authored about its own intent is never consulted for a security decision.
| Decision | Default behavior |
|---|---|
| Auto-allow | Only when an operator-configured auto-allow pattern matches and the session is not production. Nothing is auto-allowed out of the box. |
| Require approval | Every plugin/system-agent approval, every production-session command, and any sensitive shape: pipe-to-shell, sudo, ssh, cloud CLIs, kubectl, terraform apply/destroy, docker run/exec, git push, npm publish, chmod 777, secret/.env/.ssh access. |
| Block | Before a reviewer sees them: rm -rf /, fork bombs, mkfs, dd to a device, and unknown agents when an allowed-agent list is set. |
The connector emits audit-first event names so security, operations, and compliance can search the full timeline - both the approvals and the assistant's self-logged autonomous work.
OpenClaw expires a pending exec approval after 30 minutes by default, then denies the waiting command. The bridge sets the Contro1 request expires_at to the approval's own expiry, so a reviewer is never asked to approve something OpenClaw has already given up on. For high-value actions, use Contro1 role routing, quorum, and SLA escalation to make sure a decision lands inside that window.
The bridge reaches OpenClaw through the documented openclaw approvals CLI by default. A direct Gateway WebSocket transport would subscribe to exec.approval.requested and resolve via approval.resolve, learning about approvals the instant they are raised.
That transport ships as a preview and is intentionally not implemented: the connect handshake requires signing the gateway challenge with the device-auth v3 payload from @openclaw/gateway-client, and that package is not yet published on npm as of OpenClaw v2026.7.1. The connector does not guess at an authentication payload, so the CLI transport is the supported path until the package publishes.
Beyond the approval call, attach identity, a run trace, the tools you invoked, and the context you retrieved. Each field is optional — add what you have. The verified identity always comes from your API key; a caller-supplied actor.agent_id is recorded as a claimed sub-agent until an admin verifies it.
The signed webhook is cryptographic proof of a human decision. Verify it inside the system that executes the action - not inside the agent. Any tool that must never run without human sign-off (payments, deploys, data deletion) should refuse to act without a verified approval; that way no agent, including shadow agents nobody registered, can trigger it by skipping Contro1.
The connector creates the runtime gate. The operating model around it defines which actions pause, which owner receives the decision, how a timeout escalates, and where the outcome is recorded across agent frameworks.
runtime human approval for AI agents · enterprise AI agent control plane
Because the assistant works in the background and takes many actions on its own. You want to be interrupted only for the few that need an accountable, signed decision, and to have a durable audit of everything else. A chat reply is a casual ok; a Contro1 approval is signed, role-routed, and evidence-bearing. It also lets one reviewer handle approvals from many assistants in a single queue. A native WhatsApp approval surface is on the roadmap; the value of signed approvals and audit is the same either way.
Enforce it outside the model. OpenClaw runs exec approvals on the execution host, so the assistant can only request a command, not run it around the gate. Then remove its authority to loosen the rules: keep the host approvals file out of its workspace, require operator.admin for config changes (which its session should not hold), set skills.workshop.approvalPolicy to pending so it cannot rewrite its own skills, keep askFallback at deny, and let the bridge - not the assistant - hold the approvals credential.
Yes. Approved, denied, auto-allowed, and blocked actions are all recorded. The contro1-openclaw-agent skill additionally teaches the assistant to POST a short audit note after each autonomous action, so background work that never needed an approval is captured too - in a durable, exportable trail beyond OpenClaw's own 30-day metadata ledger.
No. It runs as an external operator client outside the gateway. OpenClaw native plugins run in-process and are not sandboxed, so an approval control inside a plugin would have gateway-wide blast radius. The bridge only needs an operator token scoped to approvals.
OpenClaw stable v2026.7.1. The default CLI transport uses only documented openclaw approvals commands, so it is resilient to internal changes; the gateway WebSocket transport stays preview pending the @openclaw/gateway-client npm release.
Learn how to create, inspect, and cancel Contro1 requests for approvals, clarifications, and escalations.
Validate signed Contro1 callbacks and safely resume AI workflows after approvals, rejections, expirations, or escalations.
Use Contro1 audit records to log actions that agents are authorized to run autonomously, and correlation_id to connect requests and logs into one case timeline.
What OpenClaw guardrails already give you, where they stop, and how to add role routing, quorum, SLA escalation, and signed audit evidence with Contro1.
Learn when AI agents should require human approval, what actions should stay gated, and how to design HITL for production workflows.
Compare the best AI agent control plane tools for 2026, including Contro1, Microsoft Agent 365, Galileo Agent Control, ValidMind, Permit.io, and observability platforms. See what each layer controls before an agent acts.