ORANGE BOOK · CODEX

第十二章 自动化与定时任务

12.1 一个让人偷懒的故事

我有个朋友做投资,每天早上 7 点起床第一件事是打开 10 个网站、20 个公众号,看一遍昨天的市场新闻、政策动向、研报摘要。一小时过去,他才能开始真正的工作。

他用 Codex 之后,做了三件事:

  1. 写了一个 Skill 叫"morning-brief",定义"每天该看哪 30 个信息源、按什么标准筛选、生成什么格式"
  2. 设了一个 Automation,每天早上 6:00 自动跑这个 Skill
  3. 让结果进入 Triage,每天 7:00 他打开手机就看到一份个人简报

现在他每天早上多了 50 分钟。他用这 50 分钟健身,体脂从 22% 降到 16%

这一章讲的就是这种"让 AI 替你定时干活"的能力——Automations。

12.2 什么是 Automation

Automation 是 Codex 的"定时任务"机制。

简单说:你定义一个任务(比如"读取昨天的销售数据并生成日报"),设定触发条件(比如"每天早上 8 点"),Codex 就会自动执行,结果送到你的 Triage 收件箱。

跟 cron 任务的本质区别:

cron 任务 Codex Automation
写法 写 Shell 脚本 写自然语言描述(或调用 Skill)
灵活性 死板 AI 能根据上下文调整
错误处理 自己写 AI 会自己重试、自我纠错
输出 文件 / 邮件 Triage 收件箱 + 多种格式
谁能用 程序员 任何人

12.3 一个 Automation 的三个组成

┌─────────────────────────────────┐
│ 触发器(When)                   │
│ ── 什么时候跑                    │
└─────────────┬───────────────────┘
              │
              ▼
┌─────────────────────────────────┐
│ 任务(What)                     │
│ ── 做什么、怎么做、用哪些 Skills  │
└─────────────┬───────────────────┘
              │
              ▼
┌─────────────────────────────────┐
│ 交付(Where)                    │
│ ── 结果去哪儿(Triage / 邮件 / 文件)│
└─────────────────────────────────┘

12.4 触发器:什么时候跑

Codex 支持几种触发方式:

时间触发

最常见。支持:

  • 每天某时(每天 8:00)
  • 每周某天某时(每周一 9:00)
  • 每月某日某时(每月 1 日 10:00)
  • Cron 表达式(高级用户)

事件触发

  • 文件夹有新文件(监控 ~/Downloads/)
  • 收到符合条件的邮件
  • 某个网页有更新
  • GitHub 有新 PR

链式触发

  • 上一个任务完成后触发
  • 某个外部 webhook

手动触发

  • 你随时可以点"立即运行一次"

新手主要用时间触发,先把"每天/每周固定动作"自动化。

12.5 任务:做什么

任务可以是:

形式 1:自然语言描述

读取 ~/Documents/work-log/ 里今天的日记,
生成一份"今日总结",按"完成 / 卡点 / 明日计划"三块写,
保存到 ~/Documents/daily-summaries/YYYY-MM-DD.md

最简单。Codex 每次按这段描述执行。

形式 2:调用 Skill

调用 daily-news Skill。
输入:行业 = AI Agent,数量 = 5 条
输出:保存到 Triage

更稳定。Skill 内部的 SOP 不会因为偶尔的 prompt 措辞变化而走样。

形式 3:调用脚本 + AI 加工

1. 运行 scripts/fetch-data.py 抓取数据
2. 让 AI 对结果分析、写一段 200 字解读
3. 输出到 reports/YYYY-MM-DD.md

确定性的事用脚本,理解和创造的事用 AI

12.6 交付:结果去哪儿

Codex 支持几种交付方式:

1. Triage(最推荐)

结果进入收件箱,等你审核。适用于:

  • 需要人工把关的任务
  • 涉及对外发布、决策的任务

2. 文件

直接写入指定目录。适用于:

  • 不需要审核的资料归档
  • 给后续流程做输入

3. 邮件

发到指定邮箱。适用于:

  • 你早晨打开邮箱就想看到的简报
  • 需要发给团队的简短信息

4. Slack / Teams / 飞书 Webhook

通过插件发到指定群。适用于:

  • 团队每日同步
  • 异常告警

5. PR / Commit(GitHub)

自动开 PR 或提交到分支。适用于:

  • 自动修小 bug
  • 自动更新文档

12.7 实战:搭建一个"晨间简报" Automation

我们一步步搭一个完整的 Automation:每天早上 7 点自动整理 5 条 AI 行业新闻,发到我邮箱。

第 1 步:先写一个 Skill

~/.codex/skills/morning-brief/SKILL.md

