Claude Code Tools 研究系列(十二)—— Cron 家族:把动作安排到未来
内容提要
本文介绍Claude Code的Cron家族工具(CronCreate/CronDelete/CronList),用于定时调度未来动作。核心是CronCreate,支持一次性或周期性任务,采用标准cron语法,仅限会话内有效,7天自动过期。设计强调复用行业约定、负载分散(避开整点)、诚实透明,与Task家族、Bash后台及Monitor工具分工明确,是唯一跨越时间的工具原语。
延伸解读
为什么 Cron 家族是唯一的时间原语
前十一篇工具都是同步执行,调用即返回,而 Cron 家族是唯一能跨越时间、在未来自动触发的工具。它把“等待”从主 Claude 的责任转移给 runtime,避免阻塞对话或浪费上下文。例如,安排 8 分钟后的 CI 检查,Claude 可以立即回到用户,到点自动唤醒。这种设计让 Claude 能处理“等外部状态变化”的任务,而不占用当前交互。
复用行业约定,降低认知门槛
Cron 家族直接沿用 Unix crontab 的 5 字段语法和“Cron”命名,不自造 DSL。这样用户无需学习新语法,Claude 也能利用训练数据中的大量示例。字段设计上,recurring 默认 true 偏向监控用途,时区默认本地时间,避免 UTC 换算的常见错误。这些选择都体现了“复用行业约定、减少认知门槛”的核心设计思路。
负载分散与诚实透明的设计细节
Cron 工具描述中明确要求避开 :00 和 :30,以分散全球用户的请求负载,并解释理由,让 Claude 理解意图而非教条执行。同时,session-only 生命周期、7 天上限、durable 遗留字段无效果、jitter 机制等都被透明告知,避免 Claude 做出无法兑现的承诺或产生误解。这种诚实透明贯穿始终,是设计的重要原则。
与其他等待原语的分工
Cron 家族并非唯一的等待机制。Bash 后台适合一次性事件通知,Monitor 用于无固定时间点的事件监听,而 Cron 则用于到点提醒或周期性监控。工具描述中直接指路 Monitor,避免 Claude 误用。这种明确的分工让 Claude 能根据语义选择最合适的工具,提高效率并减少资源浪费。
Q&A
Claude Code 的 Cron 家族工具包括哪些?它们各自的作用是什么?
Cron 家族包括三个工具:CronCreate 用于创建一个未来触发的 prompt,采用标准 5 字段 cron 表达式;CronDelete 用于取消一个已调度的 job;CronList 用于列出当前 session 中所有调度中的 jobs。
CronCreate 支持哪些调度模式?如何区分一次性任务和周期性任务?
CronCreate 支持一次性(recurring: false)和周期性(recurring: true)两种模式。一次性任务用于已知时刻的动作,如“明天 9 点提醒我 review PR”;周期性任务用于未知截止时间的监控,如“每 5 分钟检查一次 CI”。通过 recurring 布尔参数切换。
Cron 任务的生命周期有什么限制?为什么会有这些限制?
Cron 任务仅在当前 session 内有效,不写盘,Claude 退出后任务即消失。周期性任务最多存活 7 天,到期自动最后一次触发后删除。这些限制是为了防止任务无限存活占用资源,并简化设计,避免持久化带来的复杂度。
为什么 CronCreate 要避开整点(:00 和 :30)?什么情况下应该使用整点?
避开整点是为了负载分散,避免所有用户的请求在同一时刻到达 API 造成尖峰。当用户明确指定精确时间(如“9:00 sharp”)或需要与会议对齐时,应使用整点。
Cron 家族与 Task 家族、Bash 后台、Monitor 工具在功能上有什么区别?
Task 家族记录待办事项,等 Claude 有空时处理;Cron 家族安排未来自动触发的动作。Bash 后台是 IO 异步,等待命令结束;Cron 是时间异步,等待时间到。Monitor 用于监听事件变化,而 Cron 是定时轮询。
Cron 任务触发时,如果 Claude 正在处理其他请求会怎样?
Cron 任务只在 REPL 空闲时触发,如果到期时 Claude 正在处理其他用户 prompt,触发会延迟到当前处理完成之后,避免打断 Claude 的思路。
CronCreate 的 cron 字段使用什么语法?时区如何处理?
cron 字段使用标准 5 字段 cron 语法:minute hour day-of-month month day-of-week,采用用户本地时区,无需进行 UTC 转换。例如“0 9 * * *”表示本地时间每天 9 点。
Cron 家族中 durable 字段的作用是什么?
durable 字段是遗留字段,没有实际效果。tool description 明确说明“durable has no effect”,这是为了保持向后兼容而保留的,同时诚实告知用户该字段无用,避免浪费精力设置。