Codex — OpenAI 终端 AI 编程 Agent

Codex CLI 是 OpenAI 开发的轻量级 AI 编程 Agent(Coding Agent), 在本机终端(Terminal)中运行。它能理解自然语言指令、检查代码、修改文件、执行命令, 在不离开终端的情况下完成软件工程任务。 GitHub 105K+ Stars,开源协议 Apache-2.0,当前版本 v0.143.0。

仓库github.com/openai/codex
官方文档developers.openai.com/codex
许可证Apache-2.0
技术栈Rust(core + CLI)、TypeScript(前端/SDK)
安装方式curl 安装脚本 / npm / Homebrew / GitHub Releases 二进制
模型GPT-5.6 系列(Sol / Terra / Luna),支持 API Key 自定义模型

1. 概述

Codex CLI 的核心是一个 ReAct(Reasoning + Acting)循环: 模型在"思考(生成计划)→ 行动(调用工具)→ 观察(获得结果)"之间反复, 直到完成用户交给的任务。它运行在 Harness(缰绳/驾驭)框架内—— 所有模型行为都被工具白名单、权限审批、沙箱隔离、会话状态持久化等工程约束包裹, 保证 Agent 的行为可预测、可控、可审计、可终止。

1.1 定位与产品形态

Codex 是 OpenAI 的 AI Coding Agent 产品矩阵中的一员,其产品形态覆盖多个表面(Surface):

形态说明与 Codex CLI 的关系
Codex CLI 本机终端运行的开源 Agent,本文档主体 本机执行,支持交互式 TUI 与非交互式 exec
Codex 桌面应用 macOS/Windows 桌面 App(codex app 唤起) 同一 Codex host,共享 config.toml 与 MCP 配置
Codex IDE 扩展 VS Code / Cursor / Windsurf 插件 共享同一 Codex host 的配置层
Codex Web / Cloud 云端 Agent(chatgpt.com/codex) 云端环境执行,codex apply 把云端 diff 应用到本地
Codex SDK / MCP Server 把 Codex 嵌入自己的应用或被其它 Agent 消费 codex app-server / codex mcp-server

1.2 核心特性

1.3 专有名词解释

名词解释
Agent / Coding Agent(编程代理)能自主理解任务、调用工具、执行多步操作并完成任务的智能体,区别于单轮问答的 Chatbot
Harness(缰绳/驾驭)工程把模型自由输出约束到安全可控可审计框架里的工程实践,Codex 本身就是 harness 的一个实现
ReAct 循环Reasoning + Acting 交替循环:思考→行动→观察,直到任务完成或达到终止条件
TUI(终端 UI)Text User Interface,终端里的全屏交互界面,Codex 交互模式的主界面
Sandbox(沙箱)Agent 执行命令时被限制的运行边界,定义可访问的文件与网络资源
Approval Policy(审批策略)决定 Agent 何时必须停下来征求人类批准(untrusted / on-request / never)
MCP(Model Context Protocol)模型上下文协议,把外部工具/数据接入 Agent 的标准协议,支持 STDIO 与 Streamable HTTP
AGENTS.md给 Agent 看的项目指令文件,Codex 每次启动前读取,用于注入项目规范与工作约定
Subagent(子代理)主 Agent 派生的专用子代理,用于拆分复杂任务并行工作,结果回到主会话
JSONL(JSON Lines)每行一个 JSON 对象的数据流格式,codex exec --json 输出的事件流格式
Writable Root(可写根目录)沙箱中允许 Agent 修改的目录集合,默认是工作区
Checkpoint(检查点)任务前后用 Git commit 建立的可回退点,Codex 官方推荐的安全实践

1.4 平台化转向澄清(2026-08-19)

事件:2026-08-19 OpenAI 发布官方博客 Codex as a platform: build on the open agent harness, 宣布把驱动 Codex App / CLI / IDE 扩展的底层 harness 作为"平台"开放。媒体普遍以"全面开源 Codex Harness"报道。

核实结论(基于仓库 git 历史与官方文档,2026-08-21): 这次是"从可读到受支持"的转变,不是"从闭源到开源"——媒体所称 "底层 Rust 核心 codex-rs 此前属于内部实现、未完整开源"并不属实。

早已公开的部分(git 历史佐证)

