已发布资料基础官方资料 + 个人实践
·19 分钟AI 工具实践
文章/AI 与智能体

Codex 写作工作流:从研究笔记到审稿、配图与发布

Codex 系列第 15 篇:用一篇真实技术文章贯穿 Article Brief、证据交接、分段起草、三遍审稿、内容专属配图、本地预览、部署门禁与线上验证,并提供可直接复用的模板、Prompt 和检查脚本。

文章目录
  1. 一分钟概览
  2. 1. 先改变完成定义:不是“写完”,而是“发布后可验证”
  3. 2. 一次性 Prompt 为什么容易得到“完整但不可靠”的文章
  4. 3. 把规则放在正确的位置
  5. 4. Article Brief:动笔前先写一页文章合同
  6. 4.1 先让 Codex 填 Brief,不要直接写长文
  7. 5. Research Handoff:不要让草稿重新发明一次调研
  8. 6. 大纲不是目录,而是文章的测试计划
  9. 7. 分段起草:让事实、例子和语气都能追踪
  10. 7.1 第一人称只能来自真实记录
  11. 7.2 为命令同时写成功和停止条件
  12. 8. 三遍审稿:不要让同一遍同时修事实、读者和语气
  13. 8.1 第一遍:事实与复现审稿
  14. 8.2 第二遍:无上下文读者测试
  15. 8.3 第三遍:Voice Audit
  16. 8.4 修改顺序
  17. 9. 配图:先写 Visual Plan,再调用作图 Skill
  18. 9.1 先选媒介,不要默认生成图
  19. 9.2 给作图 Skill 的输入应该包含什么
  20. 9.3 图片也要验收
  21. 10. 发布门禁:把主观确认和确定性检查分开
  22. 10.1 第一层:作者确认
  23. 10.2 第二层:仓库检查
  24. 10.3 第三层:浏览器预览
  25. 10.4 第四层:部署与生产冒烟
  26. 11. 八组阶段 Prompt 怎样使用
  27. 12. 哪些步骤适合沉淀成 Skill,哪些不要
  28. 13. 常见失败,以及应该退回哪一层
  29. 13.1 “同一个对话审自己”为什么不够
  30. 13.2 “所有 warning 都清零”也不是目标
  31. 13.3 “自动部署”应该最后考虑
  32. 14. Claude 与 Codex:相通的是工作流,不是文件名
  33. 15. 45-60 分钟跟做练习
  34. 0-10 分钟:填写 Brief
  35. 10-20 分钟:做可执行大纲
  36. 20-35 分钟:起草最关键的两节
  37. 35-45 分钟:做两遍审稿
  38. 45-52 分钟:填写 Visual Plan
  39. 52-60 分钟:运行发布前检查
  40. 16. 收藏清单
  41. 写之前
  42. 写的时候
  43. 审稿
  44. 配图
  45. 发布
  46. 写在最后
  47. 参考资料
  48. OpenAI 官方
  49. Claude / Anthropic 对照
  50. 写作方法参考
阅读提要

Codex 系列第 15 篇:用一篇真实技术文章贯穿 Article Brief、证据交接、分段起草、三遍审稿、内容专属配图、本地预览、部署门禁与线上验证,并提供可直接复用的模板、Prompt 和检查脚本。

#Codex#技术写作#工作流#内容审查#配图

这是 Codex 系列的第 15 篇。

前一篇完成了一份可引用的 research note。资料已经按 Claim 和 Evidence 整理好以后,下一步看起来很自然:

text
让 Codex 根据这些资料写一篇文章。

这句话能得到草稿,却很难稳定得到一篇可以公开的技术教程。

原因并不神秘。调研、搭结构、解释技术、校验事实、保持作者语气、设计配图、检查页面和执行部署,本来就是不同性质的工作。把它们塞进一个 Prompt,Codex 往往会优先完成最显眼的目标,也就是“产出一篇读起来完整的文字”;证据范围、失败路径、移动端图片和线上资源是否真的可用,则容易被流畅感盖过去。

这一篇解决的问题更具体:

怎样把一份 research note 交给 Codex,经过可检查的起草、审稿、配图和发布门禁,最终得到一篇读者能跟做、作者敢署名、上线后可以验证的技术文章?

贯穿全文的案例,就是这个系列刚刚发布的第 14 篇《Codex 做资料调研》。我会把它从研究笔记到 Cloudflare 上线的过程拆开,并保留一次真实的 Windows 部署失败,而不是给一条从不出错的理想流程。

