欢迎光临
我们一直在努力

【AI Agent】OpenAI Codex CLI 深度技术分析报告

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

OpenAI Codex CLI 深度技术分析报告

项目:openai/codex — Lightweight coding agent that runs in your terminal
仓库:https://github.com/openai/codex
分析日期:2026-08-29
License:Apache 2.0


00. Executive Summary

OpenAI Codex CLI 是一个用 Rust 编写的本地终端 Coding Agent,本质上是"模型层 + 宿主层(Harness)+ 沙箱层"三件套。它解决的核心问题是:如何让 LLM 在开发者本地文件系统上安全地完成多步代码任务(读文件 → 编辑 → 跑测试 → 修 lint → 提交),同时把 Agent 的"自主性"和"安全性"通过操作系统级 sandbox + 显式 approval 流程绑定在一起。

技术上,它不是又一个 LangChain Wrapper。
它的核心壁垒是三层:
一是 Rust 重写带来的零依赖安装与 OS 级 sandbox 原生绑定(macOS Seatbelt / Linux Landlock+seccomp / Windows Job Objects);
二是 Event-Driven 双通道协议;
三是 App Server + JSON-RPC 多 surface 复用架构(CLI、VS Code、Desktop、Web 共享同一个 Codex Core)。

模型本身是 GPT-5.x-Codex 系列,但真正的工程复杂度在于围绕模型构建的 Harness(prompt 组装、context compaction、prefix caching、审批流、sandbox 策略),这一点 OpenAI 团队自己也承认。

最大优势:safety-by-default + 多 surface 一致性 + 极致 token 效率(同等任务比 Claude Code 省 2-3x tokens)。
最大缺陷:Agent Loop 的长链路连贯性弱于 Claude Code(SWE-bench Verified 上 77.3% vs 80.8%),第三方评测普遍反映 Codex 在 3-4 步以上任务会"丢失方向感"。

工程成熟度:Developer Ready 向 Production Ready 过渡中,10,006 commits、640+ tagged releases、约 400 contributors,内部最高每天发 3-4 个版本,有完善的 Bazel + 三平台 CI,但 codex-core 单 crate 已被官方自己标记为"bloated"。

适合:本地个人/小团队高频日常编码、CI/CD 集成、企业内部需要严格控制文件/网络访问的场景。不适合:需要长链路自主规划的重构任务(此场景 Claude Code 更稳)、完全离线场景(强依赖 OpenAI Responses API,虽然可以通过 OpenAI-compatible endpoint 接本地模型但生态支持一般)。

是否值得学习:强烈值得。它是目前开源界最完整的"生产级 Agent Harness"参考实现。

是否值得二次开发:条件性值得。适合 fork 出做内部 Coding Agent(替换 model provider、加企业治理),不适合做通用 Agent Framework。

是否适合生产:个人/团队场景 Yes,企业场景需要补 RBAC / Audit / Multi-tenancy。

维度评分
技术创新 9/10
架构设计 8/10
AI 能力 8/10
工程质量 9/10
可扩展性 7/10
可维护性 6/10
文档质量 7/10
测试完整度 7/10
生产成熟度 7/10
二次开发价值 7/10
开源价值 9/10
综合 7.8/10

01. Project Positioning

1.1 项目一句话定义

一个用 Rust 编写、运行在开发者本地终端的 Safety-First Coding Agent,通过 OS 级 sandbox、双通道事件协议和可插拔 Model Provider,把 LLM 的代码生成能力绑定在受控的本地文件系统操作之上。

1.2 项目解决的问题

层面问题
用户痛点 现有 AI Coding 工具(Copilot)是补全式的,不能自主执行"读-改-测-提交"闭环;ChatGPT 网页版没有本地文件系统访问
技术问题 LLM 输出不可靠,直接 shell 执行有安全风险;上下文超过 token 限制后任务失败
工程问题 多 IDE / CLI / Web 多端复用同一个 Agent 逻辑,不希望每个 surface 重写一遍
业务问题 企业担心 Agent 执行 rm -rf / 网络外发;需要默认安全的 sandbox
Codex 团队对此的回答是**"aSWE(Autonomous Software Engineer)"愿景**——2024 年秋由 Greg Brockman 与 Sam Altman 亲自立项,目标不是补全工具,而是"坐在工程师旁边"的自治 SWE。

1.3 Target Users

  • 个人开发者(主力):在终端里写代码,需要 quick iteration
  • 企业工程师:需要 audit + sandbox + 内部 model endpoint 接入
  • Agent 框架研究者:学习如何构建 production-grade Agent Harness
  • 第三方 IDE 厂商(Xcode、JetBrains):通过 App Server JSON-RPC 协议集成

