第九章:后台任务和周期检查
Automations 是什么
Automations 是让 Codex 在后台或按计划执行重复任务的能力。
▫️
适合:
•
每天检查测试是否失败。
•
每周总结依赖更新。
•
定期检查文档和代码是否漂移。
•
监控 PR、部署或 issue 状态。
•
生成团队例行摘要。
App 中的创建方式
代码块
Plain Text
每天早上 9 点检查这个项目的测试是否失败。如果失败,只汇总失败测试和可能原因,不要修改文件。
▫️
创建后不要立刻信任它。先检查:
App 是否显示 automation 名称和状态。
运行时间是否符合你的时区。
工作目录是否是目标项目。
是否只读或写入范围受限。
输出会回到当前线程、通知、PR 评论还是其他地方。
有没有暂停、删除或修改入口。
Automations 的三类常见任务
#nUcpcMKFhRQN text { white-space: pre; }#nUcpcMKFhRQN .fb0 { stroke: var(--N900-FG, 0.15); }#nUcpcMKFhRQN .fb0 {stroke: rgba(31,35,41, 0.15)}#nUcpcMKFhRQN .fx0 { stroke-miterlimit: 10; }#nUcpcMKFhRQN .fx0 {stroke-miterlimit: 10}#nUcpcMKFhRQN .fa1 { fill: rgb(187, 191, 196); }#nUcpcMKFhRQN .fa1 {fill: rgb(187, 191, 196)}#nUcpcMKFhRQN .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nUcpcMKFhRQN .fx1 {font-style: normal}#nUcpcMKFhRQN .fx2 { text-anchor: middle; }#nUcpcMKFhRQN .fx2 {text-anchor: middle}#nUcpcMKFhRQN .fx3 { dominant-baseline: central; }#nUcpcMKFhRQN .fx3 {dominant-baseline: central}#nUcpcMKFhRQN .fx4 { stroke: none; }#nUcpcMKFhRQN .fx4 {stroke: none}#nUcpcMKFhRQN .fc0 { fill: var(--text-caption); }#nUcpcMKFhRQN .fc0 {fill: #646a73}#nUcpcMKFhRQN .fa2 { fill: var(--text-link-disabled); }#nUcpcMKFhRQN .fa2 {fill: rgb(187, 191, 196)}#nUcpcMKFhRQN .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nUcpcMKFhRQN .fx5 {font-style: normal}#nUcpcMKFhRQN .fx6 { text-anchor: start; }#nUcpcMKFhRQN .fx6 {text-anchor: start}#nUcpcMKFhRQN .fx7 { dominant-baseline: alphabetic; }#nUcpcMKFhRQN .fx7 {dominant-baseline: alphabetic}#nUcpcMKFhRQN .fc1 { fill: rgb(0, 0, 0); }#nUcpcMKFhRQN .fc1 {fill: rgb(0, 0, 0)}#nUcpcMKFhRQN .fb1 { fill: var(--N900-FG, 0.15); }#nUcpcMKFhRQN .fb1 {fill: rgba(31,35,41, 0.15)}#nUcpcMKFhRQN .fb2 { fill: rgb(209, 217, 224); }#nUcpcMKFhRQN .fb2 {fill: rgb(209, 217, 224)}#nUcpcMKFhRQN .fa3 { fill: var(--bg-body); }#nUcpcMKFhRQN .fa3 {fill: #fff}ABC1234类型摘要检查修复示例每周总结 open issues每天运行测试或 lint自动修小问题并提交 PR权限建议只读只读或最小写入必须明确范围和 Review
Cron、Heartbeat 和 Thread Follow-up 怎么理解
App 里的自动化可以理解成三类使用体验:
#KJdlPmXpcKcx text { white-space: pre; }#KJdlPmXpcKcx .fb0 { stroke: var(--N900-FG, 0.15); }#KJdlPmXpcKcx .fb0 {stroke: rgba(31,35,41, 0.15)}#KJdlPmXpcKcx .fx0 { stroke-miterlimit: 10; }#KJdlPmXpcKcx .fx0 {stroke-miterlimit: 10}#KJdlPmXpcKcx .fa1 { fill: rgb(187, 191, 196); }#KJdlPmXpcKcx .fa1 {fill: rgb(187, 191, 196)}#KJdlPmXpcKcx .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#KJdlPmXpcKcx .fx1 {font-style: normal}#KJdlPmXpcKcx .fx2 { text-anchor: middle; }#KJdlPmXpcKcx .fx2 {text-anchor: middle}#KJdlPmXpcKcx .fx3 { dominant-baseline: central; }#KJdlPmXpcKcx .fx3 {dominant-baseline: central}#KJdlPmXpcKcx .fx4 { stroke: none; }#KJdlPmXpcKcx .fx4 {stroke: none}#KJdlPmXpcKcx .fc0 { fill: var(--text-caption); }#KJdlPmXpcKcx .fc0 {fill: #646a73}#KJdlPmXpcKcx .fa2 { fill: var(--text-link-disabled); }#KJdlPmXpcKcx .fa2 {fill: rgb(187, 191, 196)}#KJdlPmXpcKcx .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#KJdlPmXpcKcx .fx5 {font-style: normal}#KJdlPmXpcKcx .fx6 { text-anchor: start; }#KJdlPmXpcKcx .fx6 {text-anchor: start}#KJdlPmXpcKcx .fx7 { dominant-baseline: alphabetic; }#KJdlPmXpcKcx .fx7 {dominant-baseline: alphabetic}#KJdlPmXpcKcx .fc1 { fill: rgb(0, 0, 0); }#KJdlPmXpcKcx .fc1 {fill: rgb(0, 0, 0)}#KJdlPmXpcKcx .fb1 { fill: var(--N900-FG, 0.15); }#KJdlPmXpcKcx .fb1 {fill: rgba(31,35,41, 0.15)}#KJdlPmXpcKcx .fb2 { fill: rgb(209, 217, 224); }#KJdlPmXpcKcx .fb2 {fill: rgb(209, 217, 224)}#KJdlPmXpcKcx .fa3 { fill: var(--bg-body); }#KJdlPmXpcKcx .fa3 {fill: #fff}ABC1234类型定时 / 周期任务当前线程稍后继续监控任务适合每天、每周、每小时检查30 分钟后提醒、稍后复查盯 PR、部署、issue 状态注意写清时区、目录、输出适合短期 follow-up要写清停止条件
不要手写复杂调度语法给普通读者。App 用户优先用自然语言创建,再在 App 里 Review 生成的计划。
与 Skills 组合
Automation 管“什么时候运行”,Skill 管“怎么做”。
代码块
Plain Text
每周一上午运行
$dependency-review
总结 package.json 的依赖
不要自动升级依赖
好处:
•
Automation 保持短。
•
Skill 里沉淀详细流程。
•
团队可以复用同一个 Skill。
与 Commands 的区别
安全基线
#OwTRlStvXVnA text { white-space: pre; }#OwTRlStvXVnA .fb0 { stroke: var(--N900-FG, 0.15); }#OwTRlStvXVnA .fb0 {stroke: rgba(31,35,41, 0.15)}#OwTRlStvXVnA .fx0 { stroke-miterlimit: 10; }#OwTRlStvXVnA .fx0 {stroke-miterlimit: 10}#OwTRlStvXVnA .fa1 { fill: rgb(187, 191, 196); }#OwTRlStvXVnA .fa1 {fill: rgb(187, 191, 196)}#OwTRlStvXVnA .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#OwTRlStvXVnA .fx1 {font-style: normal}#OwTRlStvXVnA .fx2 { text-anchor: middle; }#OwTRlStvXVnA .fx2 {text-anchor: middle}#OwTRlStvXVnA .fx3 { dominant-baseline: central; }#OwTRlStvXVnA .fx3 {dominant-baseline: central}#OwTRlStvXVnA .fx4 { stroke: none; }#OwTRlStvXVnA .fx4 {stroke: none}#OwTRlStvXVnA .fc0 { fill: var(--text-caption); }#OwTRlStvXVnA .fc0 {fill: #646a73}#OwTRlStvXVnA .fa2 { fill: var(--text-link-disabled); }#OwTRlStvXVnA .fa2 {fill: rgb(187, 191, 196)}#OwTRlStvXVnA .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#OwTRlStvXVnA .fx5 {font-style: normal}#OwTRlStvXVnA .fx6 { text-anchor: start; }#OwTRlStvXVnA .fx6 {text-anchor: start}#OwTRlStvXVnA .fx7 { dominant-baseline: alphabetic; }#OwTRlStvXVnA .fx7 {dominant-baseline: alphabetic}#OwTRlStvXVnA .fc1 { fill: rgb(0, 0, 0); }#OwTRlStvXVnA .fc1 {fill: rgb(0, 0, 0)}#OwTRlStvXVnA .fb1 { fill: var(--N900-FG, 0.15); }#OwTRlStvXVnA .fb1 {fill: rgba(31,35,41, 0.15)}#OwTRlStvXVnA .fb2 { fill: rgb(209, 217, 224); }#OwTRlStvXVnA .fb2 {fill: rgb(209, 217, 224)}#OwTRlStvXVnA .fa3 { fill: var(--bg-body); }#OwTRlStvXVnA .fa3 {fill: #fff}AB123456任务文档漂移检查测试守护PR 修复依赖升级外部服务通知建议只读,输出报告先只读,失败后提醒用 worktree 或分支,必须 Review不自动合并限定目标 channel / repo
所有自动化都要避免:
•
读取 .env*。
•
自动推送主分支。
•
自动删除文件。
•
自动扩大外部服务权限。
运行后验收
第一次运行后必须检查:
与 GitHub Action / CI 的区别
不要把 App Automation 当成 webhook server。接飞书、钉钉、企业微信或内部系统时,通常应由外部系统触发 CI / SDK / Cloud,而不是让桌面 App 暴露公网。
设计模板
8.1 只读摘要任务
代码块
Plain Text
每周五 17:00 总结本仓库本周 open PR 的状态,列出阻塞原因和需要人工决策的项。只读,不评论 PR。
8.2 测试守护任务
代码块
Plain Text
每天 9:00 在当前项目运行 npm test。如果失败,汇总失败测试名、错误摘要和相关文件。不要修改文件。
8.3 文档漂移任务
代码块
Plain Text
每周一检查 README、AGENTS.md 和 docs/ 是否与 package.json 的脚本一致。只输出 drift report,不修改文件。
8.4 小范围自动修复任务
代码块
Plain Text
每周三检查 docs 中失效的内部相对链接。只允许修改 docs/ 下的 markdown 链接,改完展示 diff,不自动提交。
常见问题
Q1:电脑关机时 App Automations 还会运行吗?
取决于当前 App 和环境能力。需要可靠持续运行时,优先考虑云端 runner、GitHub Action 或 Codex Cloud。
Q2:Automation 能自动修 bug 吗?
能,但不建议一开始就自动修。先做只读报告,再逐步放开小范围写入。
Q3:可以用配置文件批量管理 Automations 吗?
以当前 App 支持能力为准。教程不要臆造不存在的 .codex/automations.toml 主路径。