Codex, Level Up: Cloud Tasks, Code Review, MCP Integration, Custom Instructions, IDE Integration
Grow Codex from a single terminal session into a full working style: running cloud tasks in parallel, reviewing PRs, wiring in external tools, and reaching for it inside the IDE.
今日目标
- 能把一个任务派到 Codex 云端环境并行执行,回来审阅 diff 并决定是否开 PR
- 能用 /review 与 GitHub 上的 @codex review 让 Codex 审代码,并说清审查与生成的分工
- 能用 codex mcp add 接入一个 MCP server,并用 skills 沉淀一段可复用的流程
昨天你在终端里带着 Codex 干了一件活,全程盯着。今天要解决的问题是:活多了怎么办?盯不过来怎么办?它不会的事怎么办?答案分别是云端并行、代码审查、MCP 与 skills。读完做完,回到页面顶部把三条目标勾掉。
小白版讲解
云端任务:把活派出去,回来只看 diff
接着昨天那位外援搭档的故事。头几天他坐在你旁边,每改一处你都看着。等你信任他的工作方式了,下一步自然是:把活派给他,让他回自己公司做,做完把成果发过来,你只看结果。而且既然是派出去,一次派三件也没问题,反正不占你的桌子。这就是 Codex 云端任务的全部思路——任务在 OpenAI 那边的隔离容器里跑,跟你本地机器无关,你可以同时派出多个,每个跑完回来只看 diff。
入口有好几个:浏览器里打开 chatgpt.com/codex;终端里用 codex cloud 浏览或发起云端任务;IDE 扩展里可以把当前任务「派到云端」;手机上的 ChatGPT 也能发。它们背后是同一套东西:一个绑定了你 GitHub 仓库的云端环境(environment),每次任务在这个环境的一个新容器里 clone 你的仓库、跑你配的 setup 脚本、然后开始干活。
它和本地 CLI 最大的差别不是「在哪跑」,而是审批模型变了。本地有你实时点头;云端没有人在旁边,所以它的边界完全由环境配置事先画好:能不能联公网、装哪些依赖、有哪些环境变量。这意味着在云端你要把昨天「弹审批时再决定」的事,全部提前想清楚写进环境配置。回到工作流上,一个任务跑完,你会拿到一份摘要加一份 diff,可以做三件事:接受并一键开 PR、追问一句让它继续改、或者直接丢弃。codex apply 可以把某次云端任务的 diff 直接打到你本地的工作树上,适合「云端出方案、本地跑测试」的组合。
云端环境的配置:依赖、变量、要不要给它公网
环境配置是云端任务成败的分水岭,因为容器里没有你昨天那台装好一切的电脑。配置项就四类:
- 基础镜像与依赖:选运行时版本(Node、Python 等),在 setup 脚本里写安装命令,比如
pnpm install。setup 脚本在每次任务开始前跑一遍,跑失败任务就废了,所以它要像 CI 脚本一样可复现。 - 环境变量与密钥:测试要用的变量放进来。不要放生产密钥——容器里跑的是一个会自主执行命令的程序,你给它什么它就能用什么。
- 公网访问:默认关闭。开了它就能
npm install新依赖、查文档;关了它只能用 setup 阶段装好的东西。折中方案是只在 setup 阶段联网装依赖,任务阶段断网。 - AGENTS.md:仍然生效。它随仓库一起被 clone 进容器,所以昨天写的手册在云端一样管用——这正是把规矩写进仓库而不是写进你脑子里的好处。
配置一次后,接下来所有任务共用,值得花半小时把它调到「随便发一个任务 setup 都能过」的状态。实验里你会真的配一遍。
代码审查:本地 /review 与 GitHub 上的 @codex review
搭档的活交回来了,谁来审?你当然要看,但你也可以让另一位审阅者先过一遍。Codex 的代码审查有两个入口,对应两种节奏。
本地、会话里:在 CLI 敲 /review,它给三个选项——审当前未提交的改动、对着某个基准分支审整条分支的 diff、或者你写一段自定义的审查指令(「只看有没有漏掉错误处理」)。审查结果以逐行评论的形式出现,不会改你的工作树,只报问题。脱手版本是 codex review,非交互,适合放进 pre-push 脚本。
远端、PR 上:在 GitHub 仓库里装好 Codex 的集成后,在 PR 评论里写一句 @codex review,它会读整个 PR 的上下文和已有评论,把审查意见以行内评论的形式贴回 PR。团队可以配成每个 PR 自动审。
一个很自然的疑问:让同一家的模型既写代码又审代码,审查还有意义吗?答案是有,但要理解它的边界。审查时模型拿到的输入不同——它看的是 diff 而不是需求,是站在「找问题」而不是「完成任务」的立场上,这种角色切换本身就能抓出不少生成时的疏漏(漏掉的边界情况、没更新的调用方)。但它抓不出「需求本身理解错了」这类问题,因为审查者和生成者共享同一份对需求的理解。所以最有价值的审查组合是:生成用一家、审查用另一家,D5 我们会正式把这条工作流搭起来。
MCP 接入:一条命令让 Codex 多一双手
搭档很能干,但有些事他做不了:查你们公司内部的工单系统、读你们自建的知识库、操作某个内部服务。你需要给他开账号、给他工具。MCP(Model Context Protocol)就是给 coding agent 接外部工具的通用协议——一个 MCP server 暴露一组工具,任何支持 MCP 的客户端都能调用。30 天课 D23 有它的协议细节,这里只讲怎么在 Codex 里用。
接一个 server 就一条命令:
codex mcp add <server-name> --env KEY=VALUE -- <启动 server 的命令>-- 后面是启动这个 stdio 型 server 的命令,--env 传它需要的环境变量。命令背后其实是往 ~/.codex/config.toml 里写了一段配置:
[mcp_servers.<server-name>]
command = "npx"
args = ["-y", "某个-mcp-server"]
env = { SOME_TOKEN = "从环境变量读,不要写死" }直接编辑这段配置和敲命令是等价的。codex mcp list 查看已接入的 server;对需要 OAuth 登录的远程 server,用 codex mcp login <server-name> 完成授权。接好以后,Codex 在会话里会把这些工具当成自己的能力来用——你只需要用自然语言说「把这个 bug 记到工单系统里」,它会自己找到对应的工具。
还有一个反向用法值得知道:codex mcp-server 把 Codex 自己变成一个 MCP server。也就是说,别的 Agent(包括你在 D4 用 Agents SDK 写的那个)可以把「让 Codex 去改代码」当作一个工具来调用。这是把 coding agent 嵌进更大系统的入口。
自定义指令与 skills:规则归 AGENTS.md,流程归 skill
到这里你已经有两种「教」Codex 的方式:AGENTS.md 写规则,MCP 加工具。还差一种——可复用的流程。比如「发版前的检查流程」:改版本号、更新 changelog、跑全量测试、打 tag。这不是一条规则,也不是一个工具,而是一串步骤加一些判断,你不想每次都在提示词里重新描述一遍。这就是 skills 要解决的问题。
一个 skill 就是一个目录,里面有一个 SKILL.md,frontmatter 至少写 name 和 description,正文写这个流程怎么走;旁边可以放 scripts/(流程里要跑的脚本)和 references/(要参考的文档)。放的位置决定作用范围:仓库里的 .agents/skills/ 只对这个项目生效,用户目录下的 ~/.agents/skills/ 对你所有项目生效。
调用有两种方式:显式地在输入框里敲 $skill-name,或者什么都不做——Codex 会根据 description 判断当前任务是否匹配某个 skill,匹配了就自动用。所以 description 要写成「什么时候该用我」,而不是「我是什么」。
三者的分工可以一句话记住:AGENTS.md 管「做事的规矩」,MCP 管「能碰到的外部系统」,skill 管「反复要走的流程」。规矩每次会话都读;工具按需调用;流程按任务匹配。分不清的时候问自己:这段内容是每次都要遵守的(规矩),还是要去外面拿数据(工具),还是一套多步骤的做法(流程)?
如果你上过隔壁的 Claude 高效使用课,会发现 Claude Code 也有几乎同构的三件套:CLAUDE.md、MCP、.claude/skills/。两家在这一层的设计高度收敛,这本身就是一个信号——这套分工是 coding agent 的通用模式,学会一次两边都能用。
IDE 集成:把选中的代码直接交给它
最后一个入口是编辑器。Codex 的 IDE 扩展支持 VS Code 及其衍生编辑器(Cursor、Windsurf)、JetBrains 系列和 Xcode。装好后侧边栏多一个 Codex 面板,你在编辑器里选中一段代码,它就成了对话的上下文,不用再复制粘贴、不用再描述「我说的是那个文件的第几行」。
IDE 里的工作流和 CLI 是一致的:同样读 AGENTS.md,同样有审批与沙箱,同样能 /review。多出来的是两件事:一是 diff 直接在编辑器里逐块接受或拒绝,比在终端里看 git diff 舒服得多;二是可以把当前任务一键「派到云端」,本地继续干别的,云端跑完再回来看。扩展还会在改动前后自动做 git 检查点,方便整体回退。
什么时候用 IDE、什么时候用 CLI?一个粗略的口径:改动局部、需要频繁看代码上下文的用 IDE;跨多文件的大任务、要脱手跑的、要进脚本的用 CLI。两者共享登录、配置和会话记录,切换没有成本。
源码导读
动手实验
今天是文档型实验,产出是一页可复用的云端任务清单。starter/ 是留了空位的清单模板,solution/ 是用本课 TODO API 填好的一份示范。没有 GitHub 仓库的读者可以把 D1 那个 TODO API 推到一个新建的私有仓库里。
- 在
chatgpt.com/codex里给仓库建一个环境:选 Node 运行时,setup 脚本写pnpm install,先关公网,发一个「列出项目里所有路由」的只读任务验证 setup 能过。 - 把「给 POST /todos 补输入校验」和「给现有路由补单元测试」作为两个任务同时派出,各自记下发起时间,并在清单里写明你预期它们会不会改到同一批文件。
- 两个任务回来后逐个看摘要和 diff,按清单里的三选一(接受 / 追问 / 丢弃)做决定,每个决定写一句理由。
- 对接受的那份用
codex apply打到本地,跑一次测试,再跑/review,把审查意见逐条标成同意或不同意。 - 把整个过程里「下次还会这么做」和「下次要改」的点各写三条,填进清单末尾的复盘区。
面试题
今天 3 道题在下方题库区,侧重云端 coding agent 的审批边界、代码审查与代码生成的分工、MCP 与 skills 的区别。展开后先看「分析过程」再看要点——照着推导练,比背要点管用。
检查清单与明日预告
- 能把一个任务派到 Codex 云端环境并行执行,回来审阅 diff 并决定是否开 PR
- 能用 /review 与 GitHub 上的 @codex review 让 Codex 审代码,并说清审查与生成的分工
- 能用 codex mcp add 接入一个 MCP server,并用 skills 沉淀一段可复用的流程
- 能一句话说清 AGENTS.md、MCP、skill 三者的分工
- 实验的 4 条验收标准全部通过
- 3 道面试题不看要点也能答出至少 2 道
明天(D3)我们往下钻一层:Codex 这样的成品,底下是怎么用 Responses API 把模型、工具和多轮状态组织起来的。先用成品再看 API 是有意的顺序——你已经亲眼见过「模型请求一个工具、拿到结果、继续」这个循环在 Codex 里长什么样,明天看到 function_call 和 function_call_output 这两个字段时,就知道它们对应的是哪一步,而不是在读一份抽象的接口文档。
Interview questions
A cloud coding agent can run many tasks in parallel with nobody around to approve steps. Where should its approval boundary sit?云端 coding agent 能同时跑很多任务,但没有人在旁边点头。它的审批边界应该画在哪里?
Common in ChinaCommon overseasIntermediate#coding-agent#cloud#approvalsHow to reason about it · think before answering
- This checks whether you noticed the approval model changed: local means step-by-step approval, cloud means authorize upfront and review afterwards.
- Split the boundary across three moments: before the task (environment config decides network, variables, dependencies), during (container isolation), after (a human reviews the diff before any PR).
- Conclude that the cloud boundary is two gates, environment config plus pre-PR human review, with nobody in between; hence no production secrets, network off by default, merge rights stay human.
- Add the engineering angle: draw boundaries between parallel tasks too; tasks that touch the same files should not run concurrently.
- Expect the follow-up: can it auto-merge? Only in low-risk repos for fully green PRs, with rollback in place, and treat enabling auto-merge as a change that itself needs approval.
分析过程 · 先想清楚再作答
- 这题考的是你有没有意识到「审批模型变了」:本地是逐步审批,云端只能事先授权、事后审阅。答成「跟本地一样弹窗」说明没用过。
- 拆法是把边界分成三个时间点:任务开始前(环境配置决定能联网什么、有哪些变量、装什么依赖)、任务执行中(容器隔离,改动只在容器里)、任务结束后(人审 diff 再决定开不开 PR)。
- 结论是:云端的审批边界就是「环境配置 + PR 前人工审阅」这两道门,中间不再有人;所以生产密钥不能进环境、公网默认关、合并权限保留在人手里。
- 补一条工程视角:并行任务之间的边界也要画——互相会改同一批文件的任务不要同时派,否则合并成本吃掉并行收益。
- 可预期的追问:能不能让它自动合并?可以在低风险仓库对通过全部测试的 PR 这么做,但要保留回滚手段,并且把「自动合并」本身当成一个需要审批的配置变更。
Key points
- No step-wise approval in the cloud; the boundary becomes upfront environment config plus post-hoc human review
- Keep production secrets out, network off by default, merge rights with humans
- Draw boundaries between parallel tasks: never run file-overlapping tasks concurrently
- Auto-merge only for low-risk repos with fully green PRs, with rollback ready
答题要点
- 云端没有逐步审批,边界变成事前的环境配置与事后的人工审阅两道门
- 环境里不放生产密钥、公网默认关、合并权限保留给人
- 并行任务之间也要画边界:会改同一批文件的任务不同时派
- 自动合并只适用于低风险仓库且全绿的 PR,并保留回滚
If the same model both writes and reviews code, is the review still meaningful? How do you make it more independent?让同一个模型既写代码又审代码,审查还有意义吗?怎么让审查更独立?
Common in ChinaCommon overseasIntermediate#code-review#coding-agent#workflowHow to reason about it · think before answering
- The crux is 'still meaningful'; a flat yes or no fails. Explain what it catches and what it misses.
- What it catches: the input changes (diff instead of requirements) and the stance changes (find faults instead of finish the job), which surfaces missed edge cases, unsynced callers and style violations.
- What it misses: reviewer and author share one understanding of the requirement, so a misread requirement passes; they share blind spots too.
- Conclude with three independence levers: review with a different vendor's model, feed the reviewer different information (original requirement plus acceptance criteria, not just the diff), and run deterministic checks first.
- Expect the follow-up: auto-apply review comments? No; review is input, not verdict, and both false positives and misses exist.
分析过程 · 先想清楚再作答
- 题眼在「还有意义吗」——直接答「没意义」或「有意义」都不及格,要说清它能抓什么、抓不到什么。
- 先说能抓的:审查时输入变了(看 diff 而不是需求)、立场变了(找问题而不是完成任务),这种角色切换能抓出漏掉的边界情况、没同步的调用方、明显的风格违规。
- 再说抓不到的:审查者和生成者共享同一份对需求的理解,需求理解错了两边一起错;也共享同样的盲区与偏好。
- 结论给三条提高独立性的手段:换一家模型审、给审查者不同的信息(需求原文加验收标准而不是只给 diff)、用确定性工具(测试、lint、类型检查)做第一道审查。
- 可预期的追问:审查意见要不要自动应用?不要,审查是输入不是判决,误报与漏报都存在,最终判断留给人。
Key points
- Yes: the switch of input and stance catches edge cases, unsynced callers and style issues
- It misses requirement misreads because author and reviewer share one understanding
- Increase independence: a different vendor's model, richer reviewer context, deterministic checks first
- Treat comments as input, never auto-apply
答题要点
- 有意义:输入与立场的切换能抓出边界情况、未同步的调用方、风格违规
- 抓不到与需求理解相关的错误,因为审查者与生成者共享同一份理解
- 提高独立性:换一家模型审、给审查者需求原文与验收标准、先跑确定性检查
- 审查意见是输入不是判决,不要自动应用
MCP servers and skills both extend a coding agent. When do you reach for each, and what goes in the project instruction file instead?MCP server 和 skill 都是在给 coding agent 加能力,什么时候该用哪一个?项目说明文件又放什么?
Common in ChinaCommon overseasBasic#mcp#skills#coding-agentHow to reason about it · think before answering
- This tests separation of abstraction levels, the tooling-side version of the increasingly common 'function calling vs MCP vs skills' question.
- Ask what is being added: access to an external system (tickets, databases, internal services) is MCP, a protocol-level tool; a multi-step procedure (release checklist, migration flow) is a skill, a prompt-level workflow package; conventions to obey every session belong in the instruction file.
- Contrast triggers: MCP tools are invoked by the model when it needs data; skills are invoked explicitly by name or matched by description; instruction files are loaded unconditionally at session start.
- Conclude: rules in the instruction file, external systems via MCP, procedures as skills; keep each fact in one place to avoid contradictions.
- Expect the follow-up: can a skill use MCP tools? Yes; a skill's steps can call for a tool, the layers are orthogonal, not substitutes.
分析过程 · 先想清楚再作答
- 这题考的是抽象层次的区分,是国内面试开始高频出现的「Function Call / MCP / Skills 三者区别」的工具侧版本。
- 拆法是问「加的是什么」:加的是访问外部系统的能力(查工单、读数据库、调内部服务)就是 MCP,它是协议层的工具;加的是一套多步骤的做法(发版检查、迁移流程)就是 skill,它是提示词层的流程包;每次会话都要遵守的约定就是项目说明文件。
- 再给触发方式的差别:MCP 工具由模型在需要数据时调用;skill 由用户显式点名或由模型按描述匹配;说明文件每次会话开头无条件读入。
- 结论落到一句话:规矩归说明文件、外部系统归 MCP、流程归 skill;同一件事只放一处,避免三处互相矛盾。
- 可预期的追问:skill 里能不能调 MCP 工具?可以,skill 的步骤里可以要求使用某个工具,两者是正交的层次,不是替代关系。
Key points
- MCP adds tools that reach external systems, invoked by the model on demand
- Skills add multi-step procedures, triggered by name or matched by description
- The instruction file holds conventions, no-go areas and environment facts read every session
- The three are orthogonal: rules, external systems, procedures each live in one place; a skill may call for an MCP tool
答题要点
- MCP 加的是访问外部系统的工具,由模型按需调用
- skill 加的是多步骤流程,由用户点名或按描述匹配触发
- 项目说明文件放每次会话都要遵守的约定、禁区与环境事实
- 三者正交:规矩、外部系统、流程各放一处,skill 里可以要求用某个 MCP 工具
Comments
Sign in to join the discussion
No comments yet — be the first.