Codex 总是请求批准?详解审批策略、沙盒和“不再询问”

当命令需要突破沙盒时,Codex 就会请求批准。大多数“它总是在问”的抱怨,源于沙盒限制过严、使用了已不存在的设置,或者“不再询问”只在当次会话中有效。

作者:Aslan,Pet Island 团队 · 更新于 2026年10月26日 · 阅读时长 5 分钟

简短回答

在当前的 Codex 中,approval_policy 可以是 on-request(默认值:模型在需要时询问)、never 或一个 granular 表;untrusted 已被移除,on-failure 现在只是 on-request 的另一个名字。决定询问频率的主要是沙盒:设置 sandbox_mode = "workspace-write" 后,Codex 会在项目内直接编辑文件和运行命令,不再询问。对于你始终信任的命令,在 ~/.codex/rules/default.rules 中添加一条带 decision = "allow" 的 prefix_rule。“对以……开头的命令不再询问”也保存在这里。

首先:Codex 有哪些变化

很多指南和论坛回答介绍的设置已经失效。调整之前,先对照下面的列表检查你的 ~/.codex/config.toml:

旧设置现状
approval_policy = "untrusted"已移除。Codex 会报告“approval_policy = "untrusted" is no longer supported; remove this setting”(不再支持,请删除此设置)。文档建议改用 sandbox_mode = "read-only" 搭配 on-request。
approval_policy = "on-failure"仍然可用,但只是 on-request 的别名。
--full-auto已不在 CLI 参考中。最接近的标志是 --approve-for-me(别名 --not-so-yolo):在 on-request 和 workspace-write 沙盒下自动审核批准。
config.toml 中的 [profiles.name]自 Codex 0.134.0 起,--profile name 改为读取 $CODEX_HOME/name.config.toml。遗留的 profile = "x" 键现在会引发错误。
/approvals请使用 /permissions(“Set what Codex can do without asking first.”,即设置 Codex 无需事先询问即可执行的操作)

Codex 的文档也搬了家:旧的 developers.openai.com/codex 页面现在会重定向到 learn.chatgpt.com。

Codex 如何决定是否询问

两项设置共同起作用。沙盒限制命令能访问的范围:项目以外的文件、网络。审批策略决定当命令需要超出沙盒允许的权限时会发生什么。

sandbox_modeCodex 无需询问即可执行的操作
read-only(默认)在只读沙盒中读取文件和运行命令
workspace-write在工作目录中自动读取、编辑文件和运行命令
danger-full-access一切操作,没有沙盒。不推荐
approval_policy行为
on-request(默认)由模型决定何时询问。沙盒允许的命令无需批准即可运行
never从不询问。任何失败都会返回给模型,而不会上报给你
{ granular = { … } }让部分提示类别保持交互,其余自动拒绝(sandbox_approval、rules、skill_approval、request_permissions、mcp_elicitations)

因此,如果你处于 read-only,每次编辑都需要你点头。这正是“Codex 什么都要问”最常见的原因。即使在 workspace-write 下,.git、.codex、.agents 和 .aws 仍然是只读的,网络访问也默认关闭,除非你手动开启。

以下是 OpenAI 文档中的示例配置,并附有 workspace 选项的说明:

~/.codex/config.toml复制
approval_policy = "on-request"
sandbox_mode = "workspace-write"
 
[sandbox_workspace_write]
# Additional writable roots beyond the workspace (cwd). Default: []
writable_roots = []
# Allow outbound network access inside the sandbox. Default: false
network_access = false

较新的版本还提供权限配置文件(default_permissions,内置 :read-only、:workspace 和 :danger-full-access)。权限配置文件和 sandbox_mode 二选一,不要同时使用。

CLI、IDE 扩展和应用中的预设

你不必手动编辑 TOML。在 CLI 中,/permissions 会打开预设;在应用和 IDE 扩展中,输入框下方有一个权限控件。CLI 预设如下:

  • Read Only:读取工作区;编辑文件或访问互联网需要批准。
  • Default:在工作区内编辑;访问互联网或编辑其他文件需要批准。
  • Full Access:可在工作区外编辑并访问互联网,无需询问。

应用和 IDE 扩展把同样的选项称为 Ask for approval、Approve for me 和 Full access。较早的 IDE 截图中,它们叫 Chat、Agent 和 Agent (Full Access)。

用规则允许特定命令

如果你希望 Codex 不经询问就在沙盒外运行某条命令(比如 gh pr view),就写一条规则。规则目前是实验性功能,存放在某个配置层旁边 rules/ 文件夹中的 .rules 文件里,例如 ~/.codex/rules/default.rules:

~/.codex/rules/default.rules复制
prefix_rule(
pattern = ["gh", "pr", "view"],
decision = "allow",
)
  • allow:在沙盒外运行,不提示。
  • prompt:每条匹配的命令运行前都询问。
  • forbidden:直接阻止,不询问。

当多条规则同时匹配时,限制最严格的规则生效:forbidden 优先于 prompt,后者又优先于 allow。在依赖某条规则之前,先用 codex execpolicy check 测试命令。

“不再询问”实际保存了什么