项目说明
内容类型Codex 技术写作与博客发布实战
适合读者已经能使用 Codex,使用 Markdown / MDX 或代码仓库维护个人博客、团队文档的人
跟做前提一个可本地构建的内容仓库;Codex App、CLI 或 IDE 任一入口;Node.js 18+;Git;浏览器
阅读 / 练习时间速读约 15 分钟,完整阅读约 25 分钟,跟做约 45-60 分钟
可带走产物Article Brief、Voice Guide、Visual Plan、8 组阶段 Prompt、发布清单和结构检查脚本
贯穿案例第 14 篇 Codex 资料调研文章的起草、配图、审稿和 Cloudflare 发布
官方资料核对日期2026-07-22
已验证范围本博客 Markdown 工作流、仓库级审稿 Skill、Node 检查脚本、Next.js 构建、桌面/移动端预览和生产环境冒烟测试
不作承诺不保证同一套命令适用于所有 CMS、托管平台和团队审批流程;不把 AI 审稿当成人工署名责任的替代品

下载 codex-writing-pipeline-kit 示例包

示例包包含 Brief、语气、配图和发布模板,8 组可复制 Prompt,以及一份能检查 Markdown frontmatter、占位符、本地资源和长文结构的 Node.js 脚本。

版本说明

Codex 的入口、Skills、Slash Commands 和 Browser 能力仍在变化。本文涉及当前产品功能时,以 2026-07-22 的 OpenAI 官方文档为准;仓库命令和部署结果只代表这个博客项目。以后复用时,先重新读取项目 AGENTS.mdpackage.json 和托管配置,不要照抄部署命令。

一分钟概览

整条写作流水线可以压缩成八个有明确交付物的阶段:

text
Article Brief
    ↓  文章承诺、读者、边界
Research Handoff
    ↓  Claim、Evidence、未验证项
Executable Outline
    ↓  每节问题、动作、输出
Section Drafts
    ↓  分段正文与真实案例
Three-pass Review
    ↓  事实 / 读者 / 作者声音
Visual Plan
    ↓  截图、结构图、信息图或生成图
Preview & Gates
    ↓  内容检查、Lint、Build、桌面/手机
Publish & Smoke Test
       正文、资源、RSS、Sitemap、版本

图 1:Codex 技术文章从 Brief 到生产环境的交付流水线图 1:Codex 技术文章从 Brief 到生产环境的交付流水线

移动端可打开图 1 原始 SVG放大查看。

图 1 最重要的不是阶段数量,而是每个阶段都落盘一个产物。这样可以判断问题出在研究、结构、表达、视觉还是部署,不必在一篇不断被覆盖的“大草稿”里猜。

阶段最小交付物进入下一阶段的条件
Brief一页文章合同问题、读者、产物和非目标明确
ResearchClaim Register + Evidence Ledger核心主张有证据或明确标记 unverified
Outline可执行大纲每节都有问题、动作和验收
Draft分段正文不虚构经历、输出和测试
Review按优先级排列的发现P0 / P1 清零,重要 P2 已处理
VisualVisual Plan + 资源文件每张图回答一个读者问题
Preview检查记录结构、构建、桌面和手机通过
PublishURL + 部署版本 + 冒烟结果正文、资源、RSS、Sitemap 可访问

第一次阅读可以这样选:

  • 只想把 AI 草稿变得更可靠:重点看第 2、5、6 节。
  • 已经在代码仓库里写博客:重点看第 3、7、8 节。
  • 配图经常和内容脱节:重点看第 7 节。
  • 想直接复制工作流:下载示例包,再看第 9、11、13 节。

1. 先改变完成定义:不是“写完”,而是“发布后可验证”

如果任务目标只是“生成一篇 Markdown”,Codex 写到最后一个段落就完成了。博客作者真正需要的完成定义至少还包括:

text
文章承诺与正文一致;
时效性事实有日期和直接来源;
命令包含起点、预期输出和失败信号;
下载包与图片真的存在;
桌面和手机都能读;
构建没有把草稿意外放进公开路由;
部署完成后,正文、资源、RSS 和 Sitemap 都能访问;
作者本人确认观点、语气和公开边界。

所以我给 Codex 的目标不会是“写一篇高质量长文”,而会更像:

text
把 research note 整理成一篇面向已经会使用 Codex 的读者的实用教程。

读者在 45-60 分钟内应能完成一份最小可审稿的 Markdown 样稿:
它有完整骨架,并写完最关键、最容易失败的两个章节,
并使用模板跑通事实审查、配图规划、本地构建和部署前门禁。

最终交付:
1. draft: true 的文章;
2. 可下载的模板和检查脚本;
3. 内容专属白底配图;
4. 预检、Lint、Build 和读者审稿记录;
5. 未经作者确认,不执行部署。

这段话把“文字”降回了交付物的一部分。Codex 才会为下载包、测试和发布边界留出注意力。

2. 一次性 Prompt 为什么容易得到“完整但不可靠”的文章

常见的一次性 Prompt 是:

text
参考这些链接写一篇 5000 字 Codex 教程,技术笔记风,
加入例子、图片、总结和参考资料,不要像 AI。

它同时要求了资料选择、事实判断、结构设计、长文起草、风格模仿、配图和引用,却没有为任何一项定义验收标准。最后经常出现五类问题:

