按计划运行 Prompt
在 Qwen Code 会话中,使用
/loop和 cron 调度工具来重复运行 prompt、轮询状态或设置一次性提醒。
定时任务允许 Qwen Code 按固定间隔自动重新运行 prompt。你可以使用它们来轮询部署状态、看护 PR、检查长时间运行的构建,或者提醒自己在会话的稍后时间做某事。
任务的作用域限定在当前会话:它们存在于当前的 Qwen Code 进程中,退出时即被销毁。不会向磁盘写入任何内容。
提示: 定时任务默认启用。要禁用它们,请在设置中设置
experimental.cron: false,或在环境变量中设置QWEN_CODE_DISABLE_CRON=1。
使用 /loop 安排循环 prompt
/loop 内置 skill 是安排循环 prompt 的最快方法。传入一个可选的间隔和 prompt,Qwen Code 就会设置一个 cron 任务,在会话保持打开期间于后台触发。
/loop 5m check if the deployment finished and tell me what happenedQwen Code 会解析间隔,将其转换为 cron 表达式,安排任务,并确认执行频率和任务 ID。然后它会立即执行一次该 prompt——你无需等待第一次 cron 触发。
间隔语法
间隔是可选的。你可以将其放在开头、放在结尾,或者完全省略。
| 形式 | 示例 | 解析后的间隔 |
|---|---|---|
| 前导 token | /loop 30m check the build | 每 30 分钟 |
尾部 every 子句 | /loop check the build every 2 hours | 每 2 小时 |
| 无间隔 | /loop check the build | 默认为每 10 分钟 |
支持的单位有 s(秒)、m(分钟)、h(小时)和 d(天)。由于 cron 的最小粒度为分钟,秒会被向上取整到最近的分钟。不能整除其单位的间隔(如 7m 或 90m)会被四舍五入到最近的整数间隔,Qwen Code 会告诉你它选择了哪个。
循环执行其他命令
调度的 prompt 本身可以是一个命令或 skill 调用。这对于重新运行你已经打包好的工作流非常有用。
/loop 20m /review-pr 1234每次任务触发时,Qwen Code 都会运行 /review-pr 1234,就像你亲自输入的一样。
自主模式
运行 /loop 时不提供 prompt 会启动一个自主循环,而不是重复固定的 prompt。Qwen Code 会作为对话中已建立工作的管理者——在你离开时推动工作继续:
/loop单独的 /loop(无 prompt,无间隔)会运行一个自定步调的自主循环;不带 prompt 的 /loop <interval> 会以固定频率运行相同的自主循环(例如 /loop 10m)。每次触发时,它都会推进对话中已经设置好的工作——完成你开始的事情、维护进行中的 PR(处理 review 线程、修复失败的 CI、解决冲突),并履行后续承诺。它仅对对话记录中已经确立的工作采取行动:在没有明确授权的情况下,它绝不会凭空创造新工作或进行不可逆的更改(push、delete、send),并且一旦所有事情都处理完毕,它就会停止。
管理循环
/loop 还支持两个用于管理现有任务的子命令:
/loop list列出所有已调度的任务及其 ID 和 cron 表达式。
/loop clear一次性取消所有已调度的任务。
设置一次性提醒
对于一次性提醒,请使用自然语言描述你的需求,而不是使用 /loop。Qwen Code 会安排一个单次触发的任务,该任务在运行后会自动删除自身。
remind me at 3pm to push the release branchin 45 minutes, check whether the integration tests passedQwen Code 使用 cron 表达式将触发时间固定到具体的分钟和小时,并确认其触发时间。
管理定时任务
使用自然语言要求 Qwen Code 列出或取消任务,或者直接引用底层工具。
what scheduled tasks do I have?cancel the deploy check job在底层,Qwen Code 使用以下工具:
| 工具 | 用途 |
|---|---|
CronCreate | 安排新任务。接受 5 字段的 cron 表达式、要运行的 prompt,以及是循环执行还是单次执行。 |
CronList | 列出所有已调度的任务及其 ID、计划和 prompt。 |
CronDelete | 按 ID 取消任务。 |
每个定时任务都有一个 8 字符的 ID,你可以将其传递给 CronDelete。一个会话最多可以同时容纳 50 个定时任务。
定时任务的运行机制
调度器每秒检查一次到期任务,并在会话空闲时将其加入队列。调度的 prompt 会在你的回合之间触发,而不是在 Qwen Code 响应过程中触发。如果任务到期时 Qwen Code 正忙,prompt 会等待直到当前回合结束。
所有时间均按你的本地时区解释。像 0 9 * * * 这样的 cron 表达式表示在你运行 Qwen Code 的本地时间早上 9 点,而不是 UTC 时间。
抖动
为了避免所有会话在同一物理时间点击中 API,调度器会为触发时间添加一个小的确定性偏移量:
- 循环任务 最多会延迟其周期的 10% 触发,上限为 15 分钟。一个每小时执行的任务可能会在
:00到:06之间的任何时间触发。 - 安排在整点或半点(分钟为
:00或:30)的一次性任务 最多会提前 90 秒触发。
偏移量由任务 ID 派生,因此同一个任务总是获得相同的偏移量。如果精确的时间很重要,请选择不是 :00 或 :30 的分钟,例如使用 3 9 * * * 而不是 0 9 * * *,这样一次性任务的抖动就不会生效。
循环任务过期
默认情况下,循环任务在创建 7 天后自动过期。任务会最后一次触发,然后删除自身。这限制了被遗忘的循环可以运行的时间。
要更改此限制,请在设置中设置 experimental.cronRecurringMaxAgeDays,或设置 QWEN_CODE_CRON_MAX_AGE_DAYS 环境变量(环境变量优先——这在编辑 settings.json 不切实际的云或容器部署中非常方便)。值为 0 会完全禁用过期,因此任务会一直运行直到你删除它们——这对于托管每日报告、摘要或持续监控的长时间运行的守护进程部署非常有用。配置的限制也适用于重启后从磁盘恢复的持久化任务。
一次性任务不会按计时器过期——它们只是在触发一次后直接删除自身。
Cron 表达式参考
CronCreate 接受标准的 5 字段 cron 表达式:minute hour day-of-month month day-of-week。所有字段都支持通配符(*)、单个值(5)、步长(*/15)、范围(1-5)和逗号分隔的列表(1,15,30)。
| 示例 | 含义 |
|---|---|
*/5 * * * * | 每 5 分钟 |
0 * * * * | 每小时整点 |
7 * * * * | 每小时的第 7 分钟 |
0 9 * * * | 每天本地时间上午 9 点 |
0 9 * * 1-5 | 工作日本地时间上午 9 点 |
30 14 15 3 * | 3 月 15 日本地时间下午 2:30 |
星期字段使用 0 或 7 表示星期日,6 表示星期六。当月份中的日期和星期几都受到限制(两者都不是 *)时,只要其中一个字段匹配,该日期就会匹配——这遵循标准的 vixie-cron 语义。
不支持扩展语法,如 L、W、?,以及 MON 或 JAN 等名称别名。
限制
会话作用域的调度具有固有的限制:
- 任务仅在 Qwen Code 运行且空闲时触发。关闭终端或让会话退出会取消所有任务。
- 不会补执行错过的触发。如果任务的调度时间在 Qwen Code 忙于处理长时间运行的请求时过去,它只会在 Qwen Code 变为空闲时触发一次,而不是按错过的间隔触发多次。
- 重启后不持久化。重启 Qwen Code 会清除所有会话作用域的任务。