Skip to content
FunCoding

Search

Search docs, agents, posts, Skills and MCP servers

定时运行提示词

用 /loop 和 cron 工具在会话内重复运行提示词、轮询状态或设置一次性提醒;三种定时方式对比、cron 表达式、抖动与 7 天过期等限制。

定时任务让 Claude 按间隔自动重新运行一条提示词。适合轮询部署、照看 PR、回头检查长时间的构建,或在会话里提醒你稍后做某事。想在事件发生时就响应而不是轮询,用 Channels。

任务限定于会话:用 --resume 或 --continue 恢复会话时,Claude Code 会恢复尚未过期的任务(有少数例外)。想要独立于任何会话持续存在的调度,用例程(Routines)创建云端任务。

三种定时方式对比

云端(例程)桌面端/loop
运行在云端(默认由 Anthropic 管理)你的机器你的机器
需要机器开着否是是
需要打开的会话否否是
重启后持久是是用 --resume 恢复,有例外
访问本地文件否(全新克隆)是是
MCP 服务器按任务配置的连接器配置文件和连接器继承自会话
权限提示无(自主运行)可按任务配置继承自会话
最小间隔1 小时1 分钟1 分钟

要让工作在你的机器不开时也可靠运行,用云端任务;需要访问本地文件和工具,用桌面端任务;会话期间快速轮询,用 /loop。

用 /loop 重复运行提示词

/loop 是内置 Skill,是在会话保持打开期间让提示词重复运行的最快方式。间隔和提示词都是可选的,你提供什么决定循环的行为:

你提供示例发生什么
间隔和提示词/loop 5m check the deploy提示词按固定计划运行
只有提示词/loop check the deploy提示词按 Claude 每次迭代自己选择的间隔运行
只有间隔,或什么都没有/loop运行内置的维护提示词,或你的 loop.md(如果有)

也可以把 Skill 作为提示词传入,如 /loop 20m /review-pr 1234,让每次迭代重新运行那个 Skill。定时触发只会运行 Claude 被允许自行调用的 Skill;内置命令(如 /permissions、/model、/clear)、标了 disable-model-invocation: true 的 Skill(包括内置的 /verify)、被 skillOverrides 或 Skill deny 规则对 Claude 隐藏的 Skill,以及 MCP 提示词,只会作为纯文本到达 Claude,而不会被执行。

固定间隔:提供间隔时,Claude 把它转换成 cron 表达式、安排任务,并确认频率和任务 ID:

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

间隔可以作为前导的裸词(如 30m),也可以作为后缀从句(如 every 2 hours)。支持的单位:s(秒)、m(分)、h(时)、d(天)。秒会向上取整到分钟,因为 cron 的粒度是一分钟;无法对应整齐 cron 步长的间隔(如 7m、90m)会被取整到最近的可行间隔,Claude 会告诉你它选了什么。

让 Claude 选间隔:省略间隔时,Claude 动态选择,而不是按固定 cron 计划运行。每次迭代后,它根据观察到的情况选一个一分钟到一小时之间的延迟:构建快结束或 PR 活跃时等得短,没有待办时等得长:

/loop check whether CI passed and address any review comments

在 Monitor 工具可用的会话里,Claude 被要求动态 /loop 时可能直接用它:Monitor 运行后台脚本并把每行输出流回来,完全避免轮询,往往更省 token。

内置维护提示词:省略提示词时,Claude 用内置的维护提示词,每次迭代按顺序:继续对话里未完成的工作;照看当前分支的 PR(评审评论、失败的 CI、合并冲突);没有别的待办时运行清理(如找 bug 或简化)。它不会在这个范围之外启动新举措,推送、删除这类不可逆动作只有在延续转录里已被授权的事情时才会进行。裸 /loop 按动态选择的间隔运行它,加间隔(如 /loop 15m)则按固定计划。

用 loop.md 自定义默认提示词:创建 loop.md 文件,用你自己的指令替换内置维护提示词。它为裸 /loop 定义一条默认提示词,而不是一组独立的定时任务;命令行里给了提示词时它会被忽略。Claude 按顺序查找两个位置,用找到的第一个:

