沙箱 vs 工具策略 vs 提升权限
Moltbot 有三类相关但不同的控制:
- 沙箱(
agents.defaults.sandbox.*/agents.list[].sandbox.*)决定工具在哪运行(Docker 还是宿主机)。 - 工具策略(
tools.*、tools.sandbox.tools.*、agents.list[].tools.*)决定哪些工具可用/允许。 - 提升权限(
tools.elevated.*、agents.list[].tools.elevated.*)是仅对 exec 的逃生口,在沙箱内时可在宿主机上执行。
快速调试
用检查器查看 Moltbot 实际在做什么:
moltbot sandbox explain
moltbot sandbox explain --session agent:main:main
moltbot sandbox explain --agent work
moltbot sandbox explain --json会输出:
- 当前沙箱模式/作用域/工作区访问
- 当前会话是否在沙箱中(main 与非 main)
- 当前沙箱工具允许/拒绝(以及来自 agent/全局/默认)
- 提升权限门控及修复用配置路径
沙箱:工具在哪运行
沙箱由 agents.defaults.sandbox.mode 控制:
"off":全部在宿主机运行。"non-main":仅非 main 会话进沙箱(群组/频道常见「意外」)。"all":全部进沙箱。
完整矩阵(作用域、工作区挂载、镜像)见 沙箱。
绑定挂载(安全速查)
docker.binds穿透沙箱文件系统:你挂载的内容会按你设置的模式(:ro或:rw)在容器内可见。- 省略模式时默认为读写;对源码/密钥建议用
:ro。 scope: "shared"会忽略每 agent 的 binds(仅全局 binds 生效)。- 挂载
/var/run/docker.sock相当于把宿主机控制权交给沙箱;仅在有意时使用。 - 工作区访问(
workspaceAccess: "ro"/"rw")与 bind 模式无关。
工具策略:哪些工具存在/可调用
有两层:
- 工具 profile:
tools.profile与agents.list[].tools.profile(基础允许列表) - Provider 工具 profile:
tools.byProvider[provider].profile与agents.list[].tools.byProvider[provider].profile - 全局/每 agent 工具策略:
tools.allow/tools.deny与agents.list[].tools.allow/agents.list[].tools.deny - Provider 工具策略:
tools.byProvider[provider].allow/deny与agents.list[].tools.byProvider[provider].allow/deny - 沙箱工具策略(仅沙箱内生效):
tools.sandbox.tools.allow/tools.sandbox.tools.deny与agents.list[].tools.sandbox.tools.*
经验法则:
deny优先。- 若
allow非空,其余均视为禁止。 - 工具策略是硬限制:
/exec无法覆盖被拒绝的exec工具。 /exec只改变已授权发件人的会话默认;不会授予工具访问权。Provider 工具键可接受provider(如google-antigravity)或provider/model(如openai/gpt-5.2)。
工具组(简写)
工具策略(全局、agent、沙箱)支持 group:* 条目,会展开为多个工具:
{
tools: {
sandbox: {
tools: {
allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"]
}
}
}
}可用组:
group:runtime:exec、bash、processgroup:fs:read、write、edit、apply_patchgroup:sessions:sessions_list、sessions_history、sessions_send、sessions_spawn、session_statusgroup:memory:memory_search、memory_getgroup:ui:browser、canvasgroup:automation:cron、gatewaygroup:messaging:messagegroup:nodes:nodesgroup:moltbot:所有内置 Moltbot 工具(不含 provider 插件)
提升权限:仅 exec 的「在宿主机运行」
提升权限不会多给工具;只影响 exec。
- 若你在沙箱中,
/elevated on(或带elevated: true的exec)会在宿主机运行(可能仍需审批)。 - 使用
/elevated full可跳过该会话的 exec 审批。 - 若你本来就在宿主机直接运行,提升权限相当于无操作(仍受门控)。
- 提升权限不按 skill 作用域,不会覆盖工具的 allow/deny。
/exec与提升权限是分开的;它只调整已授权发件人的每会话 exec 默认。
门控:
- 启用:
tools.elevated.enabled(及可选agents.list[].tools.elevated.enabled) - 发件人白名单:
tools.elevated.allowFrom.<provider>(及可选agents.list[].tools.elevated.allowFrom.<provider>)
详见 提升权限模式。
常见「沙箱困住」修复
「工具 X 被沙箱工具策略阻止」
修复用配置(任选其一):
- 关闭沙箱:
agents.defaults.sandbox.mode=off(或每 agentagents.list[].sandbox.mode=off) - 在沙箱内允许该工具:
- 从
tools.sandbox.tools.deny(或每 agentagents.list[].tools.sandbox.tools.deny)中移除 - 或加入
tools.sandbox.tools.allow(或每 agent allow)
- 从
「我以为是 main,为什么在沙箱里?」
在 "non-main" 模式下,群组/频道会话键不是 main。使用 main 会话键(由 sandbox explain 显示)或将模式改为 "off"。
最后更新于: