Codex 使用最佳实践

英文原文链接 OpenAI Codex Best practices

最佳实践

开始使用 Codex,以及获得更好结果的已验证实践。

如果你刚开始接触 Codex,或者刚开始接触编码代理(coding agents),这份指南能帮助你更快获得更好的结果。它涵盖了让 Codex 在 CLI、IDE 扩展和 Codex App 中更有效的一些核心习惯,包括提示、规划、验证、MCP、技能和自动化。

Codex 在你把它视为一个可以持续配置和改进的“队友”时,效果最好,而不是把它当成一次性助手。一个很有用的思路是:先提供正确的任务上下文,用 AGENTS.md 存放长期有效的指导,让 Codex 配合你的工作流进行配置,通过 MCP 连接外部系统,把重复工作封装成 skills,并把稳定的流程自动化。

强有力的起步:上下文与提示词

即使你的提示词并不完美,Codex 也已经足够强大,能够真正帮上忙。很多时候,你几乎不做准备,直接把一个难题交给它,它也能给出很不错的结果。清晰的提示并不是获得价值的前提,但它确实会让结果更可靠,尤其是在大型代码库或高风险任务中。

如果你在一个大型或复杂的仓库中工作,最关键的提升点是:给 Codex 正确的任务上下文,并清楚地组织你希望它完成什么。一个很好的默认做法,是在提示词中包含四项内容:

  • 目标(Goal):你想修改什么,或者构建什么?
  • 上下文(Context):这个任务涉及哪些文件、文件夹、文档、示例或报错?你也可以用 @ 提及特定文件作为上下文。
  • 约束(Constraints):Codex 需要遵守哪些标准、架构、安全要求或约定?
  • 完成标准(Done when):任务完成前应该满足什么条件?比如测试通过、行为发生变化、某个 bug 不再复现等。

这样可以帮助 Codex 保持聚焦、减少臆测,并产出更容易评审的结果。

你还应该根据任务难度选择合适的推理等级,并测试哪种设置最适合你的工作流。不同用户和不同任务,最合适的设置都可能不同:

  • Low:适合更快、范围明确的任务
  • Medium / High:适合更复杂的修改或调试
  • Extra High:适合长流程、代理式、重推理任务

为了更快提供上下文,你也可以在 Codex App 里使用语音输入,直接口述你希望 Codex 做什么,而不是逐字打字。

对困难任务,先做计划

如果任务很复杂、含糊,或者你很难准确描述它,那么在开始写代码前,先让 Codex 做计划。

以下几种方式都很有效:

  • 使用 Plan 模式:对大多数用户来说,这是最简单也最有效的方式。Plan 模式可以让 Codex 先收集上下文、提出澄清问题、形成更扎实的方案,再开始实现。可通过 /planShift + Tab 切换。
  • 让 Codex 先“采访”你:如果你只有一个模糊想法,不知道该怎么准确描述,可以让它先向你提问。告诉它要质疑你的假设,在写代码之前先把模糊想法变得具体。
  • 使用 PLANS.md 模板:对于更高级的工作流,你可以配置 Codex 在长时任务或多步骤任务中遵循 PLANS.md 或执行计划模板。

AGENTS.md 让指导可复用

当某种提示方式已经有效,下一步就不该再靠手动重复输入。这正是 AGENTS.md 发挥作用的地方。

你可以把 AGENTS.md 理解为一个面向 agent 的开放格式 README。它会自动载入上下文,是在仓库中编码“你和你的团队希望 Codex 如何工作”的最佳位置。

一个好的 AGENTS.md 通常会包含:

  • 仓库结构和重要目录
  • 如何运行项目
  • build、test、lint 命令
  • 工程约定和 PR 期望
  • 限制条件和禁止事项
  • “完成”意味着什么,以及如何验证工作结果

CLI 中的 /init 斜杠命令可以快速在当前目录生成一个初始版 AGENTS.md。这是个很好的起点,但你应该根据团队真实的构建、测试、评审和发布方式去修改它。

你可以在不同层级创建 AGENTS.md 文件:比如放在 ~/.codex 中的全局 AGENTS.md 用于个人默认规则,仓库级文件用于团队共享标准,子目录中的更细粒度文件用于局部规则。如果当前目录附近存在更具体的文件,那么更具体的指导会优先生效。

保持务实。一个简短但准确的 AGENTS.md,往往比一份充满模糊规则的长文件更有价值。先写最基本的内容,只有在你发现重复错误后,再逐步增加新规则。

如果 AGENTS.md 变得太大,可以让主文件保持精简,再引用针对具体任务的 markdown 文件,比如规划、代码评审或架构文档。

