1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
title: "/loop 在 Claude Code 中:一个与终端共存的 cron"
date: 2026-03-09T12:00:00+01:00
draft: false
slug: "loop-cron-claude-code"
slug_en: "claude-code-loop-vs-cron-scheduling"
description: "Claude Code 2.1.71 带来了 /loop,这是一个内嵌的定时任务调度器。它的功能、用途及为什么它无法替代一个真正的 cron。"
tags: ["claude-code", "anthropic", "生产力", "自动化", "定时任务"]
categories: ["观点"]

translation:
  hash: ""
  last_translated: ""
  notes: |
    - "de aquella manera": 意思是“有点像/勉强/做得很粗糙”,不宜直译。
    - "ojo": “注意”/“重点在这里”,不是身体器官的眼睛。
    - "chapuza": “粗糙的解决方式”,临时的简单解决方案。
    - "barra del bar": 可以翻译为“酒吧柜台”,比喻一种随意的对话场景。
    - "chupar banquillo": 运动术语,意为“坐冷板凳”或“等待而不用”。
---
几个月来,我一直用自制的 cron 来执行 Claude Code 的任务。一个 Bash 脚本启动一个 headless 会话,给它一个 prompt,等待任务完成后关闭。它能运作,虽然运作得勉强,但能用。如果有需要,我把代码放在 [GitHub](https://github.com/frr149/claude-cron) 供大家参考。

而上周五,Anthropic 发布了 2.1.71 版本,引入了 `/loop`。一个原生的调度器,就直接内置在 Claude Code 会话中。

我的第一反应是:“我的项目凉了。”

试用之后的第二反应是:“嗯...还没死,但离死不远了。”

## /loop 的功能

语法相当简洁:

/loop 5m check the deploy status


这个命令告诉 Claude Code:“每 5 分钟,执行这个 prompt 一次。” 不需要退出会话,也不需要 cron,也不用脚本。Claude 来解析时间间隔,安排任务,并在会话仍然开启且处于 *空闲* 状态时执行它。

你可以串联多个斜杠命令:

/loop 20m /review-pr 1234 /loop 1h make test 2>&1 | tail -5


每个 loop 都有一个“安全网”:三天后它会自动到期。如果你曾经留下一个忘记关闭的 cron,你大概能理解这种设计有多贴心。

## 我会如何使用它

试用一天后,我已经发现了三个明确的用途:

**1. 在开发过程中监控测试。** 

现在我正在 Tokamak 上实现一个重要功能(比如冷启动的五个优化阶段)。与其每次修改一点代码就运行 `make test`,不如直接这样做:

/loop 10m make test 2>&1 | grep -E “passed|failed”


如果哪里出了问题,Claude 会通知我,我不用手动一遍遍敲命令。

**2. 部署时保姆模式。** 

每次我推送新版本代码,希望知道 CI 什么时候完成:

/loop 3m gh run list –limit 1


**3. 监控状态 API。**

今天我修复了一个 Tokamak 的 bug:Claude Desktop 的一些异常被错误地显示在 Claude Code 下。修这个问题的时候,我就很希望能有这样的工具:

/loop 5m curl -s https://status.claude.com/api/v2/incidents/unresolved.json | python3 -c “import sys,json; print(len(json.load(sys.stdin)[‘incidents’]), ‘incidents’)”


## /loop 的局限性

这里需要重点说明的一点是,`/loop` 是一个 *会话内调度器*,这意味着:

- **会话一关闭,它就没了。** 
关闭终端后任务就结束了,不会有持久化。
- **只能在 *空闲* 状态下工作。**
如果 Claude 正在处理其他任务,loop 会等待,不会打断。
- **最长持续三天。**
你无法让一个 loop 运行一星期。
- **两次执行之间没有状态同步。**
每次循环都是一个全新的 prompt,不会记忆前一次的上下文。

用更通俗点的话说:`/loop` 就是一个增强版的 `watch`,它不是 cron。

## cron 的作用

我的 [claude-cron](https://github.com/frr149/claude-cron) 实现的功能是完全不同的。它会启动一个新的 **headless 会话**,执行 prompt,接着关闭。不需要一个打开的终端,也不需要依赖一个存活的会话。它通过 `launchd`(或者 `cron`,或者 `systemd`)来运行,即使你在睡觉它也照常工作。

| 功能 | `/loop` | `claude-cron` |
|---|---|---|
| 是否需要打开会话 | 是 | 否 |
| 终端关闭后是否仍然存活 | 否 | 是 |
| 最大持续时间 | 3 天 | 无限制 |
| 理想用途 | “工作时监视这个” | “每天凌晨 3 点做这个” |
| 使用难度 | 零(一个命令) | 脚本 + launchd/cron |

两者实际上是互惠互补的。`/loop` 适用于短期需求,`claude-cron` 则负责长期计划任务。

举个真实的例子:我有一个 cron,每晚将博客的新文章翻译成四种语言并提交到 repo。这种场景 `/loop` 无法胜任。我不可能整晚保持一个会话打开,只为了让它记得凌晨 3 点去翻译东西。

但如果我正在写作一篇文章,希望 Claude 每隔 15 分钟检查一次语法,那 `/loop` 则非常合适。没有必要为一个只需持续一下午的任务搭建复杂的基础设施。

## 未来:*计划任务(scheduled tasks)*

还有一个即将加入的“玩家”会把局势搞得更复杂:Claude Code 和 Cowork 的 *计划任务* 功能。这种后台运行的定时任务无需开启会话,由 Anthropic 直接管理。这个功能正是导致这周日光节约时间改制时发生问题的罪魁祸首(一个 *无限循环* 卡在了不存在的时间中)。

当这个功能成熟时,它或许真的会取代像 `claude-cron` 这样的工具。一个原生的调度器,支持身份验证,不需要 Bash 脚本,也不需要 `launchd`,听起来很美好。但是这是未来的事。目前,*计划任务* 功能还在预览阶段,时不时会因为日光节约时间的问题崩溃。所以我的 Bash 脚本仍然会继续“坐冷板凳”一阵。

## 总结

`/loop` 是一款专注于特定使用场景的优秀工具:适用于会话内的短期重复任务。它并不能取代 cron,但对于日常 80% 的临时需求来说,已经是一个很棒的工具。

现在我的流程是:工作时用 `/loop` 来监控任务,晚上睡觉时用 `claude-cron` 执行任务,同时密切留意 *计划任务* 的发展,等到 Anthropic 解决日光节约的问题。

三层自动化工具。各司其职。有时候,真正的解决方案不是选择一种工具,而是知道应该在什么时候用哪一种工具。