表面结果实际缺口
文末有参考资料正文关键句不知道由哪一条支持
章节很多读者仍不知道先执行哪一步
命令很多没有工作目录、输出和失败后的停止条件
图片很好看不能帮助理解正在讲的流程或边界
语气很顺作者没有做过的事被写成第一人称经验

“不要像 AI”也不是可执行的写作规范。它没有说明哪些句式、段落和判断不属于作者,只会让模型随机降低某些高频表达。

更稳妥的做法是把任务拆成多个上下文角色,并让每个角色只回答一个问题:

text
作者上下文:我想说什么,我愿意承担什么判断?
研究上下文:哪些主张有证据,适用范围是什么?
编辑上下文:读者能否看懂、跟做和验收?
视觉上下文:哪种图能减少当前认知负担?
工程上下文:文件、构建、页面和部署是否真的工作?

这里不一定需要五个模型或五个 Agent。关键是不同阶段使用不同输入、输出和验收,不让“继续润色”成为万能指令。

3. 把规则放在正确的位置

写作工作流会同时用到 AGENTS.md、Article Brief、Voice Guide、Skill 和脚本。它们不是同一种文件的不同写法。

图 2:项目规则、文章合同、审稿 Skill 与确定性脚本的职责分层图 2:项目规则、文章合同、审稿 Skill 与确定性脚本的职责分层

移动端可打开图 2 原始 SVG放大查看。

载体应该放什么不应该放什么
AGENTS.md博客定位、分类、frontmatter、来源政策、通用写作与工程规则某一篇文章的完整资料和临时大纲
Article Brief本文读者、承诺、非目标、案例和发布合同所有文章都要重复的项目规则
Voice Guide可观察的句式、结构、Good / Bad 对照和禁用表达凭据、未公开经历、可用于冒充作者的完整个人画像
Review Skill固定审稿步骤、优先级、输出格式和辅助脚本每次都会变化的主题事实
Research NoteClaim、Evidence、冲突、实验和引用候选没有证据的完整正文
检查脚本frontmatter、文件存在、构建、链接和状态这类确定性规则“文章是否真诚”“是否值得收藏”这类主观判断

OpenAI 当前文档说明,Codex 会按全局、项目根目录到当前工作目录的顺序读取 AGENTS.md,越靠近当前目录的指导越晚加入,也就能覆盖较早的规则。OpenAI:Custom instructions with AGENTS.md

Skills 则适合可重复调用的工作流。一个 Skill 可以包含 SKILL.md 以及可选的 scripts/references/assets/;Codex 先看到名称、描述和路径,匹配到任务后再加载完整内容。OpenAI:Build skills

这也是为什么我把“技术文章审稿”做成仓库级 review-technical-article Skill,却没有把整篇文章的资料全部塞进 Skill:

text
审稿步骤会重复,所以做成 Skill;
文章事实会变化,所以留在 research note;
博客规则长期有效,所以放进 AGENTS.md;
是否发布影响外部状态,所以保留人工门禁。

容易混淆的一点

Codex CLI 当前内置的 /review 主要用于审查工作树改动;本文的“文章审稿”使用的是项目自定义 Skill,不要把两者当成同一个功能。OpenAI:Developer commands

4. Article Brief:动笔前先写一页文章合同

Brief 不需要漂亮,但必须能回答六个问题:

  1. 这篇只解决什么问题?
  2. 谁能在没有隐藏前提的情况下跟做?
  3. 读者最终得到什么文件、配置或结果?
  4. 哪些事实需要证据和日期?
  5. 哪些内容明确不讨论?
  6. 发布后怎样确认结果正确?

第 14 篇的 Brief 核心可以压缩成:

字段实际填写
问题怎样把 X、GitHub、官方文档和本地实验整理成可引用 research note?
读者会使用 Codex,准备写技术文章或做工具选型的人
产物Research note 模板、Evidence Ledger、Prompt、示例 JSONL 和检查脚本
真实案例“Codex 到底能不能联网?”
非目标不验证所有模型、provider、账号、企业策略和 MCP 网络行为
发布验收正文、三张 SVG、ZIP、RSS、Sitemap 均可访问

这里的“非目标”非常重要。没有它,后面的写作阶段很容易为了完整感,擅自补上并未验证的 MCP 或 provider 结论。

示例包里的 article-brief-template.md 还包含一个 Claim Register:

markdown
| ID | 准备写进正文的主张 | 需要什么证据 | 当前状态 | 范围 / 日期 |
| --- | --- | --- | --- | --- |
| C01 | 常规本地会话的 Web Search 默认使用 cached | 当前官方配置文档 | supported | 2026-07-22 |
| C02 | 所有 provider 下 `--search` 表现一致 | 跨 provider 官方承诺或测试 | unverified | 不进入结论 |

这张表让“写不写”在起草前就有答案。Codex 不必到了正文里才临时决定一句话应该有多确定。

4.1 先让 Codex 填 Brief,不要直接写长文

text
根据现有 research note 填写 article-brief-template.md。

