目录

Getting the Most Out of Codex:把 Codex 放进真实工作流

本文基于 Getting the most out of Codex 一文,并结合 OpenAI Codex 官方页面 与相关开发者文档整理。文章不按功能菜单介绍 Codex,而是沿着一条真实工作流看它怎样把上下文、纠偏、长任务和审查放进同一条线程。 延伸阅读OpenAI Codex:轻量级终端编程智能体完全指南Superpowers 深度解析:把 AI 编程助手纳入软件工程流程agentmemory:为 AI Agent 打造可搜索的持久化记忆系统

读完这篇文章会有答案

  • Codex 的五层能力模型分别对应团队流程里的哪一段,以及少了哪一层会出什么问题。
  • 持久线程、Steering(行进中纠偏)、Queuing(任务排队)和 Side Panel(产物审查)如何配合,把长任务留在同一条工作线上。
  • 什么时候该上 automation 和 Goals,什么时候反而该先把手动流程跑稳。
  • 一条真实的发布任务怎样依次穿过线程、工具、验证器和审查层。

如果你正在评估是否把 Codex 引入团队流程,或者已经用了但觉得"它好像只是个高级补丁工具",下面的内容会把视角从"改代码"切到"托住一整条工作线"。

先看它在补哪一段

如果只把 Codex 当成“帮你改几行代码”的工具,很容易漏掉它真正有用的那部分。它想塞进同一条工作线里的,不只是编辑器里的改动,还包括终端命令、预览页面、消息反馈和待办推进。代码当然还是中心,但一项任务能不能一路做完,常常取决于线程有没有保住前情、工具能不能碰到问题现场、结果有没有被验证,以及你隔天回来还能不能从原地接着做。

先画一张五层图

与其按菜单记功能,不如先把 Codex 拆成五层。这样更容易看清它在团队流程里到底补的是哪一段:

层级代表能力主要作用如果没有这一层会发生什么
持续上下文层durable threads、pinned threads让工作跨会话延续,不必每次重建背景每次回来都要重新解释项目、目标和偏好
人在回路控制层voice input(语音输入)、Steering、Queuing在任务进行中纠偏,或把下一步排进队列Agent 一旦走偏,只能等它做完再返工
执行层$browser、@chrome、@computer、MCP把动作从 repo 扩到网页、桌面和业务系统线程只能停留在“提出建议”,无法继续执行
长任务层automations、Goals、verifiers让工作在你离开后继续推进,并有明确停线长任务只能靠人工反复催促,且没有完成标准
产物审查层side panel、artifact review让代码、文档、网页、表格等产物留在原地审查产物与对话分离,修改变成新的交接成本

真放进日常流程,大致也是这个顺序:先把上下文留住,再给人中途纠偏的手段,然后把执行范围扩到 repo 之外,接着用自动化和验证器托住长任务,最后让产物别离开当前线程。

为什么 Codex 的边界已经不只在“写代码”

多数人第一次用 coding agent,仍然会从熟悉的动作开始:读仓库、改代码、跑测试、开 Pull Request。官方页面对 Codex 的定位也是沿着这条主线展开,例如功能开发、复杂重构、代码迁移、代码审查和长时间后台任务。OpenAI 在产品页里把 Codex app 描述为智能体式编码的指挥中心,强调的是多任务并行、技能复用和长时间执行。官方功能文档里还有一个很直接的信号:线程可以选 Local、Worktree、Cloud 运行模式,也自带终端、diff(改动对比)和 Git 面板。这个产品从一开始就放在执行场景里。

关键就看,代码之外那半圈工作有没有被同一系统一起处理。现实里的工程任务,很少只剩编辑源码:

  • 你要去浏览器里看预览页,确认渲染后的问题到底是什么。
  • 你要查 Slack、邮件或评论系统,搞清楚反馈来自谁、发生在哪个版本。
  • 你要执行 shell 命令、导出文档、上传产物,或者在没有 API 的地方补最后一脚。
  • 你要在几小时甚至几天后回来,接着同一件事继续做,而不是重新开题。

这些动作放回同一线程后,Codex 处理的就不是一段孤立代码,而是一件还在推进的工作。要是还把它当一次性问答工具来用,durable threads、thread automations 和 shared memory 这些部件自然会显得多余。

