跳到正文

ChatGPT 定时任务:让一件事自己按时发生

用 ChatGPT 的 Scheduled 功能定时跑任务:独立任务与对话内任务的区别、事件触发、worktree 隔离、沙箱权限,以及上线前必须做的一次手动测试。

当前有效最后核验

适用平台

  • ChatGPT 网页版
  • ChatGPT 桌面应用
  • ChatGPT 手机端(事件触发任务)

官方文档怎么说

  • 定时任务在后台按计划重复运行;活跃、暂停和已完成的任务及最近的运行记录都在 Scheduled 中查看。

    Scheduled tasks
  • 在桌面应用中,定时任务可以处理本地项目,并在项目目录或一个隔离的 worktree 中运行;需要本地文件时必须保持电脑开机且应用在运行。

    Scheduled tasks
  • Codex 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 tasks
  • Slack 触发需要把 @ChatGPT 加入每个被监听的频道;GitHub 触发要求已连接的应用能访问该仓库。

    Scheduled tasks
  • 定时任务以你的默认沙箱设置无人值守运行;官方建议从能让任务成功的最小权限开始,只在必要时才放开网络或更大的文件访问范围。

    Scheduled tasks
  • 官方建议在把一个提示词设为定时任务之前,先在普通对话里手动测试它。

    Scheduled tasks

先手动跑一遍,这不是可选项

官方文档在两个不同位置重复了同一条建议:在把提示词设成定时任务之前,先在普通对话里测试一次。

理由写得很实在——这样你才能确认三件事:提示词是否清晰、范围是否收得住;所选或默认的模型、推理强度和工具行为是否符合预期;产出是否是你能审阅的形式。

这条建议之所以值得放在最前面,是因为定时任务是无人值守的。一个没测过的提示词,配上每天一次的节奏,等于每天生产一份你不会看的垃圾,或者更糟——每天在你的仓库里做一次你没预期的改动。

独立任务 vs 对话内任务

这是配置定时任务时的第一个真正决策。

独立定时任务每次运行都开一个新对话,结果汇报在 Scheduled 里。适合两种情况:每次运行本就该相互独立;或者同一个定时任务要跑在多个项目上。

对话内定时任务回到同一个对话,沿用它已有的上下文,而不是每次从一份新提示词重新开始。官方给出的适用场景很具体:

  • 盯着一个长时间运行的操作直到它结束
  • 按固定节奏给某个连接的来源拍一次快照(注意这里官方特意区分了:这是"定期快照",不是"响应某个事件")
  • 提醒 ChatGPT 按固定节奏继续一轮评审
  • 跑一个用到插件的技能驱动流程,比如查 PR 状态并处理新的评审意见
  • 在不丢上下文的前提下延续一轮研究或分级处理

写对话内任务的提示词时,官方有一条容易被忽略的要求:让提示词是"耐用的"。它应该说明每次运行要做什么、如何判断有没有值得汇报的东西,以及什么时候该停下或来问你。少了后两条,你会得到一堆"本次无更新"的噪音。

事件触发:从"到点跑"到"出事跑"

在符合条件的套餐上,定时任务可以由应用事件触发,而不是时钟。目前官方列出的支持范围是:

  • Gmail —— 新收到的邮件,可按发件人或主题过滤。
  • Slack —— 选定频道里的新消息,可按作者过滤、可选择是否包含线程回复。不支持表情回应、编辑、删除和私信。
  • GitHub —— 某个仓库的 PR 活动。可按 PR、作者、标题或标签过滤,并可选择是评审、评论、提交更新,还是只有合并才触发。

有三个限制必须提前知道:

  1. 事件触发任务只在网页版和手机端可用,桌面应用、Codex CLI 和 IDE 扩展都不支持。
  2. 不能把事件触发和时间计划混用。一个任务可以有多个事件触发器,但不能同时是"每天 9 点"和"有新 PR 时"。
  3. 要先连接并授权应用。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 显式触发。

实际操作

  1. 先在普通对话里把这条提示词手动跑一遍,确认范围、模型行为和产出格式都对。
  2. 决定任务类型:每次运行都应独立、结果分条出现在 Scheduled 里,就用独立任务;希望它带着已有上下文回到同一个对话,就在对话内创建。
  3. 设定节奏:用自定义计划控件,或对高级场景直接写 RRULE。
  4. 如果希望由事件而不是时间触发,在网页版或手机端创建,并先连接授权对应的 Gmail / Slack / GitHub。
  5. 在 Git 仓库里选择运行位置:worktree 可以把定时任务的改动和你手头未完成的工作隔离开;本地模式会直接改主工作区。
  6. 检查沙箱设置,从最小权限开始。
  7. 上线后审阅前几次运行的输出,再据此调整提示词、工具或节奏。

Windows 步骤

  1. Windows 版 ChatGPT 桌面应用同样支持定时任务,管理界面同样是侧边栏里的 Scheduled。
  2. 只要任务需要本地项目文件,就必须保持电脑开机、应用在运行,并且该项目在计划运行时刻仍在磁盘上——这一条与操作系统无关。
  3. 若不希望依赖本机保持开机,把这类任务改为在 ChatGPT Work 中以 Cloud 方式运行。

手机步骤

  1. 官方明确写明:事件触发的定时任务在 ChatGPT 网页版和手机端可用。
  2. 因此手机端可以创建和管理由 Gmail、Slack、GitHub 事件触发的任务,也可以在 Scheduled 中查看待处理事件或选择 Run now 立即处理。
  3. 手机端不能创建需要访问你电脑本地文件夹的项目级定时任务。

使用案例

  • 每天早上自动汇总过去 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。

官方来源

这些是本教程对照核验的官方页面。需要厂商的原始措辞时请直接查阅。

来源状态