要求:
- 用一句话说明读者在 45-60 分钟内能完成什么;
- 把时效性主张列成 Claim Register;
- 区分官方事实、社区观察、作者判断;
- 明确不讨论的范围;
- 证据不足时标记 unverified,不补写结论。

先提交 Brief 给我检查,不要直接起草文章。

作者在这里需要做第一次人工判断:主题是否值得写,承诺是否过大,案例是否真的能公开。这个判断没有必要自动化。

5. Research Handoff:不要让草稿重新发明一次调研

上一阶段已经有 research note,起草时就不应该再次从搜索结果开始。交接包至少包含:

text
Article Brief
Claim Register
Evidence Ledger
可引用表述
未验证项
真实实验记录
需要脱敏的原始材料

我会给起草阶段这样的约束:

text
只使用 research note 中 supported 或 partially_supported 的 Claim。

partially_supported 必须保留范围词;
unverified 只能进入“尚未确认 / 限制”部分;
不得只根据搜索摘要补充新事实;
如果正文需要 note 中没有的事实,先回到研究阶段追加证据,
不要在草稿里留下一句看起来合理的答案。

这样做还有一个容易忽略的好处:可以判断哪一次修改改变了事实。

如果编辑阶段只是把一句话写得更顺,就不应改变 Claim 状态;如果它删掉了“在本文环境中”“截至 2026-07-22”这类范围词,就已经不是语言修改,而是事实范围扩大,必须退回事实审查。

6. 大纲不是目录,而是文章的测试计划

我以前也会让 Codex 先给“详细大纲”,结果经常得到:

text
1. 背景介绍
2. 核心概念
3. 实践方法
4. 最佳实践
5. 总结与展望

这只说明文章有五个容器,没有说明读者怎样前进。

可执行大纲要求每一节补齐五个字段:

字段问题
Reader Question读者读到这里正在困惑什么?
Evidence使用哪条 Claim、来源或真实输出?
Action读者需要执行或判断什么?
Expected Output完成后应该看到什么?
Failure Signal什么现象说明不能继续?

例如本文的“发布与线上验证”不是一个抽象章节,而是:

text
Reader Question:Build 通过是否等于发布成功?
Evidence:Cloudflare 部署输出、生产 URL、资源响应、RSS、Sitemap。
Action:部署后分别请求五类资源。
Expected Output:全部 200,正文包含标题,RSS/Sitemap 包含 slug。
Failure Signal:Worker 成功但资源 404,或 RSS 仍没有文章。

这时大纲已经像测试计划。正文只是在解释为什么做、怎样做和遇到失败怎么办。

7. 分段起草:让事实、例子和语气都能追踪

长文不适合一次生成后不断“整体润色”。更可控的方式是按大纲逐节起草,每一节只带必要上下文:

text
本文 Brief
本节对应的 Claim 与 Evidence
上一节结尾
Voice Guide 中与本节有关的规则
本节需要展示的真实文件或命令

Prompt 可以写成:

text
只起草第 6 节“发布门禁”。

先解释 Build、Deploy 和 Production Smoke Test 的区别,
再使用本博客的 npm scripts 给出命令、预期输出和停止条件。

不要虚构成功输出。只能使用我提供的运行记录;
如果记录不足,保留“尚未运行”状态。
延续现有技术笔记语气,不写营销式结尾。

7.1 第一人称只能来自真实记录

下面两句看起来都自然,但证据地位完全不同:

text
我部署时遇到了 `.open-next` 被占用的 EPERM。
你在 Windows 上部署时一定会遇到 `.open-next` 被占用。

第一句是一次可展示的本地经历;第二句把局部观察扩大成普遍规律。

第 14 篇真实发布时,OpenNext 在清理旧 .open-next 目录时收到 Windows EPERM。检查后发现本地预览留下的项目 Node / Workerd 进程仍占用目录;停止这些项目进程后重试,构建和上传成功。这个案例能支持的结论是:

Windows 上若 OpenNext 在初始化输出目录时出现 EPERM,先检查同一项目的预览进程和文件占用;它不是 Cloudflare 已经上传一半的证据。

它不能支持“OpenNext 在 Windows 上无法部署”或“所有 EPERM 都来自预览进程”。把边界写清,真实经历才有教程价值。

7.2 为命令同时写成功和停止条件

只给命令:

powershell
npm run build

读者不知道怎样判断完成。更完整的写法是:

text
工作目录:博客仓库根目录
命令:npm run build
成功信号:退出码 0,新文章 slug 出现在生成路由中
停止条件:TypeScript、内容检查或静态页面生成报错
下一步:成功后进入浏览器预览;失败时不执行 deploy

这四行比再增加三个“提升写作效率”的段落更值得收藏。

8. 三遍审稿:不要让同一遍同时修事实、读者和语气

图 3:事实、读者与作者声音三遍审稿及其发布门禁图 3:事实、读者与作者声音三遍审稿及其发布门禁

移动端可打开图 3 原始 SVG放大查看。

