A0|这份拆解怎么读:你打开的不是 2021 那个 Codex
先把名字拆开
第一次搜 “OpenAI Codex”,搜索引擎会把三样东西叠在同一个词上:2021 年那个补全模型、2025 年以后这个本地 Agent、以及 chatgpt.com 上那套云端任务。仓库根 README.md 也在切开——CLI 是本机 agent,编辑器走 IDE 安装页,桌面走 codex app,云端走 chatgpt.com/codex。
这个 git 树开源的是 客户端 harness:用户输入怎么变成模型调用、工具执行、审批、落盘。模型权重、云端沙箱、IDE 外壳都不在这里。把它当「开源 Copilot」读,后面每一章都会对不上号。
1. 2021 的 Codex 模型 vs 2025+ 的 Codex Agent:同名不同物
2021 年的 Codex 是模型。它把公开代码微调进 GPT-3,主业是 token 级补全:给你半个函数,猜下一截。GitHub Copilot 早期吃的就是这套。产品形态是编辑器灰字,不是一个会跑测试、会申请沙箱升级的进程。
2025 年以后重新启用这个名字时,产品已经换成 任务级 agent。CLI 在 2025 年 4 月左右公开,云端 Web 随后跟上,再被收进同一套 ChatGPT 账号。你在这个仓库里看到的,是那个 agent 的本地运行时:TUI、codex exec、给 IDE / 桌面用的 app-server、沙箱、execpolicy、rollout。模型侧是另一条线——GPT-5 / GPT-5-Codex 这类 agentic coding 模型,训练目标是多步改仓库,不是补全一行。
两套东西共享一个词,不共享架构:
| 2021 Codex | 2025+ Codex(本仓库) | |
|---|---|---|
| 单位 | 补全建议 | Thread / Turn / Step |
| 副作用 | 几乎没有 | 跑命令、改文件、调 MCP |
| 安全 | 编辑器撤销 | 沙箱 × 审批 × ExecPolicy |
| 开源 | 模型并未开源 | harness 开源,模型仍闭源 |
没有这个区分会怎样?你会把 core/src/session/turn.rs 读成「补全管线」,然后奇怪为什么还要有 AskForApproval、为什么写文件不走万能 shell。那些机制是给 会动手的 agent 准备的,补全模型根本用不上。
2. 本仓库开源什么,闭源什么
许可证是 Apache-2.0(LICENSE)。NOTICE 写明版权 2025 OpenAI。开源的边界以 这个 git 树里有什么 为准,不以产品页上的 “Codex” 二字为准。
在这个仓库里、工程师可以对着读的:
- 本地 CLI / TUI:
codex-rs/cli/、codex-rs/tui/。无 subcommand 就进交互界面:MultitoolCli的注释写明 options 会 forward 给 interactive CLI(cli/src/main.rs里If no subcommand is specified)。 - 无头执行:
codex exec(Subcommand::Exec,cli/src/main.rs:152-154)。 - 给所有图形客户端用的 JSON-RPC:app-server。IDE 和桌面不是另一套 agent,它们是这个协议的客户端。
- 执行与隔离:
sandboxing/、linux-sandbox/、windows-sandbox-rs/、execpolicy/、exec-server/、apply-patch/。 - 协议与配置:
protocol/(文件头就写了 SQ/EQ,protocol/src/protocol.rs:1-4)、config/、login/、rollout/。 - 嵌入用 SDK:
sdk/typescript/、sdk/python/。TypeScript SDK 自己说了,它是 spawn CLI、吃 JSONL 的薄封装(sdk/typescript/README.md:5)。
不在这个仓库、不要假装能在源码里找到实现的:
- 模型本身,以及云端任务用的隔离虚拟机。
- chatgpt.com/codex 的 Web UI 和云端编排。本仓库只有把云端 diff 应用到本地的入口:
codex apply(Subcommand::Apply,cli/src/main.rs:200-202)和实验性codex cloud(:225-227),不是云端 runtime。 - IDE 扩展的编辑器 UI(VS Code / Cursor / Windsurf / JetBrains / Xcode)。它们走 app-server;行内 diff、打开文件进上下文,是客户端投影,见 E9。
- 桌面 App 的原生壳。
codex app在 macOS/Windows 上只负责打开或拉安装器(cli/src/app_cmd.rs:15-24),不是 Electron 源码。 - 部分 ChatGPT Apps / 托管连接器的服务端,以及独立产品 Codex Security(E11 点到为止)。
开源客户端、闭源模型和云,这个组合有一个直接后果:你在本仓库里能抄到的是 harness,抄不到「OpenAI 怎么训模型、怎么排云端队列」。把产品全家桶当成一份 git 历史,会在 E3、E4、E11 全部撞墙。
3. 不接受外部代码 PR
docs/contributing.md:5 写得很硬:
We do not accept external code contributions or pull requests.
他们欢迎 issue、复现、根因、设计讨论,代码改动由 Codex 团队自己做。理由写在同文件第 7–13 行:有效改动需要架构上下文、系统约束和路线图;外部 PR 评审往往比自己改更贵。
这对读者意味着两件事。
第一,这本电子书 不是贡献指南。不要读完 B2 就去提一个「重构 ToolOrchestrator」的 PR。社区杠杆在 issue 里的事实,不在 diff 里。
第二,仓库文档和代码纪律是写给内部 agent 和内部开发者的。AGENTS.md 里那些「别再往 codex-core 塞东西」「上下文必须有界」——是他们自己踩过的坑,不是对外 API 承诺。行号会变,判断更值钱。
安全漏洞不要开公开 issue,走 SECURITY.md 指向的 Bugcrowd。
4. 两张图:用户看见的功能 vs 工程师该抄的分层
用户看见的是产品表面。工程师该抄的是 harness 分层。两张图不要合成一张,合成之后你会把 Pets 和 ToolOrchestrator 放在同一层。
用户看见的
同一账号可以把本地任务和云端任务串起来,但 实现不在同一棵源码树。API Key 能驱动本机循环,缺的是订阅产品上的那一圈:部分模型、云端任务、和账号绑定的 Apps。细节在 A1。
工程师该抄的
抄的顺序不是从上到下把功能做全,而是 先让 B 立住:没有事件总线就没有多前端;没有工具四层和 Extension 缝,Skills / MCP / imagegen 都会焊进 codex-core;没有三套旋钮,--yolo 会变成默认安全模型;没有 environment,远程 FS 会再发明一套审批。G1 是 B7 那一枪怎么飞出去,G2 是关掉进程还能翻出来,G3 是多前端共用一只插座,G4 是有效开关从哪来,G5 是 Plan 只换说明书,G6 是有网之后的出站门。F3 的周末切片就是按这个图砍的。
用户图里很显眼的 Pets、Voice、Computer Use,在工程师图里故意靠边。它们是通道或装饰,不是政策层——E5、E8 会反复钉这句。
5. 推荐阅读顺序
41 章不是要你按字母顺序熬完。按目的走。
要自己做 agent: A 之后立刻进 B1–B7,再用 G1 看这一枪怎么打出去、G2 看关掉还能不能翻出来,用 附录 F 钉一枪采样,然后 F2、F3。B 是必抄内核。C / D / E 按你真要做的产品形态再加。第一周不要做宠物、Voice、Computer Use、插件市场、远程 exec-server、本机 daemon、Network Proxy(F3)。读开关看 G4,Plan 模式机制看 G5。
要给团队写 AGENTS.md、配 MCP: C1 → D1 → D3 → D4 → F1。政策放说明书和 ExecPolicy,不要放 Memories。
要对着 TUI 或 IDE 查行为: E1 看「前端只适配」,协议和进程模型看 G3,具体 slash 回 E10 索引,再跳回对应章。不要从 tui/src/chatwidget.rs 开始读——那是投影,不是内核。
读的时候记住三个禁区:
- 不要把
docs/当架构正文。很多文件只有一行官网链接(例如docs/getting-started.md、docs/sandbox.md)。F4 会列对照;有冲突以官网和源码为准。 - 不要在 TUI 里找智能。协议在
protocol/,循环在core/src/session/。 - 不要跳过「未信任项目」。它同时改配置合并、AGENTS.md 发现、hooks 加载,是 B5 / C1 / D4 的共用前提。
6. 结语:带走一句话
值得抄的是本地 harness;模型、云端 runtime 和不接受外部 PR,标出了故意不让你抄的边界。