TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

Claude Code 定时任务:云端 Routines 与会话内 /loop

讲清 Claude Code 两种定时方式:云端定时任务(Routines)关掉电脑也能跑,会话内 /loop 适合盯住眼前的事。说明各自怎么建、怎么触发、有哪些限制。

这篇适合谁、读完能做到什么

适合想让 Claude Code 定时做事、又不想一直开着终端的人,比如每天检查一次拉取请求,或者在一段时间后自动跑一遍检查。读完你能分清云端定时任务和会话内的 /loop,知道各自怎么建、怎么触发,也知道它们的上限在哪里。

先分清两种定时

Claude Code 的定时方式有两种,运行位置完全不同。

第一种是云端定时任务,以前叫 routines。它是一份保存下来的 Claude Code 配置,由一段提示词、一个或多个仓库和一组连接器组成,打包一次后自动运行。它跑在 Anthropic 托管的云基础设施上,所以合上笔记本之后它依然会运行[1]。这个功能目前处于研究预览阶段,行为和限制都可能变化[1]。

第二种是会话内的 /loop。它依托于你正在打开的 Claude Code 会话,会话退出或终端关闭,它就停止了[2]。

两者的最小间隔也不同:云端任务最小一小时,/loop 最小一分钟[2]。需要长期可靠地运行,选云端任务;只是想在当前会话里盯住一件事,用 /loop。

准备:账号和套餐

云端定时任务可用于 Pro、Max、Ultra、Team 和 Enterprise 套餐。可以在 claude.ai/code/routines 上创建和管理,也可以在 CLI 里运行 /schedule 创建[1]。

创建一个云端任务

一个任务由提示词、仓库和触发方式组成。提示词里要写清楚做什么。任务启动的每一次运行都是一个完整的 Claude Code 云端会话,可以执行 shell 命令、使用技能,并调用你包含的连接器。创建任务时你不需要选择权限模式,新会话默认处于自动模式[1]。

任务能碰到什么,由三样东西决定:你选的仓库、云环境的网络访问和环境变量,以及你包含的连接器[1]。每一项都应该只开到任务真正需要的程度。

每次运行开始时,所选仓库都会被克隆一遍。Claude 的改动会放在以 claude/ 开头的分支上,所以如果希望它推到别的分支,要在提示词里写明[1]。

在 CLI 里创建更快。直接运行 /schedule,用自然语言描述即可,比如一次性任务可以这样写:

/schedule tomorrow at 9am, summarize yesterday's merged PRs

Claude 会把这句话换算成绝对时间,并在保存前确认[1]。

定时:cron 怎么写

周期任务可以选预设频率,也可以写 cron 表达式。只写五个字段的表达式时,时间按 UTC 理解。0 9 * * 1-5 的意思是工作日 UTC 时间 9 点,而不是你所在地的 9 点。如果表达式以 CRON_TZ= 开头,就按它指定的时区理解[1]。

另外要注意整点。精确设在 9:00 的任务,可能会晚几分钟才开始,想贴近时间,可以设在 9:07 这样的分钟上[1]。运行频率高于每小时一次的表达式会被拒绝[1]。

一次性任务在指定时间运行一次,跑完后自动关闭,并标记为「Completed」[1]。

三种触发方式

任务可以挂一个或多个触发器,触发方式包括定时(Schedule)、API 和 GitHub 事件三类[1]。

API 触发:给外部系统一个入口

API 触发会给任务一个专用的 HTTP 端点。用任务的 bearer token 发 POST 请求,就会启动一个新会话,并返回这个会话的地址[1]。外部系统需要的时候就可以调用它。

有两点要注意。第一,token 只显示一次,生成后要马上存到安全的地方。每个任务有自己的 token,重新生成会让旧 token 失效,删除 token 则会去掉 API 触发[1]。

第二,请求体里可以带一个可选的 text 字段,用来传递本次运行专用的上下文,比如一段告警内容或报错日志。它会被包进 <routine-fire-payload> 块里,并标明是不可信的数据。所以提示词必须明确引用这个 payload,任务才会去处理它,比如写成「调查 routine-fire-payload 块里描述的告警」。网页上「Run now」附带的文字也是同样处理[1]。

研究预览期间,这个接口的请求、响应、限流和 token 的行为都可能变化[1]。