一篇技术文章至少需要三种镜头。顺序也有意义:先确保没有把错误写得更漂亮,再处理阅读体验,最后校准作者声音。

8.1 第一遍:事实与复现审稿

这一遍只提取可验证主张:

  • 产品名称、入口和可用范围;
  • 版本、日期、命令和配置字段;
  • 权限、网络、部署和删除行为;
  • “已经测试”“可以复现”“所有用户”一类强表述;
  • 引用是否直接支持旁边的句子。

输出不是一版润色稿,而是按严重程度排列的发现:

text
[P1] C02 仍为 unverified,但正文写成了全局结论。
[P2] npm run build 缺少工作目录与成功信号。
[P2] GitHub issue 只证明有人报告,不能单独证明官方缺陷。
[P3] 同一条官方链接在相邻两段重复。

本博客的 review-technical-article Skill 还会先运行结构预检,再检查文章合同、事实、复现、实用价值和阅读结构。Skill 能让审稿步骤稳定,但不能自己证明外部事实;时效性结论仍要回到官方来源。

8.2 第二遍:无上下文读者测试

作者和起草 Agent 都知道太多背景,容易自动补全文章没写的步骤。读者测试应尽量使用新任务或干净上下文,只提供:

text
文章正文
下载包
目标读者定义

然后让它回答:

  1. 开始前要准备什么?
  2. 45-60 分钟后应该得到什么?
  3. 最可能卡在哪一步?
  4. 哪些命令缺少输入、输出或失败信号?
  5. 哪些段落读完不会改变行动或判断?
  6. 收藏后,实际会回来复用哪一项?

Anthropic 开源的 doc-coauthoring Skill 也把 Reader Testing 单独作为一个阶段,强调让没有前文上下文的读者检查盲点。Anthropic:doc-coauthoring Skill

这里真正可迁移的不是某个 Claude 命令,而是用新上下文暴露作者脑内补全。Codex 完全可以采用同样的方法。

8.3 第三遍:Voice Audit

Voice Audit 不负责“把所有句子改得像某位作者”,而是检查:

  • 套路化开头和总结;
  • 连续使用同一种对仗句式;
  • 没有证据的强确定语气;
  • 为了显得个人化而虚构经历;
  • 模仿参考文章,却不属于当前作者的口头禅;
  • 本来有具体选择,却被改成了抽象方法论。

Ruben 的两篇写作指南提供了一个有用启发:把语气偏好、厌恶表达、Good / Bad 示例和判断规则整理成可复用文本。Anthropic 的开源 Skills 仓库则展示了另一层做法:把会重复执行的流程组织成包含 SKILL.md、references 和脚本的目录。Ruben:I can be youRuben:It's not [X], it's [Y]anthropics/skills

这两者不应混成一个巨大的“作者人格文件”。表达偏好可以先做成仓库中的最小 Voice Guide;只有当审稿步骤稳定、会在多篇文章里重复时,再把流程封装成聚焦的 writing / review Skill。

我不会直接复制这个做法的全部强度。一个包含完整身份、联系人、私人经历和表达特征的文件,也会提高泄露和冒充风险。博客仓库里更适合保存的是最小 Voice Guide:

text
文章如何开头;
哪些句式经常被我删掉;
怎样表达不确定性;
什么样的例子算具体;
3-6 组来自自己旧文的 Good / Bad 对照;
哪些私人材料绝不进入仓库。

语气文件应帮助作者少做重复纠正,而不是把作者变成一套永远不变的句式。

8.4 修改顺序

三遍审稿发现不要混在一起修改:

text
P0 / P1 事实与安全
    ↓
影响复现和读者行动的 P2
    ↓
结构与删减
    ↓
语气和局部表达
    ↓
重新跑事实与结构检查

如果 Voice Audit 改变了范围词、命令或结论,就必须回到第一遍,不应把它当作纯语言修改。

9. 配图:先写 Visual Plan,再调用作图 Skill

“文章都是文字,加几张图”会得到装饰图;“把文章内容画成一张流程图”会得到拥挤框图。更有效的问题是:

text
读者在这一段为什么需要图?

示例包的 visual-plan-template.md 要求每张候选图先填写:

字段示例
Reader Question为什么一篇文章要做三遍审稿?
One Message事实、读者、语气发现的性质不同,顺序不能颠倒
Medium白底结构图
Must Show三种镜头、进入条件、回退关系、人工门禁
Must Avoid把所有检查画成相同卡片;用颜色代替文字
Acceptance900px 桌面和 360px 手机下核心信息可读

9.1 先选媒介,不要默认生成图

内容首选媒介原因
真实后台、错误和部署结果截图证明界面或输出真的存在
流程、边界、依赖和比较SVG / 图解文字、连线和布局可控
多个要点的扫描与记忆信息图能建立视觉层级
概念、场景、封面氛围生成图不要求精确小字和结构
代码已经最清楚不配图避免视觉重复

