Sandbox 与审批机制
审批模式
Codex 在你电脑上的默认工作方式是 Auto
。在这种审批模式下,Codex 可以自动读取文件、进行修改并在工作目录中运行命令。但如果要在工作目录外操作或访问网络,Codex 需要你的审批。
当你只是想聊天,或者想先做规划再执行时,可以用 /approvals
命令切换到 Read Only
模式。
如果你需要 Codex 在无需审批的情况下读取文件、修改内容、运行命令并访问网络,可以使用 Full Access
模式。但在这样做之前要谨慎。
默认设置与推荐做法
- Codex 默认在 sandbox 中运行,并带有严格保护措施:禁止修改工作区外的文件,阻止网络访问(除非启用)。
启动时,Codex 会检测当前文件夹是否受版本控制,并给出推荐:
- 版本控制目录:
Auto
(工作区写入 + 按需审批) - 非版本控制目录:
Read Only
- 版本控制目录:
- 工作区包括当前目录和临时目录(如
/tmp
)。可以用/status
命令查看工作区范围。 你也可以手动设置:
codex --sandbox workspace-write --ask-for-approval on-request
codex --sandbox read-only --ask-for-approval on-request
可以完全不需要审批吗?
可以。你可以使用 --ask-for-approval never
来关闭所有审批提示。这个选项适用于所有 --sandbox
模式,因此你仍然可以控制 Codex 的自主程度。Codex 会在你提供的限制条件下尽力完成任务。
常见的 sandbox + 审批组合
意图 | 参数 | 效果 |
---|---|---|
安全的只读浏览 | --sandbox read-only --ask-for-approval on-request |
Codex 可以读取文件并回答问题,但修改、运行命令或访问网络都需要审批。 |
只读非交互(CI) | --sandbox read-only --ask-for-approval never |
只读,不会升级权限。 |
允许修改仓库,遇到风险才询问 | --sandbox workspace-write --ask-for-approval on-request |
Codex 可以在工作区读取文件、修改和运行命令。对工作区外或网络访问需要审批。 |
Auto(预设) | --full-auto (等价于 --sandbox workspace-write + --ask-for-approval on-failure ) |
Codex 可以在工作区读取文件、修改和运行命令。命令失败或需要升级时才请求审批。 |
YOLO(不推荐) | --dangerously-bypass-approvals-and-sandbox (别名:--yolo ) |
无 sandbox,无提示。 |
注意:在
workspace-write
模式下,网络默认是关闭的,除非在配置中启用([sandbox_workspace_write].network_access = true
)。
在 config.toml
中微调
# 审批模式
approval_policy = "untrusted"
sandbox_mode = "read-only"
# full-auto 模式
approval_policy = "on-request"
sandbox_mode = "workspace-write"
# 可选:允许在 workspace-write 模式下访问网络
[sandbox_workspace_write]
network_access = true
你也可以保存为 profiles 预设:
[profiles.full_auto]
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[profiles.readonly_quiet]
approval_policy = "never"
sandbox_mode = "read-only"
试验 Codex Sandbox
要测试命令在 Codex 提供的 sandbox 下运行的效果,可以使用 Codex CLI 的以下子命令:
# macOS
codex debug seatbelt [--full-auto] [COMMAND]...
# Linux
codex debug landlock [--full-auto] [COMMAND]...
平台 sandbox 细节
Codex 使用的 sandbox 机制取决于操作系统:
- macOS 12+ 使用 Apple Seatbelt,通过
sandbox-exec
并结合配置文件(-p
参数)来对应指定的--sandbox
。 - Linux 使用 Landlock 和 seccomp API 的组合来强制执行
sandbox
配置。
注意:在 Linux 容器环境(如 Docker)中运行时,如果宿主机/容器配置不支持所需的 Landlock/seccomp API,sandbox 可能无法生效。在这种情况下,建议你配置 Docker 容器以提供所需的 sandbox 保障,然后在容器中运行 codex --sandbox danger-full-access
(或简写为 --dangerously-bypass-approvals-and-sandbox
)。