Getting the Most Out of Codex:把 Codex 放进真实工作流
posts posts 2026-05-24T10:30:00+08:00基于 jxnlco 长帖与 OpenAI 官方文档,整理 Codex 的持久线程、Steering、自动化、shared memory 与 side panel,重点看它怎样把长任务留在同一条工作线上。技术笔记OpenAI, Codex, AI Coding Agent, 持久线程, 自动化本文基于 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 thread | Slack、邮件、会议纪要、待回复问题 | 这类信息最容易碎在不同工具里 |
| 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 / connectors | Slack、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 | 定时唤醒同一条线程 | 需要承接上轮上下文的持续性工作 |
第一次配置时,按下面三步走会稳一些:
- 先在普通线程里把 prompt(提示词)手动跑通,确认模型、工具、reasoning effort(推理强度)和生成出来的 diff(改动对比)都还在可审查范围内。
- 再让 Codex 创建或更新 automation,明确任务、运行频率,以及是留在当前线程,还是每次新开一轮。默认频率不合适就改成自定义 schedule,用 cron 表达式把节奏写清楚;如果项目在 Git 仓库里,也顺手决定跑在 local 还是 background worktree(后台独立工作树)。
- 排程后,结果会进 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、演示文稿、数据表、浏览器页面都可以留在旁边继续检查、标注和修改。
真正拖慢节奏的,常常不是生成本身,而是后面那轮搬运和交接。以往很多工作都要经历这样一圈:
- 先生成产物。
- 导出或发给别人。
- 在另一个窗口或另一个系统里审查。
- 把修改意见重新贴回任务上下文。
有了 side panel,这个回路会缩成同一个线程里的连续动作。大致就四类工作:
- 查看产物(inspect artifacts)
- 标注修改点(annotate changes)
- 直接操作网页(operate web surfaces)
- 审查变更(review changes)
放在文档、轻量网页、Storybook、浏览器幻灯片和数据应用这类产物上,这种方式尤其顺手,比“生成后再切出去看”省事得多。
一次真实任务怎样流过 Codex
拿一次版本发布举例会更直观。假设团队正在推进版本发布,外部 reviewer 在 Slack 里反馈预览页有问题。
任务流转
- 团队先有一条固定的 release thread,里面保存版本目标、回滚条件、已知风险和 reviewer 名单。
- thread automation 每隔一段时间检查 Slack 回复、PR 评论和相关邮箱。
- reviewer 在 Slack 里指出预览页文案有误、某个按钮间距不对。
- Codex 在同一线程里拉起 repo,定位改动点,并用 $browser 打开预览页确认是样式问题还是内容问题。
- 如果问题依赖登录态或浏览器上下文,就切到 @chrome;如果最后上传动作只能走桌面图形界面,再交给 @computer 收尾。
- 修复完成后,Goal 的 verifier 要落在测试通过、预览页检查通过;必要时再补一个端到端回归,不能停在“我觉得差不多了”。
- diff、预览页和待发送消息都留在 side panel 附近审查,用户可以直接 Steering 某个细节,或 Queuing 下一步动作。
- 这次发布过程中新增的决定、风险和 follow-up 再写回 shared memory,而不是散在聊天记录里。
这条发布链里,每个部件都只管自己那一段:线程保留现场,工具负责碰到实际表面,Goals 决定何时停,side panel 承接审查,shared memory 留下以后还要继续用的上下文。
采用顺序:不要一开始就追求全自动
用这类系统最容易踩的一个坑,是线程和验证器还没立住,就急着追求全自动。采用顺序可以先按下面这样排:
- 先建立一两条 pinned thread。选最常反复发生的工作流,例如 release review 或文档审稿,让上下文先固定下来。
- 再把 Steering 和 Queuing 用起来。先学会在任务进行中纠偏,不要只会在开头下一条 prompt。
- 然后扩工具边界。优先接入浏览器与业务系统,把“发现问题”到“开始处理”的断点打通。
- 最后再上 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 铺得太散,或者频率设得太密。建议按三步排查:
- 先在普通线程里手动跑同一段 prompt,确认输出还在可审查范围内。
- 检查 scheduling type:是 thread automation(回到原线程续做)还是 scheduled(每次新开)——这两类节奏完全不同。
- 收紧 stopping condition 和 verifier,不要只靠一句模糊的"把这件事做完"。
Q:shared memory 用文件系统管理,和直接用 Codex 自带的 memory 功能怎么选?
不互斥。更稳的做法是:偏好、习惯和短期上下文留在 Codex 自带 memory 里;需要跨线程、跨成员复查的事实(决策记录、blocker、项目 owner)落在显式文件里,用 Git 或云盘管理。这样团队协作时不会出现"某条关键信息只挂在一个人的聊天记录里"的情况。
参考资料
继续阅读
- OpenAI Codex:轻量级终端编程智能体完全指南:如果你更关心 CLI 安装、配置、安全模型和终端用法,先读这一篇。
- Superpowers 深度解析:把 AI 编程助手纳入软件工程流程:如果你想把 Codex 放进更严格的 brainstorming、worktree、TDD 与 review 流程里,这篇更直接。
- agentmemory:为 AI Agent 打造可搜索的持久化记忆系统:如果你对本文里的 shared memory 特别感兴趣,可以继续看持久记忆层怎么落到编码 Agent 上。