Codex CLI 的批准提示提供几种不同的“是”,它们的有效期相差很大:

选项有效期
Yes, proceed(是,继续)仅本条命令
Yes, and don’t ask again for commands that start with <prefix>(是,且对以该前缀开头的命令不再询问)永久(作为规则写入 ~/.codex/rules/default.rules)
Yes, and don’t ask again for this command in this session(是,且本次会话中对此命令不再询问)到会话结束为止
Yes, and don’t ask again for these files(是,且对这些文件不再询问)文件编辑,本次会话有效

如果你一直选择会话级选项,明天还会被问到。请选择前缀选项,或者自己写规则。

Windows 上的 Codex

“什么都要问”的问题在 Windows 上最严重。在 issue #10187 中,一位 OpenAI 团队成员解释了原因:“Without a sandboxing mechanism, all tool calls need to be manually approved on Windows.”(没有沙盒机制时,Windows 上所有工具调用都需要手动批准。)Codex 现在有了原生 Windows 沙盒,并默认使用它:

  • mxc:兼容的 Windows 设备上推荐使用的沙盒。
  • elevated:MXC 不可用时的首选备用方案。
  • unelevated:旧版备用方案。
~/.codex/config.toml复制
[windows]
sandbox = "elevated" # or "unelevated"
 
[features]
prefer_mxc = true

在 CLI 中运行 /setup-default-sandbox 来设置 elevated 沙盒(IT 人员可使用 codex sandbox setup --elevated)。推荐使用 Windows 11;Windows 10 1809 或更高版本仅提供尽力而为的支持。如果你在 WSL 中工作,Codex 会在那里使用其 Linux 沙盒,WSL1 已不再受支持。

项目配置只在受信任的项目中加载

仓库中的 .codex/config.toml 只有在你信任该项目后才会被读取。如果你的项目设置似乎被忽略了,原因就在这里。用户配置中的信任条目如下所示:

~/.codex/config.toml复制
[projects."/absolute/path/to/project"]
trust_level = "trusted"

设置分层生效,优先级从高到低:命令行标志和 -c 覆盖项、受信任项目的 .codex/config.toml、--profile 文件、你的 ~/.codex/config.toml,最后是系统默认值。

关于 --yolo

--dangerously-bypass-approvals-and-sandbox(别名 --yolo)会在没有批准和沙盒的情况下运行所有命令。源代码中对它的描述是“EXTREMELY DANGEROUS. Intended solely for running in environments that are externally sandboxed.”(极其危险,仅用于已在外部进行沙盒隔离的环境。)在配置文件中设置 approval_policy = "never" 加 danger-full-access 效果相同。如果你只是想减少提示,workspace-write 加上几条 allow 规则就能做到,而且沙盒依然开启。

针对你保留的提示

当 Codex 只询问真正重要的事情(网络、项目以外的文件、push)时,剩下的问题就是能否注意到提示。Pet Island 把 Codex 的命令和文件编辑批准放到屏幕顶部的一座小岛上,并附带命令或 diff,你不用去找对应的终端就能允许或拒绝。它会显示 Codex 何时在工作、何时已完成,点击一下 Codex 的提问就能跳到正确的窗口。它支持 Codex CLI 和 Codex 应用;如果小岛已关闭,Codex 会像往常一样在自己的窗口中询问。

常见问题

如何让 Codex 不再一直请求批准?

使用 sandbox_mode = "workspace-write",让 Codex 可以在项目内编辑和运行命令;保持 approval_policy = "on-request";并为你始终信任的命令在 ~/.codex/rules/default.rules 中添加带 decision = "allow" 的 prefix_rule 条目。

approval_policy = "untrusted" 还受支持吗?

不受支持。当前的 Codex 会以“approval_policy = "untrusted" is no longer supported; remove this setting”拒绝它。请改用 sandbox_mode = "read-only" 搭配 approval_policy = "on-request"。

--full-auto 怎么了?

它已不在 Codex CLI 参考中。最接近的选项是 --approve-for-me(别名 --not-so-yolo),它在 on-request 和 workspace-write 沙盒下使用自动批准审核。

为什么“不再询问”不能一直生效?

“Don’t ask again for this command in this session”(本次会话中对此命令不再询问)只在当次会话有效。请选择“don’t ask again for commands that start with …”(对以……开头的命令不再询问),它会把规则保存到 ~/.codex/rules/default.rules。

为什么 Codex 在 Windows 上问得更多?

没有沙盒时,每次工具调用都需要批准。Codex 现在默认使用原生 Windows 沙盒;如果尚未设置,请运行 /setup-default-sandbox。

为什么我项目中的 .codex/config.toml 被忽略了?

Codex 只为受信任的项目加载项目配置。

参考来源

本页的每项设置和行为都已于 2026年10月26日 对照以下页面核实。智能体更新很快;如有不符,以官方页面为准。

继续阅读

在屏幕顶部回应每一个智能体。

Windows 和 Mac · 免费试用 7 天,之后一次性支付 8.99 美元 · 每笔销售拿出 1 美元为流浪动物提供食物

免费试用 Pet Island