持久线程:把同一件事留在原地

durable thread 可以直接理解成长期工作区。线程固定下来后,最容易散掉的几类信息就能留在原处:

  • 已经做过的决策。
  • 用户偏好和团队约束。
  • 正在进行中的上下文与下一步动作。

原帖把 pinned thread 放得这么靠前,不是偶然。没有固定线程,自动化、Goals、审查和交接每次都得先把背景补一遍。如果只把它当书签列表,就会低估它;它更接近一块长期工作台。原帖提到可以用 Command-1 到 Command-9 直接跳进固定线程。高频线程能一键回跳以后,release、审稿、监控这类工作才不会每次都从头铺背景。

几个典型线程值得单独建立:

线程类型更适合装什么为什么值得单独保留
Release thread发布节奏、回滚条件、待确认项发布是一条跨天、跨人、跨系统的长链路
Documentation review审稿意见、术语约定、待补例子文档质量往往靠多轮回看,而不是一次成稿
Chief of Staff threadSlack、邮件、会议纪要、待回复问题这类信息最容易碎在不同工具里
External monitoring外部渠道、竞品、依赖变化监控类工作天然需要反复回来续做

区别在于,你回来时它还停在原来的现场:知道做到哪里、哪些决定已经做过、下一步是什么。

语音、Steering 和 Queuing,让人始终留在回路里

voice input(语音输入)最适合任务还没完全成形的时候。你只记得一个模糊线索,例如“Slack 里好像有人提过这个问题,去帮我找出来”。重点不在输入方式,而在于你不用先把线索整理成一条过于干净的 prompt(提示词);很多关键信息本来就是边说边想时冒出来的。

Steering:别等错完了再修

Steering 就是任务还没做完时直接改方向。传统自动化一旦跑偏,用户常常只能等它结束,再回头处理结果。Codex 在这里允许你边做边纠偏:

  • 页面审查时,直接在侧边栏标注某个按钮太大、某段 copy 不对、某块间距失衡。
  • 文档生成时,在正文尚未收束前指出术语不统一,或者要求把某一节改成面向运营而非面向开发者。
  • 调试时,在错误定位路径明显走偏时立刻打断,而不是等一轮无关搜索结束。

这样省掉的是整段走偏后的返工。

Queuing:下一步别靠人记着

Queuing 不打断当前任务,而是把下一件事排进队列。例如当前构建完成后,自动把预览链接发给 reviewer,或者在修复完成后整理成一段待发送的状态更新。它和 Steering 的分工也很清楚:

  • Steering 改的是“现在做什么”。
  • Queuing 改的是“接下来做什么”。

两者接起来之后,线程里的节奏会顺很多:一边修正当前方向,一边把下一步挂上去。

工具外延:从仓库走到网页、桌面和业务系统

线程稳住后,接下来要看的是它能直接碰到哪些地方:仓库、网页、桌面,还是 Slack 这类业务系统。

工具层适合处理的事不该期待它解决的事
$browser在侧边栏里检查和标注网页、预览静态产物、直接看渲染结果依赖你本机登录态的复杂账户流程
@chrome需要用户已登录 Chrome 状态的浏览器工作流桌面原生应用或只存在于 GUI 的操作
@computer没有 API、只能通过图形界面完成的任务稳定、可脚本化、已经有接口的工作
MCP / connectorsSlack、Gmail、Calendar 等业务系统接入像素级界面操作或本机私有 GUI 交互

工具越往外延,越得克制。能用稳定 API 或命令完成的事,不值得回退到 GUI。@computer 更适合补“最后一公里只能手点”的步骤,不适合把原本可维护的流程改成脆弱的录屏脚本。

MCP 和 connectors 最省事的地方,是让任务从入口处就进入线程。很多工程问题刚冒出来时,还只是 Slack 消息、Gmail 邮件、日历备注,或者评论系统里的反馈。线程能直接从这些地方起步,就少了先人工搬运、再重新描述一遍的折返。

approvals 与 sandbox(沙箱权限范围)的边界也值得单拎出来。官方文档明确建议大多数任务都收敛在当前 project 或 worktree 里;如果工作跨多个仓库或目录,拆成独立 project,或者为并行任务创建 worktree,通常比让同一线程在项目根之外自由游走省事得多。

