审批和沙箱
Codex 回合的审批与沙箱姿态,以及原生执行运行的位置。属于 Codex harness 参考 的一部分;每个章节迁移到哪里 列出了所有章节。
对于原生插件/应用工具,还需遵循 应用审批决策顺序。 应用准入、工具启用、逐工具审批模式以及 OpenClaw 的 elicitation 响应,均独立于下文的一般预设。
审批与沙箱模式¶
本地 stdio app-server 会话默认使用 YOLO 模式:
approvalPolicy: "never"、approvalsReviewer: "user" 以及
sandbox: "danger-full-access"。这种受信任的本地操作者姿态可让
无人值守的 OpenClaw 回合和心跳在没有无人应答的原生审批提示的情况下继续推进。
如果 Codex 的本地系统要求文件不允许隐式 YOLO 审批、
审查者或沙箱值,OpenClaw 会将隐式默认视为 guardian,
并选择允许的 guardian 权限。tools.exec.mode: "auto"
还会强制使用 guardian 审查的 Codex 审批,并且不会保留不安全的旧版
approvalPolicy: "never" 或 sandbox: "danger-full-access" 覆盖;
如需有意采用无审批姿态,请设置 tools.exec.mode: "full"。
同一要求文件中按主机名匹配的 [[remote_sandbox_config]] 条目
会被用于沙箱默认决策。
设置 appServer.mode: "guardian" 以启用 Codex 的 guardian 审查审批:
{
plugins: {
entries: {
codex: {
enabled: true,
config: {
appServer: {
mode: "guardian",
serviceTier: "priority",
},
},
},
},
},
}
当这些值被允许时,guardian 预设会展开为 approvalPolicy: "on-request"、
approvalsReviewer: "auto_review" 和 sandbox: "workspace-write"。单个策略字段会覆盖 mode。旧的
guardian_subagent 审查者值仍作为兼容别名被接受,
但新配置应使用 auto_review。
当 OpenClaw 沙箱处于激活状态时,本地 Codex app-server 进程仍
运行在 Gateway 主机上。因此,OpenClaw 会禁用该回合的 Codex 原生 Code Mode、
用户 MCP 服务器以及应用支持的插件执行,而不是将 Codex 主机侧沙箱视为等同于 OpenClaw 沙箱
后端。当常规 exec/process 工具可用时,Shell 访问会通过 OpenClaw 沙箱支持的动态工具
(例如 sandbox_exec 和 sandbox_process)暴露。
Note
在基于 Docker 的 OpenClaw 沙箱主机上(agents.defaults.sandbox.mode 设置为
Docker 后端),openclaw doctor 会探测主机是否允许嵌套 Codex bwrap 在沙箱容器内执行 workspace-write
shell 所需的非特权 user(以及当 Docker 沙箱网络出口被禁用时,
network)命名空间。探测失败在
Ubuntu/AppArmor 主机上通常表现为 bwrap: setting up uid map: Permission denied 或
bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted。请修复报告中针对 OpenClaw
服务用户的主机命名空间策略,并重启 Gateway;对于服务进程,优先使用作用域受限的 AppArmor profile,
而不是主机范围的
kernel.apparmor_restrict_unprivileged_userns=0 回退方案,也不要仅为了满足嵌套 bwrap
就授予更宽的 Docker 容器权限。
沙箱化的原生执行¶
稳定默认值是失败关闭:激活的 OpenClaw 沙箱会禁用原本会从 Codex app-server
主机运行的原生 Codex 执行面。只有当你想使用 OpenClaw 沙箱后端尝试 Codex 的远程环境支持时,
才使用 appServer.experimental.sandboxExecServer: true。
此预览路径使用固定版本的 Codex 0.158.0 app-server。
{
plugins: {
entries: {
codex: {
enabled: true,
config: {
appServer: {
experimental: {
sandboxExecServer: true,
},
},
},
},
},
},
}
当该标志开启且当前 OpenClaw 会话处于沙箱中时,OpenClaw 会启动一个由活动沙箱支持的本地 loopback exec-server,将其注册到 Codex app-server,并使用该 OpenClaw 拥有的环境启动 Codex 线程和回合。如果 app-server 无法注册该环境, 运行会失败关闭,而不是静默回退到主机执行。
沙箱化进程的输出以有序的 stdout、stderr 或 PTY 通知形式流式传输。OpenClaw 仅保留一个有界的近期输出缓冲区用于轮询 和重放,因此长时间运行的进程不会无限增大 app-server 桥接。进程退出和清理仍与沙箱拥有的进程绑定。
此预览路径仅限本地。除非远程 WebSocket app-server 运行在同一主机上,否则它无法访问 loopback exec-server,因此 OpenClaw 会拒绝该组合。
基于 Node 的 remote-exec 放置位于已配对设备或已注册的 Crabbox
云工作器上,是一条独立的、由 placement 拥有的执行路径,不需要
appServer.experimental.sandboxExecServer。Gateway 会在本地保留 Codex
app-server 和 provider 认证,而经过授权的节点会通过其现有双工连接运行受管理的、
固定版本的 Codex exec-server。它需要针对
codex.exec-server.stdio.v1 的显式 gateway.nodes.commands.allow 授权、已批准的配对界面,以及每次尝试的启动授权。刻意选择的会话 Full access
权限只有在确切的已准入回合和放置仍然有效,并且节点本地的 tools.exec
与 exec-approvals 下限都允许 full/off 执行时,才能替代关键的 allow-once 提示。普通调用者和 raw 调用者
仍需要人工审批。本地 deny 会阻止任一启动;本地 ask 和
allowlist 策略无法通过 Full access 绕过。设置期间本地策略
发生变化会拒绝启动。Gateway 和节点都必须支持此
授权路径;缺少节点策略支持会失败关闭。节点会获得全新的私有 home 和已清理的环境,绝不会获得 Gateway provider、云
或 GitHub 凭据。节点连接丢失会终止该尝试和
进程,而不是恢复它。每个基于节点的尝试都会使用自己的 Gateway
app-server 客户端,因为 Codex 可以注册远程环境,但无法
从运行中的 app-server 移除一个环境。节点 exec-server 不会占用
OpenClaw worker 槽位。包含认证、cookies、API
密钥或其他携带凭据的标头的 HTTP 请求会在到达节点之前被拒绝;请改用 Gateway 拥有的已认证请求或无凭据端点。
支持常规 Codex 回合,但在 /btw 侧边问题能够绑定到活动放置之前不可用。
受管理的放置工作区不是操作系统沙箱:已批准的进程和
文件拥有节点账户的完全访问权限。需要隔离时,请使用单独的最低权限节点
账户。
参见 在已配对设备上运行 Codex
和 在云工作器上运行 Codex。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw