Claude Code 学习站

Claude Code 定时任务实战:/loop 与三种调度模式详解

详解 Claude Code v2.1.72+ 的三种计划任务方式(/loop、Desktop、Routines),涵盖动态间隔、loop.md 自定义、Cron 表达式及 7 天过期机制,助力开发者在会话内高效轮询。

本页目录13
AI 摘要 · 已核查整理于 2026-05-10原文:Run prompts on a schedule(Anthropic)自动化与 CI
要点速览
  • Claude Code 提供三种调度方式:会话级 `/loop`、本机 Desktop 任务、Anthropic 云端 Routines,按是否需要机器开机与打开会话来选择
  • `/loop` 支持固定间隔(如 `/loop 5m`)、动态间隔(Claude 自行决定等待时长)和裸命令(内置 PR 维护模式)三种用法
  • 在 `.claude/loop.md` 或 `~/.claude/loop.md` 创建文件可替换裸 `/loop` 的内置提示词,运行中修改下次迭代即生效
  • 循环任务默认 7 天后自动过期,且存在 Jitter 抖动:循环任务最多延迟触发 30 分钟,整点/半点的一次性任务最多提前 90 秒
  • 底层通过 `CronCreate` / `CronList` / `CronDelete` 三个工具管理,单会话最多 50 个任务
  • 设置环境变量 `CLAUDE_CODE_DISABLE_CRON=1` 可完全禁用所有调度功能

本文是对官方文档「Run prompts on a schedule」的中文要点摘要,完整内容以原文为准。原文链接:https://code.claude.com/docs/en/scheduled-tasks

前提条件

需要 Claude Code v2.1.72 或更高版本,可用 claude --version 确认。计划任务属于会话级别,随当前对话存在;关闭终端或新建会话即停止触发(用 --resume / --continue 恢复时可找回未过期的任务)。

三种调度方式对比

Claude Code 提供三种计划任务方式,按场景选择最合适的一种:

方式运行位置需机器开机需打开会话可访问本地文件最小间隔
Routines(云端)Anthropic 云否(全新克隆)1 小时
Desktop 计划任务本机1 分钟
/loop本机1 分钟

选型建议: 无人值守的长期任务用 Routines;需要本地文件但不想保持会话用 Desktop;会话内快速轮询或临时监控用 /loop

/loop 三种用法

1. 固定间隔模式

/loop 5m check if the deployment finished and tell me what happened

时间单位支持 s(秒)、m(分)、h(时)、d(天)。秒会向上取整到分钟(cron 精度),不能整除的间隔(如 7m90m)自动取近似值,Claude 会说明实际使用的间隔。间隔可以写在提示词前(30m check ...)也可以嵌入自然语言(check ... every 2 hours)。

2. 动态间隔模式(省略时间)

/loop check whether CI passed and address any review comments

Claude 根据观察情况自主选择下次等待时长(1 分钟~1 小时):构建进行中时等待较短,PR 安静时等待较长。每次迭代末尾打印所选延迟及原因。动态模式下 Claude 可能直接使用 Monitor 工具监听后台脚本输出,避免轮询,更省 token。动态循环不受 Jitter 抖动影响,但仍受 7 天过期约束。

Bedrock、Vertex AI、Microsoft Foundry 平台上,省略间隔时改为固定 10 分钟触发,而非动态间隔。

3. 内置维护模式(省略所有参数)

/loop

依次执行:继续未完成工作 → 处理当前 PR(回复评论、修复 CI、解决合并冲突)→ 空闲时执行代码清理或 bug 猎查。不会发起会话历史未授权的不可逆操作(推送、删除等)。默认以动态间隔运行;加上时间参数(如 /loop 15m)则改为固定间隔。

自定义默认提示词:loop.md

在以下位置创建文件可替换裸 /loop 的内置提示词:

路径作用域
.claude/loop.md项目级(优先级更高)
~/.claude/loop.md用户级(适用于所有未定义项目级文件的项目)

文件为普通 Markdown,直接写提示词正文即可,上限 25,000 字节,超出部分被截断。修改后下次迭代立即生效,无需重启循环。该文件仅在裸 /loop(不带提示词参数)时读取,命令行传入提示词时忽略。

示例内容:

检查 release/next 分支的 PR。若 CI 失败,拉取日志、定位原因并推送最小修复。
若有新评论则逐条回复并关闭线程。若一切正常,一句话说明即可。

一次性提醒

用自然语言直接描述,无需 /loop,Claude 自动转为 cron 表达式,触发一次后自动删除任务:

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

管理任务

自然语言即可查询和取消:

what scheduled tasks do I have?
cancel the deploy check job

底层使用三个工具:

工具功能
CronCreate新建任务(5 字段 cron 表达式 + 提示词 + 是否循环)
CronList列出所有任务(含 ID、计划、提示词)
CronDelete按 ID 删除任务

每个任务有唯一 8 字符 ID;单会话最多创建 50 个计划任务。按 Esc 可停止当前等待中的 /loop(仅对 /loop 有效,不影响通过对话直接创建的任务)。

运行机制

时区:所有时间解析为本地时区,非 UTC。0 9 * * * 即本地早上 9 点。

Jitter 抖动:为避免大量会话在同一时刻打 API,调度器按任务 ID 加一个确定性偏移。循环任务在计划时间之后最多延迟触发 30 分钟(对于比每小时更频繁的任务,则最多为间隔的一半);整点或半点(:00 / :30)触发的一次性任务则最多提前 90 秒触发。抖动量由任务 ID 固定决定,相同任务始终使用相同偏移。若需精确时间,选用非 :00 / :30 的分钟,如用 3 9 * * * 代替 0 9 * * *,一次性任务的抖动便不会生效。

7 天过期:循环任务创建 7 天后自动触发最后一次并删除自身。需要更长周期时,在过期前重新创建,或改用 Routines / Desktop 计划任务。

错过不补偿:Claude 正忙时到期的任务等当前轮次结束后触发一次,不累计补偿多次触发。

Cron 表达式速查

5 字段格式:分 时 日 月 周,支持通配符 *、单值、步长 */15、范围 1-5、逗号列表 1,15,30不支持 LW?MON/JAN 等别名。

表达式含义
*/5 * * * *每 5 分钟
0 * * * *每小时整点
7 * * * *每小时第 7 分钟
0 9 * * *每天本地 9:00
0 9 * * 1-5工作日 9:00
30 14 15 3 *3 月 15 日 14:30

禁用调度功能

在环境变量中设置:

CLAUDE_CODE_DISABLE_CRON=1

设置后 CronCreateCronListCronDelete 工具及 /loop 命令均不可用,已调度的任务也停止触发。

局限性

  • 依赖运行状态:任务只在 Claude Code 运行且空闲时触发,关闭终端即停止
  • 会话重置:新建会话清空所有任务;--resume / --continue 可恢复未过期任务(Background Bash 和 Monitor 任务不会恢复)
  • 无法无人值守:需要机器关机后仍运行的自动化,推荐改用 Routines(云端无人值守)或 Desktop 计划任务(本机定时)