Appearance
定时任务(/loop)
Claude Code 的定时任务系统让 Claude 按时间间隔自动重跑提示词,适合轮询部署状态、守候 PR、检查长时间构建或在会话内设置提醒。/loop 是最快的用法:可指定固定间隔(/loop 5m 检查部署)、让 Claude 动态选择间隔(/loop 检查构建)或运行内置维护提示词(/loop)。还支持在 .claude/loop.md 中自定义默认提示词。任务是会话级的——关闭会话即消失。持久化调度需用云端任务(Routines)或桌面定时任务。
定时任务让 Claude 按间隔自动重跑提示词:轮询部署、守候 PR、检查长时间构建,或设置会话内提醒。任务是会话级的,关闭会话后消失。需要跨重启持久化的调度,请使用桌面定时任务或 GitHub Actions。
需要 Claude Code v2.1.72 或更高版本(claude --version 查看)。
三种调度方式对比
| 云端任务 | 桌面任务 | /loop | |
|---|---|---|---|
| 运行位置 | Anthropic 云 | 你的机器 | 你的机器 |
| 关机后继续 | ✓ | 需机器开启 | ✗ |
| 需要打开会话 | ✗ | ✗ | ✓ |
| 跨重启持久化 | ✓ | ✓ | ✗(会话作用域) |
| 访问本地文件 | ✗(全新克隆) | ✓ | ✓ |
| MCP 服务器 | 任务创建时配置 | 配置文件和连接器 | 继承会话 |
| 权限提示 | 无(自主运行) | 每任务可配置 | 继承会话 |
| 最短间隔 | 1 小时 | 1 分钟 | 1 分钟 |
选择建议:云端任务适合需要可靠运行而不依赖本机的工作;桌面任务适合需要访问本地文件的工作;
/loop适合会话内快速轮询。
使用 /loop 设置周期性提示词
/loop 是一个内置 skill,根据你提供的内容决定运行方式:
| 提供内容 | 示例 | 行为 |
|---|---|---|
| 间隔 + 提示词 | /loop 5m 检查部署 | 按固定间隔执行提示词 |
| 仅提示词 | /loop 检查构建 | Claude 动态选择间隔 |
| 仅间隔,或什么都不加 | /loop | 运行内置维护提示词 |
也可以将另一条命令作为提示词,例如 /loop 20m /review-pr 1234,每次迭代时重跑打包好的工作流。
固定间隔运行
指定间隔时,Claude 将其转换为 cron 表达式,调度任务,并确认执行频率和任务 ID:
/loop 5m 检查部署是否完成并告诉我发生了什么间隔可以放在提示词前面(30m),也可以作为尾部子句(every 2 hours)。支持的时间单位:s(秒)、m(分钟)、h(小时)、d(天)。秒会向上取整到分钟(cron 精度为分钟)。7m 或 90m 这类不能整除的间隔会取整到最近可用的值,Claude 会告诉你实际选择了什么。
让 Claude 动态选择间隔
省略间隔时,Claude 会在每次迭代后动态决定下一次的等待时间,而不是执行固定 cron 调度。等待范围从 1 分钟到 1 小时:构建进行中或 PR 活跃时等待更短,无事发生时等待更长。每次迭代结束时都会打印所选间隔和原因。
/loop 检查 CI 是否通过,处理 review 评论当你请求动态
/loop时,Claude 可能直接使用 Monitor 工具。Monitor 在后台运行脚本并实时流式传输每行输出,完全避免轮询,通常比定期重跑提示词更省 token、响应更及时。
动态调度的循环也会出现在定时任务列表中,可以像其他任务一样列出或取消。抖动规则不适用于动态循环,但7 天过期适用。
运行内置维护提示词
省略提示词时,Claude 使用内置维护提示词。每次迭代依次处理:
- 继续对话中未完成的工作
- 处理当前分支的 PR:review 评论、CI 失败、merge 冲突
- 无待办事项时执行代码清理(bug 搜寻、简化等)
Claude 不会主动启动新的任务,push 或删除等不可逆操作只在对话已授权时才继续。
/loop不带参数的 /loop 以动态选择的间隔运行内置提示词。加上间隔(如 /loop 15m)可改为固定调度。
用 loop.md 自定义默认提示词
loop.md 文件可以替换内置维护提示词,用你自己的指令作为 /loop 的默认值。它只在不带提示词参数时生效(命令行提供了提示词时忽略),不会影响通过 /loop <prompt> 调度的其他任务。
Claude Code 按以下顺序查找并使用第一个找到的文件:
| 路径 | 作用范围 |
|---|---|
.claude/loop.md | 项目级,优先级更高 |
~/.claude/loop.md | 用户级,在没有项目级文件的任何项目中生效 |
文件内容是普通 Markdown,无固定格式要求,像直接输入 /loop 的提示词那样写即可:
markdown
# .claude/loop.md 示例
检查 `release/next` PR。CI 红灯时,拉取失败的任务日志,诊断问题,推送最小修复。
有新 review 评论时逐一处理并解决线程。一切正常时用一行说明。循环运行过程中对 loop.md 的修改在下次迭代时生效。文件内容超过 25,000 字节的部分会被截断。如果两个位置都没有文件,回退到内置维护提示词。
设置一次性提醒
用自然语言描述一次性提醒,Claude 会安排一个触发后自动删除的任务:
下午 3 点提醒我推送发布分支45 分钟后检查集成测试是否通过Claude 将触发时间固定到特定分钟和小时,并确认执行时间。
管理定时任务
用自然语言操作:
我有哪些定时任务?取消 deploy-check 任务底层工具:
| 工具 | 用途 |
|---|---|
CronCreate | 创建新任务(5 字段 cron 表达式、提示词、是否重复) |
CronList | 列出所有任务(ID、调度、提示词) |
CronDelete | 按 ID 取消任务 |
每个任务有 8 字符的 ID。每个会话最多可以有 50 个定时任务。
任务执行机制
调度器每秒检查到期任务,以低优先级入队。定时提示词在两次会话轮次之间触发,不会在 Claude 响应过程中中断。如果 Claude 正忙,提示词等到当前轮次结束后执行。
所有时间以本地时区解释。0 9 * * * 表示你运行 Claude Code 所在时区的早上 9 点,不是 UTC。
抖动
为避免所有会话在同一时刻触发 API:
- 周期性任务触发延迟最多为间隔的 10%(上限 15 分钟)。每小时任务可能在
:00到:06之间触发 - 一次性任务(整点或半点)最多提前 90 秒触发
偏移量由任务 ID 决定,同一任务每次偏移量相同。如果对触发时间有精确要求,选择不是 :00 或 :30 的分钟,例如用 3 9 * * * 代替 0 9 * * *,这样一次性任务的抖动不会生效。
7 天过期
周期性任务在创建后 7 天自动过期,触发最后一次后自动删除。如果需要更长时间,在过期前取消并重新创建,或使用云端/桌面定时任务做持久化调度。
Cron 表达式参考
CronCreate 接受标准 5 字段 cron 表达式:分 时 日 月 周
| 示例 | 含义 |
|---|---|
*/5 * * * * | 每 5 分钟 |
0 * * * * | 每小时整点 |
7 * * * * | 每小时第 7 分钟 |
0 9 * * * | 每天本地时间 9:00 |
0 9 * * 1-5 | 工作日 9:00 |
30 14 15 3 * | 3 月 15 日 14:30 |
所有字段支持:通配符(*)、单值(5)、步进(*/15)、范围(1-5)、逗号列表(1,15,30)。不支持 L、W、? 等扩展语法。
禁用定时任务
bash
export CLAUDE_CODE_DISABLE_CRON=1/loop 和 cron 工具不可用,已调度的任务停止触发。
会话级调度的限制
- 任务只在 Claude Code 运行且空闲时触发
- 不补跑错过的执行(Claude 忙时到期的任务,等 Claude 空闲后触发一次)
- 不跨重启持久化
需要持久化自动化时:
- 桌面定时任务:在本地机器上运行,跨重启持久化
- GitHub Actions:在 CI 中使用
schedule触发器
相关资源
- 桌面应用:桌面定时任务完整功能
- GitHub Actions:CI/CD 自动化
- 环境变量:
CLAUDE_CODE_DISABLE_CRON等相关变量 - Monitor 工具:后台监控,无需轮询
常见问题
Q: /loop 和以前相比有什么新功能?
现在 /loop 支持三种模式:1)固定间隔(/loop 5m 检查部署);2)动态间隔(只给提示词,Claude 自主决定每次等多久);3)内置维护(不给任何参数,自动处理 PR、CI 失败、代码清理)。还可以在 .claude/loop.md 自定义默认提示词。
Q: 动态间隔和固定间隔有什么区别,什么时候用?
固定间隔保证每隔固定时间执行一次,适合需要准时触发的场景;动态间隔让 Claude 根据观察到的状态决定下次等多久(活跃时短、安静时长),更智能也更省 token,适合"有事就报告、没事稍后再看"的场景。Claude 还可能用 Monitor 工具做事件驱动监控,更进一步避免轮询。
Q: 定时任务的 7 天过期是什么意思?
每个周期性任务创建 7 天后自动过期并删除,即使还没手动取消。这是为了防止遗忘的循环一直跑下去。如果需要更长时间,在过期前取消并重新创建,或改用桌面定时任务/Routines 做持久化调度。