Skip to main content
任务自动化

重复执行任务

概述

/loop 让 Qoder CLI 重复运行同一个提示词或斜杠命令。它适合轮询状态、持续检查、周期性重复动作等场景,例如"每 5 分钟检查一次部署""盯着 CI 直到它变绿"。 节奏有两种模式,取决于你是否给出间隔:
模式触发方式节奏
固定间隔给出间隔(/loop 5m …Qoder 把间隔换算成对应的周期计划并创建定时任务。
动态节奏不给间隔(/loop monitor CIQoder 先执行任务,再自行判断下一次什么时候值得跑(60s–3600s)。它一旦不再安排下次唤醒,循环即结束。
如果你需要更精确的日历计划(例如"每周一上午 9 点"),请使用定时任务,见 定时执行任务

命令格式

/loop [interval] [flags] <prompt>
  • interval:可选的时间间隔。给出时按固定间隔运行;省略时由 Qoder 自行掌握节奏。
  • flags:可选。包括持久化(--durable--permanent)与预算上限(--max-turns--max-credits)。标记可以写在输入的任意位置,并会在调度前从提示词中剔除。
  • prompt:要重复运行的提示词或斜杠命令。省略它且存在 .qoder/loop.md 文件时,Qoder 会改为循环执行该文件里的任务清单。
示例:
/loop 5m /babysit-prs
/loop 30m check the deploy
/loop 1h /standup 1
/loop check the deploy every 20m
/loop monitor CI pipeline                    # 未给间隔,由 Qoder 自行决定节奏
/loop 10m --max-turns 6 check the deploy     # 跑满 6 次后停止
创建后,Qoder 会立即执行一次该提示词,而不会等到第一个周期才开始。

时间间隔语法

时间间隔由数字加单位组成,支持四种单位:
单位含义示例
s30s
m分钟5m
h小时2h
d1d
最小粒度是 1 分钟。 由于底层调度不含秒级字段,秒会向上取整到最近的整分钟——例如 30s 会被当作 1m,Qoder 会告诉你实际取整后的间隔。 间隔到 Cron 的转换规则:
间隔对应计划说明
Nm(N ≤ 59)每 N 分钟
Nm(N ≥ 60)圆整为小时需能整除 24 小时
Nh(N ≤ 23)每 N 小时
Nd每 N 天午夜(本地时间)
Ns向上取整为分钟最小 1 分钟
如果间隔不能整除其单位(例如 7m 会导致 :56:00 的间隔不均匀,90m 无法用整点表达),Qoder 会选择最接近的整齐间隔,并在创建前告诉你它取整成了什么。

两种写法

间隔可以写在开头,也可以用结尾的 every 子句表达:
  • 开头的间隔/loop 5m check the deploy → 间隔 5m,提示词 check the deploy
  • 结尾的 every 子句/loop check the deploy every 20m → 间隔 20m,提示词 check the deploy。也支持 every 5 minutesevery 2 hours 这类自然表达。
注意 every 只有在后面跟的是时间表达时才当作间隔。例如 /loop check every PR 中的 every 不是时间表达,会被当作提示词的一部分,因此该循环按动态节奏模式运行。

预算上限

循环会一直跑到过期或被你停掉,很容易花出超过预期的开销。两个标记可以给它设上限:
/loop 10m --max-turns 6 check the deploy      # 最多跑 6 次
/loop --max-credits 20 monitor CI             # 最多花 20 积分
/loop 1h --max-turns=24 --max-credits=50 /standup 1
标记含义
--max-turns N跑满 N 次后停止。N 为整数。
--max-credits N累计消耗 N 积分后停止。允许小数,因为单次运行往往不到 1 积分。
两个标记也支持等号写法(--max-turns=6)。只接受正数——上限为零会让循环在第一次运行前就被撤销。 上限的行为:
  • 两个都设时,先到者停止循环。
  • 轮次按任务的整个生命周期累计,不按会话。 重启 Qoder CLI 不会清零计数,因此无法靠重启绕过上限。
  • 轮次在每次运行前判定,所以 --max-turns 2 恰好触发两次,不会有第三次。
  • 积分在一轮结束后记账,因此最后一轮可能略微超过上限(例如上限 3、实际 3.2)。Qoder 不会中途掐断一轮,否则已经付费的工作会被丢掉。
  • 触顶即彻底停止。 任务被移除,你会看到类似 Scheduled task a1b2c3d4 stopped: it used 2 of 2 turns. 的提示。Qoder 也会收到同一条通知,因此它会如实汇报停止,而不是继续按"循环还在跑"推理。需要继续时,用新的上限重新起一个循环。
  • 动态节奏模式下上限粘在循环上。 只需在启动循环的那次 /loop 上给出一次,后续每次唤醒都继续生效。停止循环会同时清除上限与已用量,下一个 /loop 从零开始。

查看与修改用量

/crontab 打开定时任务面板,USAGE 列显示每个循环的消耗:
USAGE
3/10 turns · 12.5/50 credits     两个上限都设了
2 turns · 8.25 credits           未设上限
1/5 turns · —/50 credits         尚未计量消耗
在任务详情页可以不重建循环就改上限:按 t 改轮次上限,按 b 改积分上限。输入空值即清除该上限。

持久化、自动失效与取消

默认情况下 /loop 创建的任务只属于当前会话:Qoder CLI 运行期间按计划触发,进程退出即消失。周期任务同时会在创建后 7 天 自动过期。 两个标记可以改变这一点:
标记效果
--durable任务落盘,重启后仍然存在,且不自动过期。
--durable 30d任务落盘,并在 30 天后过期。
这两个标记作用于固定间隔循环。动态节奏的循环始终只属于当前会话。 创建成功后,Qoder 会告诉你调度的内容、对应的周期、是否已落盘、自动过期时间,以及用于取消的任务 id。需要提前停止时,让 Qoder 按该 id 取消对应的循环任务、在 /crontab 面板中删除它,或者——在动态节奏模式下——直接让 Qoder 停止循环。 完整的参数、默认值和失效规则见 Loop 命令参考