DashClaw, the approval layer for unattended AI agents<br>When your coding agent tries something destructive, DashClaw catches it before it runs.<br>It freezes the action and asks you first, with one click, from anywhere. A fail-closed approval layer for the long, unattended runs where your agent's native permission prompts cannot help, because they need you at the keyboard.<br>Install the runtime npx dashclaw up
Installs the runtime, provisions Postgres, mints your key, and wires your first hook. No account on the path to your first caught action.<br>Governing Claude Code? Install the plugin Start a hosted trial<br>Rather not deploy yet? The hosted trial lets you see the Approvals inbox in your browser, no install.<br>Enforced at the hook seam in Claude Code, Codex, and Hermes, and at the OpenClaw gateway. Honored cooperatively by the Node and Python SDKs, the MCP server, and REST.<br>MIT licensed·Self hosted·No account to your first block·Your data stays on your infrastructure
Governed actionexample<br>agent_iddeploy-bot<br>action_typedeploy<br>declared_goal"Ship auth-service v2.1 to production"<br>risk_score92 / 100<br>matched_policyproduction_deploy_gate<br>REQUIRE_APPROVALheld, routed to on-call+0.3s<br>approved by wes via Discord+41s<br>deploy executed, outcome success+47s<br>act_9f2c47b1 · dc_sig_v1_eyJpZCI6… signed
Intercepted, held, approved, executed, recorded. Run this call against a live instance
The whole loop, on film · 55 seconds
Sound on. An agent action intercepted, held for a one-click approval, and recorded in the ledger.
Live demo, real demo endpoints<br>Try a real governance decision<br>Pick an action, hit Evaluate, and watch DashClaw enforce policy in real time. Every call hits the same governance runtime that ships to your instance.
Pick an action to evaluate<br>Sync user metricsDeploy to productionDrop production users table
Declared goalDeploy auth-service v2.1 to production with new session token rotation.SDK call<br>await claw.guard({<br>agent_id: 'openai-deployer-1',<br>action_type: 'deploy',<br>risk_score: 85,<br>declared_goal: 'Deploy auth-service v2.1 to production with new session token rotation.',<br>});<br>Evaluate<br>Governance result<br>Pick an action and click Evaluate. The result will appear here, including the matched policy, the risk score, and what a human approver would see.
Guard decisions are live against the demo deployment. Approval clicks resolve locally so visitors can explore the flow without an account; your own instance routes them to /api/actions/:id/approve.
Native permission prompts protect you at the keyboard. DashClaw protects the runs you walk away from.<br>Claude Code and Codex already ship permission prompts for the at-keyboard user, for free. DashClaw does not compete with those. It does the job those prompts structurally cannot, because they need you present: it freezes the dangerous call and lets you approve it minutes or hours later, from anywhere.
DimensionNative permission promptsDashClawWho it protectsYou, while you watch each promptThe run you walked away fromWhen you must be presentEvery prompt, in real timeNever; approve later, from a phonePolicy scopePer session, per machine allowlistOne policy across every runtime and sessionAudit trailNone you can exportSigned, replayable ledger (Ed25519, JWKS)Interruption rateFixed prompts, no tuningCalibrated to a target false-block bound
This is not observability either. LangSmith and Langfuse record what an agent did, after it did it. DashClaw decides what it is allowed to do, before it runs.
The whole product is one loop<br>Intercept, decide, approve, prove. The hook seam runs it for you in Claude Code, Codex, and Hermes; the SDK, MCP server, and REST run the same four calls when you want explicit control.
govern-forcepush.ts<br>const claw = new DashClaw();
// 1. guard: policy decides before anything runs<br>const g = await claw.guard({<br>action_type: 'shell',<br>act: { kind: 'shell', command: 'git push --force origin main' },<br>});
// 2. createAction: open the decision record<br>const action = await claw.createAction({<br>action_type: 'shell',<br>declared_goal: 'Force-push the rebased branch',<br>});
// 3. waitForApproval: freeze until a human resolves it<br>if (g.decision === 'require_approval') {<br>await claw.waitForApproval(action.action_id);
// 4. close the record: one-shot, durable, retry-safe<br>try {<br>await run();<br>await claw.reportActionSuccess(action.action_id, 'Pushed');<br>} catch (err) {<br>await claw.reportActionFailure(action.action_id, err.message);<br>1Intercept<br>A PreToolUse hook in Claude Code, Codex, or Hermes (plus dashclaw_invoke and the OpenClaw gateway) catches a tool call before it executes.
2Decide<br>The guard engine risk-scores the call against your policies into the lattice allow 3Approve<br>require_approval freezes the action and pages a human, who approves or denies with one click, from the Approvals inbox or a phone. Grants are single-use and bound to the exact action. Long runs can submit their whole plan upfront: one review card, per-step verdicts, and each approved step becomes a...