OpenAI 高管关于 Codex 的争议发言,其实很适合当作一个技术话题来拆。核心问题不是“Codex 会不会过气”,而是“Codex 这类 Harness 到底解决什么问题,为什么行业正在重新审视这一层”。大模型编程 Agent 热了一年多之后,真正沉淀下来的不是某一个模型,而是包在模型外层的工具链:CLI、上下文管理、工具调用、沙箱、执行反馈、多轮规划。这个工具链在 OpenAI 的 Codex 实现里,就叫 Harness。
这篇文章不讨论高管发言的时间线,也不做商业判断,只围绕工程实践展开:Codex Harness 是什么,为什么值得学,本地怎么安装配置,怎么接入 DeepSeek 这类兼容 OpenAI 协议的模型服务,以及最常碰到的报错怎么排查。读完可以完成一个最小可用环境,并且面对“CLI 找不到”“本地代理失败”“模型 not supported”这类高频问题时有明确的排查顺序。
1. 先搞清楚:Codex Harness 到底在火什么
1.1 一句话定义 Harness
在 Agent 编程工具里,模型只负责“预测下一步”,真正干活的是模型外层的控制系统。这个系统的职责很具体:接收用户自然语言指令,把指令拆成可执行任务,调用代码检索、文件编辑、终端命令等工具,拿到执行结果后再交回模型做下一步决策。
这个控制系统就是 Harness。通俗一点说,模型是大脑,Harness 是手和眼睛,也是大脑和操作系统之间的安全壳。Codex Harness 就是 OpenAI Codex 里负责“干活”的那一层,它不决定模型怎么生成文本,但决定了 Agent 能不能真正把代码跑起来、改对文件、看日志、根据错误反馈继续修。
Harness 火爆的背景也很直接:模型能力越来越接近,API 也越来越同质化,但谁把 Agent 用得顺、接得稳、可回滚,谁才真正把模型变成生产工具。于是讨论焦点从“模型有多强”转向“Harness 有多完善”。
1.2 没有 Harness 时,Agent 编程缺什么
只给模型一个聊天框,很难完成真实编码任务。原因有三个:
第一,模型没有本地文件访问权限。它看不到项目结构,不知道你改了哪些文件,也不知道编译报错长什么样。第二,模型没有工具调用协议。即使它“知道”应该执行npm test,也没有接口去执行并读取结果。第三,模型没有上下文管理。真实项目代码量远超模型上下文窗口,Harness 需要决定哪些文件进上下文、哪些文件出上下文、按什么顺序展示。
这三个问题不是模型能力能单独解决的,必须由 Harness 实现。Codex 的 Harness 在终端里表现为一个 CLI 程序,它会维护会话、调用模型接口、在本地沙箱里执行命令、把输出回传给模型,形成一个“指令-执行-反馈-修正”的循环。
1.3 Codex CLI 与 Harness 的关系
很多人下载了 Codex 后发现,它并不是一个 Web 聊天页面,而是终端里的codex命令。这就是 CLI 形态的 Harness。在较新版本里,OpenAI 将 Codex 相关代码开源在 GitHub 仓库中,包含 CLI 主体、模型接入层、工具执行层和会话恢复逻辑。
理解这个关系很重要:你可以把 CLI 理解成 Harness 的用户入口,把~/.codex/config.toml理解成 Harness 的配置中心。后面接 DeepSeek、改模型、调网关,改的都是 Harness 这一层,而不是模型本身。
2. Harness 的工程价值不止是“接模型”
2.1 工具调用与多文件编辑模型
早期 Agent 工具只会返回纯文本,模型说“我帮你改好了”,实际什么都没发生。Harness 出现后,模型可以请求执行命令、读取文件、修改文件,并且每次操作都有真实反馈。
Codex 这类 Harness 对工具调用做得比较重。它不仅支持单次命令执行,还支持多文件编辑、跨文件分析、测试运行和版本回退。对开发者来说,这意味着 Agent 可以在一个会话里完成“读代码-定位问题-改代码-跑测试-根据失败继续修”的完整链路。
这里有个容易忽略的点:工具调用看起来只是加了一个接口,但它改变了错误处理方式。模型每执行一次工具,都可能得到非零退出码、编译异常、超时、权限拒绝。Harness 必须把这些信息结构化地回传,否则模型只能“盲猜”。
2.2 上下文管理与任务规划
真实项目不是几十行代码的小 demo,而是成千上万个文件。Harness 不能一次性把全部代码塞进模型上下文,否则成本极高且效果差。Codex 的 Harness 会先把项目文件树加载出来,按任务需要决定读哪些文件、哪些文件保留在上下文中、哪些文件需要丢弃。
这也是 Agent 编程和普通聊天最大的区别。普通聊天只需要记住历史对话,Agent 编程需要维护一份“项目地图”:当前任务在哪、依赖哪个模块、修改会影响哪条链路。Harness 做得越细,模型定位越准。
2.3 Agent 安全边界:为什么本地执行要可控
让模型直接在终端执行命令是有风险的。这也是 Harness 工程里最被强调的部分。Codex 的 Harness 会区分读操作和写操作,关键命令执行前确认,危险操作限制在沙箱目录里,必要时开启只读模式。
很多人轻视这层设计,实际踩过坑就明白了:模型可能因为一个错误判断,执行了格式化磁盘、删除 node_modules、全局安装错误版本依赖等操作。Harness 的沙箱和审批流不是摆设,它是在保护你的项目数据。学习 Harness 时,建议先把权限模型看懂,再谈“让 Agent 全自动跑”。
注意:生产环境使用 Agent 编程工具时,不要一开始就放开全部命令权限。先给最小权限,观察行为稳定后再逐步放开。
3. 本地安装 Codex Harness 并完成最小配置
3.1 环境要求与安装方式
在常见场景中,Codex CLI 可以安装在 macOS、Linux 和 Windows 上。安装前建议确认 Node.js 版本不低于项目要求,同时确认终端能访问 npm 或 Homebrew。常用安装方式如下:
npm install -g @openai/codex如果使用 Homebrew,也可以参考官方 README 里的 brew 安装方式。安装完成后执行:
codex --version能够输出版本号,说明 CLI 已经安装成功。如果提示command not found,需要检查 npm 全局目录是否在PATH中。这一步是最容易卡住的,后面第 4 节会单独展开。
3.2 配置 API Key 与模型
Codex CLI 运行时会启动一个本地 Node 服务,再通过该服务调用模型 API。为了让 Harness 知道调用谁,需要配置 API Key 和模型信息。最简单的做法是使用环境变量:
export OPENAI_API_KEY="你的API Key"随后在~/.codex/config.toml中指定模型。示例如下:
model = "gpt-5-codex" model_provider = "openai"不同版本可用模型名会有差异,务必以当前 Codex 版本支持的模型列表为准。如果直接在config.toml里写了一个不存在的模型,启动时会得到模型相关报错,而不是正常对话。
注意:不要把 API Key 直接写入
config.toml提交到 Git 仓库。推荐使用环境变量,或者在配置里通过env_key指定环境变量名称。
3.3 通过 OpenAI 兼容协议接入 DeepSeek
DeepSeek 的 API 对 OpenAI 协议兼容,因此不需要改造 Codex,只需要在 Harness 里增加一个自定义模型供应商。这种“三方模型接入 OpenAI 兼容网关”的做法,是当前 Agent 工具生态里最常见的集成方式。
在~/.codex/config.toml中添加一个model_provider,并切换到对应模型:
model_providers = { deepseek = { name = "deepseek", base_url = "https://api.deepseek.com/v1", env_key = "DEEPSEEK_API_KEY", wire_api = "chat" } } model = "deepseek-chat" model_provider = "deepseek"设置env_key后,Codex 会从环境变量读取DEEPSEEK_API_KEY,避免在配置文件里明文存储。wire_api表示使用 Chat Completions 协议还是 Responses 协议。DeepSeek 这类兼容服务通常使用 Chat Completions 协议,因此设置为chat。
配置完成后执行:
export DEEPSEEK_API_KEY="你的DeepSeek Key" codex进入交互界面后,让 Codex 创建一个简单项目,例如“用 Python 写一个读取 CSV 并统计行数的脚本”。如果模型能正确根据请求创建文件并执行,说明整条链路已经打通。
3.4 验证最小闭环
验证时不要只看“能聊天”,要验证 Agent 是否具备“动手能力”。建议按以下顺序检查:
- Codex 能否读取当前目录文件列表。
- Codex 能否创建一个新文件。
- Codex 能否执行终端命令并返回输出。
- Codex 是否能把报错信息反馈到后续决策中。
如果只验证“模型能回话”,那说明接入的是聊天 API,不是完整 Harness。Codex 的价值恰恰在于后面三步。遇到工具调用失败、命令找不到、权限不足时,会直接在会话里体现出来,这也正是要排查的对象。
4. 高频报错与排查路线
4.1 unable to locate the codex CLI binary 系列错误
这是 Codex 桌面端或 IDE 插件环境里最容易遇到的错误。现象是:界面提示找不到 Codex CLI 二进制文件,错误文本类似:
unable to locate the codex cli binary. set codex cli path or ensure the executable is in your PATH常见原因有以下几种:
- Codex CLI 根本没安装。
- CLI 安装在 npm 全局目录,但桌面应用启动时读取的
PATH不包含该目录,导致 Electron 或其他 GUI 进程找不到codex。 - 系统同时存在多个 Codex 版本,桌面端读取到了错误路径。
- 用户手动改过配置路径,指向了一个不存在或不可执行的文件。
排查顺序建议:
which codex codex --version如果命令能执行,说明 CLI 存在,再看codex所在目录是否在系统PATH中。macOS 上 GUI 应用往往不会加载用户~/.zshrc里的PATH,这是最常见的原因。解决方式是在桌面端设置里显式指定 CLI 路径,或者把codex的软链放到/usr/local/bin这类全局目录中。
如果which codex没有输出,必须重新安装 CLI:
npm install -g @openai/codex安装完成后,重新打开桌面端。注意:修改完环境变量后,需要彻底退出再启动应用,只刷新页面通常无效。
4.2 local proxy failed while handling codex endpoint
有用户会通过本地代理工具转发 Codex 请求,错误文本类似:
cc switch local proxy failed while handling codex endpoint /responses这个报错的关键词是local proxy。也就是说,Codex 请求先被转发到一个本地代理程序,再由代理决定路由到哪里,但代理在处理/responses端点时失败了。
这个错误通常不是 Codex 本身的问题,而是本地网络环境配置问题。可能原因包括:
- 代理程序没有启动,或者崩溃了。
- 代理程序的配置不支持 Responses API。
- 环境变量
HTTP_PROXY、HTTPS_PROXY指向了一个无效地址。 - 代理端配置了多个供应商,但当前选中的供应商不支持
/responses。
排查时先关掉代理相关配置,然后直接测试 Codex 是否恢复正常。如果确认是代理问题,再看代理工具的配置和日志。这里的重点是:本地代理属于个人网络配置,它的稳定性和 Codex 的安装环境是两回事,排查时先分层,不要一上来就重装 Codex。生产环境如果通过内部网关接入模型服务,网关需要充分兼容 OpenAI 的 Chat 或 Responses 协议,不然就会出现“模型能访问但工具链失败”的中间状态。
4.3 模型 not supported 错误
接入非 OpenAI 模型时,遇到的一类报错是:模型名在 Codex 配置里写了,但调用时提示该模型不支持。典型信息类似:
the 'xxx' model is not supported when using codex with a ...这类问题发生在协议不匹配上。Codex 某些请求走 Responses API,但第三方服务只实现了 Chat Completions,或者模型本身没有在目标网关启用。检查顺序:
- 在
config.toml中确认wire_api是否为chat。 - 确认
base_url是否正确,是否指向了带/v1的地址。 - 确认模型名是否和模型服务商定义完全一致。
- 用 curl 直接调用模型服务,确认模型名本身可用。
curl https://api.deepseek.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DEEPSEEK_API_KEY" \ -d '{"model": "deepseek-chat", "messages": [{"role": "user", "content": "hi"}]}'这一步能快速判断问题出在 Codex 配置,还是出在模型服务端。
4.4 命令行和桌面端配置不一致
很多人命令行里 Codex 一切正常,桌面端却报错。检查点如下:
- 桌面应用是否配置了独立的 Codex CLI 路径。
- 应用是否读取了和终端不同的
config.toml。 - 环境变量是否已经在应用进程里生效。
最省事的做法是:先统一命令行环境配置,确认codex能在终端正常工作,再到桌面端设置中指定同一个 CLI 路径,并确保 API Key 通过环境变量或相同配置文件注入。
5. 从“再火俩月”到长期能力:Harness 工程怎么学
5.1 别只追模型轮换,深耕控制层
模型迭代很快,今天的主流模型到明年可能不再领先,但 Harness 解决的问题不会消失。工具调用协议、上下文管理、沙箱执行、任务规划,这些都是长期存在的 Agent 工程问题。
所以学习 Codex 时,不要只看“怎么换一个更强的模型”,要重点观察 Harness 层做了什么。例如:它如何组织多轮工具调用;失败后如何恢复;会话记录如何保存;哪些操作需要审批;如何在不用重新读取全部代码的情况下增量更新上下文。这些能力才是你迁移到下一个模型或下一个工具时依然有用的部分。
5.2 关注协议和标准,而不是绑定具体工具
OpenAI 的 API 协议已经成为事实上的兼容标准,DeepSeek、其他第三方服务都在适配。Codex 接入 DeepSeek 的例子说明一个关键事实:Harness 和模型之间是标准接口,模型可以替换,Harness 可以选型,协议是粘合剂。
学习时可以重点关注两个协议标准:
- Chat Completions:大多数第三方模型服务都支持,适合大多数 Agent 场景。
- Responses API:Codex 等工具会更深度使用,包含更完整的工具调用语义。
不少报错都源于把串了协议。建议把“模型提供商配置表”维护成一个表格:
| 配置项 | 含义 | 常见值 |
|---|---|---|
base_url | 模型服务地址 | https://api.openai.com/v1 |
env_key | API Key 对应的环境变量名 | OPENAI_API_KEY |
wire_api | 协议类型 | chat或responses |
model | 模型名称 | deepseek-chat |
model_provider | 使用的供应商标识 | deepseek |
5.3 安全、可观测、可回滚是 Agent 落地的关键
Harness 工程的核心不只是“更高效”,还包括“更安全、更可控”。实际项目中建议把下面三项做成基础能力:
第一,安全边界。给 Agent 一个最小权限的角色,只在指定目录内运行,禁止交互式命令和全局写操作。第二,可观测性。记录每次 Agent 操作的时间、命令、输出和决策依据,出现问题时才能回放定位。第三,可回滚。所有文件变更尽量走 Git,Agent 每完成一轮修改后,能方便地回到上一个稳定点。
这三项看起来不像“模型能力”那样让人兴奋,但它们决定了工具能不能进生产环境。
6. 常见坑与最佳实践清单
6.1 至少要注意的三个坑
第一个坑:把 API Key 直接写在配置文件里。表面上看启动方便,但config.toml很容易被备份或分享出去,导致密钥泄露。推荐做法是env_key引用环境变量,本地 Terminal 里加载一次即可。
第二个坑:把wire_api配错。接入 DeepSeek 时如果沿用了 OpenAI Responses 协议,会触发模型不支持或请求失败。不同模型服务的兼容程度不同,接第三方服务时优先选择chat,如果确认服务支持 Responses 再切换到responses。
第三个坑:改了配置不重启。Codex CLI 启动时会读取配置文件,修改config.toml后需要重启会话。很多“配置为什么不生效”的问题,本质是用户没有让新配置加载。
第四个坑:在 GUI 应用里看不到 CLI。桌面端和终端的环境变量隔离,导致 PATH 不一致。解决办法是显式指定 CLI 路径,不要依赖“刚才终端能跑,应用里也应该能跑”。
6.2 使用前检查清单
一套可复用的清单如下:
- CLI 安装成功,
codex --version有正确输出。 - API Key 已通过环境变量注入,且未被写入公开文件。
config.toml中的model_provider、base_url、wire_api与模型服务商匹配。- 模型名可被服务端识别,不依赖本地猜测。
- 当前目录允许 Agent 写文件,危险命令处于只读或审批模式。
- 无多余代理配置干扰请求;如使用本地代理,确认代理服务正在运行且协议兼容。
- 生产实验前已用最小项目验证工具调用、文件修改、命令反馈三条链路。
- 准备 Git 回滚点,避免 Agent 修改不可逆。
6.3 扩展方向建议
跑通 Codex 接入 DeepSeek 只是起点。下一步值得深入的方向有三个:一是研究 Harness 的会话恢复和上下文压缩策略,这决定了长时间任务能不能稳定执行;二是理解 MCP 这类标准化工具协议,它能帮 Harness 对接更多外部工具;三是搭建内部统一的模型网关,统一管理多供应商、多模型、多密钥的请求路由。
把时间花在 Harness 层,比每天追赶模型新闻更有复利。模型会快速迭代,工具链的工程沉淀却会一直积累。Codex 这类开源 Harness 恰好是一个高信息密度的样本,拆开它的配置、跑通它的流程、解决它的问题,就是理解 Agent 工程最好的入门路径。