Codex 官方团队在 Getting the most out of Codex 里整理了一批使用建议。我结合自己的实际用法重新看了一遍,发现它们可以串成一套比较清楚的工作方式:先控制每个任务的上下文,再安排执行顺序,根据数据来源选择工具,最后决定哪些信息需要跨任务保留。

先控制每个任务的上下文

Codex 里一个对话叫作一个线程。左侧栏里的每个独立对话都是一个线程,线程之间不会共享对话信息。独立任务新开线程,可以避免无关内容挤进同一份上下文;上下文更集中时,Agent 也更容易沿着当前目标执行。

线程多了以后,长期使用的对话可以点击小钉子置顶。我自己有一个置顶线程,里面已经积累了小红书内容相关的信息,后续处理剪辑和选题时会继续进入这个线程。这样即使历史对话发生过压缩,已经保留下来的背景仍然可以继续使用。

左侧栏置顶的两个长期线程

输入需求时,如果本地没有安装其他语音输入工具,也可以使用输入框右下角的语音按钮。说完以后,Codex 会调用 OpenAI 的模型把语音转成文字。

语音输入转写出来的文字

我自己使用闪电说,按住右侧 Option 键就能触发;类似的工具还有 Talon 和 Whisper。对 vibe coding 来说,语音输入可以减少编写长提示词的时间,但任务是否清楚,仍然取决于转写后的目标、范围和验收条件是否完整。

任务执行期间再发送消息,新消息默认会进入队列。适合的做法是先让 Codex 实现代码,再把「完成后 review」作为下一条消息排进去。它完成第一项工作以后,会自动继续处理队列里的要求。

如果新消息需要马上影响当前任务,可以点击 Steer。Codex 会等当前工具调用结束,再把这条消息插入正在执行的过程。

排队中的消息和 Steer 按钮

根据任务选择成本更低的工具

Codex 已经内置联网调研和浏览器,也可以通过插件、MCP、Skill 与 CLI 扩展能力。选择工具时,我会先看目标信息在哪里:公开网页使用联网搜索,需要登录的网站使用浏览器,结构化服务优先使用对应的 MCP 或 CLI,只有没有更直接接口的桌面应用才交给 Computer use。

在 Plugins 里安装 Chrome 插件后,第一次打开会引导安装浏览器扩展。小红书、抖音这类需要登录才能读取的信息源,可以在输入框里使用 /Chrome,让 Codex 通过浏览器访问。普通公开资料只要在需求里明确提出调研,Codex 就会调用联网搜索工具,不需要再控制浏览器。

Plugins 里的 Chrome 插件

联网调研正在搜索

MCP 可以在设置里的 MCP servers 配置。我接入了 LangSmith、Supabase、MongoDB 等开发服务,让 Codex 直接读取外部信息。Skill 也可以搭配相关产品的 CLI,例如通过飞书 CLI 读取文档、发送消息。Computer use 则适合控制没有开放接口的应用,例如打开剪辑软件导出视频,但它属于自动化里的兜底方案。

设置里的 MCP servers

右侧内置浏览器还可以预览 HTML 和 Markdown 文件。生成报告或页面后,可以直接打开结果检查,并在具体位置添加标注评论。评论发送以后会进入左侧对话,让 Codex 根据可见位置继续修改。

右侧预览报告并添加标注

长任务要提供停止条件

队列可以衔接几个连续步骤;需要跨多轮持续执行的目标,可以使用 Goals。这个功能默认没有开启,需要在 Configuration 里打开配置文件,在 [features] 下设置:

[features]
goals = true

config.toml 里的 goals 配置

开启以后,在输入框里使用 /goal 发送目标,消息会显示 Sent as goal。Goal 会在 Agent 层面反复检查目标是否完成,没有达到终止条件时继续执行。

以 Goal 方式发送的消息

目标里需要写出可以验证的停止条件,例如报告必须覆盖哪些平台、包含哪些内容,或者项目必须通过哪些测试。只写一个宽泛方向,Codex 很难判断做到什么程度才算完成;把评估标准写清楚,它才能在长时间执行和上下文压缩后继续检查进度。

需要定时重复的工作更适合 Automations。任务可以从对话创建,也可以手动设置标题、运行时间、工作目录和项目。创建时要检查模型与思考程度,因为 Automation 的默认模型不一定和普通对话相同。我创建时看到的默认值是 GPT-5.4,而当时正常对话使用的是 GPT-5.5。右上角的 Use template 还提供了 bug 排查、汇总 Git 信息写日报等模板。

创建 Automation 时注意默认模型

人在外面时,可以通过 Codex mobile 远程控制电脑上的 Codex。这个移动端应用在国区无法下载,需要其他地区的账号。电脑端如果要长时间执行任务,可以在 General 里打开 Prevent sleep while running,避免运行期间休眠。

临时问题不要污染主线程

执行过程中遇到一个与主任务无关的问题,可以输入 /side 在右侧打开 Side chat。它能读取左侧已有的历史上下文,但右侧发送的消息不会写回左侧,因此适合临时比较工具、讨论一个分支问题,问完以后主线程仍然保持原来的任务结构。

右侧打开的 Side chat

Side chat 的模型可以独立选择,默认额度从左侧继承。它长时间不用会过期,过期后不能继续发送消息,也不会自动变成左侧的新线程,所以不适合存放长期任务。

跨线程信息使用文件管理

线程之间互相独立,但有些项目背景需要长期复用。官方文章推荐使用 Obsidian vault 管理跨线程记忆。从结构上看,vault 就是一个保存 Markdown 文件的目录。

官方文章里的 vault 目录结构

不用 Obsidian 也可以采用同样的做法:把需要复用的信息放进项目里的 Markdown 文件,新开线程后直接引用。代码库本身也是项目记忆的一部分,Agent 可以从现有代码重新确认业务逻辑。我给 Codex 接入飞书 CLI 也是相同思路,团队共享的信息留在云文档里,需要时再读取。

相比自动记忆,我更愿意自己管理这些文件。Codex 的 memory 可能把某个项目里的临时选择保存成长期偏好,时间久了很难知道其中混入了哪些无关内容。文件的范围和来源更容易检查,也能在不需要时直接从新任务里排除。

最后还有几项只影响使用界面的设置。Appearance 可以修改字体、文字颜色、背景色并开启桌面宠物;Personalization 可以选择友好或精简的回答方式;General 里的 Work mode 可以在写代码和日常工作之间切换。日常工作模式会减少脚本执行等代码细节的展示,界面更清爽。这些设置不改变任务本身的完成标准,但可以让长期使用时的信息密度更适合自己的工作方式。