本页目录13
- 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 精度),不能整除的间隔(如 7m、90m)自动取近似值,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。不支持 L、W、? 及 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
设置后 CronCreate、CronList、CronDelete 工具及 /loop 命令均不可用,已调度的任务也停止触发。
局限性
- 依赖运行状态:任务只在 Claude Code 运行且空闲时触发,关闭终端即停止
- 会话重置:新建会话清空所有任务;
--resume/--continue可恢复未过期任务(Background Bash 和 Monitor 任务不会恢复) - 无法无人值守:需要机器关机后仍运行的自动化,推荐改用 Routines(云端无人值守)或 Desktop 计划任务(本机定时)