Skill 和 Shared Memory:让流程能反复接着做

durable threads 只能保证单条线程不丢上下文,这还不够。shared memory 要解决的是,多条线程之间怎么共用那些不会轻易变化的信息。

原帖给出的做法很务实:把长期上下文放进一组普通文件里,例如一个 Obsidian vault,再让线程围着这套文件工作。这样一来,重要信息不会只挂在聊天记录里;团队可以照旧用 Git、云盘或其他同步层管理;记忆本身还是显式文件,随时能打开、修正、迁移;AGENTS.md 也能顺手规定什么该沉淀,什么只是噪音。

如果 shared memory 只是散乱笔记,过几周还是会找不到。真正值得沉淀的通常是:

  • 正在推进的项目与 owner。
  • 已做出的决策和原因。
  • 仍未关闭的 blocker。
  • 后续要追的 open loops。
  • 对人、项目和流程长期有用的稳定偏好。

原帖同时提到 Codex 自带的 memory 功能与 Chronicle 这类本地 recall 层。更稳的分工是:偏好、习惯和短期上下文留在这类一方记忆里;需要跨线程、跨成员复查的事实,仍然回到显式文件系统。团队协作时,这样更稳。

Skill 则负责把已经跑通的流程固定下来。同一个流程反复靠 prompt 描述,迟早会变形;打包成 Skill 后,才算变成能复用、能复查的工程资产。

移动端:让长任务不中断

移动端的价值很直接:人离开电脑,线程也不用停。你可以在 Mac 上启动一条依赖本地文件、权限和环境的线程,出门后在手机上看进度、批准下一步,或者临时补一句 Steering;回到桌前再顺着原线程继续做。

官方文档里提到的 floating pop-out window 也是同一路数:线程跟着工作位置走,人不用一直守在同一个窗口里。做长任务时,这比再加一个零碎功能更实在。它决定的是,你什么时候必须回到电脑前处理,什么时候只要做个判断就够了。

Automations 和 Goals,让线程在你离开后继续推进

先别急着写 automation,先弄清它到底是在固定时间新开一轮,还是回到原来的线程继续做。同样是定时任务,这两种用法差很多,选错了,后面就会一直觉得节奏不对。

先看个最直接的区分:

类型更像什么适合什么任务
Scheduled automation定时启动一个新的工作实例每日报表、固定巡检、周期性仓库检查
Thread automation定时唤醒同一条线程需要承接上轮上下文的持续性工作

第一次配置时,按下面三步走会稳一些:

  1. 先在普通线程里把 prompt(提示词)手动跑通,确认模型、工具、reasoning effort(推理强度)和生成出来的 diff(改动对比)都还在可审查范围内。
  2. 再让 Codex 创建或更新 automation,明确任务、运行频率,以及是留在当前线程,还是每次新开一轮。默认频率不合适就改成自定义 schedule,用 cron 表达式把节奏写清楚;如果项目在 Git 仓库里,也顺手决定跑在 local 还是 background worktree(后台独立工作树)。
  3. 排程后,结果会进 automations pane 里的 Triage(待处理收件箱)。独立运行的 automation 更像定时投递一份结果;thread automation 则会把原线程重新唤醒。前几次最好人工盯一眼输出,再回头收 prompt 或 cadence(运行频率)。很多 automation 跑偏,不是模型突然不行了,而是提示词铺得太散,或者频率设得太勤。

如果想从本文里的发布场景起步,一条 thread automation 的 prompt 可以先写成这样:

每隔 30 分钟检查这个 release thread 里提到的 Slack、PR 评论和相关邮箱。
如果有新的反馈,先归类成「阻塞发布」「需要确认」「可稍后处理」三类,
只汇报需要我决定的事项,并补一版可以直接发送的回复草稿。
如果没有重要更新,就保持安静,不要重复汇报。

还有两条限制很容易被忽略。第一,project-scoped automation 需要 Codex app 一直开着,对应项目也得在本机磁盘上能访问。第二,自动化会沿用默认 sandbox(沙箱权限范围):在 read-only 下,写文件、联网或操作桌面应用都会直接失败;开到 full access,又会把后台执行的风险抬高。比较稳妥的默认值通常是 workspace-write(只允许改动当前工作区),再配合 rules(命令放行规则)单独放行确实需要的命令。真要跑长任务时,也别忘了打开完成/审批通知,并启用 Prevent sleep while running(运行时防止睡眠),免得任务在后台被系统睡眠打断。