---
name: AI 行业晨报
description: 抓取昨天 AI 行业的关键新闻,整理成 5 条要闻 + 简短点评
keywords: [晨报, 早报, brief, news, AI 新闻]
version: 1.0.0
---

## 何时使用

用户说"AI 晨报"、"morning brief"、"今日 AI 新闻"时调用。

## 输入

- 抓取范围:默认昨天(北京时间 0:00 - 23:59)
- 信息源:references/news-sources.md 中列出的网站
- 数量:默认 5 条

## 步骤

1. 用 In-App Browser 访问 references/news-sources.md 中的所有网站
2. 提取昨天发布的所有新闻标题
3. 按重要性打分(融资 > 产品发布 > 技术突破 > 观点 > 八卦)
4. 选 TOP 5
5. 每条用 references/template.md 模板生成:标题 + 一句话要点 + 50 字点评
6. 输出整体简报到当前目录 brief-YYYY-MM-DD.md

## 输出

- 文件:brief-YYYY-MM-DD.md
- 格式:Markdown
- 长度:500-800 字

## 验收

- 5 条都有出处链接
- 点评不是简单复述,要有"为什么重要"
- 没有重复(同一事件不同来源算一条)

配套 references:

~/.codex/skills/morning-brief/
├── SKILL.md
└── references/
    ├── news-sources.md   # 信息源清单
    └── template.md       # 单条新闻模板

references/news-sources.md

# AI 行业新闻源

## 中文
- 36kr.com (AI 板块)
- huxiu.com
- mp.weixin.qq.com 公众号:量子位、机器之心、AI 科技评论

## 英文
- techcrunch.com (AI tag)
- theverge.com (AI tag)
- arstechnica.com
- news.ycombinator.com

第 2 步:测试 Skill

手动跑一次:

帮我跑一下 morning brief

看输出是不是符合期望。不满意就调整 Skill。

第 3 步:创建 Automation

桌面版:菜单 → Automations → New Automation。

填表:

Name: 每日 AI 晨报

Trigger:
  Type: Schedule
  Cron: 0 7 * * *  (每天 7:00)
  Timezone: Asia/Shanghai

Task:
  调用 morning-brief Skill

Delivery:
  - Triage(审核版)
  - Email to: cassius@example.com(自动发版)

CLI 版可以用配置文件:

# ~/.codex/automations/morning-brief.yaml
name: 每日 AI 晨报
trigger:
  schedule: "0 7 * * *"
  timezone: Asia/Shanghai
task:
  skill: morning-brief
delivery:
  - type: triage
  - type: email
    to: cassius@example.com

第 4 步:第一次试运行

不用等明天 7 点。点"Run Now"立即跑一次:

  • 看完整执行流程
  • 检查输出格式
  • 调整任何不满意的地方

第 5 步:上线观察

第一周每天看输出,记录问题。一周后稳定了,你只需要每天扫一眼简报。

12.8 "两层交付"工作流

最佳实践:Codex 干活 + 人审核

┌──────────────────┐
│ Automation 触发   │
└────────┬─────────┘
         ▼
┌──────────────────┐
│ Codex 执行任务    │
│ (读、写、查、整理)│
└────────┬─────────┘
         ▼
┌──────────────────┐
│ 结果进 Triage     │
│ (草稿状态)       │
└────────┬─────────┘
         ▼
┌──────────────────────┐
│ 你审核(早晨 5 分钟) │
└────────┬─────────────┘
         ▼
    ┌────┴────┐
    ▼         ▼
┌────────┐ ┌────────┐
│ 通过 → │ │ 不通过 │
│ 发布   │ │ → 退回 │
└────────┘ └────────┘

为什么不直接发?

  • 质量保证:AI 偶尔出错(事实错误、链接失效、措辞不当),人审能抓出来
  • 责任明确:发出去的东西署你的名字,最终责任是你
  • 持续改进:每次审核中发现的问题,迭代回 Skill

什么场景可以"直接发",跳过 Triage?

  • 内部消费的,不发外面(比如自己看的简报)
  • 已经迭代了 3 个月,错误率 < 1%(反复验证后再放开)
  • 错了影响小(小的 typo,不是事实错误)

12.9 几个值得搭的 Automation

Automation 1:每日个人简报

每天早上 7:00,整理:

  • 昨天关键新闻(行业 + 公司)
  • 今天日历上的会议(来自 Google Calendar 插件)
  • 今天的天气和提醒

Automation 2:每周项目周报

每周五下午 5:00:

  • 扫描这周的 git commit
  • 扫描这周的 Slack / 飞书重要消息
  • 起草周报到 Triage
  • 你周一上班审完发出