OpenAI 当前的 Codex 用例建议先用 ImageGen 探索视觉方向,再把最终图片作为附件交给 Codex;实现页面后,再用 Playwright 在真实浏览器中验证。OpenAI:Get from idea to proof of concept

这套顺序同样适合文章配图:

text
Visual Plan → 生成 / 绘制 → 插入正文 → 浏览器查看 → 针对问题迭代

不要在图片生成后才临时寻找一个可以塞进去的段落。

9.2 给作图 Skill 的输入应该包含什么

无论使用 baoyu infographic、ImageGen、tldraw 还是手写 SVG,Prompt 至少包含:

text
用途:技术文章正文图 2,不是封面。
读者问题:AGENTS.md、Brief、Skill、Research Note 和脚本怎样分工?
核心信息:长期规则、单篇合同、可重复流程、证据和确定性检查属于不同层。
画布:16:9,白色背景,桌面和手机都要可读。
风格:技术笔记信息图,深色正文,蓝 / 绿 / 橙只表示职责层。
必须出现:五种载体、输入输出关系、人工发布门禁。
避免:深色底、渐变光效、同构卡片、装饰机器人、无法校验的小字。
输出:SVG 或高分辨率 PNG;同时给 Alt 和图注草稿。

9.3 图片也要验收

图片进入文章前至少检查:

  • 技术文字、版本和箭头是否正确;
  • 是否真的与邻近段落互相引用;
  • 手机宽度下还能看出核心结构;
  • Alt 描述信息,而不是写“配图如下”;
  • 图注解释这张图为什么值得看;
  • 截图是否泄露账号、Token、路径或未公开内容;
  • 如果是生成图,是否出现错误文字、重复图标或不可能的连接。

正文里的结构图还提供原始 SVG 链接,是因为文章列宽中的缩略图不一定适合阅读全部小字。这个小动作比继续增加分辨率更直接。

10. 发布门禁:把主观确认和确定性检查分开

图 4:从草稿到线上文章的四层发布门禁图 4:从草稿到线上文章的四层发布门禁

移动端可打开图 4 原始 SVG放大查看。

发布不是最后一个按钮,而是四层不同性质的门禁。

10.1 第一层:作者确认

这几项必须由作者本人确认:

text
我是否同意文章的核心判断?
第一人称经历是否真实?
是否公开了不该公开的个人或项目信息?
引用和图片来源是否可接受?
标题、摘要和封面是否准确代表正文?

在作者确认前,文章保持:

yaml
draft: true

10.2 第二层:仓库检查

这个博客的命令来自 package.json,不是通用 Codex 命令:

powershell
# 博客仓库根目录
npm run content:check
npm run lint
npm run build

三者检查的对象不同:

命令主要回答
content:checkfrontmatter、资源和内容约束是否一致?
lint代码与组件是否满足静态规则?
build新文章和页面能否进入真实生产构建?

示例包的脚本还可以单独运行:

powershell
node examples/codex-writing-pipeline-kit/scripts/check-article.mjs `
  content/blog/your-post.md `
  --json

准备公开时增加 --publish。它会要求 draft: false,并把未清理占位符作为错误:

