沙盒和批准
批准模式
我们为 Codex 在你的计算机上的工作方式选择了一个强大的默认设置:Auto
。在这种批准模式下,Codex 可以自动读取文件、进行编辑并在工作目录中运行命令。但是,Codex 需要你的批准才能在工作目录外工作或访问网络。
当你只是想聊天,或者想在深入之前制定计划,你可以使用 /approvals
命令切换到 Read Only
模式。
如果你需要 Codex 在无需批准的情况下读取文件、进行编辑并运行具有网络访问权限的命令,你可以使用 Full Access
。在这样做之前请谨慎行事。
默认设置和建议
- Codex 默认在具有强大防护的沙盒中运行:它防止在工作区外编辑文件并阻止网络访问,除非启用。
- 启动时,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 的自主程度。它将尽最大努力处理你提供的任何约束。
常见的沙盒 + 批准组合
意图 | 标志 | 效果 |
---|---|---|
安全的只读浏览 | --sandbox read-only --ask-for-approval on-request |
Codex 可以读取文件并回答问题。Codex 需要批准才能进行编辑、运行命令或访问网络。 |
只读非交互式 (CI) | --sandbox read-only --ask-for-approval never |
仅读取;从不升级 |
让它编辑仓库,如果有风险则询问 | --sandbox workspace-write --ask-for-approval on-request |
Codex 可以在工作区中读取文件、进行编辑并运行命令。Codex 需要批准才能在工作区外的操作或网络访问。 |
自动(预设) | --full-auto (相当于 --sandbox workspace-write + --ask-for-approval on-failure ) |
Codex 可以在工作区中读取文件、进行编辑并运行命令。当沙盒命令失败或需要升级时,Codex 需要批准。 |
YOLO(不推荐) | --dangerously-bypass-approvals-and-sandbox (别名:--yolo ) |
无沙盒;无提示 |
注意:在
workspace-write
中,网络默认禁用,除非在配置中启用([sandbox_workspace_write].network_access = true
)。
在 config.toml
中微调
# 批准模式
approval_policy = "untrusted"
sandbox_mode = "read-only"
# 全自动模式
approval_policy = "on-request"
sandbox_mode = "workspace-write"
# 可选:在工作区写入模式中允许网络
[sandbox_workspace_write]
network_access = true
你还可以将预设保存为配置文件:
[profiles.full_auto]
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[profiles.readonly_quiet]
approval_policy = "never"
sandbox_mode = "read-only"
试验 Codex 沙盒
要测试在 Codex 提供的沙盒下运行命令时会发生什么,我们在 Codex CLI 中提供以下子命令:
# macOS
codex debug seatbelt [--full-auto] [COMMAND]...
# Linux
codex debug landlock [--full-auto] [COMMAND]...
平台沙盒详细信息
Codex 用来实现沙盒策略的机制取决于你的操作系统:
- macOS 12+ 使用 Apple Seatbelt 并使用
sandbox-exec
运行命令,使用与指定的--sandbox
对应的配置文件(-p
)。 - Linux 使用 Landlock/seccomp API 的组合来强制执行
sandbox
配置。
请注意,在 Docker 等容器化环境中运行 Linux 时,如果主机/容器配置不支持必要的 Landlock/seccomp API,沙盒可能无法工作。在这种情况下,我们建议配置你的 Docker 容器,使其提供你正在寻找的沙盒保证,然后在容器内使用 --sandbox danger-full-access
(或者更简单地,--dangerously-bypass-approvals-and-sandbox
标志)运行 codex
。