Automation 3:竞品价格监控

每天早上 9:00:

  • 访问 5 个竞品的官网
  • 抓取主推产品价格
  • 跟你们的价格对比
  • 有变化时发邮件 + 飞书提醒

Automation 4:未读邮件分类

每小时一次:

  • 扫描收件箱新邮件
  • 按"立即处理 / 今日 / 本周 / 不重要"分类
  • 把"立即处理"摘要推送到飞书
  • 把"不重要"标记已读归档

Automation 5:客户咨询回复模板

每次收到新工单(事件触发):

  • 调用 customer-faq Skill 找匹配回答
  • 生成回复草稿到 Triage
  • 客服点击"发送"或"修改后发送"

Automation 6:周末账单整理

每周日晚上 8:00:

  • 扫描这周的支付宝、微信账单
  • 按消费类别分类
  • 生成开销报告
  • 跟预算对比,超支项目标红

Automation 7:技术博客自动收录

每天晚上 11:00:

  • 检查你订阅的 RSS / 公众号
  • 把今天新文章读一遍
  • 选出"值得收藏的"3 篇
  • 提取要点存到 ~/Notes/inbox/

Automation 8:Bug 自动初筛

每次 GitHub 有新 Issue(事件触发):

  • 读 Issue 描述
  • 判断是 bug 还是 feature
  • 如果是 bug,初步分析可能原因
  • 在 Issue 评论里回复你的初步判断
  • 如果是低优先级 bug 且改动小,直接尝试修

Automation 9:定期备份与归档

每周一凌晨 2:00:

  • 把本周生成的所有报告归档到 archives/
  • 把超过 6 个月的报告压缩
  • 同步到外部硬盘

Automation 10:学习计划检查

每天晚上 10:00:

  • 检查今天的学习目标完成情况(来自 todo.md)
  • 提醒明天该学什么
  • 周日生成本周学习总结

12.10 Automation 的"保护"机制

定时跑很爽,但出错了就累积错。Codex 内置几个保护:

失败重试

任务失败后自动重试 3 次(指数退避:1s、5s、25s)。

异常告警

如果重试后仍失败,发告警到你设定的渠道(默认是 Triage 顶部红色提醒 + 邮件)。

资源限制

每个 Automation 单次执行最长 10 分钟(可配置)。超时自动终止。

配额管理

频繁跑会消耗你的 ChatGPT Plus / Pro 配额。控制台能看每个 Automation 的"日均消耗 token"。

审计日志

每次执行的完整记录(输入、输出、耗时、用了哪个 Skill)保存 30 天。出了问题可以追溯。

12.11 一些常见坑

坑 1:信息源失效

网站改版、公众号删除、API 变了——Skill 用的"references/news-sources.md"也要定期更新。建议每月一次"维护日"。

坑 2:触发时间冲突

如果你设了多个 Automation 都在 7:00 跑,会排队。错峰:6:55、7:00、7:05……

坑 3:Triage 堆积

Automation 每天产出,但你没每天审,结果 Triage 里堆了 50 条未审。两个解决:

  • 每天固定时间清理 Triage(比如刚到办公室那 10 分钟)
  • 给低优先级 Automation 设"一周不审就自动归档"

坑 4:电脑没开机

桌面版 Automation 依赖电脑开着。要"完全不依赖电脑",用 Codex Web 的云端 Automation 或者 GitHub Action。

坑 5:泄露敏感信息

Automation 自动发邮件 / 推 Slack——如果内容里有敏感数据(客户名、价格、内部数据),可能泄露。审核 Skill 时检查"输出会不会包含敏感信息"。

12.12 进阶:Automation 链

复杂场景,让多个 Automation 串起来:

06:00 抓取竞品价格 ──→ 写入 prices.csv
07:00 读取 prices.csv,生成对比报告 ──→ 进 Triage
08:00 你审核 ──→ 通过则发飞书群
09:00 飞书群收到消息,团队开始一天工作

这就是"端到端"的自动化业务流。

12.13 本章小结

  • Automation = 自然语言版的定时任务,比 cron 更聪明
  • 三要素:触发器 + 任务 + 交付
  • 任务推荐用 Skill 包装,更稳定
  • "两层交付"工作流:Codex 做 + 人审,平衡效率与责任
  • 10 个值得搭的 Automation:晨报、周报、监控、回复、归档...
  • 保护机制:重试、告警、限额、审计
  • 常见坑:信息源失效、触发冲突、Triage 堆积、电脑关机、敏感泄露

第四篇结束。下一篇我们走入"实战篇"——按你的身份对号入座,看具体场景怎么用。从 第十三章 · 文字工作者的 Codex 开始。