Skip to content

定时任务(/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 精度为分钟)。7m90m 这类不能整除的间隔会取整到最近可用的值,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)。不支持 LW? 等扩展语法。


禁用定时任务

bash
export CLAUDE_CODE_DISABLE_CRON=1

/loop 和 cron 工具不可用,已调度的任务停止触发。


会话级调度的限制

  • 任务只在 Claude Code 运行且空闲时触发
  • 不补跑错过的执行(Claude 忙时到期的任务,等 Claude 空闲后触发一次)
  • 不跨重启持久化

需要持久化自动化时:

相关资源

常见问题

Q: /loop 和以前相比有什么新功能?

现在 /loop 支持三种模式:1)固定间隔(/loop 5m 检查部署);2)动态间隔(只给提示词,Claude 自主决定每次等多久);3)内置维护(不给任何参数,自动处理 PR、CI 失败、代码清理)。还可以在 .claude/loop.md 自定义默认提示词。

Q: 动态间隔和固定间隔有什么区别,什么时候用?

固定间隔保证每隔固定时间执行一次,适合需要准时触发的场景;动态间隔让 Claude 根据观察到的状态决定下次等多久(活跃时短、安静时长),更智能也更省 token,适合"有事就报告、没事稍后再看"的场景。Claude 还可能用 Monitor 工具做事件驱动监控,更进一步避免轮询。

Q: 定时任务的 7 天过期是什么意思?

每个周期性任务创建 7 天后自动过期并删除,即使还没手动取消。这是为了防止遗忘的循环一直跑下去。如果需要更长时间,在过期前取消并重新创建,或改用桌面定时任务/Routines 做持久化调度。