3.5 KiB
summary, read_when
| summary | read_when | |||
|---|---|---|---|---|
| Exec approvals, allowlists, and sandbox escape prompts |
|
Exec approvals
Exec approvals are the companion app guardrail for letting a sandboxed agent run
commands on a real host (gateway or node). Think of it like a safety interlock:
commands are allowed only when policy + allowlist + (optional) user approval all agree.
Exec approvals are in addition to tool policy and elevated gating.
If the companion app UI is not available, any request that requires a prompt is resolved by the ask fallback (default: deny).
Where it applies
Exec approvals are enforced locally on the execution host:
- gateway host →
clawdbotprocess on the gateway machine - node host → node runner (macOS companion app or headless node)
Settings and storage
Approvals live in a local JSON file:
~/.clawdbot/exec-approvals.json
Example schema:
{
"version": 1,
"socket": {
"path": "~/.clawdbot/exec-approvals.sock",
"token": "base64url-token"
},
"defaults": {
"security": "deny",
"ask": "on-miss",
"askFallback": "deny",
"autoAllowSkills": false
},
"agents": {
"main": {
"security": "allowlist",
"ask": "on-miss",
"askFallback": "deny",
"autoAllowSkills": true,
"allowlist": [
{
"pattern": "~/Projects/**/bin/rg",
"lastUsedAt": 1737150000000,
"lastUsedCommand": "rg -n TODO",
"lastResolvedPath": "/Users/user/Projects/.../bin/rg"
}
]
}
}
}
Policy knobs
Security (exec.security)
- deny: block all host exec requests.
- allowlist: allow only allowlisted commands.
- full: allow everything (equivalent to elevated).
Ask (exec.ask)
- off: never prompt.
- on-miss: prompt only when allowlist does not match.
- always: prompt on every command.
Ask fallback (askFallback)
If a prompt is required but no UI is reachable, fallback decides:
- deny: block.
- allowlist: allow only if allowlist matches.
- full: allow.
Allowlist (per agent)
Allowlists are per agent. If multiple agents exist, switch which agent you’re editing in the macOS app. Patterns are case-insensitive glob matches.
Examples:
~/Projects/**/bin/bird~/.local/bin/*/opt/homebrew/bin/rg
Each allowlist entry tracks:
- last used timestamp
- last used command
- last resolved path
Auto-allow skill CLIs
When Auto-allow skill CLIs is enabled, executables referenced by known skills are treated as allowlisted (node hosts only). Disable this if you want strict manual allowlists.
Approval flow
When a prompt is required, the companion app displays a confirmation dialog with:
- command + args
- cwd
- agent id
- resolved executable path
- host + policy metadata
Actions:
- Allow once → run now
- Always allow → add to allowlist + run
- Deny → block
System events
Exec lifecycle is surfaced as system messages:
exec.startedexec.finishedexec.denied
These are posted to the agent’s session after the node reports the event.
Implications
- full is powerful; prefer allowlists when possible.
- ask keeps you in the loop while still allowing fast approvals.
- Per-agent allowlists prevent one agent’s approvals from leaking into others.
Related: