国内开发者聊AI编程工具,基本被 Claude Code 和 Cursor 刷屏了,而 OpenAI 的 Codex CLI(GitHub: openai/codex,Apache-2.0 开源,Rust 编写)经常被一句"不如Claude Code"带过。但我最近把它的官方配置参考(developers.openai.com/codex/config-reference)从头到尾翻了一遍,发现了一个巨大的信息差:这个工具80%的杀手级能力都藏在 ~/.codex/config.toml 里,默认还是关着的。多Agent并行、长期记忆、生命周期钩子、域名级网络白名单、自定义模型后端……全都是开关型配置。今天把8个最值钱的开关一次性挖出来,每一条都给到具体的配置代码,照抄即可。
先给安装命令(Mac/Linux):
curl -fsSL https://chatgpt.com/codex/install.sh | sh
# 或 npm install -g @openai/codex,或 brew install --cask codex
登录时选 Sign in with ChatGPT,Plus/Pro/Business/Enterprise 订阅都包含 Codex 用量,不必走 API key 计费——这本身就是第一个性价比技巧。
这是我认为 Codex CLI 最被低估的能力。配置项 features.multi_agent 标注为 stable、默认开启,启用后 Codex 会获得5个子Agent协作工具:spawn_agent(派生)、send_input(传话)、resume_agent(恢复)、wait_agent(等待)、close_agent(关闭)。
关键是这几个配套参数,官方参考里写得明明白白:
[agents]
max_threads = 6 # 并发Agent线程上限,默认6
max_depth = 1 # 嵌套深度,默认1(root会话为深度0)
job_max_runtime_seconds = 1800 # CSV批量任务单worker超时,默认30分钟
还有一个更少人知道的:spawn_agents_on_csv 工具,可以按 CSV 里的每一行批量派生 worker 并行处理——比如你有100个文件要重构、100个接口要补测试,直接让主Agent按行分发给子Agent军团。把 max_threads 调到你机器能承受的值(比如12),重构速度近似翻倍。max_depth 调大还允许子Agent继续派生孙Agent。
很多人不知道 Codex 支持独立 Profile 文件:放在 ~/.codex/ 下,命名为 profile名.config.toml,启动时 codex --profile 名字 一键切换。
举一个我实际在用的组合:
# ~/.codex/fast.config.toml —— 日常小改动
model = "gpt-5.5"
model_reasoning_effort = "low" # minimal/low/medium/high/xhigh 五档
# ~/.codex/deep.config.toml —— 架构级重构
model = "gpt-5.5"
model_reasoning_effort = "xhigh"
service_tier = "flex" # 慢速低成本处理档
model_reasoning_effort 支持 minimal 到 xhigh 五档,service_tier 支持 flex(牺牲速度换成本)和 fast(付费优先档)。平时用 low + 默认档省额度,硬仗切 xhigh——这一套切换逻辑,多数Codex用户完全没碰过。
model_providers 是整个配置文件里自由度最高的部分:你可以定义自定义 Provider,指定 base_url、env_key(从环境变量读API key)、甚至 auth.command(用任意命令的输出来当Bearer token,适合接公司内部网关)。内置保留ID只有 openai、ollama、lmstudio 三个,另外官方内置了 amazon-bedrock Provider(可配 aws.profile 和 aws.region)。
更省事的路径是本地模型:codex --oss 直接以 --oss 模式启动,配合 oss_provider = "ollama"(或 lmstudio)就能跑本地开源模型,零API成本。注意一个硬约束:自定义 Provider 的 wire_api 目前只支持 responses 协议,也就是说第三方后端必须实现 OpenAI Responses API 格式,不是随便一个 chat/completions 兼容接口就能接——这是很多人配了半天不成功的根因。
features.memories 官方标注 off by default。打开后,Codex 会从你过去的会话中提取记忆并在未来会话注入。它有一整套微调参数,最实用的是:
[features]
memories = true
[memories]
max_rollout_age_days = 30 # 只考虑最近30天的会话,0-90可调
min_rollout_idle_hours = 6 # 会话闲置6小时后才纳入记忆生成
disable_on_external_context = true # 用了MCP/web搜索的会话不进记忆(防污染)
disable_on_external_context = true 是精髓:调试类、查资料的会话不会污染你的长期记忆。还有 min_rate_limit_remaining_percent(默认25),确保生成记忆不会吃掉你宝贵的订阅额度。
和 Claude Code 的 hooks 类似,Codex 支持 hooks.json 或 config.toml 内联 [hooks],支持的事件包括:PreToolUse、PostToolUse、PermissionRequest、PreCompact、PostCompact、SessionStart、SubagentStart、SubagentStop、UserPromptSubmit、Stop——整整10个生命周期节点。
典型玩法:在 PostToolUse 上挂一个自动 format 脚本,Codex 每次改完文件立即执行 gofmt/prettier;在 SessionStart 上挂环境检查。配合 features.hooks = true 打开。国内教程几乎没人写这块,但它是把 Codex 从“聊天工具”变成“流水线工人”的关键。
新版权限系统用 default_permissions 指定权限档,内置三档::read-only、:workspace、:danger-full-access。但真正的杀招是自定义命名权限档:
default_permissions = "safe-dev"
[permissions.safe-dev]
extends = ":workspace"
[permissions.safe-dev.filesystem]
"**/*.env" = "deny" # 禁止读取所有.env文件
".secrets/**" = "deny" # 密钥目录直接拒读
[permissions.safe-dev.network]
enabled = true
domains = { "github.com" = "allow", "**.npmjs.org" = "allow", "*" = "deny" }
支持 glob 禁读(连读都禁止,不只是禁写)、域名级网络白名单(*.example.com 子域、**.example.com 含主域)、Unix socket 白名单。让Agent跑全自动任务时挂上这个档,密钥泄露风险直接归零——这是比"裸奔--yolo"成熟得多的方案。
一组立刻能用的交互技巧:
/vim:切换Vim编辑模式,配 tui.vim_mode_default = true 默认启动即Vim normal模式,keymap 还细分 vim_normal、vim_operator、vim_text_object 上下文;/raw 或 Alt+R:原始滚动模式,终端原生选择复制不再被TUI拦截(tui.raw_output_mode = true 可默认开启);tui.keymap:任意重绑快捷键,tui.keymap.composer.<action> = [](空数组)还能解绑;notify:配置一个命令接收JSON payload——写一行osascript/notify-send,长任务跑完自动弹系统通知,tui.notification_condition = "always" 控制触发时机;history.persistence = "none":不落盘会话历史,公司电脑上的隐私开关。web_search 有三档:disabled / cached / live,默认是 cached——用的是 OpenAI 维护的索引,并不实时抓取网页(只有 --yolo 等全权限模式下才默认 live)。难怪很多人觉得Codex查文档“像是旧数据”。想要真联网,显式配置:
web_search = "live" # 实时抓取最新页面
[tools.web_search]
context_size = "high"
allowed_domains = ["developers.openai.com", "github.com"] # 限定搜索域名
allowed_domains 把搜索范围锁在官方文档站,能显著减少AI查到垃圾SEO内容后胡编的概率。
在 config.toml 第一行加上:
#:schema https://developers.openai.com/codex/config-schema.json
配合 VS Code/Cursor 的 Even Better TOML 扩展,编辑配置即可获得字段自动补全和诊断报错。Codex 的配置项有上百个,这行注释能帮你持续发现新开关。
flowchart LR
A[codex --profile 场景] --> B{任务类型?}
B -->|日常小改| C[fast档<br/>reasoning=low]
B -->|架构重构| D[deep档<br/>reasoning=xhigh]
C --> E[主Agent spawn_agent]
D --> E
E --> F[最多6个子Agent并行<br/>max_threads]
F --> G[PreToolUse 钩子<br/>安全检查]
G --> H[Permissions权限档<br/>禁读*.env + 域名白名单]
H --> I[PostToolUse 钩子<br/>自动格式化]
I --> J[Stop 钩子<br/>notify桌面通知]
J --> K[(Memories<br/>沉淀为长期记忆)]
| 维度 | 你以为的 Codex CLI | 实际上的 Codex CLI |
|---|---|---|
| 定位 | 单线程终端问答工具 | 默认支持6线程多Agent协作 + CSV批量分发 |
| 记忆 | 每次会话从零开始 | features.memories 打开即有长期记忆(含防污染开关) |
| 联网 | 查的是最新网页 | 默认 cached 索引模式,live 才是真联网 |
| 模型 | 只能用OpenAI API | 支持自定义Provider、Ollama/LM Studio本地跑、Bedrock |
| 安全 | 只能全开或全关 | glob级禁读 + 域名白名单的命名权限档 |
| 自动化 | 纯手动交互 | 10个生命周期Hook + notify通知 |
codex,登录 ChatGPT 订阅(别用API计费);在 ~/.codex/config.toml 第一行加 #:schema 注释;features.memories = true、web_search = "live",建一个 deep.config.toml profile(xhigh + flex);PostToolUse hook 挂自动格式化,再建 safe-dev 权限档禁读 **/*.env,之后才放心让它跑长任务。本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