这类要先翻 Slack、Gmail、评论再补背景的活,最适合 thread automation。比如一个 Chief of Staff thread 每 30 分钟检查 Slack 和 Gmail,把未回复的问题、优先级和回复草稿准备好。等人回来时,最花时间的那一步通常已经做完了:来龙去脉梳理过了,优先级排过了,回复草稿也先起好了。

Goal 解决的是“什么时候可以停”,不是“隔多久提醒你再跑一次”。弱一点的写法只会说“照着这个 Markdown 文件把计划做完”;能落地的 Goal 会把结果和停线条件一起写明,例如:

把内部工具从 Python 迁移到 Rust,
直到新的实现通过全部单元测试为止。

一个能用的 Goal,至少要写清三件事:

  • outcome(目标结果):最终想得到什么结果。
  • stopping condition(停线条件):什么条件满足才算结束。
  • verifier(验证信号):什么信号能证明事情在变好。

原帖列出的 verifier 很实用:测试套件、benchmark、bug 复现、验证矩阵、端到端工作流。benchmark 在这里更适合当局部验证信号,而不是拿来报成绩。

如果这条自动化本身已经是固定流程,官方文档还建议把动作收进 skill,再在 automation prompt 里直接调用 $skill-name。这样后面要改流程时,改的是 skill 本身,不用把一长段提示词复制到每条 automation 里逐个重写。

没有 verifier,这种 Goal 最后常会停在一句方向没错、但谁也不知道何时算完成的话上。

Side Panel:让产物留在原地

side panel 好用的地方,在于工件不会离开生成它的线程。代码、Markdown、PDF、演示文稿、数据表、浏览器页面都可以留在旁边继续检查、标注和修改。

真正拖慢节奏的,常常不是生成本身,而是后面那轮搬运和交接。以往很多工作都要经历这样一圈:

  1. 先生成产物。
  2. 导出或发给别人。
  3. 在另一个窗口或另一个系统里审查。
  4. 把修改意见重新贴回任务上下文。

有了 side panel,这个回路会缩成同一个线程里的连续动作。大致就四类工作:

  • 查看产物(inspect artifacts)
  • 标注修改点(annotate changes)
  • 直接操作网页(operate web surfaces)
  • 审查变更(review changes)

放在文档、轻量网页、Storybook、浏览器幻灯片和数据应用这类产物上,这种方式尤其顺手,比“生成后再切出去看”省事得多。

一次真实任务怎样流过 Codex

拿一次版本发布举例会更直观。假设团队正在推进版本发布,外部 reviewer 在 Slack 里反馈预览页有问题。

任务流转

  1. 团队先有一条固定的 release thread,里面保存版本目标、回滚条件、已知风险和 reviewer 名单。
  2. thread automation 每隔一段时间检查 Slack 回复、PR 评论和相关邮箱。
  3. reviewer 在 Slack 里指出预览页文案有误、某个按钮间距不对。
  4. Codex 在同一线程里拉起 repo,定位改动点,并用 $browser 打开预览页确认是样式问题还是内容问题。
  5. 如果问题依赖登录态或浏览器上下文,就切到 @chrome;如果最后上传动作只能走桌面图形界面,再交给 @computer 收尾。
  6. 修复完成后,Goal 的 verifier 要落在测试通过、预览页检查通过;必要时再补一个端到端回归,不能停在“我觉得差不多了”。
  7. diff、预览页和待发送消息都留在 side panel 附近审查,用户可以直接 Steering 某个细节,或 Queuing 下一步动作。
  8. 这次发布过程中新增的决定、风险和 follow-up 再写回 shared memory,而不是散在聊天记录里。

这条发布链里,每个部件都只管自己那一段:线程保留现场,工具负责碰到实际表面,Goals 决定何时停,side panel 承接审查,shared memory 留下以后还要继续用的上下文。

采用顺序:不要一开始就追求全自动

