All
box.* settings on this page live in data/config.yaml. See System Environment Settings for the file’s location and how it’s loaded.Recommended Configuration
enabled: master switch. Whenfalse, all Box-dependent features are disabled (sandbox tools, skill add/edit, stdio MCP hosting).backend: see “Backend Selection” below.local.profile: security profile — controls network, mounts, and resource limits.local.host_root: host workspace directory, mapped to/workspaceinside the sandbox.local.skills_root: skill package directory; relative paths resolve underhost_root(defaults tohost_root/skills).docker.cpu_limit_enabled: whether Docker sandbox containers get a CPU limit; set tofalseto omitdocker run --cpuswhile keeping memory and PID limits.
Skills are loaded only from the Box-managed skill store. When Box Runtime or the backend is unavailable, the skill list is empty and create/edit/
register_skill are disabled — there’s no fallback to data/skills/.Backend Selection
Box can run in local containers, in a cloud sandbox, or as a process on the Box Runtime host.box.backend picks which:
local is shorthand for “auto-pick”, not a fourth backend sitting next to docker/nsjail. It only tries Docker and Nsjail and never auto-selects host. Local backends use workspace settings from box.local.*; the cloud backend uses box.e2b.*.
backend is a hard selection. Setting docker and finding Docker unavailable does not fall back to Nsjail or E2B — only local auto-fans-out.BOX__BACKEND environment variable overrides box.backend (highest priority).Security Profiles
box.local.profile controls network, mounts, and resource limits for the Docker / Nsjail local sandbox backends:
Prefer least privilege: skip the network unless you need it (
default / offline_readonly); only add necessary directories to allowed_mount_roots.
The Host backend does not enforce these isolation policies. A configured profile, CPU / memory / PID limit, read-only rootfs, or disabled network does not create a sandbox boundary around host processes.
Local Workspace Configuration (box.local.*)
Docker, Nsjail, and Host share workspace path settings. Isolation and resource settings only take effect when the selected sandbox backend can enforce them:Host Backend (Trusted Local Development)
Host is the lowest-dependency local option and does not require Docker or Nsjail. It must be selected explicitly:exec/read/write/edit/glob/grep, Skills, and stdio MCP all use the existing Box APIs. Only the execution layer changes:
/workspace,workdir, and Skill mount paths are translated to real paths on the Box Runtime host.- Child processes inherit only a minimal path, locale, and terminal environment plus variables explicitly supplied by the request. LangBot / Box control secrets are not inherited automatically. This reduces accidental leakage but does not provide filesystem isolation.
execand managed processes start in separate process groups. Timeouts, cancellation, process stop, session deletion, and Runtime shutdown terminate the corresponding process trees.- Idle cleanup, managed-process keepalive, and
persistentrules match the other backends. - Status responses include
unsafe_direct_execution: trueso operators can detect the lack of sandbox isolation.
Host means the environment where Box Runtime runs. With LangBot’s local stdio-managed Box Runtime, that is the current machine. If Box Runtime itself runs in a container, commands run directly in that container; Host does not automatically break through to the physical host.
sh (Linux / macOS). Use WSL on Windows; a native Windows process backend is not yet supported.
When Host is used through an external WebSocket Box Runtime, set the same strong random LANGBOT_BOX_CONTROL_TOKEN on both LangBot and Box Runtime. The locally managed stdio Runtime needs no extra token configuration. Cloud environments with managed-sandbox admission still validate isolation capabilities and the required backend; Host does not bypass those checks.
Box Sandbox Memory Configuration
box.default_memory_mb sets the nsjail cgroup memory cap for every stdio-mode MCP server process.
The Host backend has no cgroup memory isolation, so this value cannot limit MCP processes running on Host.
Can be set in config.yaml or via the
BOX__DEFAULT_MEMORY_MB environment variable.
When to adjust:
- Node.js MCP servers (launched via npx/bunx): V8 + WebAssembly module initialisation needs significant memory; keep at ≥ 1536 MB
- Python MCP servers (launched via uvx): 512 MB is usually enough, but the default is fine too
- When memory is exhausted, the process is forcibly killed (return_code=137), logged as “Box managed process exited unexpectedly”
box.memory_mb in the individual MCP server config to override the global default.
Docker Backend Configuration (box.docker.*)
Cloud Backend Configuration (box.e2b.*)
Configure after settingbackend: 'e2b':
E2B doesn’t need Docker or Nsjail on the host — every execution goes through the remote sandbox.
Docker Compose Deployment
In Docker Compose, sandbox settings live on thelangbot service. LangBot forwards them to langbot_box via INIT RPC at startup.
box.runtime.endpoint:
Environment Variables
Don’t set
BOX__* or LANGBOT_BOX_* on the langbot_box service — Box Runtime doesn’t read them directly. Its configuration arrives over INIT RPC from LangBot.