GitHub 触发:拉取请求、发布和议题

GitHub 触发器会在仓库发生匹配事件时启动会话,每个事件启动一个新会话,不复用。使用前需要在仓库上安装 Claude GitHub App[1]。

可选的事件分三类:拉取请求(Pull request)、发布(Release)和议题(Issue)。拉取请求还可以按作者、标题、正文、目标分支、来源分支、标签、是否草稿、是否已合并来过滤,所有过滤条件都满足时任务才会启动[1]。

用量上限

云端任务的运行会计入订阅用量,和交互式会话一样。另外还有小时上限:定时运行每账号每小时 100 次;「Run now」、API 触发和重新运行一次性任务共享每个任务每小时 30 次的额度;API 触发每账号每小时另有 100 次。这些上限都没有超额计费,超出就排队等待或直接失败[1]。

会话内定时:/loop

/loop 在你打开的会话里重复执行一段提示词。最快的用法是:

/loop 5m check if the deployment finished and tell me what happened 这样的命令,表示每五分钟检查一次部署是否完成,并告诉你结果[2]。

间隔可以写 s(秒)、m(分)、h(时)或 d(天)。秒数会向上取整到分钟,因为 cron 的粒度是一分钟。7m 或 90m 这类无法整除成 cron 步长的间隔,会取最接近的可用值,并告诉你选了哪个[2]。

只写提示词不写间隔,Claude 会在每一轮之后,根据它观察到的情况,在一分钟到一小时之间自己选下一次的等待时间,并打印出选择的间隔和理由[2]。

完全不写提示词,/loop 会执行一段内置的维护提示:先接着未完成的工作做,然后处理当前分支拉取请求上的评论、失败的 CI 和合并冲突,没有其他事时再做清理。想替换这段默认提示,可以写 .claude/loop.md(项目级,存在时优先)或 ~/.claude/loop.md(用户级)。文件超过 25,000 字节的部分会被截断[2]。

停止循环

自主节奏的循环,在等待下一轮时按 Esc 即可停止。固定间隔的循环,比如 /loop 5m,要让 Claude 取消,Esc 和 Ctrl+C 都停不下它[2]。循环如果没有被取消,满七天会自动结束[2]。

会话内定时的限制

会话内定时只在 Claude Code 运行且空闲时才会触发。关掉终端或会话退出,任务就不再触发。把会话转到后台,/loop 任务会跟着转过去,由后台会话继续运行,不需要终端[2]。

为了不让大量请求同时打到 API,Claude Code 会把周期任务的运行时间稍微推迟,最多推迟半个周期间隔,并且不超过 30 分钟。写成 */5 * * * * 的任务不会被推迟。一次性任务如果设在 :00 或 :30,可能提前最多 90 秒运行。每个会话最多能同时保留 50 个定时任务[2]。

恢复会话时,claude --resume 或 claude --continue 会恢复用 CronCreate 建立的任务,但已过期的周期任务和时间已过的一次性任务不会恢复。自主节奏的 /loop 也不会恢复,需要重新运行一次[2]。

如果想关掉会话内定时,把环境变量 CLAUDE_CODE_DISABLE_CRON=1 设上即可。之后 CronCreate 和 /loop 都不可用,已有的任务也会停止触发[2]。

限制和常见问题

  • 周期性的会话内任务不能长期用。 循环七天后自动过期,需要长期运行就改用云端任务[2]。
  • 云端任务的时间要核对时区。 五字段 cron 按 UTC 理解,整点任务可能晚几分钟[1]。
  • 一次性任务不会自动重来。 跑完后它会自动关闭,要再跑需要自己重新设置[1]。
  • 会话内的一次性提醒会在会话空闲时触发。 空闲时才会运行,忙碌时要等当前一轮结束[2]。

下一步

Desktop 定时任务、GitHub Actions 的定时触发器等其他定时方式,以及云端任务的完整说明,可以直接看官方文档[1][2]。

来源

  1. 1
    Automate work with scheduled tasksAnthropic Claude Code docs
  2. 2
    Run prompts on a scheduleAnthropic Claude Code docs

引用本页: Claude Code 定时任务:云端 Routines 与会话内 /loop. TellWorld, https://www.tellworld.net/zh/practice/practice-claude-code-scheduled-tasks. 更新于 2026-11-14

相关动态