当 Codex 连续两次犯同样的错误时,让它做一次复盘,然后更新 AGENTS.md。这样,指导内容会始终保持实用,并基于真实摩擦点。

配置 Codex,以保持一致性

配置是让 Codex 在不同会话和不同界面中表现更一致的主要方式之一。比如你可以设置默认模型、推理强度、沙箱模式、审批策略、profiles,以及 MCP 配置。

一个不错的起步方式是:

  • 个人默认配置放在 ~/.codex/config.toml
  • 仓库专属行为放在 .codex/config.toml
  • 命令行覆盖只用于一次性的特殊情况

config.toml 是你定义长期偏好的地方,例如 MCP servers、profiles、多 agent 配置和实验功能。你既可以直接编辑它,也可以让 Codex 帮你修改。

Codex 自带操作系统级别的沙箱能力,并且有两个关键可控项:approval mode 决定 Codex 在运行命令前何时需要你的许可;sandbox mode 决定 Codex 是否能读写目录,以及 agent 可以访问哪些文件。

如果你刚开始使用编码代理,先使用默认权限。默认情况下,把审批和沙箱权限收紧;只有当你在可信仓库或明确工作流中确实需要时,再逐步放宽。

另外,CLI、IDE 和 Codex App 共用同一套配置层。很多所谓“质量问题”,其实是配置问题,比如工作目录错了、没有写权限、默认模型不对、缺少工具或连接器等。因此,尽早按照真实环境配置 Codex 很重要。

通过测试和评审提升可靠性

不要停留在“让 Codex 做一次修改”这一步。你应该让它在需要时创建测试、运行相关检查、确认结果,并在你接受之前先做一轮自我评审。

Codex 可以帮你完成这个闭环,但前提是它知道“什么才算做好”。这些指导既可以来自提示词,也可以来自 AGENTS.md

这通常包括:

  • 为改动编写或更新测试
  • 运行正确的测试套件
  • 检查 lint、格式化或类型检查
  • 确认最终行为符合需求
  • 检查 diff 中是否存在 bug、回归或高风险模式

在 Codex App 中,你可以打开 diff 面板,直接在本地评审改动。点击具体某一行后给出的反馈,会作为上下文传给下一轮 Codex。

这里一个很有用的命令是 /review,它支持多种评审方式:

  • 以某个基线分支为参照进行 PR 风格评审
  • 评审未提交改动
  • 评审某个 commit
  • 使用自定义评审指令

如果你和团队维护了一个 code_review.md 文件,并且在 AGENTS.md 中引用它,Codex 也可以在评审时遵循这份指导。这对于想在多个仓库和贡献者之间保持一致评审行为的团队来说,是一个很强的模式。

Codex 不应该只会生成代码。在合适的指导下,它同样可以帮助测试、检查和评审代码。若你使用 GitHub Cloud,还可以设置 Codex 为你的 PR 执行代码评审。OpenAI 内部会让 Codex 评审 100% 的 PR。你可以启用自动评审,也可以在 @Codex 时触发它进行响应式评审。

用 MCP 获取外部上下文

当 Codex 需要的上下文不在仓库内部时,就该使用 MCP。它能让 Codex 连接到你已经在使用的工具和系统中,这样你就不必不断把实时信息复制粘贴进提示词里。

MCP,也就是 Model Context Protocol,是一种将 Codex 连接到外部工具和系统的开放标准。

以下情况适合使用 MCP:

  • 所需上下文位于仓库外部
  • 数据变化频繁
  • 你希望 Codex 直接使用工具,而不是依赖粘贴进来的说明
  • 你需要一个能在多个用户或多个项目之间重复使用的集成方式

Codex 同时支持 STDIO 和带 OAuth 的 Streamable HTTP 服务器。

在 Codex App 中,可以进入 Settings → MCP servers 查看自定义和推荐的服务器。很多时候,Codex 本身就能帮你安装所需服务器,你只需要开口让它做。CLI 中则可以使用 codex mcp add 命令,通过名称、URL 等信息来添加自定义服务器。

只在工具真正能打通某个工作流时再接入它。不要一开始就把你所有工具都接上。先从 1 到 2 个能够明确减少手动重复步骤的工具开始,之后再逐步扩展。

把可重复工作封装成 skills

当一个工作流开始变得可重复时,就别再依赖长提示词或反复来回沟通了。应该使用 Skill,把指令、SKILL.md 文件中的上下文,以及 Codex 需要稳定应用的支持逻辑打包起来。Skills 可以同时用于 CLI、IDE 扩展和 Codex App。

