定时任务、/loop 与 Routines:让 Claude Code 按计划工作

Claude Code 提供会话内 /loop、Desktop 本地计划任务和云端 Routines。本篇比较生命周期、权限、连接器、时区和失败处理,避免把无人值守自动化开得过大。

教程基准:Claude Code v2.1.224(当前最新版,核验于 2026-08-07) · 最后核验:2026-08-07 · 适用版本:/loop 需要 v2.1.72+;Routines 为预览能力 · 官方文档

学习 CI 自动化

三种定时方式

方式在哪里运行是否需要会话保持打开适合什么
/loop当前 CLI 会话、本机需要轮询部署、稍后检查测试、短期提醒
Desktop 计划任务本机不需要 CLI 会话,但电脑要开机访问本地文件和工具的周期任务
Cloud RoutinesAnthropic 云端不需要本机定时、GitHub 事件或 API 触发的长期自动化

不要用 /loop 代替可靠的生产调度器。它是会话级工具,关闭会话后不会继续按完整计划执行;需要长期稳定运行时使用 CI、正式任务系统或经过治理的 Routines。

会话内使用 /loop

/loop 5m 检查部署是否完成,只读取状态;成功或失败后停止并汇报

适合的任务必须可重复执行、没有重复副作用。检查状态可以重复,重复创建发布、重复发送通知或重复写数据库则不适合。

会话内任务使用本地时区,可能存在调度抖动;Claude 忙于当前响应时,任务会等当前轮结束。周期任务通常在创建七天后过期,重新打开新会话也会影响任务生命周期。

Cloud Routines 的权限风险

Routine 是一份保存的任务配置,包括提示词、仓库、环境和连接器。它在云端自主运行,没有人在每次工具调用时点批准。因此创建前必须缩小:

连接器可能同时包含读取和写入工具。界面里“已连接”不代表适合给每个 Routine 使用,应逐个删除无关连接器。

/schedule/loop 不一样

/schedule 用来创建或管理云端 Routines;/loop 在当前本地会话中循环执行提示。需要电脑关闭后仍执行的每日 PR 审查,应选 Routine;只想十分钟后回来检查本地测试,应选 /loop

/schedule 每个工作日上午 9 点检查指定仓库的新 PR,只生成审查报告和建议分支,不直接合并

Routines 目前属于预览能力,行为和限制可能变化。建立关键业务流程前必须准备独立的监控、失败通知和人工接管方式。

设计幂等任务

定时任务可能重试、延迟或在你忘记它时继续运行。提示词要包含幂等键或状态判断:如果目标已经完成就退出;如果发现已有同名 PR 就更新而不是重复创建;如果输入缺失就失败,不要自行猜测。

记录每次运行的开始时间、输入版本、仓库提交、输出链接和最终状态。没有运行记录的自动化无法审计,也无法判断它是否悄悄停止。

失败处理模板

这是一个无人值守任务。必须遵守:
1. 只读取指定仓库和连接器。
2. 不访问生产数据,不修改默认分支。
3. 输入缺失、测试失败或需要额外权限时立即停止。
4. 不重复创建已经存在的 issue、分支或 PR。
5. 最终输出运行时间、输入提交、完成动作、验证结果和失败原因。

什么时候改用 CI

如果任务本质是固定脚本,例如 lint、测试、构建和依赖扫描,优先放在 CI,让结果可重复、可缓存、可由退出码判断。只有需要理解 issue、归纳失败原因或生成审查建议时,再让 Claude 参与。

上线前做四次演练

先手动触发 Routine,并分别模拟正常输入、空输入、重复输入和下游服务失败。正常输入要产生可追踪结果;空输入应安全退出;重复输入不能创建两份资源;服务失败要保留状态并通知负责人。任何一项只能靠阅读聊天记录才能判断,都说明审计信息还不够。

为任务设置负责人和复查日期。每月检查仓库权限、连接器、模型、提示词和最近运行记录;业务结束、负责人离职或连续失败时立即停用。定时任务最危险的状态不是明确报错,而是仍在运行但目标和权限已经过期。

时区、并发和停止条件

在任务说明中写出明确时区,不使用含糊的“每天早上”。考虑夏令时、节假日和上一次任务尚未结束的情况:默认禁止同一任务并发,或为每次运行使用唯一锁。达到最大耗时、最大尝试次数、输入版本变化或需要额外权限时,应停止并报告,而不是继续猜测。

删除或暂停任务后再确认没有遗留的开放 PR、后台作业和长期凭据。暂停调度不一定会自动终止已经开始的运行,因此还要检查当前执行状态。

验收结果