路径范围
.claude/loop.md项目级,两个文件都存在时优先
~/.claude/loop.md用户级,对没有自己定义的任何项目生效

文件是纯 Markdown,没有必需的结构,像直接输入 /loop 提示词那样写即可。对 loop.md 的编辑在下一次迭代生效,所以循环运行时可以继续改进指令;超过 25,000 字节的部分会被截断。

停止循环:想在自定时的 /loop 等待下一次迭代时停止它,按 Esc,这会清除待定的唤醒,循环不再触发。直接请 Claude 安排的任务不受 Esc 影响。在自定时模式下,任务完成后 Claude 也可以自行结束循环。固定间隔的循环会一直运行,直到你像取消其他定时任务一样取消它,或 7 天过去。

设置一次性提醒

一次性提醒不用 /loop,直接用自然语言描述。Claude 会安排一个只触发一次、运行后自删的任务:

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

管理定时任务

用自然语言请 Claude 列出或取消任务(如「what scheduled tasks do I have?」「cancel the deploy check job」),或直接引用底层工具:CronCreate(安排新任务,接受 5 字段 cron 表达式、要运行的提示词,以及是重复还是只触发一次)、CronList(列出所有定时任务及其 ID、计划和提示词)、CronDelete(按 ID 取消任务)。每个定时任务有一个 8 字符的 ID,一个会话最多容纳 50 个定时任务。

定时任务如何运行

调度器每秒检查是否有到期任务,并以低优先级把它们排入队列。定时的提示词在你的回合之间触发,而不是在 Claude 回复中途;如果任务到期时 Claude 正忙,提示词会等当前回合结束。所有时间按你本地时区解释:cron 表达式 0 9 * * * 表示你运行 Claude Code 的地方的早上 9 点,而不是 UTC。

抖动:为避免每个会话在同一个挂钟时刻访问 API,调度器会给触发时间加一个确定性的偏移:重复任务最多晚触发 30 分钟(对比每小时更频繁的任务是间隔的一半);一次性任务如果安排在整点或半点,最多提前 90 秒触发。偏移由任务 ID 派生,所以同一任务总是得到同样的偏移。如果确切时间重要,选一个不是 :00 或 :30 的分钟,例如 3 9 * * * 而不是 0 9 * * *。

7 天过期:重复任务在创建 7 天后自动过期,最后触发一次然后自删,这限定了被遗忘的循环能运行多久。需要更长的话,在过期前取消并重建,或改用例程。

cron 表达式速查

CronCreate 接受标准 5 字段 cron 表达式:分 时 日 月 星期。所有字段都支持通配符(*)、单值(5)、步长(*/15)、范围(1-5)和逗号分隔列表(1,15,30)。

示例含义
*/5 * * * *每 5 分钟
0 * * * *每小时整点
7 * * * *每小时第 7 分钟
0 9 * * *每天本地时间上午 9 点
0 9 * * 1-5工作日上午 9 点
30 14 15 3 *3 月 15 日下午 2:30

星期用 0 或 7 表示周日,到 6 表示周六。不支持 L、W、? 这类扩展语法,也不支持 MON、JAN 这类名称别名。当日期和星期都被约束时,任意一个字段匹配就算匹配(遵循标准 vixie-cron 语义)。

禁用与限制

在环境里设置 CLAUDE_CODE_DISABLE_CRON=1 可以完全禁用调度器:cron 工具和 /loop 变得不可用,已安排的任务也不再触发。

会话级调度有固有的局限:

  • 任务只在 Claude Code 运行且空闲时触发,关闭终端或让会话退出会让它们停止
  • 没有对错过触发的补偿:如果任务的计划时间在 Claude 忙于长请求时过去,它在 Claude 变空闲时只触发一次,而不是每个错过的间隔都触发一次
  • 用 claude --resume 或 --continue 恢复会话时,Claude Code 恢复用 CronCreate 安排的任务,但已过期的重复任务和计划时间已过的一次性任务除外

需要无人值守、由 cron 驱动的自动化时,用例程(云端按计划、API 调用或 GitHub 事件运行)、GitHub Actions 的 schedule 触发器,或桌面端定时任务。