LC
基于 Codex 开源源码 · 13 章交互式教学

Learn Codex

OpenAI Codex 有 66 万行 Rust 代码,1000+ 文件,6 个核心 crate
这 13 章带你从 Agent 循环到工程全貌,逐层拆解 Rust 实现。

SOURCE CODE WALKTHROUGH

核心 Agent Loop

所有 AI Agent 的本质是一个循环。Codex 的核心在 core/src/codex/turn.rs (2203行) 中实现。点击每个步骤查看对应的 Rust 源码位置。

工具结果反馈,循环继续
1

用户输入

用户在 TUI/CLI 中输入自然语言指令

// tui/src/app.rs → 用户在 TUI 中输入后提交
// UserInput::Text 是带具名字段的枚举变体
let input = vec![UserInput::Text {
text,
text_elements: Vec::new(),
}];
// TUI 通过 Op::UserInput 将输入送入核心引擎
codex.route_text_input(text).await;
WHY DEEP DIVE

30 行代码到 66 万行 Rust

教学版 Agent 的核心循环只要 30 行,但生产级的 Codex 在同一个循环上叠加了多少工程?

教学版~30 行 Python
# 一个完整的 Agent 核心
while True:
response = llm.call(messages)
if response.stop_reason != "tool_use":
break
result = execute(response.tool)
messages.append(result)
同步 API 调用
无沙箱隔离
无权限检查
无上下文压缩
单 Agent
生产版 Codex (Rust)同一个循环 + 12 层工程
Ch01
状态机循环
turn.rs 的多状态推进,处理 tool_call / end_turn / error
Ch02
工具路由
router.rs 统一分发,async handler 注册机制
Ch03
动态 Prompt
build_initial_context 每次重新组装,Skills 热注入
Ch04/05
沙箱执行
macOS/Linux/Windows 三平台沙箱,exec.rs 子进程隔离
Ch06
权限三阶段
orchestrator.rs: 审批 → 选择沙箱 → 执行(拒绝时升级沙箱重试)
Ch07
Token 压缩
compact.rs 阈值检测,自动摘要,预算守护
Ch09
长期记忆
两阶段提取管线,向量存储,跨会话持久化
Ch10
MCP 协议
mcp_tool_call.rs,任意外部服务成为工具
ARCHITECTURE LAYERS

四层架构

66 万行 Rust 代码按功能分为四个架构层。点击展开查看每层的核心文件、设计模式和对应章节。

L1
引擎核心
3 章深度解析
L2
工具与安全
3 章深度解析
L3
上下文管理
3 章深度解析
L4
协议与生态
4 章深度解析
CODEX 工程特性

Codex 的 8 个关键工程特性

这些特性不是配置选项,而是深入 Rust 源码的架构决策——每一个都值得单独一章。

🖥️原生 TUI
tui crate
Rust 原生终端 UI · 无 Electron · 基于 ratatui 实现
📋Plan 模式
turn.rs
只读推理阶段 · 行动前强制规划 · collaboration_mode 架构级实现
🛡️三平台沙箱
sandboxing crate
macOS Seatbelt · Linux bubblewrap/landlock · Windows restricted token
👻Ghost Commit
ghost_snapshot.rs
每个 turn 自动创建 Git 快照 · 支持一键 undo · 完整追踪 Agent 每步修改
💉Skills 注入
skills.rs
每 turn 从文件系统动态加载指令集 · 可组合 · 无需修改 Agent 代码
🔌MCP 协议
mcp_tool_call.rs
标准 MCP 客户端实现 · 任意外部服务成为工具 · codex-mcp crate
🧠两阶段记忆
memories/phase1,2.rs
Phase1 提取 + Phase2 整合 · SQLite 持久化 + Markdown 文件树 · 跨会话积累
Rust 性能
core crate
零 GC 停顿 · 并发安全 · 无运行时开销
CORE CRATES

核心 Rust Crate

理解这 6 个 crate 的边界,就掌握了整个系统的脉络。代码行数反映了工程复杂度。

LEARNING PATH

13 章源码深潜

每章聚焦一个核心子系统,包含 Rust 源码解析 + 架构可视化 + 最小复现示例。按架构层过滤,或按顺序学习。

Ch01

Agent 循环

每次对话的状态机核心

所有 Agent 的本质是一个循环:调用模型 → 检查 stop_reason → 分发工具 → 回传结果

~2200 linesengine
Ch02

工具系统

路由器、Handler 与分发管线

工具不过是一个 Rust async fn 挂上名字——路由器永远不变

~1500 linesengine
Ch03

提示词工程

build_initial_context 与动态组装

System Prompt 不是一个字符串,而是每次对话重新组装的管线

3106 linesengine
Ch04

Shell 执行

从工具调用到子进程再到结果

执行 Shell 命令是 Agent 能做的最危险的事——必须如此对待

1405 linestools
Ch05

沙箱安全

跨平台隔离:macOS / Linux / Windows

沙箱不是可选项——它是不可信代码能够运行的前提

~6000 linestools
Ch06

权限引擎

每次工具调用前的三阶段编排

问一次,记一辈子——但执行前永远要验证

~370 linestools
Ch07

上下文压缩

控制 Token 预算不超限

上下文总会满——关键是如何优雅地恢复

~580 linescontext
Ch08

短期记忆

会话内的消息历史管理

对话就是状态——请认真管理它

~730 linescontext
Ch09

长期记忆

两阶段提取与检索管线

记忆是让无状态模型变成会学习的 Agent 的关键

~3800 linescontext
Ch10

MCP 集成

模型上下文协议客户端与工具桥接

MCP 让任何服务都能成为 Agent 的一等公民工具,无需 fork Agent

~1730 linesecosystem
Ch11

Skills 注入

运行时加载的可复用指令集

Skills 是提示词工程的可组合化——写一次,处处复用

~230 linesecosystem
Ch12

Plan 模式

行动前的只读推理阶段

先想清楚再动手——Plan 模式在架构层面强制执行这一原则

~15900 linesecosystem
Ch13

多 Agent

生成和协调子 Agent

规模化来自拆分问题,而不是更大的上下文窗口

~1500 linesecosystem