时间已在 openai/codex 公开的内容
2025-04Codex CLI 首次开源(Apache-2.0),codex-rs core 全部可读
2025-09-29TypeScript SDK 脚手架入库(PR #4455)
2025-09-30codex-rs/app-server 从 mcp-server 拆分独立成 crate(PR #4471)
2026-07-29Codex Security CLI + TS SDK 开源(openai/codex-security)

8-19 前后的实质性变动

变动性质说明
app-server JSON-RPC 2.0 客户端协议正式发布文档文档化/codex/app-server,线程/回合/事件流/审批接口成文
Codex SDK 升级为官方组件并新增 Python SDK接口产品化此前仅 TS 脚手架;/codex/codex-sdk
开源组件清单页边界声明/codex/open-source:明确哪些开源、哪些不开源
"Codex as a platform" 战略定位宣示鼓励把 agent 循环嵌入自家产品(运维看板、工单系统等),而非塞进通用聊天框;配套示例应用 Relay
ARC-AGI-3 数据博客宣传背书仅两项 harness 设置(保留推理 + 上下文压缩)使 GPT-5.6 Sol 得分 13.3% → 38.3%,输出 token 减少约 6 倍
注意:即使在新文档中,app-server 命令与 WebSocket 传输仍标注 "experimental and aren't supported for production workloads"——平台化目前停留在文档与定位层面, 协议尚未获得生产稳定性承诺。

明确不开源的部分

对本章的影响:本文源码级分析基于 commit 722784e936,结论不受此次公告影响; 6.2 节中标注 Experimental 的 app-server / remote-control / cloud 现已获官方文档背书,但成熟度标记维持不变(官方仍称 experimental)。

2. 行为分析(做什么)

2.1 用例图 — 用户与 Codex 的交互全景

展示四类参与者(开发人员、DevOps、管理员、外部系统)与 Codex 的能力边界。

PlantUML diagram
图 1:Codex 顶层用例图

用例说明:Codex 的用例可分为"任务执行类"(改代码、修 bug、审查)、 "环境配置类"(登录、配置、权限)、"自动化类"(exec、review、MCP、CI)与"生命周期类"(resume/fork/archive)。

2.2 活动图 — 交互式会话主流程

展示一次 codex 交互式会话从启动到结束的完整活动链,含斜杠命令分支与 Web 搜索分支。

PlantUML diagram
图 2:Codex 交互式 TUI 会话活动图

关键行为:用户在项目目录启动 codex,首次运行先走登录流程。 会话中可通过斜杠命令切换模型(/model)、查看状态(/status)、 调整权限(/permissions)、执行审查(/review)或创建 AGENTS.md(/init)。

2.3 序列图 — 一次 Agent 回合的完整链路

从用户提交 Prompt 到模型调用工具、观察结果、给出最终答复的端到端序列,展示沙箱与审批在链路中的位置。

PlantUML diagram
图 3:Codex 一次 Agent 回合(含工具调用)的序列图

链路要点:模型生成的工具调用命令不会直接执行——先经 ExecPolicy 规则(allow/prompt/block)判断,再进沙箱(限制文件系统与网络), 若需越界则触发审批(on-request 策略下弹给用户或自动审查代理)。 工具结果回填对话上下文,模型继续推理,直到完成或达到终止条件。

2.4 活动图 — 权限与沙箱决策流

Codex 对"模型生成的每条命令"执行的决策链:规则判断 → 沙箱边界 → 审批策略。

PlantUML diagram
图 4:命令执行前的权限与沙箱决策流

决策逻辑:

3. 结构分析(由什么组成)

3.1 部署图 — 运行时拓扑

Codex CLI 部署在开发者本机,通过网络与 OpenAI 后端交互,并可通过 app-server 支撑远程/桌面客户端。

PlantUML diagram
图 5:Codex 部署图

部署要点:

3.2 组件图 — 模块组成

Codex 仓库的模块划分(monorepo):core(核心循环)、CLI、SDK、MCP Server、app-server。

PlantUML diagram
图 6:Codex 组件架构图
组件职责
codex-rs coreAgent 核心:ReAct 循环、工具定义、会话管理、指令(AGENTS.md)组装、模型调用
codex-rs cli命令行前端:TUI 渲染、参数解析、子命令分发(exec/review/resume 等)
execpolicy / sandbox命令执行决策:规则匹配、沙箱实施(Seatbelt/Landlock/Windows)、网络代理
MCP 客户端管理 STDIO / Streamable HTTP MCP 服务器,把外部工具暴露给模型
app-server把 Codex 暴露为 WebSocket/Unix Socket 服务,支撑远程客户端与桌面应用
mcp-server把 Codex 自身作为 MCP server(stdio),供其它 Agent 消费
sdk(TypeScript)编程接口封装,用于构建自定义前端

3.3 概念类图 — 领域模型

Codex 领域核心实体及其关系:Session(会话)、Turn(回合)、Item(消息/事件项)、Tool(工具)、AgentConfig(配置)。

PlantUML diagram
图 7:Codex 核心领域概念类图

领域模型要点:

4. 配置体系

4.1 配置层级与优先级

Codex 配置以 TOML 存储,多个来源按优先级合并(高→低):

  1. CLI flags 与 -c key=value 覆盖(最高)
  2. 项目配置 .codex/config.toml(从项目根到当前目录,最近的优先;仅受信任项目加载)
  3. Profile 文件 --profile name(~/.codex/name.config.toml)
  4. 用户配置 ~/.codex/config.toml
  5. 系统配置 /etc/codex/config.toml(Unix)
  6. 内置默认值
安全限制:项目级 .codex/ 层(config、hooks、rules)只在受信任项目加载。 项目配置不能覆盖 provider/auth/notify/profile/telemetry 等机器级密钥类配置。 管理员可用 requirements.toml 强制约束(如禁止 approval_policy = "never")。

4.2 常用配置键(~/.codex/config.toml)

# 默认模型
model = "gpt-5.6"

# 审批策略:untrusted | on-request | never
approval_policy = "on-request"

# 沙箱级别:read-only | workspace-write | danger-full-access
sandbox_mode = "workspace-write"

# Web 搜索:cached(默认)| indexed | live | disabled
web_search = "cached"

# 推理力度
model_reasoning_effort = "high"

# 沟通风格
personality = "friendly"   # friendly | pragmatic | none

# 日志目录(显式设置会额外启用明文 TUI 日志 codex-tui.log)
log_dir = "/absolute/path/to/codex-logs"

# Windows 原生沙箱
[windows]
sandbox = "elevated"

# 终端快捷键
[tui.keymap.global]
open_transcript = "ctrl-t"

# 命令环境变量过滤
[shell_environment_policy]
ignore_default_excludes = false
[shell_environment_policy.filters]
"PATH" = "include"
"HOME" = "include"

常用 feature flags([features] 表):

Key默认说明
multi_agenttrue子代理协作工具(spawn_agent / send_input 等)
hookstrue生命周期钩子(hooks.json 或 [hooks])
goalstrue持久化目标与自动续跑
memoriesfalse记忆功能(实验性)
shell_tooltrue默认 shell 工具
unified_exectrue(Windows 除外)统一 PTY 执行工具
network_proxyfalse沙箱化网络代理(实验性)
shell_snapshottrue快照 shell 环境加速重复命令

启用方式:codex --enable feature_name,或在 [features] 下写 name = true。

4.3 AGENTS.md 指令体系

Codex 每次启动(每个会话)都会构建一条指令链注入 System Prompt。发现顺序:

  1. 全局层:~/.codex/AGENTS.override.md(若存在)→ 否则 ~/.codex/AGENTS.md
  2. 项目层:从项目根(通常 Git root)向下到当前目录,每层检查 AGENTS.override.md → AGENTS.md → 兜底文件名
  3. 合并:从根向下拼接(空行分隔),越靠近当前目录越靠后、优先级越高

其它配置项:project_doc_fallback_filenames(自定义兜底文件名列表)、 project_doc_max_bytes(合并上限,默认 32 KiB,超限停止追加)、 CODEX_HOME(自定义 Codex 主目录)。

# 自定义兜底文件名与更大容量
project_doc_fallback_filenames = ["TEAM_GUIDE.md", ".agents.md"]
project_doc_max_bytes = 65536
与代码审查联动:在 AGENTS.md 中加 ## Code Review Rules 章节, Codex 的 GitHub 代码审查会读取该章节规则来审查 PR/改动(详见官方 GitHub 集成文档)。

4.4 MCP 扩展

MCP(Model Context Protocol)把外部工具与数据接入 Codex。支持 STDIO 服务器(本地子进程)与 Streamable HTTP 服务器(远程地址 + Bearer/OAuth 认证)。配置存于 ~/.codex/config.toml。

CLI 方式添加 MCP 服务器

# 添加 STDIO 服务器(Context7 开发者文档)
codex mcp add context7 -- npx -y @upstash/context7-mcp

# 列出 / 登录 / 移除
codex mcp list
codex mcp login <server-name>      # 仅 Streamable HTTP 且支持 OAuth
codex mcp remove <server-name>

config.toml 方式(精细控制)

[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
env_vars = ["LOCAL_TOKEN"]
[mcp_servers.context7.env]
MY_ENV_VAR = "MY_ENV_VALUE"

[mcp_servers.figma]
url = "https://mcp.figma.com/mcp"
bearer_token_env_var = "FIGMA_OAUTH_TOKEN"
http_headers = { "X-Figma-Region" = "us-east-1" }

[mcp_servers.chrome_devtools]
url = "http://localhost:3000/mcp"
enabled_tools = ["open", "screenshot"]
default_tools_approval_mode = "prompt"
startup_timeout_sec = 20
tool_timeout_sec = 45
[mcp_servers.chrome_devtools.tools.open]
approval_mode = "approve"

常用 MCP 服务器:OpenAI Docs MCP、Context7、Figma、Playwright、Chrome DevTools、Sentry、GitHub。

5. 实战演示操作手册

5.1 安装与登录

安装(macOS / Linux)

curl -fsSL https://chatgpt.com/codex/install.sh | sh

或包管理器:

npm install -g @openai/codex
brew install --cask codex

登录(首次运行)

codex        # 选择 "Sign in with ChatGPT"(Plus/Pro/Biz/Edu/Ent 订阅可用)

# API Key 方式
printenv OPENAI_API_KEY | codex login --with-api-key

# Access Token 方式(CI)
printenv CODEX_ACCESS_TOKEN | codex login --with-access-token

# 无浏览器环境
codex login --device-auth

# 验证登录
codex login status    # 已登录时退出码为 0

5.2 交互式会话实战

启动并探索项目

cd ~/my-project
codex    # 启动 TUI,默认 gpt-5.6-sol medium

# 直接给出首条指令
codex "Tell me about this project"

# 带截图/架构图启动
codex --image error-screenshot.png "debug this crash"

会话中常用斜杠命令

/model      # 切换模型与推理力度
/status     # 查看当前会话配置
/permissions# 打开权限选择器(含沙箱与可写根)
/init       # 创建 AGENTS.md 指令文件
/review     # 审查当前改动
/mcp        # 查看已连接的 MCP 服务器

低摩擦本地开发启动方式

codex --sandbox workspace-write --ask-for-approval on-request

推荐实践:任务开始前建立 Git checkpoint(commit),任务后再次 commit,保证可回退。

会话管理

codex resume                 # 恢复最近会话
codex resume <session-id>    # 按 ID 恢复
codex fork <session-id>      # 从历史会话分支出新会话
codex archive <session-id>   # 归档
codex delete <session-id>    # 删除
codex completion zsh > "${fpath[1]}/_codex"   # 补全脚本

5.3 非交互模式 codex exec

基本用法

# 一次性任务,最终消息输出到 stdout,进度在 stderr
codex exec "summarize the repository structure and list the top 5 risky areas"

# 生成发布说明并落盘
codex exec "generate release notes for the last 10 commits" | tee release-notes.md

# 不持久化会话文件
codex exec --ephemeral "triage this repository and suggest next steps"

管道输入(stdin)

# prompt + stdin(stdin 作为附加上下文)
npm test 2>&1 | codex exec "summarize the failing tests and propose the smallest likely fix"

# stdin 即完整 prompt(- 哨兵强制)
cat prompt.txt | codex exec -

# 动态组装 prompt
generate_prompt.sh | codex exec - --json > result.jsonl

机器可读输出

# JSONL 事件流(thread.started / turn.started / turn.completed / item.* / error)
codex exec --json "summarize the repo structure" | jq

# 只保存最终消息到文件(同时仍打印 stdout)
codex exec "Extract project metadata" --output-schema ./schema.json -o ./project-metadata.json

自动化安全设置

# 允许工作区内编辑
codex exec --sandbox workspace-write "<task>"

# 只读默认(read-only);危险场景才用 danger-full-access
codex exec "<task>"

# 忽略用户配置 / 忽略 rules 文件(受控环境)
codex exec --ignore-user-config --ignore-rules "<task>"

# 非 Git 目录运行(默认要求 Git 仓库以防破坏)
codex exec --skip-git-repo-check "<task>"

恢复非交互会话

codex exec "review the change for race conditions"
codex exec resume --last "fix the race conditions you found"
codex exec resume <SESSION_ID>

认证注入(CI 单次运行)

CODEX_API_KEY=<api-key> codex exec --json "triage open bug reports"
安全警告:不要把 OPENAI_API_KEY / CODEX_API_KEY 设为 Job 级环境变量—— 同 Job 内不可信的构建脚本 / 依赖钩子 / 被攻陷的 action 都能读到。只对单次 codex exec 调用内联注入。

5.4 codex review 代码审查

# 审查未提交改动(staged + unstaged + untracked)
codex review --uncommitted

# 对比基线分支(PR 风格)
codex review --base main

# 审查某次提交
codex review --commit <SHA>

# 自定义审查指令
codex review "focus on the auth refactor, flag security issues"

--uncommitted、--base、--commit 与自定义 PROMPT 互斥;--title 仅配合 --commit。 审查不会修改工作区,只输出按优先级排序的问题。

5.5 CI 自动化实战

GitHub Actions:CI 失败自动修复(核心模式)

# 1. 主 CI 失败时触发 follow-up workflow
# 2. 以只读权限 checkout 失败 commit
# 3. 用 openai/codex-action 跑 Codex(保护 API key)
# 4. 把改动序列化为 patch artifact
# 5. 独立 job 应用 patch 并开 PR(该 job 无 API key 权限)
name: Codex auto-fix on CI failure
on:
  workflow_run:
    workflows: ["CI"]
    types: [completed]
jobs:
  generate_fix:
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v5
        with:
          ref: ${{ github.event.workflow_run.head_sha }}
          fetch-depth: 0
          persist-credentials: false
      - uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Install dependencies
        run: |
          if [ -f package-lock.json ]; then npm ci; fi
      - name: Run Codex
        uses: openai/codex-action@v1
        with:
          openai-api-key: ${{ secrets.OPENAI_API_KEY }}
          prompt: |
            The CI workflow "${{ github.event.workflow_run.name }}" failed for
            commit ${{ github.event.workflow_run.head_sha }}. Run `npm test --silent`
            to reproduce. Implement only the minimal fix, run tests again. Do not
            refactor unrelated files.
      - name: Create patch artifact
        id: diff
        run: |
          git add -N .
          git diff --binary HEAD > codex.patch
          if [ -s codex.patch ]; then echo "has_patch=true" >> "$GITHUB_OUTPUT"; else echo "has_patch=false" >> "$GITHUB_OUTPUT"; fi
      - name: Upload patch artifact
        if: steps.diff.outputs.has_patch == 'true'
        uses: actions/upload-artifact@v4
        with:
          name: codex-fix-patch
          path: codex.patch
          if-no-files-found: error
  open_pr:
    needs: generate_fix
    if: needs.generate_fix.outputs.has_patch == 'true'
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    steps:
      - uses: actions/checkout@v5
        with:
          ref: ${{ github.event.workflow_run.head_sha }}
          fetch-depth: 0
      - uses: actions/download-artifact@v4
        with:
          name: codex-fix-patch
      - name: Apply Codex patch
        run: git apply --index codex.patch
      - name: Open pull request
        env:
          GH_TOKEN: ${{ github.token }}
          RUN_ID: ${{ github.event.workflow_run.run_id }}
        run: |
          branch="codex/auto-fix-$RUN_ID"
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git switch -c "$branch"
          git commit -m "Auto-fix failing CI via Codex"
          git push origin "$branch"
          gh pr create --base "${{ github.event.workflow_run.head_branch }}" \
            --head "$branch" --title "Auto-fix failing CI via Codex" \
            --body-file pr-body.md

完整安全清单参见 codex-action 安全文档。

6. 参数指令速查手册

6.1 全局 flags(适用于 codex / exec / resume 等)

Flag类型/取值说明
--add-dirpath额外授予工作区之外的目录写权限(可重复)
--ask-for-approval, -auntrusted / on-request / never控制何时暂停等人批准
--cd, -Cpath设置工作目录
--config, -ckey=value覆盖配置值(可重复)
--dangerously-bypass-approvals-and-sandbox, --yoloboolean完全跳过审批与沙箱(仅限加固环境)
--dangerously-bypass-hook-trustboolean不要求 hook 持久化信任(仅自动化)
--enable / --disablefeature强制启用/禁用 feature flag(可重复)
--image, -ipath[,path...]把图片附加到初始 prompt(可重复/逗号分隔)
--local-providerlmstudio / ollama配合 --oss 指定本地模型提供商
--model, -mstring覆盖模型(如 gpt-5.6-terra)
--no-alt-screenboolean关闭 TUI 备用屏幕
--ossboolean使用本地开源模型提供商
--profile, -pstring叠加 $CODEX_HOME/profile-name.config.toml
--remotews:// / wss:// / unix://连接远程 app-server 端点
--remote-auth-token-envENV_VAR从环境变量读取 bearer token 发送给 --remote
--sandbox, -sread-only / workspace-write / danger-full-access模型生成 shell 命令的沙箱策略
--searchboolean启用实时 Web 搜索(web_search="live")
--strict-configboolean遇到不认识的 config 字段即报错

6.2 子命令速查

命令成熟度说明
codexStable启动交互式终端 UI(TUI)
codex appStable启动 ChatGPT 桌面应用
codex app-serverExperimental启动 app server(stdio/WebSocket/Unix socket)
codex apply(别名 codex a)Stable把 Codex cloud 聊天生成的最新 diff 应用到本地
codex archive / unarchiveStable归档 / 恢复会话
codex cloudExperimental终端浏览/执行云聊天(别名 cloud-tasks)
codex completionStable生成 Bash/Zsh/Fish/PowerShell/elvish 补全
codex debug modelsExperimental打印原始模型目录
codex debug prompt-inputExperimental渲染模型可见的 prompt 输入列表为 JSON
codex deleteStable永久删除会话
codex doctorStable生成本地诊断报告(安装/配置/认证/运行/Git/终端)
codex exec(别名 codex e)Stable非交互式运行
codex execpolicyExperimental评估 execpolicy 规则文件,判断命令被 allow/prompt/block
codex featuresStable列出 feature flags 并可持久化启用/禁用
codex forkStable从历史会话分支出新会话
codex login / logoutStable认证(OAuth/device/API key/access token)/ 退出
codex mcpStable管理 MCP 服务器(add/list/remove/login/logout/get)
codex mcp-serverStable把 Codex 自身作为 MCP server(stdio)
codex pluginStable从 marketplace 安装/列出/移除插件
codex plugin marketplaceStable管理插件市场(Git/本地源)
codex remote-controlExperimental管理本地 app-server 的远程控制
codex resumeStable恢复历史会话
codex reviewStable非交互代码审查
codex sandboxStable在 Codex 沙箱内运行任意命令
codex updateStable检查并应用 CLI 更新

6.3 codex exec 全部 flags

Flag说明
--cd, -C设置工作区根目录
--colorstdout ANSI 颜色(always/never/auto)
--dangerously-bypass-approvals-and-sandbox, --yolo跳过审批与沙箱(仅隔离运行器)
--dangerously-bypass-hook-trust跳过 hook 信任检查
--ephemeral不持久化会话 rollout 文件
--full-auto已废弃兼容 flag(建议 --sandbox workspace-write)
--ignore-rules不加载用户/项目 execpolicy .rules
--ignore-user-config不加载 $CODEX_HOME/config.toml(认证仍用 CODEX_HOME)
--image, -i首条消息附加图片
--json, --experimental-json输出换行分隔 JSON 事件流
--local-provider配合 --oss 指定本地提供商
--model, -m覆盖模型
--oss使用本地 OSS 提供商
--output-last-message, -o把最终消息写入文件
--output-schemaJSON Schema 文件,约束最终响应结构
--profile, -p叠加 profile 配置
--sandbox, -s沙箱策略(read-only/workspace-write/danger-full-access)
--skip-git-repo-check允许在非 Git 目录运行
-c, --config内联配置覆盖(可重复)
PROMPT初始指令;- 表示从 stdin 读取
exec resume--last 恢复最近会话;--all 跨目录搜索;SESSION_ID 指定会话

6.4 斜杠命令速查(交互式 TUI 内)

命令说明
/init创建 AGENTS.md 指令文件
/status查看当前会话配置
/permissions打开权限选择器(沙箱 + 可写根 + 审批)
/model切换模型与推理力度
/review审查当前改动并发现问题
/mcp查看已连接的 MCP 服务器
/feedback提交反馈
/goal设置持久化目标
/plan进入计划模式
?快捷键帮助

6.5 沙箱与审批模式速查

沙箱模式行为
read-only可读文件、审查代码;改文件与跑命令需审批
workspace-write工作区内读写 + 运行常规命令(默认低摩擦模式)
danger-full-access无沙箱限制(仅受控环境)
审批策略行为
untrusted非信任命令一律先询问
on-request沙箱内默认执行,越界才询问
never从不暂停审批

审批审查者:approvals_reviewer = "user"(默认,弹给用户)或 "auto_review"(交给审查子代理自动审)。

平台沙箱实现:macOS Seatbelt(开箱即用);Linux/WSL2 用 bubblewrap(sudo apt install bubblewrap); Windows 用原生 Windows Sandbox(PowerShell)或 Linux 沙箱(WSL2)。

权限 Profile:内置 :read-only、:workspace、:danger-full-access; 自定义用 [permissions.<name>] 表 + default_permissions。 codex sandbox --permission-profile <NAME> -- <command> 可在沙箱中手动跑命令。

6.6 模型速查

模型定位适用场景
gpt-5.6-sol(旗舰)最强能力复杂编码、计算机使用、研究、网络安全
gpt-5.6-terra(均衡)日常主力强推理 + 工具使用,成本更低
gpt-5.6-luna(轻快)低成本明确/重复任务:抽取、分类、转换、结构化摘要
gpt-5.3-codex-spark近实时迭代文本模型,Pro 用户,极速编码迭代(仅桌面/CLI/IDE)
gpt-5.5 / gpt-5.4 / gpt-5.4-mini前代模型gpt-5.4 系列 2026-08-31 从 ChatGPT 登录的 Codex 退役

推理力度:Low/Medium/High/Extra High(CLI 里 /model 调)。 Max = 单一任务更多思考时间;Ultra = 用 subagents 并行拆分复杂任务。 切换:codex --model gpt-5.6 或 codex exec -m gpt-5.6 "..."。

7. Agent System Prompt 梳理(源码级)

说明:本章基于 repos/codex 仓库源码(commit 722784e936)深挖 Codex 的提示词设计。 与 OpenCode 的"每模型一个 .txt 文件 + 代码层循环"不同,Codex 采用 模型目录(model catalog)驱动 + WorldState 模块化上下文 + 统一 ReAct 循环的三层设计。 下面先讲总览,再逐层细化。

7.1 三层架构总览

Codex 的最终请求体由三层内容拼装而成,分别承担"你是谁"、"当前环境如何"、"会话历史是什么":

PlantUML diagram
图 8:Codex Prompt 三层组装架构
层内容来源关键机制
L1 基础指令
Base Instructions
身份 + 人格 + 通用工作规则 + 破坏性操作安全 + 技能使用 模型目录的 instructions_template(远程下发,本地 models.json 兜底) 按模型动态切换;人格通过 {{ personality }} 占位符烘焙
L2 WorldState 上下文
上下文碎片
环境(cwd/日期/时区/网络/文件系统)、权限与沙箱、AGENTS.md、多 Agent 模式、Token 预算、插件/技能指令 核心 world_state.rs 的多个 WorldStateSection 实现 每个 section 有稳定 ID + 快照,只对"变化的部分"发 diff,缓存友好
L3 会话历史
Messages
用户消息、助手消息(含工具调用)、工具结果、模型切换提示 ContextManager 增量维护的历史 items 规范化后发送;超限触发自动压缩(compaction)

角色分工:Responses API 中基础指令放在 instructions 字段(或 responses-lite 模式下作为前缀 developer 消息), WorldState 与历史以 developer / user 角色的 ResponseItem 流式注入,保持增量可缓存。

7.2 基础指令(instructions_template)

与 OpenCode 在代码里硬编码各模型 .txt 不同,Codex 的 System Prompt 主体由 模型目录(model catalog)下发——每个模型在目录里声明自己的 model_messages.instructions_template。本地 models-manager/models.json 是 兜底目录(离线可用),真实运行时会从 OpenAI 拉取最新目录并缓存。

模型目录中的 instructions_template 长度对比

模型instructions_template 长度personality 变量首行身份声明
gpt-5.6-sol / terra / luna17,730 字符default/friendly/pragmatic"You are Codex, an agent based on GPT-5..."
gpt-5.519,754 字符default/friendly/pragmatic"You are Codex, a coding agent based on GPT-5..."
gpt-5.412,896 字符default/friendly/pragmatic"You are Codex, a coding agent based on GPT-5..."
gpt-5.4-mini11,114 字符default/friendly/pragmatic同上
gpt-5.221,544 字符default/friendly/pragmatic"You are GPT-5.2 running in the Codex CLI..."
codex-auto-review12,896 字符default/friendly/pragmatic同 gpt-5.4

解析逻辑(protocol/src/openai_models.rs:487-505 ModelInfo::get_model_instructions): 若 instructions_variables 存在,则把模板中的 {{ personality }} 占位符 替换为当前人格消息(friendly/pragmatic/默认);若模板无占位符则视为纯文本直接返回。

gpt-5.6-sol 基础指令的章节结构(原文节选)

章节核心内容(原文摘录)
# Personality "As Codex, you are an excellent communicator with a curious, rich personality. You match the tone and understanding of the user..."
含 Writing style(Avoid over-formatting...)与 Technical communication(Lead with the outcome rather than the steps...)
# Working with the user 双通道:commentary(边做边播报,60 秒内必须有更新)+ final(结束回合才发)。
明确"上下文被压缩时不要重启,继续自然推进"的会话语义。
### Intermediate commentary "These messages should be concise and quickly scannable... start with a message in the commentary channel."
禁止把阻塞性澄清问题放进 commentary,必须在 final 里自包含。
### Final answer / Formatting rules 允许 GFM Markdown;本地文件引用格式 [app.py](/abs/path/app.py:12);禁止 file:// vscode:// 等 URI;禁止范围行号。
### Visualizations 只在"能让关系更易理解"时用可视化;优先最小有用形式(表格/流程/树/线框)。
# Rules for getting work done 优先 rg;优先并行工具调用;禁止用 echo "===="; 拼接命令;
文件编辑:用 apply_patch,禁止 cat/echo 写文件;脏工作区不还原用户改动。
# Destructive Actions 禁止 rm -rf $HOME 等;删除前必须确认目标;优先可恢复操作(移到回收站)。
# Using skills SKILL.md 发现规则、触发规则、渐进式披露、上下文卫生(不读无关引用)。

本地兜底与旧模型模板

本地兜底 models-manager/prompt.md(也是 gpt-5.2-codex 的 fallback)是最详尽的一版, 含 # AGENTS.md spec(作用域/优先级/嵌套覆盖)、## Responsiveness(preamble 消息规范与示例)、 ## Planning(update_plan 高质量/低质量计划示例)、## Task execution ("keep going until the query is completely resolved")、## Ambition vs. precision、 # Tool Guidelines(apply_patch 完整文法)。这正是模型能力尚弱时需要"喂更多规则"的体现—— 模板越长 = 模型越弱,GPT-5.6 靠更强的原生能力压缩了提示词篇幅。

7.3 WorldState 模块化上下文系统

WorldState(core/src/context/world_state/mod.rs)是 Codex 的核心提示词机制: 把动态上下文拆成多个独立的 WorldStateSection,每个 section 负责渲染一段"模型可见状态"。 它实现了 AGENTS.md 里要求的全部上下文工程约束: 无历史重写、避免缓存失效、所有注入有界、单条 ≤10K token、所有碎片实现统一 trait。

PlantUML diagram
图 9:WorldState 各 section 及其注入角色

section 清单(build_world_state_for_step 顺序)

ID类型渲染内容角色
modelModelInstructionsState模型切换时注入 <model_switch> 基础指令developer
personalityPersonalityState人格变更时注入 PersonalitySpecInstructionsdeveloper
token_budgetTokenBudgetContext上下文窗口 ID 与预算提醒developer
realtimeRealtimeState实时语音模式的开始/结束指令developer
agents_mdAgentsMdStateAGENTS.md 指令(含替换/移除通知)user
permissionsPermissionsState沙箱模式 + 审批策略 + execpolicy 规则 + 已批准前缀developer
collaboration_modeCollaborationModeStateDefault / Plan 协作模式指令developer
environmentsEnvironmentsState<environment_context>:cwd、日期、时区、网络、文件系统user
environments_instructionsEnvironmentsInstructionsState远程执行器(deferred executor)说明developer
apps_instructionsAppsInstructionsStateApps 连接器使用说明developer
plugins_instructionsPluginsInstructionsState插件使用说明developer
multi_agent_modeMultiAgentModeState<multi_agent_mode>:主动/仅显式请求委派developer
multi_agent_usage_hintMultiAgentUsageHintState子代理使用提示developer
toolsToolsState延迟加载的工具命名空间说明developer

diff 渲染机制

每个 section 的 snapshot() 产出结构化快照,render_diff(previous) 只输出 相对上次变化的部分。持久化到 rollout 的快照经 RFC 7386 merge-patch 计算差异; 模型可见的碎片用 SHA-1 哈希(WorldStateHash)去重。效果:

关键设计:WorldState 本质是"提示词版的响应式 diff 引擎"——把"模型当前该知道什么"建模成 一组可快照、可比较、可合并的状态,比 OpenCode 的"每次重拼整个 system prompt"更省 token、更利于 prompt caching。 这也是为什么一句"你好"在 Codex 里不会重复注入全部环境信息。

7.4 请求组装流程

从用户输入到 Responses API 请求体的完整链路(core/src/session/turn.rs + core/src/client.rs):

PlantUML diagram
图 10:Codex 请求组装流程(run_turn → build_responses_api_request)

组装要点:

  1. run_turn 每次采样前:capture_step_context 捕获环境/工具/MCP → record_step_world_state_if_changed 计算 WorldState diff → clone_history().for_prompt() 规范化历史
  2. build_responses_api_request(client.rs:850-944)决定请求形态:
    • responses-lite 模式(gpt-5.6 系列 use_responses_lite=true):基础指令作为前缀 developer 消息 + AdditionalTools 注入 input 头部,instructions 字段留空
    • 普通模式:基础指令放 instructions 字段,工具放 tools 字段
  3. 请求参数:tool_choice: "auto"、parallel_tool_calls(按模型能力)、reasoning(effort + summary)、stream: true、include: ["reasoning.encrypted_content"]
  4. 非 OpenAI 提供商:剥离加密参数与内部 metadata

7.5 ReAct 循环与终止条件(run_turn)

Codex 的循环不是靠 Prompt 措辞驱动(对比 OpenCode 的 beast.txt"必须循环到底"), 而是纯代码层 while 循环(core/src/session/turn.rs:282-569 run_turn)。 循环条件由 end_turn 标志与 token 预算共同决定:

PlantUML diagram
图 11:run_turn 主循环(含自动压缩与终止判定)

循环终止判定(run_turn 内):

条件行为
模型响应 end_turn=falseneeds_follow_up=true → 继续下一轮采样
模型响应 end_turn=true跑 stop hooks(可要求 continuation 或强制停止)→ break
上下文到达 token 上限should_roll_over=true → 自动压缩(compaction)后 continue
用户排队新输入has_pending_input=true → 继续处理新输入
TurnAborted 错误直接返回 Err,终止回合
InvalidImageRequest提示用户移除图片后 break
其它错误发错误事件,break 让用户继续会话

关键点:Codex 通过 ResponseEvent::Completed{ end_turn } 判断是否继续—— 工具调用被模型"发出"后,若后端判定需要 follow-up 则循环继续;这与 "模型自主决定何时结束"的 OpenCode 模型不同,Codex 把循环控制权交给响应事件,更可控。

7.6 工具 schema 速查

工具集在 core/src/tools/spec_plan.rs:891 add_core_tool_sources 组装,按 feature flags 动态增减:

类别工具说明
Shell exec_command PTY 执行命令;参数:cmd / workdir / tty / yield_time_ms / max_output_tokens / shell / login / environment_id
write_stdin向运行中的 exec session 写入 stdin
shell_command(Hidden)旧版 shell 工具,unified exec 模式下对模型隐藏
编辑 apply_patch 用 begin/end patch 文法编辑文件(add/update/delete + Move to + hunk)
规划 update_plan 维护步骤计划(pending/in_progress/completed)
new_context_window / get_context_remainingToken 预算管理(TokenBudget feature)
多 Agent v2 spawn_agent 派生子代理(可指定 agent_type / model / reasoning)
send_message向已派生子代理发消息
followup_task给子代理下发后续任务
wait_agent等待子代理结果
interrupt_agent / list_agents中断 / 列出子代理
MCP 资源 list_mcp_resources 列出 MCP 资源(有服务器时注册)
list_mcp_resource_templates列出资源模板
read_mcp_resource读取资源
其它 current_time / sleep时间查询 / 定时(CurrentTimeReminder feature)
request_permissions请求越权(RequestPermissionsTool feature)
request_user_input请求用户输入(实验性)
view_image / test_sync / web_search / tool_search看图 / 测试同步 / 托管搜索工具(按 feature/model 能力)

guardian 特例:审查者子代理(guardian reviewer)只拿到 exec_command / write_stdin / view_image,通用工具全部排除 (spec_plan.rs:894-922)。

7.7 AGENTS.md 注入机制

AGENTS.md 作为 user 角色碎片注入,带 marker # AGENTS.md instructions / </INSTRUCTIONS>(context/user_instructions.rs):

# AGENTS.md instructions for {directory}

<INSTRUCTIONS>
{AGENTS.md 合并文本}

注入逻辑(world_state/agents_md.rs):

加载优先级见 4.3 节(全局 override → 项目根向下逐层,越近越优先)。 合并上限 project_doc_max_bytes 默认 32 KiB;达到后停止追加,避免无限膨胀。

7.8 权限与沙箱指令注入

PermissionsInstructions(prompts/src/permissions_instructions.rs)把 沙箱模式、审批策略、execpolicy 规则组装成一段 developer 指令。模板均为 .md 文件,支持 {{ network_access }} 占位符:

# workspace-write 沙箱注入文本
Filesystem sandboxing defines which files can be read or written. `sandbox_mode` is
`workspace-write`: The sandbox permits reading files, and editing files in `cwd` and
`writable_roots`. Editing files in other directories requires approval. Network access
is {{ network_access }}.

on-request 审批策略注入要点(approval_policy/on_request.md):

execpolicy .rules 文件格式(Starlark 语法):

# 允许 git status(含 match 单元测试)
prefix_rule(
    pattern = ["git", "status"],
    decision = "allow",
    justification = "git status is read-only",
    match = [["git", "status"], "git status"],
    not_match = [["git", "reset"]],
)
# 阻断并给替代建议
prefix_rule(pattern = ["git", "merge"], decision = "forbidden",
            justification = "Use rebase instead.")

决策:allow / prompt / forbidden,多规则命中取最严(forbidden > prompt > allow)。

7.9 Personality 人格系统

人格不是单独一段指令,而是烘焙进基础指令模板:模板含 {{ personality }} 占位符, ModelInstructionsVariables 提供 default / friendly / pragmatic 三套人格文本 (models-manager/src/model_info.rs):

人格本地模板文本
friendly"You optimize for team morale and being a supportive teammate as much as code quality." + Values(Empathy/Collaboration/Ownership)+ Tone 规范
pragmatic"You are a deeply pragmatic, effective software engineer."
default模板自带的 "As Codex, you are an excellent communicator..." 段落

处理细节(model_info.rs with_config_overrides):personality 禁用时把占位符替换为 default 并清除变量; personality=None 时用 strip_personality_section 删除整个 # Personality 章节。

7.10 Compaction 与 Review 专用 Prompt

上下文压缩(compaction)

上下文超限时,Codex 用专门的压缩提示词让模型产出交接摘要(prompts/templates/compact/prompt.md):

You are performing a CONTEXT CHECKPOINT COMPACTION. Create a handoff summary for
another LLM that will resume the task.

Include:
- Current progress and key decisions made
- Important context, constraints, or user preferences
- What remains to be done (clear next steps)
- Any critical data, examples, or references needed to continue

Be concise, structured, and focused on helping the next LLM seamlessly continue the work.

压缩后基础指令(instructions)会被保留为 developer 消息,保证"换脑不换身"。

代码审查(review rubric)

codex review 使用独立系统提示词 prompts/templates/review/rubric.md,核心规则:

7.11 实战 Case 演示:一次完整会话的请求体组装

下面用一个虚构但完全符合源码逻辑的场景,走一遍从"用户输入"到"Responses API 请求体"的完整组装, 再对比首回合(全量注入)与稳态回合(仅 diff)的差异,直观理解 WorldState 的 token 节省效果。

场景设定

项取值
项目~/my-app(Git 仓库,含 AGENTS.md)
模型gpt-5.6-sol(responses-lite 模式)
沙箱 / 审批workspace-write / on-request(approvals_reviewer=user)
人格friendly
环境macOS zsh,cwd=/Users/brian/my-app,日期 2026-08-11,时区 Asia/Shanghai
用户指令"看一下项目结构,然后帮我把 README 补全"

Case 1 — 首回合请求体(全量注入)

build_responses_api_request(client.rs:850)在 responses-lite 模式下: input 数组头部 = AdditionalTools(developer)→ base_instructions(developer)→ WorldState 各 section(developer/user)→ 最终用户消息。请求体示意(为可读性做了裁剪,真实内容更长):

POST /v1/responses   (Responses API, stream=true)
{
  "model": "gpt-5.6-sol",
  "instructions": "",                        // responses-lite 模式置空
  "input": [
    // ── L1 基础指令(作为前缀 developer 消息)──
    {
      "role": "developer",
      "content": [{
        "type": "input_text",
        "text": "You are Codex, an agent based on GPT-5. You and the user share one
                 workspace... # Personality(烘焙 friendly) ... # Working with the user
                 ... # Rules for getting work done ... # Destructive Actions
                 ... # Using skills"          // 约 17.7K 字符
      }]
    },
    // ── L2 WorldState:模型切换 → 空(首回合无 previous_model)──
    // ── L2 WorldState:人格 → 已烘焙进基础指令,不重复注入 ──
    // ── L2 WorldState:权限与沙箱(developer)──
    {
      "role": "developer",
      "content": [{
        "type": "input_text",
        "text": "Filesystem sandboxing defines which files can be read or written.
                 `sandbox_mode` is `workspace-write`: The sandbox permits reading
                 files, and editing files in `cwd` and `writable_roots`. Editing
                 files in other directories requires approval. Network access is
                 allowed for configured domains.\n\n# Escalation Requests\n
                 Commands are run outside the sandbox if they are approved...\n\n
                 ## How to request escalation\nIMPORTANT: To request approval...
                 `sandbox_permissions` with `\"require_escalated\"`..."
      }]
    },
    // ── L2 WorldState:协作模式(developer)──
    {
      "role": "developer",
      "content": [{
        "type": "input_text",
        "text": "..."
      }]
    },
    // ── L2 WorldState:环境上下文(user,XML 结构)──
    {
      "role": "user",
      "content": [{
        "type": "input_text",
        "text": "\n  /Users/brian/my-app\n
                 zsh\n  2026-08-11\n
                 Asia/Shanghai\n
                 /Users/brian/my-app
                 ...
                 \n"
      }]
    },
    // ── L2 WorldState:AGENTS.md(user)──
    {
      "role": "user",
      "content": [{
        "type": "input_text",
        "text": "# AGENTS.md instructions for /Users/brian/my-app\n\n
                 \n- 修改 JS 后必须跑 npm test\n- 用 pnpm 安装依赖\n
                 - 新增生产依赖前先确认\n"
      }]
    },
    // ── L3 用户消息 ──
    {
      "role": "user",
      "content": [{
        "type": "input_text",
        "text": "看一下项目结构,然后帮我把 README 补全"
      }]
    }
  ],
  "tool_choice": "auto",
  "parallel_tool_calls": false,
  "reasoning": { "effort": "medium" },
  "stream": true,
  "include": ["reasoning.encrypted_content"]
}

注意:AdditionalTools(exec_command / write_stdin / apply_patch / update_plan / spawn_agent 等工具 schema)作为独立 developer item 放在 input 最前,此处省略。 工具定义走 tool_choice=auto,由模型按需调用。

Case 2 — 一次工具调用回合(模型 → 沙箱 → 审批)

模型收到首回合请求后,推理出需要先探索项目结构,发出工具调用:

// 模型输出的 FunctionCall item
{
  "type": "function_call",
  "call_id": "call_ab12",
  "name": "exec_command",
  "arguments": {
    "cmd": "ls -la && cat package.json",
    "workdir": "/Users/brian/my-app"
  }
}

Codex 收到该调用后,走 execpolicy → 沙箱 → 审批 决策链(见 2.4 节活动图):

步骤判定结果
execpolicy 规则ls / cat 无匹配规则 → 无决策落入沙箱边界检查
沙箱边界workspace-write:工作区内只读命令自动执行(无需审批)
命令执行PTY 运行 ls -la && cat package.json返回目录列表 + package.json 内容
结果回填工具输出作为 function_call_output 追加到历史进入下一轮采样

若模型尝试 越界写(如 npm install 需要写 node_modules 之外或下载依赖触发网络规则), 沙箱会拒绝并要求 require_escalated,此时触发审批(on-request)弹给用户:

// 模型感知需越权,重发请求
{
  "type": "function_call",
  "call_id": "call_cd34",
  "name": "exec_command",
  "arguments": {
    "cmd": "npm install",
    "sandbox_permissions": "require_escalated",
    "justification": "需要安装项目依赖(下载 npm 包),允许吗?",
    "prefix_rule": ["npm", "install"]     // 可选,用户批准后可持久化
  }
}
关键机制:越权审批不是"模型先执行再被拦",而是模型主动声明 sandbox_permissions=require_escalated 来请求授权——沙箱边界与审批策略的约束写死在 L2 权限指令里,模型据此自我约束,harness 再兜底校验。

Case 3 — 稳态回合:WorldState 只发 diff

用户追问一句"顺便告诉我 node 版本要求",此时进入第 2 个采样请求。WorldState 的 render_diff 对比持久化快照,未变化的 section 返回 None 不重复注入:

section首回合稳态回合
permissions全量注入快照相同 → 不注入
environments全量注入cwd/日期/网络未变 → 不注入
agents_md全量注入内容未变 → 不注入
multi_agent_mode注入(默认仅显式请求)未变 → 不注入
会话历史仅首条用户消息追加:工具调用 + 结果 + 新用户消息

稳态请求体示意:

{
  "model": "gpt-5.6-sol",
  "instructions": "",
  "input": [
    // L1 基础指令在历史中已存在(responses-lite 前缀,由缓存命中)
    // 不重复注入
    {
      "role": "user",
      "content": [{ "type": "input_text",
                    "text": "ls 结果 + package.json 内容(上一轮工具输出)" }]
    },
    {
      "role": "assistant",
      "content": [{ "type": "output_text",
                    "text": "项目结构已看完,根目录有 src/、tests/、package.json。接下来补全 README。" }]
    },
    {
      "role": "user",
      "content": [{ "type": "input_text", "text": "顺便告诉我 node 版本要求" }]
    }
  ]
}

效果:稳态回合不再重复注入 ~17.7K 字符的基础指令 + 权限/环境/AGENTS.md 等 WorldState 碎片, 只发送新增的历史消息。配合 Responses API 的 prompt caching(缓存键见 prompt_cache_key), 重复前缀直接命中缓存,token 成本大幅下降。

Case 4 — 上下文超限自动压缩(compaction)

当历史 + 前缀接近模型上下文窗口(gpt-5.6-sol 为 272K,auto-compact 默认取 90% ≈ 244.8K), run_turn 触发 run_auto_compact:

  1. 把压缩提示词(7.10 节的 compact/prompt.md)发给模型,让它产出交接摘要
  2. 基础指令(L1)作为 developer 前缀保留;WorldState 用 replace_compacted_history 重建
  3. 历史被替换为:压缩摘要 + 最近未压缩消息,模型在提示词中被明确告知"你在一次压缩后的会话中,不要重启"
// 压缩后首条历史消息
{
  "role": "developer",
  "content": [{ "type": "input_text",
                "text": "## 项目结构 ##\n- src/ (入口 main.ts, 路由 /api)\n
                         ## 已完成 ##\n- 浏览了项目结构,确认使用 Node 18+\n
                         ## 下一步 ##\n- 补全 README(引用实际命令与结构)\n
                         ## 关键约束 ##\n- AGENTS.md: 改 JS 后跑 npm test" }]
}

压缩后模型继续处理,提示词明确"上下文被自动压缩过,不要从头开始,继续未完成工作"。

Case 小结:①首回合全量注入建立"模型世界模型";②工具回合靠 require_escalated 主动申请越权,harness 兜底;③稳态回合 WorldState diff 让重复前缀只算一次; ④上下文超限时 compaction 换摘要保前缀。四个 Case 合起来就是 Codex 提示词工程在生产环境的完整生命周期。
本章小结:Codex 的提示词设计核心是"目录驱动 + 状态 diff + 事件驱动循环"—— 基础指令随模型目录远程下发(模型越强模板越短)、动态上下文走 WorldState 增量注入(缓存友好)、 循环靠响应事件 end_turn 而非提示词措辞控制。这套设计与 OpenCode 的 "本地 .txt 模板 + Prompt 措辞强度驱动 ReAct"形成鲜明对比,代表两种 Harness 工程路线。