每个 skill 都应该只专注于一个工作。可以先从 2 到 3 个具体用例起步,定义清楚输入和输出,并在描述中明确说明:这个 skill 是做什么的,以及在什么情况下应该使用它。还应包含用户实际可能会说出的触发短语。

不要一开始就试图覆盖所有边界情况。先挑一个有代表性的任务,把它做好;然后再把这个工作流变成 skill,并持续改进。只有在脚本或附加资源确实能提高可靠性时,再把它们加进去。

一个经验法则是:如果你总在重复使用同一个提示词,或者总在纠正同一类工作流,那它大概率就应该被做成一个 skill。

Skills 尤其适合这些重复性任务:

  • 日志分诊
  • 发布说明草稿
  • 按清单执行 PR 评审
  • 迁移规划
  • 遥测或事故总结
  • 标准化调试流程

$skill-creator skill 是创建第一个 skill 的最佳起点;随后可以用 $skill-installer 将它安装到本地。Skill 最重要的部分之一就是描述:它必须说明这个 skill 做什么,以及什么时候用。

个人 skills 存放在 $HOME/.agents/skills 中;团队共享的 skills 可以放进仓库内的 .agents/skills。这对新成员 onboarding 特别有帮助。

对重复工作使用自动化

当一个工作流已经稳定后,你就可以安排 Codex 在后台定期替你运行它。在 Codex App 中,automations 允许你为周期性任务选择项目、提示词、执行频率和执行环境。

一旦某项任务对你来说开始变得重复,你就可以在 Codex App 的 Automations 标签页中创建自动化。你可以选择它在哪个项目中运行、运行什么 prompt(也可以调用 skills),以及按什么频率运行。你还可以选择让自动化在专用的 git worktree 中运行,还是在本地环境中运行。

适合自动化的任务包括:

  • 汇总最近的 commits
  • 扫描潜在 bug
  • 起草发布说明
  • 检查 CI 失败
  • 生成 standup 总结
  • 按计划运行可重复分析流程

一个很有用的原则是:skills 定义方法,automations 定义时间表。 如果一个工作流仍然需要很多人为引导,先把它做成 skill;一旦它变得可预测,自动化就会成为真正的效率放大器。

自动化不只适合执行任务,也适合用于反思和维护。你可以回顾最近的会话,总结反复出现的摩擦点,并随着时间推移不断改进提示词、说明或工作流配置。

用会话控制来组织长期工作

Codex 的 session 不只是聊天记录。它们更像是会逐步积累上下文、决策和行动的工作线程,因此管理方式会显著影响结果质量。

Codex App 的 UI 最方便做线程管理,因为你可以 pin 线程,也可以创建 worktrees。如果你使用 CLI,以下 slash commands 特别有用:

  • /experimental:切换实验功能,并加入 config.toml
  • /resume:恢复已保存的会话
  • /fork:保留原始对话记录的同时创建一个新线程
  • /compact:当线程过长时,对早期上下文做总结压缩(Codex 也会自动压缩会话)
  • /agent:在并行 agent 之间切换当前活跃线程
  • /theme:选择语法高亮主题
  • /apps:在 Codex 中直接使用 ChatGPT apps
  • /status:查看当前 session 状态

一个连贯的工作单元最好只用一个线程。如果工作仍属于同一个问题,继续留在同一线程通常更好,因为这样能保留推理轨迹。只有当工作真的分叉时,再去 fork。

你还可以使用 Codex 的 multi-agent 工作流,把边界清晰的工作从主线程中分流出去。让主 agent 专注于核心问题,而把探索、测试或分诊之类的任务交给 subagents。

常见错误

以下是刚开始使用 Codex 时常见的一些错误:

  • 把长期有效的规则都塞进 prompt,而不是迁移到 AGENTS.md 或 skill 中
  • 没有告诉 agent 如何运行 build 和 test,导致它无法“看到”自己的工作结果
  • 在多步骤或复杂任务中跳过规划
  • 在你还没理解工作流前,就给 Codex 你的电脑完全权限
  • 在没有使用 git worktrees 的情况下,让多个实时线程修改同一批文件
  • 在某个重复任务还没有被手动验证可靠之前,就急着把它自动化
  • 把 Codex 当成必须一步步盯着看的工具,而不是与你并行工作的助手
  • 按“项目”而不是按“任务”开线程,导致上下文越来越臃肿,结果也会逐渐变差

王小兵 /
Published under (CC) BY-NC-SA in categories Codex  AI  tagged with Codex  AI