Codex Source Notes

Codex 源码阅读系列

这个系列从 openai/codex 的公开源码进入,不先贴功能清单,而是跟一条普通请求走: 它怎样从一句话变成有类型的任务,怎样进入 session 和 turn,怎样整理上下文、暴露工具、 检查权限,并把运行事件交给客户端展示、写入 rollout 供后续恢复,再从旧 thread 中提取可复用的经验。

源码证据固定到同一个 openai/codex 公开快照;产品契约来自 OpenAI 官方文档。每篇只描述公开客户端代码和协议可见的机制。

源码阅读 · 第一篇 先跟一次请求走完 Codex 的运行主线

跟随一次请求进入 session 与 turn,区分每步上下文、可选工具循环、客户端通知和用于恢复的持久记录。

源码阅读 · 第二篇 会话记录怎样变成下一次模型请求

看历史记录与 StepContext 怎样分别准备,再由 for_prompt、WorldState 更新和 compaction 组成下一次模型输入。

源码阅读 · 第三篇 protocol 与事件流,客户端怎样共享同一套事实

区分 turn/start 的新建与补充输入、接受回执与完成事件,以及实时通知和筛选后的持久记录。

源码阅读 · 第四篇 模型的工具请求怎样变成本地执行

从工具注册表和调用路由走到 UnifiedExec,区分调用结果、仍在运行的进程和回到模型的工具输出。

源码阅读 · 第五篇 权限与 sandbox 怎样约束一次执行

看审批策略、统一审查与 SandboxAttempt 怎样决定运行、拒绝或沙箱受阻后的受控重试。

源码阅读 · 第六篇 运行时事件怎样变成客户端界面

沿 core、app-server 与客户端跟踪事件,区分流式显示、审批请求和从 rollout 重建的 turn/item。

源码阅读 · 第七篇 Skills、plugins、MCP 与 subagents 怎样进入一次 turn

分清技能指令、插件资源、MCP 工具暴露与子任务的职责,以及它们怎样进入当前步骤。

源码阅读 · 第八篇 Hooks 在 turn 的哪些时刻运行,能改变什么

按各自触发条件理解 prompt、tool、permission、compact、stop、interrupt 与 session end,判断 hook 能改变什么。

源码阅读 · 第九篇 Codex 怎样构造可复用的请求前缀

区分请求前缀、缓存计量与 WebSocket 增量续传,核对不同模型的缓存契约和普通 Responses / Lite 请求形状。

源码阅读 · 第十篇 从 Rollout 记录重建会话与分叉

跟随 JSONL 写入、反向扫描和尾部重放,理解会话恢复、分叉快照以及旧 rollback 记录的兼容处理。

源码阅读 · 第十一篇 SDK 与 app-server 怎样把外部调用转成 thread 和 turn

看初始化、thread 与 turn 请求怎样接入 app-server,并区分事件订阅、输入接受和任务完成。

源码阅读 · 第十二篇 Codex 怎样从旧 thread 提取并复用经验

看两阶段后台任务怎样提炼经验,隔离 v1/v2 记忆、处理污染来源,并在未来请求中按需复用。

源码阅读 · 第十三篇 Windows sandbox 怎样限制文件写入与网络访问

看受限账户、令牌、ACL、网络规则与服务所有权检查怎样共同约束 Windows 命令执行。