UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

156 lines (116 loc) • 7.32 kB
--- summary: "Manage sandbox runtimes and inspect effective sandbox policy" title: Sandbox CLI read_when: "You are managing sandbox runtimes or debugging sandbox/tool-policy behavior." status: active --- Manage sandbox runtimes for isolated agent execution: Docker/Podman containers, SSH targets, or OpenShell backends. [`openclaw agent exec`](/cli/agent#agent-exec) preserves a sandbox selected by the inherited config or `--config`, including its execution routing. Without a configured sandbox, its defaults allow full Gateway-host execution and restrict filesystem tools to `--cwd`. `--isolated` and `--auth-env-only` skip config inheritance and use those defaults. ## Commands ### `openclaw sandbox list` List sandbox runtimes with status, backend, config match, age, idle time, and associated session/agent. For configured plugin-provided backends such as OpenShell, the CLI loads the owning backend plugin before checking live runtime status. Browser-only operations do not require backend plugin activation. ```bash openclaw sandbox list openclaw sandbox list --browser # browser containers only openclaw sandbox list --json ``` ### `openclaw sandbox recreate` Remove sandbox runtimes to force recreation with current config. Runtimes are recreated automatically the next time the agent is used. ```bash openclaw sandbox recreate --all openclaw sandbox recreate --agent mybot # includes agent:mybot:* sub-sessions openclaw sandbox recreate --session "agent:main:main" openclaw sandbox recreate --browser --all # only browser containers openclaw sandbox recreate --all --force # skip confirmation ``` Options: - `--all`: recreate all sandbox containers - `--session <key>`: recreate the runtime with this exact scope key (as shown by `sandbox list`); no short-name expansion - `--agent <id>`: recreate runtimes for one agent (matches `agent:<id>` and `agent:<id>:*`) - `--browser`: only affect browser containers - `--force`: skip the confirmation prompt Pass exactly one of `--all`, `--session`, or `--agent`. Recreation requires exclusive offline ownership of the selected state directory. If its Gateway is running, the command refuses before inspecting or removing runtimes. Stop the Gateway through its service owner, wait for ownership to release, then rerun the command. Offline ownership stays held through confirmation and accepted teardown; a starting Gateway waits until cleanup settles. `--force` does not bypass this ownership check. See [local state owner routing](/gateway/protocol/versioning#local-state-owner-routing) for owner discovery, refusal states, and compatibility boundaries. Scoped recreation selects registry entries before inspecting their backends. An unrelated runtime on another Podman connection or an unavailable backend does not block `--session` or `--agent`. The selected runtime still requires its recorded target to be active and reachable; `--force` only skips the confirmation prompt. Browser-only recreation does not inspect regular sandbox runtimes. When recorded Podman targets differ, an unscoped `sandbox list` can still fail its target check. Restore the affected runtime's original connection, use its known exact scope key with `recreate --session`, and review the preview before confirming. If you do not know the exact scope, keep the registry intact; do not guess a key, broaden to `--all`, or rewrite its recorded target to bypass validation. For `ssh` and OpenShell `remote`, recreate matters more than with Docker: the remote workspace is canonical after the initial seed, `recreate` deletes that canonical remote workspace for the selected scope, and the next run reseeds it from the current local workspace. ### `openclaw sandbox explain` Inspect the effective sandbox mode/scope/workspace access, sandbox tool policy, and elevated-tool gates (with fix-it config key paths). The report keeps `workspaceRoot` as the configured sandbox root and separately shows the effective host workspace, backend runtime workdir, and Docker mount table. For `workspaceAccess: "rw"`, the effective host workspace is the agent workspace rather than a directory below `workspaceRoot`. ```bash openclaw sandbox explain openclaw sandbox explain --session agent:main:main openclaw sandbox explain --agent work openclaw sandbox explain --json ``` Unlike `recreate --session`, this accepts short session names (for example `main`) and expands them against the resolved agent. An explicit `--agent` is sufficient for multi-agent fleets with no implicit owner; sandbox explanation does not require or guess a default first. ## Why recreate is needed Updating sandbox config does not affect running containers: existing runtimes keep their old settings, and idle runtimes are only pruned after `prune.idleHours` (default 24h). Regularly used agents can keep stale runtimes alive indefinitely. `openclaw sandbox recreate` removes the old runtime so the next use rebuilds it from current config. <Tip> Prefer `openclaw sandbox recreate` over manual backend-specific cleanup. It uses the Gateway's runtime registry and avoids mismatches when scope or session keys change. </Tip> ## Common triggers Run `openclaw sandbox recreate --all` after any of these changes: - Container sandbox image update: `agents.defaults.sandbox.docker.image` - Sandbox config: `agents.defaults.sandbox.*` - SSH target/auth: `agents.defaults.sandbox.ssh.{target,workspaceRoot,identityFile,certificateFile,knownHostsFile,identityData,certificateData,knownHostsData}` - OpenShell source/policy/mode: `plugins.entries.openshell.config.{from,mode,policy}` - `setupCommand` — `--agent <id>` recreates one agent instead of all <Note> Runtimes are automatically recreated when the agent is next used. </Note> ## Registry migration Sandbox runtime metadata lives in the shared SQLite state database. Older installs may have legacy registry files that regular reads no longer rewrite: - `~/.openclaw/sandbox/containers.json` - `~/.openclaw/sandbox/browsers.json` - one JSON shard per container/browser under `~/.openclaw/sandbox/containers/` or `~/.openclaw/sandbox/browsers/` Run `openclaw doctor --fix` to migrate valid legacy entries into SQLite. Invalid legacy files are quarantined so a corrupt old registry cannot hide current runtime entries. ## Configuration Sandbox settings live in `~/.openclaw/openclaw.json` under `agents.defaults.sandbox` (per-agent overrides go in `agents.entries.*.sandbox`): ```jsonc { "agents": { "defaults": { "sandbox": { "mode": "all", // off, non-main, all "backend": "docker", // docker, podman, ssh; openshell is plugin-provided "scope": "agent", // session, agent, shared "docker": { "image": "openclaw-sandbox:bookworm-slim", "containerPrefix": "openclaw-sbx-", // ... more Docker options }, "prune": { "idleHours": 24, // auto-prune after 24h idle "maxAgeDays": 7, // auto-prune after 7 days }, }, }, }, } ``` ## Related - [CLI reference](/cli) - [Sandboxing](/gateway/sandboxing) - [Agent workspace](/concepts/agent-workspace) - [Doctor](/gateway/doctor): checks sandbox setup. - [OpenShell](/gateway/openshell) — a managed sandbox backend driven through the `openshell` CLI