Open Interpreter(Codex CLI)GPT-5.2 系统提示词深度解析:一份终端编码 Agent 的完整行为规范
codex-rs/core/gpt_5_2_prompt.md 是 Open Interpreter 仓库中为 GPT-5.2 模型定制的 Codex CLI 系统提示词(system prompt)原文,共约 298 行。它定义了模型在终端编码代理场景下的身份契约、工作方式(人格、AGENTS.md 规范、自主性与持久化)、update_plan 计划工具的完整使用纪律、任务执行与验证准则、最终答复的排版规范,以及 apply_patch、shell 等工具的具体调用约定。读完本文,你将理解一个终端编码 Agent 的"行为操作系统"是如何被逐条约束出来的,并能从 models-manager 源码 中确认这份提示词如何进入运行时。
一、这个提示词文件在仓库中的位置与角色
该文件与另外几个同族提示词并排存放在 codex-rs/core/ 目录下:
- gpt_5_2_prompt.md:GPT-5.2 的完整系统提示词(本文主角);
- gpt-5.2-codex_prompt.md、gpt-5.1-codex-max_prompt.md、gpt_5_1_prompt.md、gpt_5_codex_prompt.md:面向不同模型/变体的指令版本;
- prompt_with_apply_patch_instructions.md:注入
apply_patch工具说明后的提示词变体,被 session 集成测试 用include_str!直接纳入断言(见 tests.rs#L1424)。
从源码结构看,提示词的实际分发并不依赖直接 include_str! 本文件,而是经由模型目录:codex-rs/models-manager 中的 model_info.rs 维护 instructions_template 字段(含 {{ personality }} 占位符),并按配置做覆盖与裁剪;模板实例见 gpt-5.2-codex_instructions_template.md。core 下的这份 gpt_5_2_prompt.md 是面向 GPT-5.2 + 完整工具集(shell + apply_patch + update_plan)场景的完整指令文本,两者共同构成"模型 → 指令"的装配链。
二、身份与能力契约
提示词第一行即确立身份:"You are GPT-5.2 running in the Codex CLI, a terminal-based coding assistant. Codex CLI is an open source project led by OpenAI. You are expected to be precise, safe, and helpful." 并明确区分:此处的 "Codex" 指开源的智能体编码界面,而非 OpenAI 早期的同名语言模型。
随后给出三条能力声明,勾勒出 Agent 的运行时边界:
- 接收 harness 提供的用户提示与工作区文件等上下文;
- 以流式方式输出思考与回复,并可创建和更新计划(plans);
- 通过函数调用执行终端命令、应用补丁;且"取决于本次运行的配置",可以请求把这些函数调用升级(escalate)为用户审批——原文在此留了指向"Sandbox and approvals"章节的锚点。
这三条能力与仓库实现一一对应:计划对应 update_plan 工具;命令执行对应 sandbox(参见 codex-rs/core/README.md 中 macOS Seatbelt、Linux bubblewrap/Landlock、Windows 受限令牌等沙箱机制);补丁对应 apply_patch 的 LARK 语法实现 apply_patch.lark。
三、工作方式(How you work)
3.1 人格:简洁、直接、友好
默认基调被定义为"concise, direct, and friendly":高效沟通、持续让用户了解正在进行的操作、优先给出可执行建议(明确假设、环境前提、下一步),除非被要求否则避免冗长解释。这是所有下游格式规则的"总纲"。
3.2 AGENTS.md 规范:分层作用域与优先级
提示词用整整一节规范了 AGENTS.md 文件的处理规则——仓库任意位置都可以出现 AGENTS.md,它是人类给 Agent 的工作指引(编码约定、代码组织方式、如何运行/测试代码)。核心规则包括:
- 作用域:一个
AGENTS.md的作用域是以其所在文件夹为根的整棵目录树; - 强制遵守:最终补丁中触及的每一个文件,都必须服从所有"作用域覆盖该文件"的
AGENTS.md指令; - 样式类指令的默认局部性:代码风格、结构、命名等指令仅作用于该文件作用域内的代码,除非文件另行声明;
- 优先级:嵌套更深的
AGENTS.md在指令冲突时优先;而直接的 system/developer/user 提示指令优先级最高,高于一切AGENTS.md; - 加载约定:仓库根目录及 CWD 到根的各层目录中的
AGENTS.md会随 developer message 一起注入,无需重读;但工作在 CWD 子目录或 CWD 之外的目录时,需主动检查可能适用的AGENTS.md。
这实际上是一套"目录树作用域 + 就近优先 + 用户指令最高"的指令解析协议,与仓库中 docs/agents_md.md 的用户侧文档互为印证。
3.3 自主性与持久化(Autonomy and Persistence)
两段规则共同定义了 Agent 的行动哲学:
- 端到端持久:只要可行,就在当前回合内把任务完整做完——不要止步于分析或半成品;把改动一路推进到实现、验证、结果说明,除非用户明确暂停或转向。
- 默认动手:除非用户明确在要方案、问代码问题、头脑风暴或表现出"不该写代码"的意图,否则一律假设用户希望你直接改代码/跑工具。此时把方案只写在消息里是"bad"的,应该直接实施;遇到障碍应自行尝试解决。
3.4 响应性(Responsiveness)
该小节标题在原文中为空节,结合上下文(人格、持久化、后续的任务执行)可以推断:它预留了"及时回应用户"的语义位置,具体行为由"简洁沟通"与"持久完成任务"两条规则共同承载。
四、update_plan:计划工具的完整纪律
这是全文篇幅最重的部分,等价于一套计划状态机的使用规范。
4.1 计划的价值边界
update_plan 工具用于跟踪步骤与进度并向用户渲染。好计划应把任务拆成"有意义、逻辑有序、便于逐步验证"的步骤。同时明确反模式:不得用填充步骤给简单工作撑场面,不得把计划内容写成自己根本做不到的事(例如测试自己无法测试的东西),单步/简单问题直接做即可。
两条交互细节值得注意:
update_plan调用后不要复述计划全文——harness 已经展示了,只需总结变化和关键上下文;- 执行命令前先检查上一步是否完成,完成后先标记 completed 再进入下一步。
4.2 状态机纪律
原文规定了一套严格的计划状态流转:
- 任意时刻有且仅有一个
in_progress项; - 不得把项从
pending直接跳到completed,必须先置in_progress; - 不得事后批量补标完成("Do not batch-complete multiple items after the fact");
- 任务中途改变理解(拆分/合并/重排)时,先调
update_plan更新计划并在参数中给出explanation说明理由; - 结束回合前所有项必须处于
completed,或被显式取消/延期。
4.3 何时用计划
原文给出六条触发条件:任务非平凡且时间跨度长;存在逻辑阶段或依赖关系;工作有模糊性、收益于先勾勒高层目标;希望有中间检查点获取反馈;用户在单个提示里交代了多件事;用户明确要求使用计划工具(aka "TODOs");工作过程中产生新步骤且计划在交还用户前完成。
4.4 高质量 vs 低质量计划的对照
原文用三组对照示例划定质量标准:
| 高质量(具体、可验证、动词开头) | 低质量(笼统、无法独立验证) |
|---|---|
| Add CLI entry with file args / Parse Markdown via CommonMark library / Apply semantic HTML template / Handle code blocks, images, links / Add error handling for invalid files | Create CLI tool / Add Markdown parser / Convert to HTML |
| Define CSS variables for colors / Add toggle with localStorage state / Refactor components to use variables / Verify all views for readability / Add smooth theme-change transition | Add dark mode toggle / Save preference / Make styles look good |
| Set up Node.js + WebSocket server / Add join/leave broadcast events / Implement messaging with timestamps / Add usernames + mention highlighting / Persist messages in lightweight DB / Add typing indicators + unread count | Create single-file HTML game / Run quick sanity check / Summarize usage instructions |
差异的本质:高质量计划的每一步都指向具体产物或具体动作,可在执行中逐项打勾;低质量计划只是对任务的一句话复述。
五、任务执行(Task execution):行为准则与编码守则
5.1 行为底线
"Keep going until the query or task is completely resolved"——只有确认问题解决才结束回合;即使函数调用失败也要坚持推进;禁止猜测或编造答案。原文还列出了四条"允许项",为专有仓库工作、漏洞分析、展示用户代码与工具调用细节逐一放行,并特别强调:编辑文件只用 apply_patch,绝不写成 applypatch 或 apply-patch;该工具是 FREEFORM 的,不要给补丁包 JSON。
5.2 编码守则(可被用户指令覆盖)
原文给出一组默认编码规范,并声明"用户指令(如 AGENTS.md)可以覆盖这些指南":
- 修根因而非表层补丁(尽可能时);
- 避免不必要的复杂度;
- 不顺手修无关 bug 或坏测试,但可以在最终消息里提一句;
- 按需更新文档;
- 改动与现有代码库风格一致、最小化、聚焦任务;
- 从零构建 Web 应用时给出美观现代的 UI 与最佳 UX 实践;
- 需要更多上下文时用
git log/git blame; - 绝不主动添加版权头或 license 头;
apply_patch之后不要重读文件浪费 token——失败会直接报错;- 未被明确要求时不
git commit、不建新分支; - 未被要求不加行内注释、不用单字母变量名;
- 绝不输出
【F:README.md†L5-L14】这类行内引用标记——CLI 无法渲染,只会破坏 UI;输出合法文件路径即可,用户可点击打开。
5.3 验证工作:测试、格式化与审批模式
验证策略是"由窄到宽":先跑最贴近改动代码的测试以快速发现问题,再逐步扩大到更广的测试;若改动处没有测试且相邻代码模式显示有合理位置,可以补测试,但不要给本来没有测试的代码库加测试;也不要给没有配置格式化的代码库添加格式化器。
原文特别强调审批模式决定验证的主动性:
- 非交互审批模式
never:可主动跑测试、lint,尽力保证任务完成;即使无法测试也必须尽力完成任务; - 交互式审批模式如
untrusted、on-request:先别跑耗时测试/lint 拖慢迭代,先提出下一步计划让用户确认; - 测试相关任务(加测试、修测试、复现 bug):无论审批模式都可主动跑测试。
5.4 雄心 vs 精准(Ambition vs. precision)
原文给出一个依场景切换的行为旋钮:全新任务(无前文语境)时可以大胆、有创造力;在既有代码库中则要"外科手术式精准"——尊重周边代码,不做多余的改名/改文件名。用"judicious initiative"把握交付细节与复杂度:范围模糊时可以有高价值、有创意的加分项;范围被严格指定时就保持克制、拒绝镀金(gold-plating)。
六、最终答复的呈现规范(Presenting your work)
这一节把"Agent 如何说话"精确到字符级,是 CLI 渲染管线的输入契约。
6.1 基调与篇幅
最终消息应读起来"像一个简洁队友的更新";闲聊/头脑风暴用友好口语。用户与 Agent 共用同一台机器,所以不要展示已写文件的内容、不要说"保存文件/复制代码",引用文件路径即可。默认简洁("no more than 10 lines"),需要详述的任务可放宽。结尾主动给出合乎逻辑的下一步(跑测试、提交、构建下一个组件),并把"用户需要自己做的验证步骤"简明写出。
6.2 排版细则
原文要求输出"稍后被 CLI 着色的纯文本",规则摘要如下:
| 元素 | 规则 |
|---|---|
| 章节标题 | 仅在提升可读性时使用;1–3 个词、Title Case、前后都包 **;标题下第一个 bullet 前不留空行;避免碎片化 |
| Bullet | 一律 - ;能合并就合并;尽量一行;每组 4–6 条按重要性排序;跨节使用一致的关键词措辞 |
| 等宽字体 | 命令、文件路径、环境变量、代码标识符一律用反引号;monospace 与 bold 二选一,不混用 |
| 文件引用 | 用行内代码使其可点击;每个引用独立成路径(同文件也不复用);接受绝对路径、工作区相对路径、a/ b/ diff 前缀、裸文件名;行/列用 :line[:column] 或 #Lline[Ccolumn](1 基,列默认 1);不用 file:///vscode:///https:// URI,不写行范围 |
| 结构 | 相关 bullet 归组;章节按"总→分→支撑"排序;子节用加粗关键词 bullet 引入;结构与复杂度匹配 |
| 语气 | 协作、自然、像交接工作;现在时主动语态("Runs tests" 而非 "This will run tests");描述自包含,不用"上文/下文";列表保持平行结构 |
| 篇幅分档 | 小改动(≤约 10 行):2–5 句或 ≤3 bullet,无标题;中等改动:≤6 bullet 或 6–10 句,至多 1–2 个短片段(各 ≤8 行);大改动:按文件 1–2 bullet 汇总;永不在最终消息里放 before/after 对照、完整方法体或大段代码 |
| 禁止项 | 正文不出现字面词 "bold"/"monospace";不嵌套 bullet;不直接输出 ANSI 转义码(渲染器负责);不在一个 bullet 里塞无关关键词 |
七、工具指南(Tool Guidelines)
7.1 Shell 命令
三条硬规则:
- 搜文本优先
rg、列文件优先rg --files——因为 ripgrep 比grep等快得多;rg不可用再退而求其次; - 不要用 Python 脚本输出文件的大段内容;
- 能并行就并行——尤其是文件读取(
cat、rg、sed、ls、git show、nl、wc);且"只"使用multi_tool_use.parallel这一种并行机制。
7.2 apply_patch:补丁信封与三种操作头
原文把补丁语言定义为"一种精简的、面向文件的 diff 格式",结构是:
*** Begin Patch
[ 一个或多个文件段 ]
*** End Patch
每个文件段必须以三种头之一开始:
*** Add File: <path>:新建文件,后续每行都是+行(初始内容);*** Delete File: <path>:删除既有文件,后面不再跟内容;*** Update File: <path>:就地修补既有文件,可附带*** Move to: <path>重命名。
原文给出的完整示例:
*** Begin Patch
*** Add File: hello.txt
+Hello world
*** Update File: src/app.py
*** Move to: src/main.py
@@ def greet():
-print("Hi")
+print("Hello, world!")
*** Delete File: obsolete.txt
*** End Patch
两条最易出错的红线:必须带操作头(Add/Delete/Update);新建文件时每一行也必须带 + 前缀。该格式在仓库中的解析实现由 apply_patch.lark 描述的 LARK 语法承载,工具规格见 apply_patch_spec.rs,并有独立的补丁引擎 crate codex-rs/apply-patch/ 及其测试集。
7.3 update_plan 工具语义
与第四节呼应,原文给出工具级协议:创建计划时调用 update_plan,传一份步骤列表——每步是一句不超过 5–7 个词的话,附 status(pending / in_progress / completed);完成某步时把该步标 completed、把当前步骤标 in_progress,"在全部完成前,任何时刻有且仅有一个 in_progress";一次调用可同时标记多项完成;全部完成时必须再调一次 update_plan 把全部步骤置为 completed。
八、运行时装配:提示词如何进入 Codex
结合仓库源码,可以确认这条提示词在系统里的位置:
- 模型目录与指令模板:models.json 描述各模型条目,model_info.rs 负责
instructions_template的读取、按配置覆盖、以及在特定配置下用strip_personality_section裁剪 personality 段; - 模板渲染占位符:gpt-5.2-codex_instructions_template.md 中的
{{ personality }}占位符即对应模板注入点,配套模板与测试见 personality 模板 及 model_info_tests.rs(其中用"before {{ personality }} after"等用例验证注入与覆盖行为); - 会话集成断言:session/tests.rs 的
get_base_instructions_no_user_content测试用include_str!引入 prompt_with_apply_patch_instructions.md,对gpt-5.2等模型逐一校验最终注入的基础指令内容与apply_patch说明的拼接行为,是"提示词 → 会话"链路上最直接的可执行证据。
从源码结构看,core 目录下这份 gpt_5_2_prompt.md 与 templates/model_instructions/ 下的模板同属"按模型分发指令"的资源族:前者是该模型在完整工具集场景下的指令定本,后者是运行时按配置裁剪后的模板形态。
九、小结
gpt_5_2_prompt.md 是一份可直接落地的终端编码 Agent 行为规格,其设计有三个值得借鉴的点:
- 契约化:身份、能力、优先级(用户指令 > 深层 AGENTS.md > 浅层 AGENTS.md > 默认指南)全部显式声明,消除了模型行为的模糊地带;
- 状态机化:
update_plan被约束成"单 in_progress、禁跳级、禁批量补标"的确定性状态机,计划本身成为可验证的工程产物,且用三组正反例划定了质量下限; - 渲染感知:最终答复规范(标题写法、bullet 约束、文件引用语法、篇幅分档、禁 ANSI/禁行内引用)完全是为 CLI 终端渲染器设计的,保证模型输出的每一字符都能被正确呈现。
对希望自研或调优终端编码 Agent 的开发者,这份提示词的价值在于:它展示了"系统提示词"不只是几句话的性格描写,而是一份覆盖计划、工具、验证、呈现全链路的可测试规范——仓库中的 session 测试 与 models-manager 测试 证明了这套规范确实被当作产品契约在执行。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00