用这类系统最容易踩的一个坑,是线程和验证器还没立住,就急着追求全自动。采用顺序可以先按下面这样排:

  1. 先建立一两条 pinned thread。选最常反复发生的工作流,例如 release review 或文档审稿,让上下文先固定下来。
  2. 再把 Steering 和 Queuing 用起来。先学会在任务进行中纠偏,不要只会在开头下一条 prompt。
  3. 然后扩工具边界。优先接入浏览器与业务系统,把“发现问题”到“开始处理”的断点打通。
  4. 最后再上 automations 与 Goals。线程结构没站稳前就让它自动跑,只会把混乱放大。

对应地,也有几类场景不该过度寄望于 Codex:

  • 你自己对目标系统几乎没有基本判断,无法分辨结果是偏了还是对了。
  • 任务要求每一步都做强审计留痕,且不能容忍 Agent 的中间不确定性。
  • 实时性极高,延迟本身就是主要成本,例如高频交易式操作。
  • 明明有稳定 API 或脚本入口,却仍然试图用 GUI 自动化取代一切。

工具边界越往外走,人越需要保留判断权,而不是把判断一起外包出去。

放回团队日常再看

把它放回团队日常,Codex 想补上的,其实是几处每天都会碰到的断点:问题从哪里冒出来,谁来接手,修完后怎么核对,隔天回来还能不能认出现场。代码改动只是这条链上的一环,前后的审查、记忆、排队和自动推进都得接上。

如果 durable threads、shared memory、Steering、Goals 这些基础件没站稳,Codex 很容易退回成一个会写 patch 的对话框。等这些部件真正连起来,它才更像一条能持续往前跑的工作线,而不是一次回答。

自测:你的 Codex 用到了第几层

读完这篇文章,可以拿下面几条对照一下自己现在的用法:

  • 你有没有至少一条固定的 pinned thread,专门管一件事(release review、文档审稿或日常巡检)?
  • 任务跑偏时,你是等它做完再改,还是中途直接用 Steering 纠偏?
  • 你是在原始 repo 里裸跑自动化,还是已经拆了 project 或 worktree 隔离沙箱?
  • 你的 automation 里有明确的 stopping condition 和 verifier 吗,还是只靠一句"把这件事做完"?
  • 你上一次审查产物,是在同一线程的 side panel 里完成的,还是导出到另一个窗口?
  • 跨线程共享的偏好、决策和 blocker,是落在显式文件里(比如 shared memory vault),还是散在聊天记录里?

如果前两条还不满足,建议先回到"采用顺序"里的第一步和第二步。后面四条可以在推进过程中逐步补齐。

常见问题

Q:Codex 和 Claude Code / Cursor 这类工具到底差在哪?

Codex 的差异主要不在"模型更强",而在它把持久线程、人在回路控制(Steering + Queuing)、automation 和 side panel 做进了同一个产品里。其他工具更偏重单次编辑体验,Codex 更偏重"把一条工作线从头到尾托住"。如果你大部分工作是"打开项目→改几处→提交",差异不大;如果你需要跨天、跨会话、跨工具协同,这个差别才会显出来。

Q:durable thread 和 pinned thread 是一回事吗?

不完全一样。pinned thread 是被你固定到侧边栏的线程,方便高频切回;durable thread 更强调线程本身跨会话保留上下文的能力。一条线程可以同时是 durable 且 pinned,也可以只 durable 但不 pin。基本做法是:先保证线程 durable(上下文不丢),再按频率决定要不要 pin。

Q:automation 跑偏了怎么办?

先别急着调模型。大多数跑偏是 prompt 铺得太散,或者频率设得太密。建议按三步排查:

  1. 先在普通线程里手动跑同一段 prompt,确认输出还在可审查范围内。
  2. 检查 scheduling type:是 thread automation(回到原线程续做)还是 scheduled(每次新开)——这两类节奏完全不同。
  3. 收紧 stopping condition 和 verifier,不要只靠一句模糊的"把这件事做完"。

Q:shared memory 用文件系统管理,和直接用 Codex 自带的 memory 功能怎么选?

不互斥。更稳的做法是:偏好、习惯和短期上下文留在 Codex 自带 memory 里;需要跨线程、跨成员复查的事实(决策记录、blocker、项目 owner)落在显式文件里,用 Git 或云盘管理。这样团队协作时不会出现"某条关键信息只挂在一个人的聊天记录里"的情况。

参考资料

继续阅读