ChatGPT 定时任务:让一件事自己按时发生
用 ChatGPT 的 Scheduled 功能定时跑任务:独立任务与对话内任务的区别、事件触发、worktree 隔离、沙箱权限,以及上线前必须做的一次手动测试。
适用平台
- ChatGPT 网页版
- ChatGPT 桌面应用
- ChatGPT 手机端(事件触发任务)
官方文档怎么说
定时任务在后台按计划重复运行;活跃、暂停和已完成的任务及最近的运行记录都在 Scheduled 中查看。
Scheduled tasks在桌面应用中,定时任务可以处理本地项目,并在项目目录或一个隔离的 worktree 中运行;需要本地文件时必须保持电脑开机且应用在运行。
Scheduled tasksCodex CLI 和 IDE 扩展不提供 Scheduled 管理界面,需要用网页版或桌面应用创建和管理定时任务。
Scheduled tasks独立定时任务每次运行都会开一个新对话;对话内定时任务则回到同一个对话并沿用其已有上下文。
Scheduled tasks需要自定义节奏时可以使用自定义计划控件,高级场景可直接编辑 RFC 5545 循环规则(RRULE),例如 RRULE:FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=9;BYMINUTE=0。
Scheduled tasks在符合条件的套餐上,定时任务可以由受支持的 Gmail、Slack、GitHub 事件触发;事件触发任务仅在网页版和手机端可用,桌面应用、Codex CLI 和 IDE 扩展不支持。
Scheduled tasks一个任务可以使用多个事件触发器,但不能把事件触发器和基于时间的计划混用。
Scheduled tasksSlack 触发需要把 @ChatGPT 加入每个被监听的频道;GitHub 触发要求已连接的应用能访问该仓库。
Scheduled tasks定时任务以你的默认沙箱设置无人值守运行;官方建议从能让任务成功的最小权限开始,只在必要时才放开网络或更大的文件访问范围。
Scheduled tasks官方建议在把一个提示词设为定时任务之前,先在普通对话里手动测试它。
Scheduled tasks
先手动跑一遍,这不是可选项
官方文档在两个不同位置重复了同一条建议:在把提示词设成定时任务之前,先在普通对话里测试一次。
理由写得很实在——这样你才能确认三件事:提示词是否清晰、范围是否收得住;所选或默认的模型、推理强度和工具行为是否符合预期;产出是否是你能审阅的形式。
这条建议之所以值得放在最前面,是因为定时任务是无人值守的。一个没测过的提示词,配上每天一次的节奏,等于每天生产一份你不会看的垃圾,或者更糟——每天在你的仓库里做一次你没预期的改动。
独立任务 vs 对话内任务
这是配置定时任务时的第一个真正决策。
独立定时任务每次运行都开一个新对话,结果汇报在 Scheduled 里。适合两种情况:每次运行本就该相互独立;或者同一个定时任务要跑在多个项目上。
对话内定时任务回到同一个对话,沿用它已有的上下文,而不是每次从一份新提示词重新开始。官方给出的适用场景很具体:
- 盯着一个长时间运行的操作直到它结束
- 按固定节奏给某个连接的来源拍一次快照(注意这里官方特意区分了:这是"定期快照",不是"响应某个事件")
- 提醒 ChatGPT 按固定节奏继续一轮评审
- 跑一个用到插件的技能驱动流程,比如查 PR 状态并处理新的评审意见
- 在不丢上下文的前提下延续一轮研究或分级处理
写对话内任务的提示词时,官方有一条容易被忽略的要求:让提示词是"耐用的"。它应该说明每次运行要做什么、如何判断有没有值得汇报的东西,以及什么时候该停下或来问你。少了后两条,你会得到一堆"本次无更新"的噪音。
事件触发:从"到点跑"到"出事跑"
在符合条件的套餐上,定时任务可以由应用事件触发,而不是时钟。目前官方列出的支持范围是:
- Gmail —— 新收到的邮件,可按发件人或主题过滤。
- Slack —— 选定频道里的新消息,可按作者过滤、可选择是否包含线程回复。不支持表情回应、编辑、删除和私信。
- GitHub —— 某个仓库的 PR 活动。可按 PR、作者、标题或标签过滤,并可选择是评审、评论、提交更新,还是只有合并才触发。
有三个限制必须提前知道:
- 事件触发任务只在网页版和手机端可用,桌面应用、Codex CLI 和 IDE 扩展都不支持。
- 不能把事件触发和时间计划混用。一个任务可以有多个事件触发器,但不能同时是"每天 9 点"和"有新 PR 时"。
- 要先连接并授权应用。Slack 还需要把
@ChatGPT加进每一个被监听的频道;GitHub 则要求已连接的应用能访问该仓库。
另外一个实际行为值得记住:当多个匹配事件密集到达时,ChatGPT 可能把它们合并在一次运行里处理。想立刻处理待处理事件,可以在 Scheduled 里选 Run now。
worktree:让定时任务不碰你正在写的代码
如果任务跑在 Git 仓库里,你可以选择让它在本地项目中运行,还是在一个新的 worktree 上运行。两者都在后台执行,区别在隔离:
- worktree —— 定时任务的改动与你手头未完成的工作分开。
- 本地模式 —— 直接在主工作区里改,官方明确提醒这可能会动到你正在编辑的文件。
非版本控制的项目没有这个选择,会直接在项目目录里运行。
代价是:高频计划 + worktree 会随时间积累出很多 worktree。官方给的处理办法是归档不再需要的运行,并且不要随便 pin 运行记录——除非你确实想保留它对应的 worktree。
权限:从最小开始,而不是从能跑通开始
定时任务以你的默认沙箱设置无人值守运行。官方对三种模式的后果写得很直白:
- read-only —— 需要改文件、联网或操作电脑上应用的工具调用会失败。
- workspace-write —— 需要写工作区之外的文件、联网或操作应用的调用会失败;可以用 rules 有选择地放行特定命令到沙箱之外。
- full access —— 后台定时任务在这个模式下风险更高,因为 ChatGPT 可能在不询问的情况下改文件、执行命令和访问网络。官方的建议是改回 workspace write,并用 rules 精确定义哪些命令可以拥有完全访问权。
还有一条在托管环境下才会遇到的行为:定时任务在组织策略允许时使用 approval_policy = "never";如果管理员的要求禁止这个值,任务会回退到你所选权限模式的审批行为。
指导原则很简单——从能让任务成功的最小权限开始,只在确实需要时才放开网络或更大的文件访问范围。
和技能配合使用
官方建议用技能来定义定时任务的动作,并提供工具和上下文,理由是这样任务更容易维护、也更容易在团队间共享。当流程不该依赖自动工具选择时,在任务提示词里明确选中或调用某个技能;在桌面应用里可以用 $skill-name 显式触发。
实际操作
- 先在普通对话里把这条提示词手动跑一遍,确认范围、模型行为和产出格式都对。
- 决定任务类型:每次运行都应独立、结果分条出现在 Scheduled 里,就用独立任务;希望它带着已有上下文回到同一个对话,就在对话内创建。
- 设定节奏:用自定义计划控件,或对高级场景直接写 RRULE。
- 如果希望由事件而不是时间触发,在网页版或手机端创建,并先连接授权对应的 Gmail / Slack / GitHub。
- 在 Git 仓库里选择运行位置:worktree 可以把定时任务的改动和你手头未完成的工作隔离开;本地模式会直接改主工作区。
- 检查沙箱设置,从最小权限开始。
- 上线后审阅前几次运行的输出,再据此调整提示词、工具或节奏。
Windows 步骤
- Windows 版 ChatGPT 桌面应用同样支持定时任务,管理界面同样是侧边栏里的 Scheduled。
- 只要任务需要本地项目文件,就必须保持电脑开机、应用在运行,并且该项目在计划运行时刻仍在磁盘上——这一条与操作系统无关。
- 若不希望依赖本机保持开机,把这类任务改为在 ChatGPT Work 中以 Cloud 方式运行。
手机步骤
- 官方明确写明:事件触发的定时任务在 ChatGPT 网页版和手机端可用。
- 因此手机端可以创建和管理由 Gmail、Slack、GitHub 事件触发的任务,也可以在 Scheduled 中查看待处理事件或选择 Run now 立即处理。
- 手机端不能创建需要访问你电脑本地文件夹的项目级定时任务。
使用案例
- 每天早上自动汇总过去 24 小时的代码提交,生成一份按工作流分组的简报。
- 监听 GitHub 上某个仓库的 PR 活动,有新评审意见时自动跟进。
- 在一个长时间运行的操作完成前,让 ChatGPT 定期回到同一个对话里检查进度。
常见错误
- 没有先手动测试就直接设成定时任务。官方把"先在普通对话里测试提示词"列为明确建议,跳过它意味着你会在无人值守的情况下反复得到错误产出。
- 想同时用事件触发和时间计划。官方说明一个任务可以有多个事件触发器,但不能把事件触发和基于时间的计划混在一起。
- 加了 Slack 触发却没把 @ChatGPT 加进被监听的频道。
- 为了让任务"一定能跑通"直接给 full access。官方对后台任务在 full access 下的风险有明确警告,建议改用 workspace write 加规则允许清单。
- 在 Git 仓库里用高频计划 + worktree,长期积累出大量 worktree 却从不清理。
常见问题
- 独立任务和对话内任务,该选哪个?
- 看你要不要上下文。独立任务每次运行开一个新对话,适合每次运行都应该相互独立、或者一个任务要跑在多个项目上的情况;对话内任务会回到同一个对话,沿用它已有的上下文,适合持续跟进一件事——比如盯一个长时间运行的操作直到它结束,或者提醒 ChatGPT 按固定节奏继续一轮评审。
- 定时任务能自动响应邮件或 Slack 消息吗?
- 在符合条件的套餐上可以。官方支持的事件触发包括 Gmail 新邮件(可按发件人或主题过滤)、Slack 选定频道的新消息(可按作者过滤、可选是否含线程回复;不支持表情回应、编辑、删除和私信),以及 GitHub 仓库的 PR 活动。注意事件触发任务只在网页版和手机端可用。
- 定时任务会改到我正在编辑的文件吗?
- 取决于你选的运行位置。在 Git 仓库里可以选择在本地项目中运行,或在一个新的 worktree 中运行——官方指出本地模式确实可能修改你正在编辑的文件,而 worktree 会把定时任务的改动隔离开。非版本控制的项目则直接在项目目录中运行。
- 它以什么权限运行?
- 以你的默认沙箱设置无人值守运行。read-only 下涉及改文件、联网或操作应用的工具调用会失败;workspace-write 下超出工作区的写入、联网和操作应用会失败,可以用 rules 有选择地放行;full access 下后台任务风险较高,官方直接建议改回 workspace write 并用 rules 精确定义可放行的命令。另外,当组织策略允许时定时任务使用 approval_policy = "never",若管理员要求禁止该值,则回退到你所选权限模式的审批行为。
- 能设成"每月 1 号早上 9 点"吗?
- 可以。除了自定义计划控件,官方支持直接编辑 RFC 5545 循环规则,文档给出的例子正是 RRULE:FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=9;BYMINUTE=0。