powershell
node examples/codex-writing-pipeline-kit/scripts/check-article.mjs `
  content/blog/your-post.md `
  --publish `
  --json

脚本不会判断引用是否真实,也不会给“文章质量 92 分”。确定性检查通过,只说明文件结构一致。

10.3 第三层:浏览器预览

Build 通过仍不能发现所有阅读问题。启动项目预览后,至少检查两个视口:

text
桌面:1440 × 900
手机:390 × 844

需要看:

  • 标题、摘要和元数据是否拥挤;
  • 表格和代码块是否横向截断;
  • SVG、PNG、GIF 是否空白或被裁切;
  • 图片小字是否在正文列宽中仍可辨认;
  • 目录锚点、内部链接和下载按钮是否可点击;
  • 控制台是否出现与当前文章相关的错误。

这里适合使用 Playwright,因为它能在真实浏览器中固定视口、截图和检查链接。视觉“舒服不舒服”仍要人看,但页面是否溢出、资源是否 404 可以重复验证。

10.4 第四层:部署与生产冒烟

部署会改变外部状态。即使 Codex 已经有执行权限,也应该先汇总:

text
本次公开哪些文章;
哪些文件会被上传;
预检、Lint、Build 是否通过;
还有哪些 warning;
目标域名和回滚入口;

作者明确确认后,再执行项目真实部署命令。OpenAI 的安全文档把 Sandbox 与 Approval 分开处理:本地可写范围和高影响动作是否需要确认,是两个控制面。OpenAI:Agent approvals & security

第 14 篇部署成功后,我没有停在 Wrangler 的 Current Version ID,而是继续检查:

powershell
$article = Invoke-WebRequest 'https://example.com/article/your-slug' -UseBasicParsing
$asset = Invoke-WebRequest 'https://example.com/media/your-kit.zip' -UseBasicParsing
$rss = Invoke-WebRequest 'https://example.com/rss.xml' -UseBasicParsing
$sitemap = Invoke-WebRequest 'https://example.com/sitemap.xml' -UseBasicParsing

[pscustomobject]@{
  ArticleStatus = $article.StatusCode
  TitlePresent = $article.Content.Contains('你的文章标题')
  AssetStatus = $asset.StatusCode
  AssetBytes = $asset.RawContentLength
  RssHasSlug = $rss.Content.Contains('your-slug')
  SitemapHasSlug = $sitemap.Content.Contains('your-slug')
}

这里故意同时检查状态码和内容。一个返回 200 的错误页,仍然不是文章上线成功。

11. 八组阶段 Prompt 怎样使用

示例包的 prompts.md 已经给出完整版本。这里保留使用顺序和每组 Prompt 的停止条件:

阶段Prompt 目标停止条件
0读取项目规则和命令不创建文章、不部署
1填 Article Brief作者确认承诺后才继续
2生成可执行大纲每节有动作、输出和失败信号
3分段起草发现证据缺口就退回研究
4事实与复现审稿先报 findings,不直接润色
5无上下文读者测试只用正文和下载包
6Voice Audit不改变事实范围
7Visual Plan先选媒介,再生成图片
8发布门禁作者明确确认后才部署

这套 Prompt 不追求“万能”。它的价值是让每个阶段都有可观察的退出条件,不会因为 Codex 还能继续写,就一直在同一任务里滚动修改。

12. 哪些步骤适合沉淀成 Skill,哪些不要

OpenAI 当前 Best Practices 建议:当同一个 Prompt 或同一种纠正不断重复时,可以把它整理成 Skill;每个 Skill 聚焦一个工作,先从少数真实用例开始,再逐步增加脚本和资源。OpenAI:Best practices - Turn repeatable work into skills

在这条写作流水线中,我会这样划分:

工作载体原因
技术文章事实 / 实用性审稿review-technical-article Skill步骤稳定、跨文章重复、输出格式明确
博客分类、frontmatter、语气基线AGENTS.md项目长期规则,所有任务都应看到
本文 Claim 和引用Research Note主题专属,变化快
图片视觉语言作图 Skill + Visual Plan作图能力可复用,单图信息必须按内容变化
frontmatter 和本地资源检查Node 脚本规则确定,应该重复执行
是否公开这篇文章人工门禁涉及观点、隐私、署名与外部状态

我不会急着做一个“自动写完并发布博客”的巨型 Skill。它把研究、创作、审稿、视觉和部署耦合在一起,一旦失败,很难知道是 Skill 触发、事实证据、文章判断还是发布权限出了问题。

更好的演进路线是:

text
先手动跑通一篇真实文章
    ↓
记录反复出现的纠正
    ↓
把一个稳定环节做成 Skill 或脚本
    ↓
用下一篇文章验证
    ↓
再决定是否需要更上层的编排

13. 常见失败,以及应该退回哪一层

失败不要做什么应该退回
正文出现新事实但 note 没有让 Codex“合理补全”Research Handoff
章节很多但读者不知下一步继续加总结Executable Outline
命令可复制但没有成功信号只补更多命令Section Draft
审稿只说“整体不错”让它直接重写全文Review Contract
图片与段落重复再生成一张更漂亮的Visual Plan
Build 通过但手机表格溢出直接部署Browser Preview
Deploy 命令成功但 ZIP 404把 Worker ID 当完成Production Smoke Test
风格像参考作者而不像自己增加更多参考文章Voice Guide + 人工编辑

13.1 “同一个对话审自己”为什么不够

同一任务中的 Codex 已经知道作者意图、资料来源和曾经删掉的内容。它可能像作者一样自动补全缺失步骤。至少在读者测试阶段,使用新任务或明确的无上下文输入更有效。

13.2 “所有 warning 都清零”也不是目标

外部站点可能因登录、403、限流或反爬无法自动检查。合理做法是记录 warning、判断它是否影响核心主张,并在必要时手动打开。为了让 CI 变绿而删除重要引用,反而损害文章。

13.3 “自动部署”应该最后考虑

当文章仍在频繁修改,自动部署只会放大错误。先稳定内容合同、检查脚本和回滚路径,再讨论定时发布或无人值守流程。下一篇团队化教程会继续讨论共享规则和权限,而不是在这里提前把全部外部动作自动化。

14. Claude 与 Codex:相通的是工作流,不是文件名

Claude 的项目指令和 doc-coauthoring Skill,与 Codex 的 AGENTS.md、Skills 和项目任务不是逐项同名映射,但底层问题相通:

需要解决的问题Codex 中的做法Claude 中可参考的做法
项目长期规则AGENTS.mdProject instructions / CLAUDE.md
可重复流程Agent SkillAgent Skill
表达校准Voice Guide + 示例Voice / style Skill 或项目指令
读者盲测新任务 + review Skillfresh Claude / doc-coauthoring Reader Testing
确定性检查仓库脚本与 Build脚本、hooks 或项目命令

真正可迁移的是四个原则:

  1. 长期规则与单篇上下文分开;
  2. 主观写作与确定性检查分开;
  3. 起草者与无上下文读者分开;
  4. 生成内容与公开发布权限分开。

因此不需要先决定“Claude 更会写”还是“Codex 更会写”。如果文章本身就存放在代码仓库、需要生成资源、运行脚本、检查页面并部署,Codex 的工程上下文会很自然;如果团队已经在 Claude Projects 中积累了风格和资料,也可以继续使用,然后把结构化产物交回仓库。接口可以变化,交付物不要只存在聊天记录里。

15. 45-60 分钟跟做练习

目标:把一份已有资料或一次真实踩坑,整理成一篇 draft: true 的最小可审稿样稿,并停在部署前。这里的“最小”指完整大纲已经建立,但正文只要求写完最关键、最容易失败的两个章节;其余章节保留 Reader Question、Action、Expected Output 和 Failure Signal,便于下一轮继续扩写。

0-10 分钟:填写 Brief

复制 article-brief-template.md,只填写:

  • 问题;
  • 读者;
  • 一句话承诺;
  • 真实案例;
  • 3 个 Claim;
  • 一个明确非目标。

验收:一句话承诺必须包含时间、产物和确认方式。

10-20 分钟:做可执行大纲

规划 4-6 节。每节写 Reader Question、Action、Expected Output 和 Failure Signal。

验收:删除章节标题后,仅看这四个字段也能理解操作顺序。

20-35 分钟:起草最关键的两节

不要从背景开始。优先写:

  1. 读者真正要执行的一节;
  2. 最常失败的一节。

验收:命令或操作包含起点、预期结果和停止条件。

35-45 分钟:做两遍审稿

先做事实与复现审稿,再开一个新任务做无上下文读者测试。

验收:至少修复一个证据范围问题和一个隐藏前提。

45-52 分钟:填写 Visual Plan

只规划 1-2 张必要图片。允许结论是“这篇不需要生成图”。

验收:每张图有一个 Reader Question、Alt 和移动端检查方式。

52-60 分钟:运行发布前检查

powershell
node examples/codex-writing-pipeline-kit/scripts/check-article.mjs `
  path/to/your-post.md `
  --json

再运行项目自己的内容检查和 Build。此练习保持 draft: true,不执行部署。

最终应留下:

text
1 份 Article Brief
1 篇最小 draft(完整骨架 + 两个关键章节)
1 份审稿 findings
1 份 Visual Plan
1 次结构 / 构建检查记录

16. 收藏清单

写之前

  • 问题、目标读者、时间成本和可带走产物明确。
  • Article Brief 写清非目标和发布验收。
  • Claim Register 区分 supported 与 unverified。
  • 项目规则来自当前 AGENTS.md,命令来自当前仓库。

写的时候

  • 大纲按读者动作排列,不使用空泛容器标题。
  • 分段起草,只携带本节需要的证据和语气规则。
  • 第一人称经历来自真实记录。
  • 命令包含工作目录、预期输出和停止条件。

审稿

  • 事实与复现审稿先于语言润色。
  • 用无上下文任务测试隐藏前提。
  • Voice Audit 不改变事实范围。
  • P0 / P1 清零,重要 P2 已处理。

配图

  • 每张图先填写 Reader Question 和 One Message。
  • 真实界面用截图,精确流程用结构图,生成图不承担复杂小字。
  • Alt、图注、来源、脱敏和移动端检查完整。

发布

  • 作者确认后才把 draft 改为 false
  • 内容检查、Lint、Build 和浏览器预览通过。
  • 部署前明确目标、影响和回滚入口。
  • 线上检查正文、资源、RSS、Sitemap,并记录部署版本。

写在最后

Codex 最有价值的地方,不是替我跳过写作,而是把原本散落在脑子里的工作变成可以检查的文件:Brief 说明承诺,research note 约束事实,大纲定义读者路径,review findings 暴露盲点,Visual Plan 解释为什么需要图,脚本和浏览器证明页面能够工作。

这条流程确实比一句“帮我写一篇长文”慢。但它把时间花在了以后最难补救的地方:错误事实、隐藏前提、虚构经验、无效配图和发布事故。

一篇值得收藏的教程不只是信息多。它应该让读者下次遇到同类问题时,能拿出一个模板、一条命令或一个判断标准,少重新摸索一次。

下一篇会进入系列第 16 篇:Codex 团队化:怎样共享 AGENTS.md、Skills、项目规则与发布边界。重点不再是个人怎样跑通流程,而是多人怎样避免规则漂移、Skill 失控和“每个人都有一套 Prompt”。

参考资料

OpenAI 官方

Claude / Anthropic 对照

写作方法参考

Ruben 的文章用于参考“把风格偏好写成可复用文本”和“识别 AI 高频句式”这两个选题,不作为 Codex 产品行为的证据;本文的工作流、案例、发布记录和模板均按当前博客实践重新组织。