教程2026-10-31 · 智涌AI

Codex 配置教程:config.toml、审批模式与沙箱怎么设

Codex CLI 配置教程头图:终端展示 ~/.codex/config.toml 中 sandbox_mode、approval_policy、network_access 与 mcp_servers 配置,以及 --profile 启动命令

装好 Codex CLI 以后,多数人第一次打开 ~/.codex/config.toml 是因为它又停下来问「能不能跑这条命令」,或者反过来,担心它一声不吭就把仓库改了。这两件事归同一组开关管:沙箱决定 Codex 技术上能碰什么,审批策略决定它什么时候要先问你。下面按 OpenAI 官方 Codex 文档(2026-10-31 北京时间查阅;npm 上 @openai/codex 当前版本 0.166.0)把配置文件放哪、谁覆盖谁、几种常用组合和容易踩的坑理一遍。

前置条件

第一步:搞清配置文件放哪、谁覆盖谁

个人默认值写在 ~/.codex/config.toml。只对某个仓库生效的设置放进仓库里的 .codex/config.toml,但这一层只在你信任该项目时才加载,不受信任的项目连项目级的 hooks 和 rules 都会跳过。

优先级来源说明
1(最高)命令行参数和 -c / --config单次覆盖,适合临时试
2项目 .codex/config.toml从项目根往当前目录逐层找,离得最近的赢;仅受信任项目
3--profile 名字 选中的 profile 文件文件是 ~/.codex/名字.config.toml
4~/.codex/config.toml你的个人默认值
5云端下发的工作区默认值登录了企业工作区才有
6/etc/codex/config.tomlUnix 系统级,存在才读
7内置默认值什么都不写时的行为

官方建议这么分:公共默认值写进 config.toml,profile 文件只放和默认不同的那几项。IDE 扩展里点右上角齿轮,选 Codex Settings → Open config.toml,打开的是同一个文件。

第二步:沙箱和审批是两个开关

sandbox_mode 是硬边界,由操作系统强制执行:macOS 用 Seatbelt,Linux 默认用 bwrap 加 seccomp,Windows 优先用 MXC。可选值有三个:read-only、workspace-write、danger-full-access。approval_policy 决定越界时要不要先停下来问你,常用 on-request 和 never。

沙箱管「能不能做」,审批管「做之前问不问」。把审批关掉,沙箱照样拦着;把沙箱拆了,审批也救不回来。

官方给的四种常用组合:

用途命令行写法效果
Auto(默认预设)--sandbox workspace-write --ask-for-approval on-request工作区内读写、跑命令不用问;改工作区外文件或要联网时请求批准
只读浏览--sandbox read-only --ask-for-approval on-request只读,越界动作需要批准
只读 CI--sandbox read-only --ask-for-approval never只读,从不询问,适合流水线
完全放开--yolo(即 --dangerously-bypass-approvals-and-sandbox)没有沙箱也没有审批,官方不推荐

写进配置文件,核心是中间两行:

# ~/.codex/config.toml
model = "gpt-6.1-sol"
sandbox_mode    = "workspace-write"
approval_policy = "on-request"
model_reasoning_effort = "medium"

启动时 Codex 会看目录在不在版本控制里:在的话推荐 Auto,不在的话推荐 read-only。会话里用 /permissions 切模式,用 /status 看当前工作区包含哪些目录(当前目录和 /tmp 这类临时目录都算)。

就算在 workspace-write 下,可写目录里的 .git、.agents、.codex、.aws 仍然是只读的,而且递归生效。所以 Codex 能改代码,但改不了你的 git 元数据和它自己的配置。

第三步:常用组合存成 profile

不想每次敲一长串参数,就把组合存成 profile 文件,用 codex --profile 名字 调出来:

# ~/.codex/readonly_quiet.config.toml
approval_policy = "never"
sandbox_mode    = "read-only"

想要介于 on-request 和 never 之间的行为,可以用 granular 写法,按类别决定哪些审批照常弹出、哪些直接拒绝。类别包括沙箱越界、execpolicy 规则、MCP 请求、request_permissions 和 Skill 脚本:

approval_policy = { granular = {
  sandbox_approval = true,
  rules = true,
  mcp_elicitations = true,
  request_permissions = false,
  skill_approval = false
} }

还有一个选项 approvals_reviewer = "auto_review",把需要审批的请求先交给一个审查 Agent 判断。它会多花模型调用,计入用量。

第四步:只放开网络,再用白名单收紧

workspace-write 默认不让命令联网。装依赖、调接口时要单独打开:

[sandbox_workspace_write]
network_access = true

这样放开后,去哪个域名都不拦。想只允许几个域名,再打开 network_proxy,光写域名规则不开代理是不起作用的:

[features.network_proxy]
enabled = true
domains = { "api.openai.com" = "allow", "example.com" = "deny" }

联网搜索另有开关 web_search,默认 "cached",读的是 OpenAI 维护的预索引结果,不现抓网页,被提示词注入的面更小。要实时结果写 "live"(等同 --search),完全不要就写 "disabled"。用 --yolo 时默认会变成 live。

第五步:在 config.toml 里挂 MCP 服务器

最快的方式是命令行:codex mcp add context7 -- npx -y @upstash/context7-mcp,再用 codex mcp list 查看。它写进的也是 config.toml,想细调就直接编辑对应的表:

[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]

[mcp_servers.chrome_devtools]
url = "http://localhost:3000/mcp"
enabled_tools = ["open", "screenshot"]
default_tools_approval_mode = "prompt"
startup_timeout_sec = 20
tool_timeout_sec = 45

启动超时默认 10 秒,单次工具调用默认 60 秒。default_tools_approval_mode 可以是 auto、prompt、writes、approve,其中 writes 只对没标只读的工具弹审批。服务器带破坏性标注的工具,不管怎么配都要审批。MCP 本身是什么、和 Skill 怎么分工,见 MCP 入门。

常见坑

想自己看某条命令在沙箱里会怎样,用 codex sandbox linux 命令(macOS 换成 macos,Windows 换成 windows)单独跑一次。

完成标准

最后

先用默认的 Auto 跑一周,把真正被拦下来的动作记下来,再针对这几项放开,比一上来就 --yolo 稳得多。多个 Codex 并行干活时,上下文怎么分,可以接着看 子 Agent 该不该继承上下文。

关注公众号「智涌AI速递」

每天的 AI 快讯、实用教程和 AI项目实测,也会同步发到微信公众号。在微信里搜索「智涌AI速递」就能关注;不用微信的话,可以用 RSS 订阅本站。