Sandbox vs Tool Policy vs Elevated
Clawdbot has three related (but different) controls:- Sandbox (
agents.defaults.sandbox.*/agents.list[].sandbox.*) decides where tools run (Docker vs host). - Tool policy (
tools.*,tools.sandbox.tools.*,agents.list[].tools.*) decides which tools are available/allowed. - Elevated (
tools.elevated.*,agents.list[].tools.elevated.*) is a bash-only escape hatch to run on the host when you’re sandboxed.
Quick debug
Use the inspector to see what Clawdbot is actually doing:- effective sandbox mode/scope/workspace access
- whether the session is currently sandboxed (main vs non-main)
- effective sandbox tool allow/deny (and whether it came from agent/global/default)
- elevated gates and fix-it key paths
Sandbox: where tools run
Sandboxing is controlled byagents.defaults.sandbox.mode:
"off": everything runs on the host."non-main": only non-main sessions are sandboxed (common “surprise” for groups/channels)."all": everything is sandboxed.
Tool policy: which tools exist/are callable
Two layers matter:- Global/per-agent tool policy:
tools.allow/tools.denyandagents.list[].tools.allow/agents.list[].tools.deny - Sandbox tool policy (only applies when sandboxed):
tools.sandbox.tools.allow/tools.sandbox.tools.denyandagents.list[].tools.sandbox.tools.*
denyalways wins.- If
allowis non-empty, everything else is treated as blocked.
Elevated: bash-only “run on host”
Elevated does not grant extra tools; it only affectsbash.
- If you’re sandboxed,
/elevated on(orbashwithelevated: true) runs on the host. - If you’re already running direct, elevated is effectively a no-op (still gated).
- Enablement:
tools.elevated.enabled(and optionallyagents.list[].tools.elevated.enabled) - Sender allowlists:
tools.elevated.allowFrom.<provider>(and optionallyagents.list[].tools.elevated.allowFrom.<provider>)
Common “sandbox jail” fixes
“Tool X blocked by sandbox tool policy”
Fix-it keys (pick one):- Disable sandbox:
agents.defaults.sandbox.mode=off(or per-agentagents.list[].sandbox.mode=off) - Allow the tool inside sandbox:
- remove it from
tools.sandbox.tools.deny(or per-agentagents.list[].tools.sandbox.tools.deny) - or add it to
tools.sandbox.tools.allow(or per-agent allow)
- remove it from
“I thought this was main, why is it sandboxed?”
In"non-main" mode, group/channel keys are not main. Use the main session key (shown by sandbox explain) or switch mode to "off".