Turn any sensitive OpenClaw tool call into a human approval routed to Contro1 for role routing, quorum, and signed audit evidence. Free up to 1,000 approval requests per month.
Install
openclaw plugins install clawhub:@contro1/openclaw-approvals-pluginContro1 Approvals - OpenClaw plugin
Turn any sensitive OpenClaw tool call into a human approval routed to Contro1. Free up to 1,000 approval requests per month.
This is the ClawHub-installable half of the Contro1 OpenClaw connector. The external bridge governs the exec and plugin approvals OpenClaw already raises; this plugin extends the coverage to any sensitive tool call - sending an email, buying something in the browser, deleting a file, deploying - by pausing it for approval through OpenClaw's before_tool_call hook.
Install
-
Install
contro1-approvalsfrom ClawHub into your OpenClaw. -
Turn on plugin approval forwarding so the bridge can route the approvals:
bash openclaw config set approvals.plugin.enabled true -
Run the bridge so approvals go to Contro1. Without it, a paused tool call falls back to OpenClaw's own
/approvein chat, with no role routing or signed evidence.
What it pauses
A before_tool_call hook fires on every tool call, so the default is allow - only sensitive calls pause, or the assistant would stall on every step.
- Require approval: send/message, buy/pay/transfer, deploy/publish, delete/destroy, exec/shell, browser submit/checkout, credential/secret access, permission grants - or any call carrying a sensitive parameter (
amount,to,recipient, ...). - Critical (no standing allow-always): payments, deletes, deploys, credential access.
- Always allow: reads and drafts (
get_*,list_*,read_*,search_*,draft_*).
Override the defaults with the CONTRO1_TOOL_POLICY environment variable (a JSON string matching ToolPolicyConfig in src/policy.ts).
No credentials, no network
OpenClaw plugins run in-process with the gateway and are not sandboxed, so this plugin is deliberately minimal: it holds no Contro1 credentials and makes no network calls. It only classifies a tool call and returns requireApproval. Everything that touches a secret - creating the Contro1 request, verifying the signed decision, keeping evidence - stays in the external bridge.
Fail closed
Unknown, malformed, mismatched, missing, and timed-out decisions all fail closed: OpenClaw denies the call. The deprecated timeoutBehavior field is intentionally not set.
Building from source
Only needed if you fork or customize the plugin; installing from ClawHub needs none of this.
npm install
npm run build
npm run manifest # openclaw plugins build --entry ./dist/index.js
npm run validate # openclaw plugins validate --entry ./dist/index.js
openclaw plugins build aligns openclaw.plugin.json and the package.json openclaw.compat.pluginApi / openclaw.build.openclawVersion fields to your installed OpenClaw. On install, OpenClaw validates pluginApi and minGatewayVersion compatibility.
