跳转到内容

Claude Code 循环任务:/loop 命令怎么用,边界在哪

约 10 分钟 难度:进阶 动手章

/loop 是一个内置技能(bundled skill),最简单的写法是 /loop <间隔> <提示词>,间隔和提示词都可以省略。任务绑定在当前会话,开新会话会清空所有循环任务,循环任务本身在创建后 7 天自动过期。官方文档里没有出现「/proactive」这个词,也没有把它列为 /loop 的别名,写这篇之前一直当作既定事实的说法没有找到依据。

如果任务不是「每隔多久检查一次」,而是有一个明确的完成条件(比如「直到测试全绿」),更合适的机制是 /goal:它没有固定间隔和 7 天过期的限制,条件不满足就直接开始下一轮,见《/goal 命令怎么用》。

输入方式示例行为
间隔 + 提示词/loop 5m check the deploy按固定间隔运行指定提示词
仅提示词/loop check the deploy按 Claude 自主选择的间隔运行
仅间隔或什么都不填/loop/loop 15m运行内置维护提示词,或自定义的 loop.md

提示词位置可以传一个技能,等于把某个斜杠命令定时化:

/loop 20m /review-pr 1234

裸词形式放在提示词前(30m ...),或者当作短语放在提示词后(... every 2 hours)。支持的单位:

  • s:秒,会向上取整到最近的分钟,因为底层 cron 的最小粒度是 1 分钟
  • m:分钟
  • h:小时
  • d:天

不能整除为标准 cron 步长的间隔(比如 7m90m)会被四舍五入到最近的可用值,Claude 会告知实际选定的间隔。底层用标准 5 字段 cron 表达式(分钟 小时 日 月 星期)实现,支持 *、单值、步长 */15、范围 1-5、逗号列表 1,15,30,不支持 L/W/? 这类扩展语法,也不支持月份或星期的英文别名(如 MONJAN)。

一次性提醒不需要 /loop,直接用自然语言描述时间即可:

remind me at 3pm to push the release branch
in 45 minutes, check whether the integration tests passed

循环任务的边界,决定了它会不会「越跑越偏」

Section titled “循环任务的边界,决定了它会不会「越跑越偏」”
  • 会话范围:任务存在于当前对话里,开新对话会清空所有任务。用 --resume--continue 恢复会话时,7 天内创建且尚未过期的循环任务会被找回。
  • 触发时机:调度器每秒检查一次到期任务,以低优先级排队。任务只在会话的对话轮次之间触发,不会打断 Claude 正在生成的回复;如果 Claude 正忙,任务会等当前轮次结束才触发。所有时间按本地时区解释。
  • 抖动(jitter):为避免多个会话同时打 API,循环任务最多延后 30 分钟触发(间隔小于 1 小时时,最多延后半个间隔);整点/半点的一次性任务可能提前最多 90 秒触发。偏移量由任务 ID 派生,同一任务每次偏移相同。
  • 无补跑:调度时间到达时 Claude 正忙,错过的间隔不会补上,只会在 Claude 空闲时触发一次。
  • 7 天到期:循环任务创建后 7 天自动过期,到期时触发最后一次后自我删除,用来限制被遗忘的循环任务无限期运行。
  • 停止循环:等待下一次迭代期间按 Esc 可以清除待触发的循环。在「自主选择间隔」模式下,Claude 也能自行结束循环;如果某次迭代既没有重新调度也没有停止,系统会在约 20 分钟后安排一次兜底触发,那次仍未重新调度的话循环就此结束。

循环任务每次触发都会往同一个会话里追加消息,会话的上下文只会越涨越多,不会自动清空。7 天过期限制的是循环任务本身的生命周期,不限制上下文大小,这是两个独立的约束。上下文涨到一定程度会触发自动压缩(auto-compact),阈值怎么配、怎么确认压缩真的发生,见另一篇《自动压缩阈值配置》。跑长循环之前先确认压缩阈值符合预期,比等到上下文报错才发现更省事。

底层管理循环任务的是 CronCreateCronListCronDelete 三个工具,这些是 Claude 调用的内部工具,不是能直接敲的斜杠命令。确认任务状态的办法是直接用自然语言问 Claude,比如「现在有哪些循环任务在跑」,让它自己调用 CronList 汇报;或者等到预期的触发时间点,观察会话里是否出现了对应的输出。

设置环境变量 CLAUDE_CODE_DISABLE_CRON=1 可以完全禁用调度功能,/loop 以及相关的 cron 工具会变为不可用,已经调度的任务也会停止触发。

  • /proactive 这个别名在当前查到的官方文档里没有出现,不代表所有历史版本都没有过。如果在别的渠道看到这个说法,建议用 /help 或查当前版本号自行核对。
  • ScheduleWakeup 工具(用于「自主选择间隔」模式下自行结束循环)的细节只来自公开文档描述,没有做过本机复现。
  • 单个会话最多可持有 50 个并发调度任务,这个数字没有本机验证过是否会随版本调整。
这一节有错或讲不清? 提个 Issue 直接改文档 请作者催更