Summary
The 2026.4.1 update introduced sandboxing and exec approval changes that completely broke exec for all existing single-operator setups. There was no migration guide, no warning on startup, and no way to opt out using documented config options. A full working day was lost trying to recover.
What broke
- Docker sandbox auto-created for all agents with no sandbox config (via
agents.defaults.sandbox.mode = "all" set automatically by update)
- Sandbox container persists across gateway restarts via
~/.openclaw/sandbox/containers.json — removing it manually doesn't work because the gateway recreates it
tools.exec.ask = "off" does nothing — ask and security are separate axes, but this is not documented
tools.exec.security = "none" is rejected — not a valid value, but the valid values (deny, allowlist, full) are not shown in help or docs
exec-approvals.json is undocumented — its location, format, purpose, and valid values are unknown to operators
security: "none" in exec-approvals.json silently falls back to allowlist — no error, just broken
tools.exec.host = "gateway" ignored while sandbox container exists — routing config has no effect inside a sandbox session
Impact
- All cron exec jobs fail silently
- Agents report "allowlist miss" or "exec denied" on every command
- Approval popups appear that cannot be permanently dismissed
- No amount of config changes fixes it without also destroying the sandbox container AND removing its registry entry from
containers.json
- Required 4+ separate GitHub issues and 2+ hours of debugging to partially recover
What was needed (not documented anywhere)
// ~/.openclaw/exec-approvals.json
{
"defaults": { "ask": "off", "security": "full" },
"agents": { "*": { "ask": "off", "security": "full" } }
}
Plus manually: docker rm -f openclaw-sbx-agent-main-* AND remove entry from ~/.openclaw/sandbox/containers.json
Request
- Do not silently enable sandboxing on existing setups during updates
- Document
exec-approvals.json properly with all valid values
openclaw doctor --fix should detect broken exec approval state and offer to fix it
- Add an
operator or private mode that disables all approval friction for single-user setups
- Ship a migration guide when security defaults change between versions
Summary
The 2026.4.1 update introduced sandboxing and exec approval changes that completely broke exec for all existing single-operator setups. There was no migration guide, no warning on startup, and no way to opt out using documented config options. A full working day was lost trying to recover.
What broke
agents.defaults.sandbox.mode = "all"set automatically by update)~/.openclaw/sandbox/containers.json— removing it manually doesn't work because the gateway recreates ittools.exec.ask = "off"does nothing —askandsecurityare separate axes, but this is not documentedtools.exec.security = "none"is rejected — not a valid value, but the valid values (deny,allowlist,full) are not shown in help or docsexec-approvals.jsonis undocumented — its location, format, purpose, and valid values are unknown to operatorssecurity: "none"inexec-approvals.jsonsilently falls back toallowlist— no error, just brokentools.exec.host = "gateway"ignored while sandbox container exists — routing config has no effect inside a sandbox sessionImpact
containers.jsonWhat was needed (not documented anywhere)
Plus manually:
docker rm -f openclaw-sbx-agent-main-*AND remove entry from~/.openclaw/sandbox/containers.jsonRequest
exec-approvals.jsonproperly with all valid valuesopenclaw doctor --fixshould detect broken exec approval state and offer to fix itoperatororprivatemode that disables all approval friction for single-user setups