本页所有
box.* 配置都写在 data/config.yaml 中。配置文件的位置和加载机制详见系统环境设置。推荐配置
enabled:沙箱总开关。设为false时,沙箱内置工具、Skill 添加/编辑、stdio MCP 托管等依赖 Box 的能力都不可用。backend:见下文「后端选择」。local.profile:安全预设,控制网络、挂载和资源限制。local.host_root:主机上的沙箱工作目录,会映射为沙箱内的/workspace。local.skills_root:Skill 包目录;相对路径解析到host_root下,默认host_root/skills。docker.cpu_limit_enabled:是否为 Docker 沙箱容器启用 CPU 限制;设为false时不传docker run --cpus,内存和 PID 限制仍然保留。
Skills 只从 Box Runtime 管理的 skill store 加载。Box Runtime 或后端不可用时 Skill 列表为空,新增 / 编辑 /
register_skill 都不可用;不会回退扫描 data/skills/。后端选择
Box 可以跑在本机容器、云端沙箱,也可以直接使用 Box Runtime 主机进程。box.backend 选择走哪一种:
local 是「自动选择」的简写,不是和 docker/nsjail 平级的第四种后端。它只会尝试 Docker 和 Nsjail,永远不会自动选择 host。本机后端使用 box.local.* 中的工作区配置;云端后端使用 box.e2b.*。
backend 是强制值。设为 docker 时如果 Docker 不可用,不会自动回退到 Nsjail 或 E2B——只有 local 会自动 fan-out。也可以用环境变量 BOX__BACKEND 覆盖配置(优先级高于 config.yaml)。安全预设
box.local.profile 控制 Docker / Nsjail 本机沙箱后端的网络、挂载和资源限制:
优先使用最小权限:不需要网络就用
default 或 offline_readonly;只把必要目录加入 allowed_mount_roots。
Host 后端不执行这些隔离策略。即使配置了 profile、CPU / 内存 / PID 限制、只读 rootfs 或网络关闭,主机进程也不受这些沙箱边界保护。
本机工作区配置(box.local.*)
Docker、Nsjail 和 Host 共用工作区路径配置;隔离与资源配置仅在对应沙箱后端能够实施时生效:Host 后端(可信本地开发)
Host 是依赖最少的本地选项,不需要安装 Docker 或 Nsjail。它必须显式选择:exec/read/write/edit/glob/grep、Skills 和 stdio MCP。区别只在执行层:
/workspace、workdir和 Skill 挂载路径会转换为 Box Runtime 主机上的实际路径。- 子进程只继承最小的 PATH、语言和终端环境,再叠加请求中显式传入的变量;LangBot / Box 控制密钥不会自动进入子进程环境。这能减少意外泄露,但不构成文件系统隔离。
exec和托管进程在独立进程组中启动;超时、取消、停止、删除会话和 Runtime 关闭都会终止对应进程树。- 空闲回收、托管进程保活和
persistent规则与其他后端一致。 - 状态接口会返回
unsafe_direct_execution: true,便于运维侧识别当前没有沙箱隔离。
Host 指的是 Box Runtime 所在的环境。LangBot 直接启动本地 stdio Box Runtime 时,它是当前机器;如果 Box Runtime 本身运行在容器里,命令会直接运行在那个容器中,而不是自动穿透到物理宿主机。
sh 的 POSIX 系统(Linux / macOS)。Windows 请先使用 WSL;原生 Windows 进程后端尚未支持。
外部 WebSocket Box Runtime 使用 Host 时,必须在 LangBot 与 Box Runtime 两侧设置相同的强随机 LANGBOT_BOX_CONTROL_TOKEN。本地自动管理的 stdio Box Runtime 不需要额外配置该令牌。启用了托管沙箱 admission 的 Cloud 环境仍会按隔离能力和指定后端进行校验,Host 不会绕过这些检查。
Box 沙箱内存配置
box.default_memory_mb 控制每个 stdio 模式 MCP 服务进程的 nsjail cgroup 内存上限。
Host 后端不提供 cgroup 内存隔离,因此该值不能限制 Host 上的 MCP 进程。
可通过 config.yaml 或环境变量
BOX__DEFAULT_MEMORY_MB 设置。
为什么需要调整:
- Node.js 类 MCP(npx/bunx 启动):V8 引擎 + WebAssembly 模块初始化需要较多内存,建议 ≥ 1536 MB
- Python 类 MCP(uvx 启动):通常 512 MB 已足够,但用默认值也没问题
- 内存不足时进程会被强制终止(return_code=137),在日志里表现为「Box managed process exited unexpectedly」
box.memory_mb 字段单独设置,优先级高于全局默认值。
Docker 后端配置(box.docker.*)
云端后端配置(box.e2b.*)
设为backend: 'e2b' 后配置:
E2B 不需要本机 Docker 或 Nsjail,每次执行都走远程沙箱。
Docker Compose 部署
Docker Compose 部署时,沙箱配置写在langbot 服务上。LangBot 启动后会通过 INIT RPC 把配置下发给 langbot_box。
box.runtime.endpoint 指定 URL:
环境变量
不要在
langbot_box 服务上设置 BOX__* 或 LANGBOT_BOX_* 变量;这些变量不会被 Box Runtime 直接读取——它的配置由 LangBot 通过 INIT RPC 下发。