1.4 Use Cases

  • 本地 feature 开发、bug fix、refactor
  • Code review(团队自动 AI review,PR 进入 in-review 自动触发)
  • Legacy code modernization(COBOL → 现代栈,官方 cookbook 有完整案例)
  • CI/CD 集成(codex exec 非 interactive 模式)
  • 通过 MCP 接入外部工具(Datadog、Matomo 等)
  • 1.5 Project Boundary

    Codex 做什么:本地 Coding Agent 的全部 Harness(sandbox、approval、prompt 组装、context 管理、tool 调度、协议层)。
    Codex 明确不做什么:

    • 不做 Cloud Agent(Codex Web / Codex Cloud 是另一个闭源产品)
    • 不做 IDE 插件本身(VS Code / JetBrains 扩展是独立仓库)
    • 不做 Model Training(GPT-5.x-Codex 是闭源模型,通过 Responses API 调用)
    • 不支持图像输入(截至 v0.150 仍不支持,这是 ByteByteGo 报道时明确指出的限制)
    • 不实现 RAG Pipeline(它不是 RAG 项目,是 Agent 项目)

    02. Project Evolution

    维度数据(Verified)来源
    创建时间 2025-04 (公开), 内部 2024 秋立项
    Stars 109K–120K(不同时点)
    Forks 17.3K–18.3K
    Contributors ~400
    Commits 10,006 (main)
    Tagged Releases 640+
    最新版本 v0.150.x (2026-08)
    发布节奏 内部 3-4 次/天,外部每 2-3 天
    主语言 Rust (95.6%),TypeScript 仅遗留
    关键演进节点:
  • 2024 秋:内部立项 aSWE,由 Michael Bolin 任 tech lead
  • 2025-04:CLI 公开发布,TypeScript + React Ink 实现
  • 2025-05:Codex Web 同步上线(ChatGPT 内)
  • 2025-05-30:Discussion #1174 宣布 Rust 重写,理由是零依赖安装、原生 sandbox binding、性能、可扩展协议
  • 2025-06:Rust 重写完成,TypeScript 进入 maintenance
  • 2026-03:v0.116.0 引入企业 features
  • 2026-06:发布 Windows Sandbox 架构设计细节
  • 2026-07+:GPT-5.3-Codex、GPT-5.6 Sol 模型迭代
    状态判断: Active — 不是 Demo,也不是 Maintenance,是高频演进的活跃项目。但官方在 AGENTS.md 中明确写"codex-core crate is bloated, resist adding code to codex-core",说明主 crate 正在承受快速迭代带来的复杂度压力。

  • 03. Repository Structure

    基于 GitHub main 分支实际目录结构:

    openai/codex/
    ├── codex-rs/ # Rust 主代码库 (~95.6%)
    │ ├── core/ # codex-core: Agent Loop / Session / Codex 主体
    │ │ ├── src/
    │ │ │ ├── codex.rs # TurnContext、核心 Codex 结构
    │ │ │ ├── context/ # ContextualUserFragment trait 及实现
    │ │ │ ├── tools/ # 工具执行
    │ │ │ ├── suite/ # Integration tests
    │ │ │ └── config.rs
    │ │ └── config.schema.json # 由 just write-config-schema 生成
    │ ├── tui/ # codex-tui: Ratatui 终端 UI
    │ │ └── src/
    │ │ ├── app.rs # 主事件循环
    │ │ ├── chatwidget.rs # 聊天组件(orchestration)
    │ │ └── bottom_pane/ # chat_composer / footer
    │ ├── tui2/ # tui 重构版,main.rs 在这里
    │ ├── protocol/ # codex-protocol: Op / Event 枚举
    │ │ └── src/protocol.rs # Op::UserInput/ExecApproval/… 定义
    │ ├── mcp/ # codex-mcp: MCP 集成
    │ │ └── src/mcp_connection_manager.rs
    │ ├── exec/ # codex exec 非 interactive 模式
    │ ├── app-server/ # JSON-RPC over stdio,IDE 集成入口
    │ ├── sandbox/ # sandbox 策略 (Seatbelt/Landlock/Job Objects)
    │ ├── apply-patch/ # patch 解析与应用
    │ └── … (40+ crates)
    ├── codex-cli/ # 遗留 TypeScript CLI (maintenance)
    ├── sdk/ # Codex SDK (TypeScript,多 surface 集成)
    ├── docs/ # 项目内 docs(仅 app-server API,不放产品文档)
    ├── .github/ # CI workflows (三平台)
    ├── .devcontainer/
    ├── bazel/ # Bazel 构建配置
    ├── scripts/
    ├── AGENTS.md # 项目自身的 Agent 指令(Rust 规范)
    ├── CHANGELOG.md
    └── README.md

    DirectoryResponsibilityImportance
    codex-rs/core Agent Loop、Session、TurnContext、Context 管理 High
    codex-rs/tui + tui2 Ratatui 终端 UI、事件循环、ChatWidget High
    codex-rs/protocol Op / ResponseEvent 枚举,客户端/服务端共享类型 High
    codex-rs/app-server JSON-RPC over stdio 协议服务,VS Code / Desktop 入口 High
    codex-rs/mcp MCP client 与 tool 调度 High
    codex-rs/sandbox Seatbelt / Landlock / Job Objects 策略实现 High
    codex-rs/apply-patch 把 LLM 输出的 patch 应用到文件系统 Medium
    codex-rs/exec 非 interactive headless 模式(CI 用) Medium
    sdk/ 第三方/TypeScript SDK Medium
    codex-cli/ 遗留 TS 实现,已 maintenance Low
    docs/ 仅 app-server API,产品文档在外 Low
    .github/ CI(3 平台)、release automation High

    04. Architecture Deep Dive

    4.1 System Architecture

    实际架构与模板中"Orchestrator → Agent → Tools → RAG → LLM"流不同。 Codex 没有 RAG 层,核心是 “Client Surface → App Server (JSON-RPC) → Codex Core (Agent Loop) → Model Provider / Tool Executor / Sandbox”:

    #mermaid-svg-yyDivpMfqInPgh5m{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-yyDivpMfqInPgh5m .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yyDivpMfqInPgh5m .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yyDivpMfqInPgh5m .error-icon{fill:#552222;}#mermaid-svg-yyDivpMfqInPgh5m .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yyDivpMfqInPgh5m .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yyDivpMfqInPgh5m .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yyDivpMfqInPgh5m .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yyDivpMfqInPgh5m .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yyDivpMfqInPgh5m .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yyDivpMfqInPgh5m .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yyDivpMfqInPgh5m .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yyDivpMfqInPgh5m .marker.cross{stroke:#333333;}#mermaid-svg-yyDivpMfqInPgh5m svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yyDivpMfqInPgh5m p{margin:0;}#mermaid-svg-yyDivpMfqInPgh5m .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-yyDivpMfqInPgh5m .cluster-label text{fill:#333;}#mermaid-svg-yyDivpMfqInPgh5m .cluster-label span{color:#333;}#mermaid-svg-yyDivpMfqInPgh5m .cluster-label span p{background-color:transparent;}#mermaid-svg-yyDivpMfqInPgh5m .label text,#mermaid-svg-yyDivpMfqInPgh5m span{fill:#333;color:#333;}#mermaid-svg-yyDivpMfqInPgh5m .node rect,#mermaid-svg-yyDivpMfqInPgh5m .node circle,#mermaid-svg-yyDivpMfqInPgh5m .node ellipse,#mermaid-svg-yyDivpMfqInPgh5m .node polygon,#mermaid-svg-yyDivpMfqInPgh5m .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yyDivpMfqInPgh5m .rough-node .label text,#mermaid-svg-yyDivpMfqInPgh5m .node .label text,#mermaid-svg-yyDivpMfqInPgh5m .image-shape .label,#mermaid-svg-yyDivpMfqInPgh5m .icon-shape .label{text-anchor:middle;}#mermaid-svg-yyDivpMfqInPgh5m .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yyDivpMfqInPgh5m .rough-node .label,#mermaid-svg-yyDivpMfqInPgh5m .node .label,#mermaid-svg-yyDivpMfqInPgh5m .image-shape .label,#mermaid-svg-yyDivpMfqInPgh5m .icon-shape .label{text-align:center;}#mermaid-svg-yyDivpMfqInPgh5m .node.clickable{cursor:pointer;}#mermaid-svg-yyDivpMfqInPgh5m .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yyDivpMfqInPgh5m .arrowheadPath{fill:#333333;}#mermaid-svg-yyDivpMfqInPgh5m .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yyDivpMfqInPgh5m .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yyDivpMfqInPgh5m .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yyDivpMfqInPgh5m .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yyDivpMfqInPgh5m .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yyDivpMfqInPgh5m .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yyDivpMfqInPgh5m .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yyDivpMfqInPgh5m .cluster text{fill:#333;}#mermaid-svg-yyDivpMfqInPgh5m .cluster span{color:#333;}#mermaid-svg-yyDivpMfqInPgh5m div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yyDivpMfqInPgh5m .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yyDivpMfqInPgh5m rect.text{fill:none;stroke-width:0;}#mermaid-svg-yyDivpMfqInPgh5m .icon-shape,#mermaid-svg-yyDivpMfqInPgh5m .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yyDivpMfqInPgh5m .icon-shape p,#mermaid-svg-yyDivpMfqInPgh5m .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yyDivpMfqInPgh5m .icon-shape .label rect,#mermaid-svg-yyDivpMfqInPgh5m .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yyDivpMfqInPgh5m .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yyDivpMfqInPgh5m .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yyDivpMfqInPgh5m :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Model Provider

    Sandbox Layer

    Tool Layer

    Codex Core (codex-rs/core)

    App Server Layer

    Client Surfaces

    Op / Event 双通道

    tool_call

    result

    next turn

    TUI Terminalcodex-tui

    VS Code Extension

    Desktop App

    Web App

    SDK / 3rd party

    App ServerJSON-RPC over stdio/HTTP

    submission_loopOp channel consumer

    run_turn / run_model_turn

    try_run_turn+ exponential backoff

    Context Builder+ Compaction

    Tool Executor

    Approval Policy Engine

    shell tool

    file read/patch

    MCP Client→ External MCP Servers

    Skills progressive disclosure

    macOS Seatbelt

    Linux Landlock+seccomp

    Windows Job Objects

    OpenAI Responses APIGPT-5.x-Codex

    OpenAI-compatiblecustom providers

    4.2 Component Architecture

    Component实现职责
    Submission Loop codex-rs/core submission_loop 永续循环,消费 Op channel,直到 Op::Shutdown
    Turn Runner run_turn → run_model_turn → try_run_turn 单 turn 内:构建 prompt → 推理 → 处理流式事件 → tool 执行
    TurnContext struct 持有 client、cwd、approval_policy、sandbox_policy、tools_config
    Protocol Types codex-protocol::Op UserInput/UserTurn/Interrupt/ExecApproval/PatchApproval/Compact/ListSkills/Shutdown
    App Server JSON-RPC over stdio 多 surface 统一协议,双向:client → server 起任务,server → client 请求审批

    4.3 Data Flow (一个请求进来后发生什么)

    SandboxTool ExecutorResponses APIContext Buildersubmission_loopUser (TUI)SandboxTool ExecutorResponses APIContext Buildersubmission_loopUser (TUI)#mermaid-svg-nAe0dbLWalxvGx0N{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nAe0dbLWalxvGx0N .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nAe0dbLWalxvGx0N .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nAe0dbLWalxvGx0N .error-icon{fill:#552222;}#mermaid-svg-nAe0dbLWalxvGx0N .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nAe0dbLWalxvGx0N .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nAe0dbLWalxvGx0N .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nAe0dbLWalxvGx0N .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nAe0dbLWalxvGx0N .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nAe0dbLWalxvGx0N .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nAe0dbLWalxvGx0N .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nAe0dbLWalxvGx0N .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nAe0dbLWalxvGx0N .marker.cross{stroke:#333333;}#mermaid-svg-nAe0dbLWalxvGx0N svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nAe0dbLWalxvGx0N p{margin:0;}#mermaid-svg-nAe0dbLWalxvGx0N .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-nAe0dbLWalxvGx0N text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-nAe0dbLWalxvGx0N .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-nAe0dbLWalxvGx0N .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-nAe0dbLWalxvGx0N .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-nAe0dbLWalxvGx0N .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-nAe0dbLWalxvGx0N #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-nAe0dbLWalxvGx0N .sequenceNumber{fill:white;}#mermaid-svg-nAe0dbLWalxvGx0N #sequencenumber{fill:#333;}#mermaid-svg-nAe0dbLWalxvGx0N #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-nAe0dbLWalxvGx0N .messageText{fill:#333;stroke:none;}#mermaid-svg-nAe0dbLWalxvGx0N .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-nAe0dbLWalxvGx0N .labelText,#mermaid-svg-nAe0dbLWalxvGx0N .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-nAe0dbLWalxvGx0N .loopText,#mermaid-svg-nAe0dbLWalxvGx0N .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-nAe0dbLWalxvGx0N .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-nAe0dbLWalxvGx0N .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-nAe0dbLWalxvGx0N .noteText,#mermaid-svg-nAe0dbLWalxvGx0N .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-nAe0dbLWalxvGx0N .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-nAe0dbLWalxvGx0N .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-nAe0dbLWalxvGx0N .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-nAe0dbLWalxvGx0N .actorPopupMenu{position:absolute;}#mermaid-svg-nAe0dbLWalxvGx0N .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-nAe0dbLWalxvGx0N .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-nAe0dbLWalxvGx0N .actor-man circle,#mermaid-svg-nAe0dbLWalxvGx0N line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-nAe0dbLWalxvGx0N :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}alt[is tool_call][is final message]Op::UserInput(text)handlers::user_input_or_turn组装 prompt = system + AGENTS.md+ tools + skills metadata + envPOST /v1/responses (stream)ResponseEvent::OutputItemDoneexecutespawn in sandboxexit code / stdouttool resultappend result, next turnneeds_follow_up=false

    4.4 Control Flow

    • 终止条件: needs_follow_up = false(LLM 返回非 tool_call 的最终 message)
    • 循环上限: 没有硬编码 max iterations,靠 token 预算与 compaction 控制(见 §5.3 风险)
    • 审批中断: Tool 调用触发 Op::ExecApproval,turn 暂停直到用户 allow/deny
    • 失败恢复: try_run_turn 失败 → run_model_turn 用 exponential backoff 重试(针对 stream 连接错误)

    4.5 Dependency Graph

    codex-tui ──┐
    codex-exec ─┼──> codex-core ──> codex-protocol
    app-server ─┘ │
    ├──> codex-sandbox (Seatbelt/Landlock/JobObjects)
    ├──> codex-mcp ──> External MCP servers
    ├──> codex-apply-patch
    └──> Model Provider (Responses API / OpenAI-compatible)

    4.6 Runtime Lifecycle

  • 启动: arg0_dispatch_or_else → Tokio runtime → 加载 config(CLI flags > Profile > Project .codex/config.toml > User ~/.codex/config.toml)→ 创建 unbounded_channel 对→ 启动 App::run
  • 会话: 创建 TurnContext → 进入 tokio::select! 主循环,同时监听 app_event_rx(LLM/工具事件)与 tui_events(键盘/鼠标)
  • 退出: Op::Shutdown → 退出主循环
    完整源码位置:codex-rs/tui2/src/main.rs → run_main → App::run

  • 05. AI Architecture

    5.1 LLM Layer

    子项实现证据
    Model Provider OpenAI Responses API 独占(Chat Completions 已 deprecate) ByteByteGo + Unsloth 文档
    Provider 抽象 [model_providers.<id>] TOML 块,base_url 必填,支持 OpenAI-compatible 网关 / LM Studio / 本地 llama.cpp
    Wire API 每个 provider 单独指定 wire_api(目前基本只有 responses)
    Streaming ResponseEvent 流式回传,通过 unbounded_channel 推到 TUI
    Function/Tool Calling 模型返回 OutputItemDone,判断是否 tool_call
    Retry run_model_turn 包 try_run_turn,对 stream 错误 exponential backoff
    Token Management Compaction:超过阈值时调特殊 Responses API endpoint,生成加密的 latent state payload 替换原对话
    Prompt Caching 依赖"前缀不变"性质 — 因此 AGENTS.md、tools 列表顺序、模型 ID 不能中途变化,否则缓存击穿
    Multi-Provider 切换 config.toml 定义多 provider,–profile 切换

    5.2 Agent Architecture

    类型:Single Agent + 状态机 Agent Loop + Planner-Executor 混合(模型自身规划,无显式 planner 模块)。

    子项分析
    Agent State TurnContext(client、cwd、approval/sandbox policy、tools_config)
    Planning 由模型在 prompt 内完成,无独立 Planner 模块
    Execution run_turn 循环 + tool executor
    Reflection 模型自发通过读取 tool 结果实现,无显式 Reflection node
    Memory 见 §8
    Tool Selection 模型自主通过 tool_call 选择;sandbox + approval policy 作为安全网
    Context Management 分层 Prompt(见 §5.2.1)
    Error Recovery stream retry + tool result 回填 + approval 拒绝后模型自我修正
    5.2.1 分层 Prompt 结构

    [System Message] ← server 控制
    [Model-specific Instructions] ← server 控制
    [Developer Instructions] ← 来自 config
    [Sandbox Permission Rules] ← 来自 sandbox policy
    [AGENTS.md contents] ← 项目级 Agent 指令
    [Tool Definitions] ← 含 MCP servers
    [Environment Context] ← cwd、shell
    [User Input] ← 实际用户消息
    [Tool results from prior turns] ← 持续 append

    每层有 system / developer / user 角色,客户端控制下三层,server 控制上三层。这种分层结构是 Prompt Cache 命中的关键 — Codex 刻意放弃 server-side conversation state(避免破坏 ZDR 客户),接受二次方流量但用 prefix caching 摊平计算。

    5.3 Agent Loop

    已验证的实际 Loop(源码 + ByteByteGo + Pragmatic Engineer 三方一致):

    Observe (user input / tool result)
    ↓
    Prompt Assembly (system + tools + AGENTS.md + env + history)
    ↓
    Inference (Responses API, streaming)
    ↓
    ResponseEvent::OutputItemDone
    ↓
    is tool_call?
    ├─ YES → Approval Policy check → Sandbox Execute → append result → loop
    └─ NO → needs_follow_up = false → final message → exit turn

    问题答案
    Loop 控制在哪? codex-rs/core/src/codex.rs 的 run_turn / try_run_turn
    Stop condition? needs_follow_up = false(LLM 不再发起 tool call)
    最大循环次数? 源码未见硬上限;由 token 预算 + compaction 间接控制。这是潜在风险
    如何避免死循环? Token 预算触发 compaction;用户 Op::Interrupt;审批拒绝
    Tool failure? 错误信息回填 prompt,模型自主决定 retry 或换路
    LLM failure? run_model_turn exponential backoff 重试 stream 错误

    06. RAG Architecture

    Codex CLI 不是 RAG 项目。 它没有 Vector Store、Embedding、Retrieval、Reranking、Citation 任何一层。它的"知识注入"机制是:

  • AGENTS.md(静态,项目级,session 启动时全量注入)
  • Agent Skills(渐进式披露:Level 1 只注入 metadata,Level 2 在需要时注入 SKILL.md 主体,Level 3 由模型自主读取 references/ 或 scripts/)
  • MCP Servers(外部工具/资源动态发现)
    为什么不做 RAG:Coding Agent 的"知识"主要是当前 repo 的文件系统本身,通过 read_file tool 按需拉取即可,不需要预建 vector index。这是 Coding Agent 与通用 Chat Bot 的根本区别。
    如果你想给它加 RAG(比如企业内部代码库跨 repo 检索),正确的扩展点是把检索器封装成 MCP Server,而不是改 Codex core。

  • 07. Tool / Function Calling / MCP

    7.1 Tool Architecture

    Agent (codex-core)
    ↓
    Tool Executor (core/src/tools/)
    ↓
    Tool Registry (shell / read_file / apply_patch / MCP tools / Skills)
    ↓
    Approval Policy Engine (untrusted / on-request / on-failure / never)
    ↓
    Sandbox (Seatbelt / Landlock / Job Objects)
    ↓
    External System (filesystem / shell / MCP server)

    子项实现
    Tool schema 由 Responses API tool 定义,JSON schema
    Tool discovery 启动时静态注册 + MCP 启动时动态发现
    Tool validation 在 sandbox 层做路径白名单(writable_roots、network_access、exclude_slash_tmp)
    Tool permission ApprovalPolicy:untrusted/on-request/on-failure/never
    Tool execution Tokio spawn,stdout/stderr 流回
    Timeout 由 sandbox/OS 控制,未见显式 tool timeout 配置(源码未验证,标 Unknown)
    Error handling stderr 回填到 LLM,模型自主诊断
    Result normalization 通过 Op/ResponseEvent 协议统一

    7.2 MCP Integration

    MCP 在 Codex 中是真正的架构能力,不只是接口适配层。 证据:

  • 独立 crate:codex-rs/mcp/src/mcp_connection_manager.rs,官方在 AGENTS.md 中要求所有 MCP tool 调用改动都走这个 manager
  • Rust 重写公告中明确列出"MCPs (already supported in Rust)"
  • 出现过真实的工程 bug:MCP tools 引入时 tools 顺序不稳定,直接击穿 Prompt Cache — 说明 MCP tools 是 prompt 的一等公民
  • 第三方生态已广泛集成:Matomo MCP、GitHub MCP 等都有官方接入文档
    已知限制:
    • 远程 MCP server 在早期不支持(issue #3696,2025 报"missing field command"错误)。后续版本已修复,但反映出 MCP 在 codex-rs 内最初是按 local stdio 子进程设计的
    • MCP 与 Codex 自身协议的关系:Codex App Server 不是 MCP server,而是自建 JSON-RPC 协议。OpenAI 团队承认曾尝试把 Codex 暴露为 MCP server,但"streaming progress / mid-task approval / structured diffs"等 agent 语义 MCP 无法承载,所以另起炉灶

    7.3 Skills(渐进式披露)

    不属于传统 Function Calling,但是一种"延迟加载的 tool"机制:

    Level加载内容时机
    L1 SKILL.md 的 name + description session 启动,全量进 system prompt
    L2 SKILL.md 完整主体 模型判定需要时(或用户显式指定)
    L3 references/、scripts/ 模型按 SKILL.md 指令自主读取
    官方 Codex 团队内部有 100+ skills,包括"Security best-practices"、“Yeet”(自动 PR)、“Datadog integration”。

    08. Memory Architecture

    Memory 类型是否存在实现证据
    Short-term ✅ 当前会话 message history,append 到下一 turn 的 prompt
    Working Memory ✅ TurnContext
    Long-term ⚠️ 有限 Session persistence(–resume 加载过去 session 信息),Memory System 在 v0.150 文档中列为独立 section
    User Memory ⚠️ 通过 ~/.codex/config.toml 与全局 instructions 实现,非自动学习
    Semantic / Episodic Memory ❌ 无向量库,无自动 memory 检索 —
    Memory 存的是什么? 完整 conversation history(包含所有 tool call 与结果)。
    为什么存? 因为 Codex 放弃 server-side state(为支持 ZDR 客户),每次请求必须自包含完整历史。
    何时读? 每次构建 prompt 时全量读取。
    何时写? 每个事件(模型输出、tool result)append。
    如何淘汰? Compaction:超阈值时调用特殊 Responses API endpoint,生成更小的代表版本(技术上不是简单 summary,而是加密的 latent state payload),替换原历史。
    如何避免 Memory 污染? AGENTS.md 中硬约束:“No unbounded items – everything injected in model context must have bounded size and a hard cap. No items larger than 10K tokens.”

    09. Data Architecture

    Codex 是单机工具,无外部数据库依赖:

    User Input (Op)
    ↓
    Submission Channel (Tokio unbounded_channel)
    ↓
    Codex Core (in-memory state)
    ↓
    Event Channel (Tokio unbounded_channel)
    ↓
    TUI / App Server (surface rendering)

    数据类型存储生命周期
    Conversation history 内存 + ~/.codex/sessions/ 本地文件 Session 期间内存;关闭后持久化用于 –resume
    Config ~/.codex/config.toml + .codex/config.toml 永久,用户/项目级
    Skills ~/.codex/skills/ + 项目 SKILL.md 永久
    Auth credentials ~/.codex/auth.json 永久
    无 Vector DB、无 Message Queue、无 Object Storage。如果做企业部署,需要自行加会话存储层(目前 codex exec + CI 模式 ephemeral)。

    10. API Architecture

    Codex 有两层 API:

    10.1 用户面向的 CLI

    codex # interactive TUI
    codex exec "<prompt>" # headless / CI mode
    codex app # desktop app 入口
    codex –profile <name> # 切换 profile
    codex –model <id>
    codex –resume <session>
    codex -c key=value # config override

    10.2 App Server JSON-RPC(IDE / 第三方集成)

    codex-rs/app-server 提供 JSON-RPC over stdio,双向:

    DirectionMethod用途
    client → server thread_start 开新 thread
    client → server turn_start 提交一轮输入
    server → client approval request 暂停 turn,等待 allow/deny
    server → client streaming events reasoning steps、diffs、tool calls
    协议特性:
    • Backward compatible:旧 client 可与新 server 通信
    • 双向:server 主动请求 client 审批
    • Stateless from OpenAI’s perspective:conversation state 全在 client 侧,便于 ZDR
    • 第三方库:codex_codes crate 提供 typed Rust interface
      没有 REST/GraphQL/gRPC 公共 API。Codex 不打算成为 SaaS API,它是本地进程。

    11. Frontend Architecture

    TUI 不是简单 Chat UI,它对 Agent 产品有深度理解:

    • Ratatui Rust 库(OpenAI 团队直接 hire 了 Ratatui maintainer),不是 Electron/Ink
    • 三层结构:main.rs → App → ChatWidget(orchestration)+ bottom_pane/(chat_composer、footer)
    • 双事件源: tokio::select! 同时处理 app_event_rx(LLM/tool)+ tui_events(键盘/鼠标)
    • 审批流 UI:diff 视图、approve/deny 按钮、Esc 中断
    • Multi-surface 复用: VS Code / Desktop 都不是独立 Agent 实现,而是 App Server 协议的 client
      前端限制:
    • codex-tui 主文件 app.rs、chatwidget.rs、bottom_pane/chat_composer.rs 已被官方标记为"high-touch files",要求新增功能放新模块 — 反映 UI 层也有复杂度压力
    • 无 Web 前端在 codex repo 中(Web App 是闭源 Codex Cloud 的一部分)

    12. Engineering Quality

    Code Quality

    维度评价证据
    Modularity 优秀但正在变差:40+ crates 设计良好,但官方自己写"codex-core is bloated, resist adding code to codex-core"
    Coupling 低(协议层隔离 surface 与 core) App Server 抽象
    Cohesion 高(每个 crate 单一职责) crate 命名规范 codex-*
    Naming 严格(Op、TurnContext、ResponseEvent 语义清晰) protocol.rs
    Abstraction 高(ContextualUserFragment trait、wire_api 抽象) AGENTS.md
    Dependency 极少(Rust + 少量 crates,无 npm 链) 重写动机
    代码规模:约 549K lines of Rust(社区 teardown 数据)。

    Testing

    Test TypeExistsCoverage / Quality
    Unit ✅ 内嵌于各 crate,cargo test 跑
    Integration ✅ codex-rs/core/suite/,使用 test_codex fixture;官方推荐"agent changes prefer integration tests"
    E2E ✅ CI 在 macOS/Linux/Windows 三平台跑完整套件
    Agent Evaluation ⚠️ 部分 官方有"self-test skill"让 Codex 跑自身测试套件;但无公开 eval 框架(如 SWE-bench runner 不在 repo 内)
    RAG Evaluation N/A 不是 RAG 项目
    Regression ✅ Bazel lockfile drift check、just fix、argument_comment_lint
    Sandbox Tests ✅ Seatbelt/Landlock 集成测试,但在 sandbox 内无法跑(用 CODEX_SANDBOX=seatbelt env 早期退出)
    CI/CD:GitHub Actions + Bazel,三平台矩阵,每日多次发版。

    13. Reliability & Fault Tolerance

    失败场景处理机制
    LLM API 失败 run_model_turn 包 try_run_turn,对 stream 错误 exponential backoff
    Tool 失败 stderr 回填 prompt,模型自主诊断 retry
    Sandbox 拒绝 错误信息回填,模型请求 approval 升级
    Agent 无限循环 无硬上限,依赖 token 预算 + compaction + 用户 Op::Interrupt。⚠️ 这是潜在风险
    用户重复提交 Op::Interrupt 取消当前 turn,新 turn 从干净状态开始
    Approval 拒绝 模型收到"deny",自我修正
    Context 超限 自动 compaction,用 latent state payload 替换
    Cache 击穿 prefix caching 失效不会失败,只是变慢变贵
    缺失项:Circuit Breaker、Queue、Idempotency key、Graceful degradation(对本地工具来说不必要)。整体评价:单机工具的 reliability 设计恰当,没有过度工程化。

    14. Security

    这是 Codex 最强的维度之一。

    Sandbox 实现(3-OS)

    OS机制证据
    macOS Seatbelt(/usr/bin/sandbox-exec),子进程设 CODEX_SANDBOX=seatbelt
    Linux Landlock + seccomp(Rust bindings 在重写时就已存在)
    Windows Job Objects + 自定义设计(现有 Windows isolation 机制不满足 agentic workload,OpenAI 自研)
    默认策略:network_access = false、workspace 外路径只读,通过 sandbox_workspace_write.writable_roots 精确放行。环境变量 CODEX_SANDBOX_NETWORK_DISABLED=1 在 shell tool 内自动设置。

    Approval 流程

    • Op::ExecApproval / Op::PatchApproval 把 turn 暂停,等用户决定
    • Guardian AI approval system(社区 teardown 报告提及):一个独立的 LLM 来判断 tool call 是否合理
    • 配置粒度:untrusted / on-request / on-failure / never

    剩余安全风险

    风险Severity分析
    Prompt Injection via AGENTS.md / Skill.md High AGENTS.md 是 repo 内文件,malicious repo 可以注入恶意指令。Codex 没有对 AGENTS.md 内容做安全审查
    Prompt Injection via MCP server 输出 High MCP 返回内容进入 prompt,恶意 MCP server 可注入
    Tool Injection Medium Tool list 由 config 决定,本地用户控制,风险低
    Secret leakage through shell Medium sandbox 阻止网络外发,但本地文件读取仍可能读到 .env
    Approval fatigue Medium 用户长期用 never 模式后,sandbox 是唯一防线
    Skill injection Medium 恶意 SKILL.md 可在 L3 引导模型读任意文件
    对"Agent 是否拥有过大 Tool 权限"的回答:默认权限设计优秀(sandbox + approval 双层),但信任链上有 AGENTS.md / Skills / MCP 三个用户可控入口,这三个入口的输入没有任何内容审查 — 是当前最大的攻击面。

    15. Observability

    维度实现
    Logging tracing crate,官方要求用 #[tracing::instrument(…)] 装饰 async 函数
    Tracing Session-level;支持 –resume 重放
    Token Usage 由 Responses API 返回,UI 展示
    Latency / Cost TUI 内可见
    Agent Trace Event channel 全量记录 tool calls + results
    MCP Trace 同上,通过统一 event 流
    可定位失败原因? ✅ 是,事件流包含完整因果链
    无独立 Metrics/Prometheus endpoint — 这是单机工具的合理取舍,但对企业部署是 gap。

    16. Deployment Architecture

    Developer Laptop
    └── codex binary (Rust, single executable)
    ├── TUI (default)
    ├── App Server (stdio, IDE 集成)
    └── codex exec (headless)
    ↓
    ~/.codex/ (config, auth, sessions, skills)
    ↓
    Model Provider (OpenAI Responses API / custom base_url)

    部署形态Readiness
    Local Development ✅ Excellent(单二进制,零依赖)
    Team Development ✅ Good(.codex/config.toml 可入 repo,统一 profile)
    Production (CLI in CI) ✅ Good(codex exec + GitHub Action 官方支持)
    Enterprise ⚠️ Partial — 需自建 session 集中存储、audit log 聚合、SSO 接入
    Kubernetes / Serverless ❌ 不是设计目标
    安装:`curl sh/npm i -g @openai/codex/brew install –cask codex` / 直接二进制。

    17. Performance & Cost

    Performance(有 Benchmark)

    BenchmarkCodex 结果来源
    Terminal-Bench 2.1 89.5%(GPT-5.6 Sol, extra-high effort) — 当前最高
    Terminal-Bench 2.0 77.3%(GPT-5.3-Codex)
    SWE-bench Verified mini-SWE-agent 版本 72.80%
    Token 速度 标准 65-70 tok/s;Spark 变体在 Cerebras 上 1000+ tok/s
    Token 效率 比 Claude Code 省 2-3x tokens

    Cost Model

    无官方定价数据,成本主要由以下因素决定(不编造具体金额):

    Total Cost
    = Σ (per-turn LLM cost)
    + Σ (compaction LLM cost) # 长会话额外成本
    + Embedding cost # N/A(无 RAG)
    + Rerank cost # N/A
    + Infrastructure cost # 接近 0(本地运行)
    + Storage cost # 接近 0(本地 session 文件)

    关键影响因素:

  • Quadratic token transfer + prefix caching:流量二次方增长,但计算近线性,实际成本受 cache hit rate 主导。任何会改 prompt 前缀的动作(切换模型/改 tools 顺序/改 sandbox 配置)都会击穿缓存
  • Compaction 频率:长会话触发压缩,压缩本身是一次额外 LLM call
  • Skill/AGENTS.md 体积:L1 metadata 全量进 prompt,skill 越多 base token 越大
  • Provider 选择:自定义 OpenAI-compatible endpoint(LM Studio、本地 llama.cpp)可把 LLM cost 降到 0,但失去 GPT-5.x-Codex 的质量

  • 18. Architecture Strengths

    Strength 1: Multi-Surface 复用通过 App Server 协议,而非抽象层

    • Problem: CLI / VS Code / Desktop / Web / 第三方 IDE 需要共享同一 Agent 逻辑
    • Design Decision: 抽出 Codex Core,包一层 JSON-RPC over stdio,所有 surface 都是协议 client
    • Implementation: codex-rs/app-server + codex_codes typed Rust SDK
    • Benefit: VS Code 扩展只需几十行 glue code;第三方 IDE(Xcode、JetBrains)解耦发版节奏;协议 backward compatible

    Strength 2: Rust 重写不只是性能,而是安全架构的前提

    • Problem: Node.js 难以原生绑定 OS sandbox(Seatbelt/Landlock)
    • Design Decision: 全栈 Rust,依赖极少,可以直接 FFI OS API
    • Implementation: Linux Landlock+seccomp 在重写公告时"already available";Windows Job Objects 自研
    • Benefit: zero-dependency install;安全边界从进程内移到 OS 内核;GC 不存在,latency 可控

    Strength 3: Prefix Caching 通过严格不变量保证,而非依赖框架

    • Problem: Conversation 历史二次方增长,直接重发代价高
    • Design Decision: 刻意放弃 server-side conversation state(支持 ZDR 客户),用 prefix caching 摊平
    • Implementation: AGENTS.md 中规定"No history rewrite"、tools 顺序稳定、单条 fragment ≤ 10K tokens
    • Benefit: ZDR 兼容 + 推理成本近线性;同时把这些不变量写成 review 强制规则

    Strength 4: Skills 渐进式披露,token-aware 的知识注入

    • Problem: 把所有项目知识塞 system prompt 会撑爆 context
    • Design Decision: 3-Level Progressive Disclosure,按需加载
    • Implementation: SKILL.md 仅 L1 metadata 进 base prompt
    • Benefit: 大幅节省 base token,同时保持 agent 可发现性

    Strength 5: Sandbox + Approval 双层防御,安全默认开启

    • Problem: LLM 不可靠,直接 shell 执行有危险
    • Design Decision: 默认 sandbox + 默认 approval,接受这会"伤害 general adoption" — 团队原话
    • Implementation: 3-OS sandbox,CODEX_SANDBOX_NETWORK_DISABLED=1 强制环境变量,Guardian AI 二次判断
    • Benefit: 非技术用户默认安全;企业可审计

    19. Architecture Weaknesses

    Weakness 1: codex-core 单 crate 膨胀 — 官方自己承认

    • Problem: 新功能都往 codex-core 塞,模块边界退化
    • Evidence: AGENTS.md 原文 “the codex-core crate…has become bloated because it is the largest crate, so it is often easier to add something new to codex-core rather than refactor out”
    • Impact: 长期维护成本上升,新 contributor 学习曲线陡峭
    • Severity: Medium
    • Recommendation: 持续按 codex-rs/exec、codex-mcp 等模式拆分;强制 PR review 中"是否必须进 core"

    Weakness 2: Agent Loop 无硬 max-iteration 上限

    • Problem: needs_follow_up 由模型决定,没有 N-step 上限
    • Evidence: 源码 run_turn 循环仅检查 needs_follow_up,未见 max_iterations 字段
    • Impact: 模型陷入循环时,只靠 token 预算/用户中断止损
    • Severity: Medium
    • Recommendation: 在 TurnContext 增加 max_steps 配置项,默认 50

    Weakness 3: AGENTS.md / Skills / MCP 是无审查的 prompt 注入入口

    • Problem: 这些文件的作者 = repo 作者,可注入任意指令
    • Evidence: AGENTS.md 内容直接进 system prompt;Skill L3 引导模型读任意文件
    • Impact: malicious repo / malicious MCP server 可诱导执行危险命令(虽然有 sandbox 兜底)
    • Severity: High
    • Recommendation: 增加"untrusted project"模式,首次进入新 repo 时 AGENTS.md 不自动加载

    Weakness 4: 没有 RAG / 跨 repo 检索,长仓库导航靠 tool 循环

    • Problem: 大型 monorepo 中模型靠 read_file 逐步探索,token 浪费
    • Evidence: Codex 无任何 retrieval 机制(见 §06)
    • Impact: 大 repo 任务 token 成本高、延迟高
    • Severity: Low-Medium
    • Recommendation: 企业部署可加 code-index MCP server(如 Sourcegraph)

    Weakness 5: 长链路连贯性弱于 Claude Code

    • Problem: 多步任务(3-4 步以上)会"丢失方向感",重新问已答过的问题
    • Evidence: 独立评测一致反馈;SWE-bench Verified 77.3% vs Claude Code 80.8%
    • Impact: 重构/跨文件 feature 任务成功率下降
    • Severity: High(对用户而言)
    • Recommendation: 这是模型能力 + compaction 机制的组合问题;应用层可通过"小任务拆分 + 频繁 commit"缓解

    Weakness 6: 企业特性(RBAC / Audit / Multi-tenancy)缺失

    • Problem: CLI 设计假设单用户本地运行
    • Evidence: 无 team / org 概念;audit log 仅本地 session 文件
    • Impact: 企业落地需自建包装层
    • Severity: Medium
    • Recommendation: v0.116.0 已开始加 enterprise features,但距离企业 Ready 仍有距离

    Weakness 7: 依赖 Responses API,生态锁定

    • Problem: Chat Completions 已 deprecate,非 OpenAI-compatible 的模型接入困难
    • Evidence: Unsloth 文档明确"Codex has changed…It now uses the OpenAI Responses API exclusively, and Chat Completions support has been deprecated"
    • Impact: 想用 Anthropic / Google 原生 API 的团队需要 gateway 翻译
    • Severity: Low(设计选择,不是 bug)

    20. What Is Actually Innovative?

    类型内容
    True Innovation ① Windows Job Objects 沙箱自研设计(现有 Windows isolation 不足);② Compaction 使用加密 latent state payload 而非简单 summary
    Engineering Innovation ① Rust 重写带来的 zero-dependency + 原生 sandbox binding;② App Server JSON-RPC 协议解决多 surface 复用;③ Prefix caching 通过工程不变量保证而非依赖框架
    Integration Innovation MCP + Skills + AGENTS.md 的组合,以及它们与 Responses API 的 prefix caching 协同设计
    Marketing Innovation "aSWE / Autonomous Software Engineer"叙事
    Codex 的真创新不在模型,而在 Harness。ByteByteGo 的总结精确:“the model is a component and the agent is the system. Most of the engineering is in the system.”

    21. What Is Just Repackaging?

    Codex 不属于 Wrapper / Repackaging:

    • ❌ 不是 LangChain + Vector DB + LLM 的 Basic Agent Wrapper — 没有用 LangChain,核心 loop 是自研 Rust
    • ❌ 不是把 OpenAI API 包一层 UI — sandbox、approval、compaction、caching、multi-surface 协议都是原创工程
    • ⚠️ Agent Loop 本身是通用范式(所有 agent 都长这样,OpenAI 自己承认),这部分是 ReAct 标准实现,不是创新
    • ⚠️ Skills 机制直接借鉴 Anthropic Agent Skills 标准,是跟随而非引领

    22. Competitive Landscape

    ProjectLanguageArchitectureAI CapabilityEngineeringExtensibilityProduction备注
    Codex CLI Rust State machine + JSON-RPC multi-surface ★★★★ (Terminal-Bench 89.5%) ★★★★★ ★★★★ (MCP+Skills) ★★★★ Sandbox 最强
    Claude Code TypeScript Node.js CLI ★★★★★ (SWE-bench 80.8%) ★★★★ ★★★ ★★★★ 长链路更稳,token 消耗 2-3x
    Aider Python Git-centric CLI ★★★ ★★★ ★★ ★★★ git-first,轻量
    OpenCode ? Open source Claude Code 类似物 ★★★★ ★★★ ★★★ ★★ 199K stars(社区驱动)
    Gemini CLI ? Google 官方 ★★★ ★★★ ★★★ ★★★ 配额慷慨
    Cline VS Code 扩展 IDE-integrated ★★★★ ★★★ ★★★ ★★★ IDE 用户首选
    SWE-agent Python Research 框架 ★★★★ (SWE-bench 鼻祖) ★★ ★★ ★ 学术向
    Cursor 闭源 SaaS IDE ★★★★★ ★★★★★ ★ ★★★★★ 商业标杆
    差异化定位:
    • vs Claude Code:安全与 token 效率,牺牲部分长链路能力
    • vs Aider:agentic 多步自主vs Aider 的 git-centric 单步
    • vs Cursor:开源可审计vs 闭源 SaaS;终端优先vs IDE 优先
    • vs SWE-agent:生产可用vs 学术实验
      用户为什么选 Codex:企业安全合规(OS-level sandbox + ZDR 兼容)+ OpenAI 模型质量 + 极致 token 成本。

    23. 二次开发价值分析

    KEEP(直接复用)

  • codex-rs/sandbox/ — 3-OS sandbox 实现,这是整个项目最难写的部分
  • codex-rs/app-server/ JSON-RPC 协议 — 多 surface 集成的最佳实践
  • codex-protocol 类型定义 — Op/Event 设计,可借鉴到任何 agent 项目
  • codex-mcp connection manager — MCP 集成参考实现
  • AGENTS.md 规范本身 — 已成为 de facto 标准,值得直接复用
  • REFACTOR(设计好但需改)

  • codex-core — 拆分,按官方自己建议的"introduce new crate"方向
  • Compaction 机制 — 把 latent state payload 替换为可配置的 strategy(对外部模型更兼容)
  • Approval policy engine — 增加 programmatic approval(对接 CI 策略引擎)
  • TUI 事件循环 — chatwidget.rs/app.rs 已超 800 LoC 警戒线,按官方规范拆分
  • REPLACE

  • Model Provider 默认 endpoint — 替换为企业内部 gateway
  • Auth — ~/.codex/auth.json 替换为 SSO / OIDC
  • Session storage — 本地文件替换为集中式(Postgres / S3)
  • REMOVE

  • codex-cli/ 遗留 TypeScript — 已 maintenance,直接删
  • JavaScript REPL Runtime — 已 REMOVED in v0.150
  • ADD(企业化必加)

  • Multi-tenancy:user/org 隔离
  • RBAC:tool-level 权限(现在只有 sandbox-level)
  • Audit log aggregation:本地 session → SIEM
  • Policy as code:sandbox + approval 的 YAML/JSON 配置中心化下发
  • Central config distribution:企业统一管理 config.toml
  • Telemetry:OpenTelemetry traces + Prometheus metrics
  • Model fallback / routing:主模型失败时 fallback 到备用
  • Content security:对 AGENTS.md / Skills 做 prompt injection 扫描

  • 24. 二次开发路线

    V1 — MVP(2-4 周)

    目标:替换 model provider + 本地跑通核心 loop,验证可用性。

    • Fork repo,保留 codex-rs/,删除 codex-cli/
    • 配置 [model_providers.internal] 指向内部 LLM gateway
    • 替换默认 auth.json 为内部 token 机制
    • 跑通 TUI + codex exec 两个 surface
    • 端到端 smoke test:读文件 → 改文件 → 跑测试
      交付:内部演示可用的 Coding Agent,沿用 Codex 全部安全机制。

    V2 — Production(2-3 月)

    目标:团队/CI 可用,具备可观测性。

    • Observability:集成 OpenTelemetry,tracing spans 上报到 Jaeger/Tempo
    • Session persistence:本地文件 → Postgres(或保留本地但加 S3 backup)
    • Central config:企业统一 config.toml 分发(版本控制 + signature 校验)
    • CI integration:GitHub Action / GitLab CI 模板,codex exec + PR comment
    • Error handling hardening:为 agent loop 增加 max_steps 上限
    • Security hardening:AGENTS.md/Skills 内容扫描(prompt injection heuristics)
    • Performance baseline:token usage / latency / compaction 频率 metrics
    • Docs:内部 deployment guide + troubleshooting

    V3 — Enterprise(6 月+)

    目标:合规、可治理、可扩展。

    • RBAC:user → role → allowed tools 矩阵
    • Multi-tenancy:org / team / project 三层
    • Audit:所有 tool call + approval decision 写入 SIEM(Splunk/Elastic)
    • Policy as Code:OPA/Rego 策略引擎,动态决定 approval
    • Cost Control:per-team token budget + 实时 quota
    • Evaluation Pipeline:内部 SWE-bench 子集 + 真实任务回放,模型升级前回归测试
    • Plugin Architecture:允许团队发布内部 MCP servers / Skills 到内部 registry
    • Enterprise SSO:OIDC / SAML
    • Model routing:按任务类型路由(代码生成用 GPT-5.x,review 用 Claude,research 用 Gemini)

    25. Recommended Target Architecture

    #mermaid-svg-HWmlhPuXpDHzTt3K{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HWmlhPuXpDHzTt3K .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HWmlhPuXpDHzTt3K .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HWmlhPuXpDHzTt3K .error-icon{fill:#552222;}#mermaid-svg-HWmlhPuXpDHzTt3K .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HWmlhPuXpDHzTt3K .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HWmlhPuXpDHzTt3K .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HWmlhPuXpDHzTt3K .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HWmlhPuXpDHzTt3K .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HWmlhPuXpDHzTt3K .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HWmlhPuXpDHzTt3K .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HWmlhPuXpDHzTt3K .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HWmlhPuXpDHzTt3K .marker.cross{stroke:#333333;}#mermaid-svg-HWmlhPuXpDHzTt3K svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HWmlhPuXpDHzTt3K p{margin:0;}#mermaid-svg-HWmlhPuXpDHzTt3K .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-HWmlhPuXpDHzTt3K .cluster-label text{fill:#333;}#mermaid-svg-HWmlhPuXpDHzTt3K .cluster-label span{color:#333;}#mermaid-svg-HWmlhPuXpDHzTt3K .cluster-label span p{background-color:transparent;}#mermaid-svg-HWmlhPuXpDHzTt3K .label text,#mermaid-svg-HWmlhPuXpDHzTt3K span{fill:#333;color:#333;}#mermaid-svg-HWmlhPuXpDHzTt3K .node rect,#mermaid-svg-HWmlhPuXpDHzTt3K .node circle,#mermaid-svg-HWmlhPuXpDHzTt3K .node ellipse,#mermaid-svg-HWmlhPuXpDHzTt3K .node polygon,#mermaid-svg-HWmlhPuXpDHzTt3K .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HWmlhPuXpDHzTt3K .rough-node .label text,#mermaid-svg-HWmlhPuXpDHzTt3K .node .label text,#mermaid-svg-HWmlhPuXpDHzTt3K .image-shape .label,#mermaid-svg-HWmlhPuXpDHzTt3K .icon-shape .label{text-anchor:middle;}#mermaid-svg-HWmlhPuXpDHzTt3K .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HWmlhPuXpDHzTt3K .rough-node .label,#mermaid-svg-HWmlhPuXpDHzTt3K .node .label,#mermaid-svg-HWmlhPuXpDHzTt3K .image-shape .label,#mermaid-svg-HWmlhPuXpDHzTt3K .icon-shape .label{text-align:center;}#mermaid-svg-HWmlhPuXpDHzTt3K .node.clickable{cursor:pointer;}#mermaid-svg-HWmlhPuXpDHzTt3K .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HWmlhPuXpDHzTt3K .arrowheadPath{fill:#333333;}#mermaid-svg-HWmlhPuXpDHzTt3K .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HWmlhPuXpDHzTt3K .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HWmlhPuXpDHzTt3K .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HWmlhPuXpDHzTt3K .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HWmlhPuXpDHzTt3K .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HWmlhPuXpDHzTt3K .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HWmlhPuXpDHzTt3K .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HWmlhPuXpDHzTt3K .cluster text{fill:#333;}#mermaid-svg-HWmlhPuXpDHzTt3K .cluster span{color:#333;}#mermaid-svg-HWmlhPuXpDHzTt3K div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HWmlhPuXpDHzTt3K .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HWmlhPuXpDHzTt3K rect.text{fill:none;stroke-width:0;}#mermaid-svg-HWmlhPuXpDHzTt3K .icon-shape,#mermaid-svg-HWmlhPuXpDHzTt3K .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HWmlhPuXpDHzTt3K .icon-shape p,#mermaid-svg-HWmlhPuXpDHzTt3K .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HWmlhPuXpDHzTt3K .icon-shape .label rect,#mermaid-svg-HWmlhPuXpDHzTt3K .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HWmlhPuXpDHzTt3K .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HWmlhPuXpDHzTt3K .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HWmlhPuXpDHzTt3K :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Observability

    Model Layer

    Storage

    Tool Layer

    Codex Core

    App Server

    Gateway Layer

    Surfaces

    TUI

    IDE Extensions

    CI Pipeline

    Internal API

    Enterprise GatewayAuthN/AuthZ + Rate Limit

    JSON-RPC Server+ OTel exporter

    Orchestrator+ Max-Step Guard

    Context Manager+ Compaction

    Policy EngineOPA/Rego

    Tool Registry

    Sandbox Executor

    MCP Client

    Skill Loader+ Content Scanner

    PostgresSessions/Audit

    S3Artifacts

    RedisCache

    Model Router

    OpenAI

    Anthropic

    Internal LLM

    OpenTelemetry Collector

    SIEM

    设计理由

    组件为什么这样设计
    Enterprise Gateway Codex 原生无 AuthN,加一层集中认证/审计,避免每个 surface 重复实现
    App Server 保留 Codex 原架构最优秀的设计,不要替换
    Policy Engine(新增) 把 sandbox + approval 决策抽出来,支持企业策略集中管理
    Skill Content Scanner(新增) 解决 AGENTS.md/Skills 注入风险
    Model Router(新增) 解决 Responses API 锁定问题,支持多模型成本/能力优化
    OTel + SIEM(新增) 企业合规刚需
    Postgres session store(替换) 支持团队共享 session / 跨设备 resume
    Redis(新增) Prompt prefix cache 元数据 + rate limit counter

    26. Coding Agent Implementation Plan

    Repository Structure(企业 fork)

    codex-enterprise/
    ├── crates/
    │ ├── codex-core/ # 精简后 core
    │ ├── codex-protocol/
    │ ├── codex-app-server/
    │ ├── codex-tui/
    │ ├── codex-sandbox/
    │ ├── codex-mcp/
    │ ├── codex-policy/ # NEW: Policy Engine
    │ ├── codex-router/ # NEW: Model Router
    │ ├── codex-observability/ # NEW: OTel exporter
    │ ├── codex-scanner/ # NEW: Content scanner
    │ ├── codex-storage/ # NEW: Postgres/S3/Redis
    │ ├── codex-auth/ # NEW: SSO/OIDC
    │ └── codex-rbac/ # NEW: RBAC
    ├── surfaces/
    │ ├── cli/
    │ ├── vscode/
    │ └── github-action/
    ├── policies/ # Rego 策略
    ├── skills/ # 企业内部 skills
    ├── docs/
    ├── tests/
    │ ├── integration/
    │ ├── e2e/
    │ └── eval/ # SWE-bench 子集
    └── deploy/
    ├── docker/
    ├── k8s/
    └── terraform/

    Implementation Order(依赖驱动)

    1. Foundation: build system (Bazel), CI, base crates
    2. Domain Model: codex-protocol + policy schema
    3. Infrastructure: storage, cache, OTel
    4. Provider: codex-router + multi-provider adapters
    5. Core Logic: codex-core (瘦身) + policy engine
    6. Agent: sandbox + tool executor + approval
    7. Workflow: MCP + Skills + scanner
    8. API: app-server + gateway
    9. Surfaces: TUI → VS Code → GitHub Action
    10. Observability: traces → metrics → SIEM
    11. Testing: unit → integration → e2e → eval
    12. Deployment: docker → k8s → enterprise rollout


    27. Recommended Engineering Standards

    类别建议
    Coding Standards 沿用 Codex 自身 AGENTS.md 规范:模块 < 500 LoC、tracing::instrument、 exhaustive match、禁 #[async_trait]
    Git Workflow Trunk-based + 短 feature branch(≤ 3 天)
    Branch Strategy main + feat/* + fix/*;企业 fork 加 enterprise/* 隔离层
    Commit Convention Conventional Commits(feat/fix/docs/chore/refactor/test)
    Testing Strategy Unit 70% / Integration 20% / E2E 10%;agent changes 强制 integration(core/suite)
    Error Handling anyhow for app,thiserror for libs;所有 tool 错误结构化(不丢 stderr)
    Logging tracing + JSON subscriber to OTel
    Configuration 类型化 config(TOML + JSON schema),启动时校验
    Env Management .env 仅本地;CI 用 secret manager
    Documentation docs/ 仅架构与 API;用户文档走站点
    CI/CD Bazel build + 三平台 test + clippy + codespell + release automation

    28. Definition of Done

    任何二次开发 PR 必须满足:

    [ ] Core functionality implemented
    [ ] Unit tests added (coverage not decreased)
    [ ] Integration test in core/suite (if agent-related)
    [ ] E2E test passes on all 3 OS
    [ ] Error handling covers: tool fail / LLM fail / approval deny / interrupt
    [ ] OTel tracing spans added
    [ ] Security validation: no new prompt injection surface, sandbox bypass check
    [ ] Documentation updated (docs/ or inline doc comments)
    [ ] Docker image builds
    [ ] CI green (3 platforms + clippy + codespell)
    [ ] Performance baseline: no regression in token usage / latency
    [ ] Regression test: existing eval suite passes


    29. Final Technical Verdict

    项目类型

    Developer Tool / Agent Harness(不是 Agent Framework,不是 RAG Framework,不是 Infrastructure)

    技术成熟度

    Experimental
    ↓
    Prototype
    ↓
    Developer Ready ← ★ 当前位置
    ↓
    Production Ready ← 接近(CI/桌面场景已可)
    ↓
    Enterprise Ready ← 尚需 RBAC/Audit/Multi-tenancy

    是否值得学习?

    Yes — 它是当前开源界最完整的 production-grade Agent Harness 参考实现,特别是 sandbox、协议、prompt caching、compaction 四个主题。

    是否值得二次开发?

    条件性 Yes — 适合 fork 做企业内部 Coding Agent(替换 provider + 加治理),不适合做通用 Agent Framework(那应该用 LangGraph / AutoGen)。

    是否适合生产?

    • 个人/小团队本地使用:Yes
    • 企业内部部署:需要改造(RBAC/Audit/Multi-tenancy 自建)

    最值得复用的 5 个部分

  • codex-rs/sandbox/ 3-OS sandbox 实现
  • codex-rs/app-server/ JSON-RPC 协议
  • codex-protocol Op/Event 类型设计
  • codex-mcp connection manager
  • AGENTS.md 规范(标准本身)
  • 最应该重构的 5 个部分

  • codex-core(官方自己已承认 bloated)
  • Compaction 机制(增加 strategy 抽象)
  • Approval policy engine(增加 programmatic 接口)
  • TUI 事件循环(app.rs/chatwidget.rs 拆分)
  • Config 加载(类型化 + schema 校验统一)
  • 最大的 5 个技术风险

  • AGENTS.md / Skills / MCP 内容无审查 — prompt injection 主攻击面
  • Agent loop 无 max-iteration 硬上限 — 依赖 token 预算兜底
  • codex-core 持续膨胀 — 长期维护成本
  • Responses API 锁定 — 非 OpenAI 模型接入成本高
  • 长链路连贯性弱于 Claude Code — 复杂任务成功率受限
  • 最大的 5 个技术机会

  • 企业 Coding Agent 标准化 — sandbox + policy 的开源参考
  • Skills 生态 — progressive disclosure 是 token-aware knowledge injection 的好范式
  • MCP 生态接入 — 已是 MCP 第一方支持的代表项目
  • Rust Agent 框架 — 如果社区愿意把 core 拆出来,可成为 Rust Agent 基础设施
  • Windows sandbox 经验 — Windows agentic sandbox 设计的开源稀缺资源

  • 30. One-Page Decision Matrix

    QuestionVerdict
    Worth Learning? ⭐⭐⭐⭐⭐
    Worth Forking? ⭐⭐⭐⭐
    Worth Production? ⭐⭐⭐⭐
    Worth Enterprise Adoption? ⭐⭐⭐(需改造)
    Worth Building Upon? ⭐⭐⭐⭐
    Architecture Quality ⭐⭐⭐⭐⭐
    AI Capability ⭐⭐⭐⭐
    Engineering Quality ⭐⭐⭐⭐⭐
    Extensibility ⭐⭐⭐⭐
    Community ⭐⭐⭐⭐⭐
    Long-term Potential ⭐⭐⭐⭐⭐

    31. Evidence Appendix

    Repository Evidence

    • Repository URL: https://github.com/openai/codex
    • Branch analyzed: main
    • Commits: 10,006
    • Tagged releases: 640+
    • 主代码: codex-rs/ (~95.6% of codebase)

    Key Files

    FileWhy Important
    AGENTS.md 项目自身的 Agent 规范,codex-core 膨胀问题、Context 不变量、测试规范均在此声明
    codex-rs/core/src/codex.rs TurnContext 定义,Agent Loop 核心数据结构
    codex-rs/protocol/src/protocol.rs Op 枚举(UserInput/ExecApproval/…) — 协议契约
    codex-rs/core/src/context/ ContextualUserFragment trait — prompt 分层的类型化抽象
    codex-rs/mcp/src/mcp_connection_manager.rs MCP 集成唯一入口
    codex-rs/app-server/ 多 surface JSON-RPC 协议实现
    codex-rs/tui2/src/main.rs 启动流程:Tokio runtime → config → App::run
    codex-rs/core/config.schema.json 由 just write-config-schema 生成,配置契约
    codex-rs/core/suite/ Integration test fixture test_codex

    Important Issues / Discussions

    #标题对成熟度判断的意义
    #1174 Codex CLI is Going Native Rust 重写官方公告,重写动机第一手资料
    #3696 Support remote MCP servers 早期 MCP 仅支持 local stdio,反映协议演进
    #4849 Make config.toml profiles selectable via CLI 配置系统实际使用痛点
    #17051 Architecture teardown of Codex CLI source code 社区 549K LoC 逆向分析,确认 queue-pair protocol、Guardian AI approval、3-OS sandbox
    #24742 Support user-provided Seatbelt sandbox rules via config sandbox 可配置性需求
    #7380 Why does Codex keep stalling when approval mode is Read Only approval + sandbox 交互的真实用户痛点

    Key External Sources

    • ByteByteGo, “How OpenAI Codex Works” — App Server 协议、Compaction latent state、prefix caching 失效案例(MCP tools 顺序 bug)
    • Pragmatic Engineer, “How Codex is built” — Tibo 团队访谈:Rust 选择理由、Agent Loop 流程、Skills 内部实践、self-testing
    • InfoQ, “Codex CLI Goes Native” — Rust 重写四项动机原文
    • InfoQ, “Windows Sandbox Design” — Windows Job Objects 设计细节
    • Blake Crosley, “Codex CLI Guide 2026 v0.150.1” — 完整 feature 矩阵与 Memory System 章节
    • Zenn, “How Codex CLI Implements Agent Skills” — Agent Loop 三层结构与 Skills 3-Level Progressive Disclosure 源码走读
    • Unsloth docs — Responses API 独占、Chat Completions deprecate 确认
    • SWE-bench / Terminal-Bench leaderboards — 量化对比数据

    Facts Not Verified(明确标注 Unknown)

    项状态
    codex-core 源码的具体模块行数分布 未逐文件统计,仅采信官方 AGENTS.md 与社区 teardown 数据
    Tool execution 的显式 timeout 配置项 未见文档/源码确认,标 Unknown
    Compaction 触发的具体 token 阈值数值 未见公开数值,标 Unknown
    内部企业用户数量、生产案例 OpenAI 未公开,标 Not Verified
    Windows sandbox 的完整策略语义 InfoQ 报道为架构概述,未读源码,标 Not Verified
    Guardian AI approval system 的具体实现位置 社区 teardown 提及,未在主分支独立验证,标 Not Verified

    报告自检:
    Architecture(✅ Data Flow/Control Flow/核心抽象)·
    AI(✅ Agent Loop/Tool/Memory/Context Engineering,❌ RAG 不适用)·
    Engineering(✅ Tests/CI/Deployment/Error Handling/Observability)·
    Security(✅ Prompt Injection/Tool Security/权限/数据泄露)·
    Business(✅ 使用场景/竞品/定位/生产成熟度)·
    Second Development(✅ KEEP/REFACTOR/REPLACE/REMOVE/ADD + 目标架构 + 路线 + DoD)·
    Evidence(✅ 关键结论均有源码或一手资料支撑,未验证项已显式标注)

    赞(0)
    未经允许不得转载:171主机测评 » 【AI Agent】OpenAI Codex CLI 深度技术分析报告
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址