<!-- title: Claude Code Routines定时编排：三级调度全实战 -->

# Claude Code Routines定时编排：三级调度全实战

**学习目标**：掌握Claude Code三级定时调度体系——/loop本地循环、Desktop Scheduled Tasks桌面定时、Cloud Routines云端编排。读完本文，你能在任何场景下让Claude Code自动运行，从本地开发监控到云端GitHub事件驱动全覆盖。

**适用人群**：已熟悉Claude Code基本操作、希望实现"AI工作自动化"的中高级开发者。

---

## 前置条件

| 条件 | 说明 |
|------|------|
| Claude Code ≥ v2.1.71 | `/loop`命令从此版本开始支持 |
| Claude Code ≥ v2.1.100+ | Cloud Routines需要较新版本 |
| Anthropic Pro/Max/Team计划 | Cloud Routines云端功能需要付费计划 |
| Node.js ≥ 18 | Claude Code运行环境 |
| Git仓库 | Cloud Routines通常关联GitHub仓库 |

---

## 一、为什么需要定时编排

Claude Code的交互模式适合实时编码，但大量开发任务天然适合自动化：

- **监控类**：持续检查CI状态、PR审查进度、生产日志异常
- **维护类**：定期更新依赖、清理死代码、生成变更日志
- **报告类**：每日代码质量报告、团队进度汇总、安全扫描
- **响应类**：GitHub事件触发代码审查、Issue自动分类

```mermaid
graph TB
    subgraph "三级调度体系"
        L["/loop<br/>本地循环<br/>Session内"]
        D["Desktop Scheduled<br/>桌面定时<br/>Cron表达式"]
        C["Cloud Routines<br/>云端编排<br/>GitHub/API/定时"]
    end

    L -->|适合| L1["实时监控<br/>开发辅助<br/>短周期任务"]
    D -->|适合| D1["本地定时<br/>日常维护<br/>个人工作流"]
    C -->|适合| C1["团队协作<br/>事件驱动<br/>7×24运行"]

    style L fill:#4CAF50,color:#fff
    style D fill:#FF9800,color:#fff
    style C fill:#2196F3,color:#fff
```

---

## 二、第一级：/loop 本地循环任务

### 2.1 /loop是什么

`/loop`是Claude Code内置的Session级调度器。在交互会话中输入`/loop`，Claude Code会以指定间隔重复执行当前提示词。它不依赖外部工具，是零配置的快速自动化方案。

**核心特点**：
- 作用域限定在当前会话，关闭终端即停止
- 支持秒级/分钟级间隔
- 不消耗额外API配额（Cloud Routines独立配额）
- 适合开发过程中的实时监控场景

### 2.2 基本用法

在Claude Code交互会话中：

```
# 基本语法
/loop <间隔> <提示词>

# 每60秒检查一次CI状态
/loop 60s 检查最近的GitHub Actions运行状态，如果有失败告诉我

# 每5分钟检查PR审查状态
/loop 5m 查看当前分支的PR状态，列出新的review comments

# 每30秒监控日志异常
/loop 30s 检查 logs/app.log 最后50行，如果有ERROR级别日志就报告
```

**间隔格式**：
- `30s` — 30秒
- `5m` — 5分钟
- `1h` — 1小时

### 2.3 实战：CI监控器

假设你刚推送代码，想持续监控CI状态直到全部通过：

```
# 步骤1：启动Claude Code
claude

# 步骤2：在会话中设置loop
/loop 45s 运行 gh run list --limit 3 --json status,conclusion,name,headBranch 
并告诉我最新的workflow run状态。如果全部通过或全部完成，停止loop并总结结果。
```

**预期输出**（每次循环）：

```
[loop #3] 检查CI状态...
  ✅ test-suite (main) — completed
  🔄 lint-check (main) — in_progress  
  ⏳ build (main) — queued
  
  等待中，45秒后再次检查...
```

当全部完成时：

```
[loop #7] 所有CI运行已完成：
  ✅ test-suite — passed (3m 22s)
  ✅ lint-check — passed (1m 05s)  
  ✅ build — passed (4m 18s)
  
  Loop已自动停止。总等待时间：约5分钟。
```

### 2.4 停止与控制

| 操作 | 方式 |
|------|------|
| 手动停止 | 按 `Ctrl+C` 或在会话中输入停止指令 |
| 自动停止 | 提示词中包含停止条件（如"全部通过后停止"） |
| 修改间隔 | 先停止当前loop，重新输入`/loop`命令 |

### 2.5 常见问题

**Q: /loop执行太频繁导致API限流怎么办？**

将间隔调大。`/loop`每次触发都是一次完整的Claude请求，建议间隔不低于30秒。如果需要更高频率，考虑使用Hooks替代。

**Q: 终端意外断开，loop丢失了？**

`/loop`是Session级的，会话丢失则loop丢失。需要持久化请使用第二级或第三级方案。

---

## 三、第二级：Desktop Scheduled Tasks 桌面定时任务

### 3.1 概述

Desktop Scheduled Tasks是Claude Code Desktop应用的内置调度功能。它使用操作系统级cron机制，即使在Claude Code窗口关闭后也能按计划执行。相比`/loop`，它具备持久性和更灵活的cron表达式支持。

### 3.2 配置方式

在Claude Code Desktop中，使用`/schedule`命令：

```
# 基本语法
/schedule <cron表达式> <提示词>

# 每天早上9点生成代码报告
/schedule "0 9 * * 1-5" 分析昨天所有的git commits，生成一份简要的日报

# 每小时检查依赖安全
/schedule "0 * * * *" 运行 npm audit，如果有critical级别漏洞就报告详情

# 每周一凌晨2点清理分支
/schedule "0 2 * * 1" 列出所有本地分支，标记超过30天未活动的分支建议删除
```

**Cron表达式格式**（5位）：

```
┌─── 分钟 (0-59)
│ ┌─── 小时 (0-23)
│ │ ┌─── 日 (1-31)
│ │ │ ┌─── 月 (1-12)
│ │ │ │ ┌─── 星期 (0-6, 0=周日)
│ │ │ │ │
* * * * *
```

### 3.3 实战：每日代码健康报告

**场景**：每天早上9点自动生成项目健康报告。

```
# 配置定时任务
/schedule "0 9 * * 1-5" 
执行以下检查并生成报告：
1. 运行 git log --since="yesterday" --oneline 统计昨日提交数
2. 运行 npm outdated 检查过期依赖数量
3. 运行 npm audit --production 检查生产依赖安全
4. 检查 test-coverage/coverage-summary.json 的覆盖率
5. 用中文汇总为一份简洁的健康报告
```

**预期输出**（每天9:00自动生成）：

```
📊 项目健康日报 — 2026-05-30

📝 提交活动：昨天 12 次提交（5位贡献者）
📦 依赖状态：3个过期包（无critical），0个安全漏洞
🧪 测试覆盖率：87.3%（+0.5% vs 上周）
⚠️ 关注事项：lodash@4.17.20 建议升级到 4.17.21

总体评级：🟢 良好
```

### 3.4 管理已配置的任务

```
# 列出所有已配置的定时任务
/schedule list

# 删除特定任务
/schedule remove <task-id>

# 暂停/恢复任务
/schedule pause <task-id>
/schedule resume <task-id>
```

### 3.5 限制与注意事项

- Desktop Scheduled Tasks需要Claude Code Desktop应用运行（可以最小化）
- 电脑需要处于开机且未休眠状态
- 每次触发会启动一个新的Claude Code会话
- 适合个人开发者，团队协作请使用Cloud Routines

---

## 四、第三级：Cloud Routines 云端编排

### 4.1 概述

Cloud Routines是Anthropic在2026年4月推出的重磅功能，将Claude Code的自动化能力提升到云端级别。Routine = 提示词 + 仓库 + 连接器 + 触发器，完全在Anthropic基础设施上运行，无需本地机器参与。

**三大触发器类型**：

| 触发器 | 说明 | 典型场景 |
|--------|------|----------|
| **Schedule** | Cron定时触发 | 每日报告、定期维护 |
| **GitHub Events** | 仓库事件触发 | PR审查、Issue分类 |
| **API** | HTTP请求触发 | 外部系统集成 |

### 4.2 创建第一个Cloud Routine

通过Claude Code CLI创建：

```bash
# 方法1：使用 claude routine create 命令
claude routine create \
  --name "pr-auto-review" \
  --repo "owner/repo" \
  --trigger "github:pull_request:opened" \
  --prompt "审查这个PR的代码变更，重点关注：1. 安全漏洞 2. 性能问题 3. 代码风格。用中文给出审查意见。"

# 方法2：通过配置文件创建
claude routine create --config routine-config.json
```

**配置文件方式**（`routine-config.json`）：

```json
{
  "name": "daily-health-check",
  "description": "每日项目健康检查",
  "repo": "myorg/myproject",
  "connector": {
    "type": "github",
    "repo": "myorg/myproject"
  },
  "trigger": {
    "type": "schedule",
    "cron": "0 8 * * 1-5"
  },
  "prompt": "执行以下项目健康检查：\n1. 检查最近24小时的CI/CD运行结果\n2. 分析开着的Issue数量和优先级分布\n3. 检查依赖更新建议（npm outdated）\n4. 汇总为中文报告并创建一个Issue",
  "model": "claude-sonnet-4-20250514",
  "maxTurns": 30,
  "allowedTools": ["Bash", "Read", "Glob", "Grep", "WebSearch"]
}
```

### 4.3 GitHub事件触发器详解

这是Cloud Routines最强大的功能——让Claude Code像Bot一样自动响应仓库事件。

```mermaid
sequenceDiagram
    participant Dev as 开发者
    participant GH as GitHub
    participant AH as Anthropic Cloud
    participant CC as Claude Code Routine
    participant Repo as 代码仓库

    Dev->>GH: 创建Pull Request
    GH->>AH: Webhook: pull_request.opened
    AH->>CC: 启动Routine
    CC->>Repo: 读取PR diff
    CC->>CC: 分析代码变更
    CC->>GH: 发布Review评论
    GH->>Dev: 收到自动审查反馈
    
    Note over AH,CC: 全程云端运行<br/>无需本地机器
```

**支持的GitHub事件**：

| 事件 | 触发时机 | 典型用途 |
|------|----------|----------|
| `pull_request:opened` | PR创建 | 自动代码审查 |
| `pull_request:synchronize` | PR更新 | 增量审查 |
| `issues:opened` | Issue创建 | 自动分类、标签 |
| `issue_comment:created` | Issue评论 | 自动回复常见问题 |
| `push` | 代码推送 | 自动部署检查 |
| `workflow_run:completed` | CI完成 | 结果分析通知 |

**PR自动审查完整配置**：

```json
{
  "name": "smart-pr-reviewer",
  "repo": "myorg/backend",
  "trigger": {
    "type": "github",
    "events": ["pull_request:opened", "pull_request:synchronize"],
    "filter": {
      "base_branch": ["main", "develop"],
      "files_changed_min": 1
    }
  },
  "prompt": "你是代码审查专家。请分析这个PR：\n\n1. **安全性**：检查是否有SQL注入、XSS、硬编码密钥等安全风险\n2. **性能**：识别N+1查询、大循环内的内存分配等问题\n3. **架构**：评估变更是否符合现有设计模式\n4. **测试**：检查是否有足够的测试覆盖\n\n用中文输出审查报告，对每个发现标注严重级别（🔴 严重 / 🟡 警告 / 🔵 建议）。\n最后给出整体评价：APPROVE / REQUEST_CHANGES / COMMENT",
  "allowedTools": ["Read", "Bash", "Grep", "Glob"],
  "maxTurns": 50
}
```

### 4.4 API触发器：与外部系统集成

API触发器让Claude Code Routine成为一个可编程的AI端点：

```bash
# 创建API触发Routine
claude routine create \
  --name "incident-responder" \
  --trigger "api" \
  --prompt "根据传入的事件数据分析根因，搜索相关日志和代码，生成故障报告"
```

**外部调用示例**（Python）：

```python
import requests
import json

def trigger_incident_analysis(incident_data):
    """触发Claude Code Routine进行故障分析"""
    response = requests.post(
        "https://api.anthropic.com/v1/routines/{routine_id}/trigger",
        headers={
            "Authorization": f"Bearer {os.environ['ANTHROPIC_API_KEY']}",
            "Content-Type": "application/json"
        },
        json={
            "input": {
                "incident_id": incident_data["id"],
                "error_message": incident_data["error"],
                "service": incident_data["service"],
                "timestamp": incident_data["timestamp"]
            }
        }
    )
    return response.json()["execution_id"]

# 监控系统调用
incident = {
    "id": "INC-2026-0530-001",
    "error": "Database connection pool exhausted",
    "service": "payment-api",
    "timestamp": "2026-05-30T08:15:30Z"
}
exec_id = trigger_incident_analysis(incident)
print(f"分析任务已触发: {exec_id}")
```

### 4.5 管理Cloud Routines

```bash
# 列出所有Routines
claude routine list

# 查看特定Routine详情
claude routine get <routine-id>

# 查看执行历史
claude routine history <routine-id> --limit 10

# 查看特定执行的详细输出
claude routine logs <execution-id>

# 手动触发一次执行
claude routine trigger <routine-id>

# 更新Routine配置
claude routine update <routine-id> --config updated-config.json

# 删除Routine
claude routine delete <routine-id>
```

---

## 五、Stream-JSON协议：深度自动化集成

### 5.1 为什么需要Stream-JSON

当Claude Code以`--print`模式运行时，默认输出纯文本。对于程序化集成，`--output-format stream-json`将输出转为结构化事件流，每个事件都是一行JSON，可以被任何编程语言解析。

```mermaid
flowchart LR
    subgraph "输入"
        P["提示词"]
        S["stdin"]
    end

    subgraph "Claude Code -p"
        CC["claude -p --output-format stream-json"]
    end

    subgraph "输出事件流"
        E1["system event"]
        E2["assistant event"]
        E3["tool_use event"]
        E4["tool_result event"]
        E5["result event"]
    end

    P --> CC
    S --> CC
    CC --> E1
    CC --> E2
    CC --> E3
    CC --> E4
    CC --> E5
```

### 5.2 基本用法

```bash
# 输出为stream-json格式
claude -p --output-format stream-json "分析当前项目的目录结构"

# 配合jq解析特定事件类型
claude -p --output-format stream-json "列出所有TODO注释" | \
  jq -c 'select(.type == "result") | .result'

# 同时输出到文件和终端
claude -p --output-format stream-json "生成API文档" | \
  tee output.jsonl | \
  jq -c 'select(.type == "assistant") | .message.content[0].text'
```

### 5.3 事件类型参考

| 事件类型 | 说明 | 关键字段 |
|----------|------|----------|
| `system` | 系统初始化信息 | `session_id`, `model` |
| `assistant` | Claude的文本输出 | `message.content[].text` |
| `tool_use` | Claude调用工具 | `tool.name`, `tool.input` |
| `tool_result` | 工具执行结果 | `result`, `is_error` |
| `result` | 最终汇总结果 | `result`, `cost_usd`, `duration_ms` |

### 5.4 实战：批量代码审查流水线

将stream-json与shell脚本结合，构建批量代码审查系统：

```bash
#!/bin/bash
# batch-review.sh — 批量PR审查脚本

REPO="myorg/backend"
OPEN_PRS=$(gh pr list --repo "$REPO" --state open --json number --jq '.[].number')

for pr_number in $OPEN_PRS; do
    echo "=== 审查 PR #$pr_number ==="
    
    # 获取PR diff
    DIFF=$(gh pr diff "$pr_number" --repo "$REPO")
    
    # 使用Claude Code审查，输出JSON
    RESULT=$(echo "$DIFF" | claude -p \
        --output-format json \
        --max-turns 5 \
        "审查这个PR的代码变更。输出JSON格式：{\"approved\": true/false, \"issues\": [...], \"summary\": \"...\"}" 2>/dev/null)
    
    # 解析结果
    APPROVED=$(echo "$RESULT" | jq -r '.approved // false')
    SUMMARY=$(echo "$RESULT" | jq -r '.summary // "无摘要"')
    
    echo "  结果: $([ "$APPROVED" = "true" ] && echo '✅ 通过' || echo '❌ 需修改')"
    echo "  摘要: $SUMMARY"
    
    # 如果不通过，自动添加评论
    if [ "$APPROVED" != "true" ]; then
        ISSUES=$(echo "$RESULT" | jq -r '.issues[] | "- " + .description')
        gh pr comment "$pr_number" --repo "$REPO" \
            --body "🤖 **自动审查反馈**\n\n$SUMMARY\n\n**问题列表：**\n$ISSUES"
    fi
    
    echo "---"
done

echo "批量审查完成。共审查 $(echo "$OPEN_PRS" | wc -l) 个PR。"
```

### 5.5 Python集成：实时事件处理

```python
#!/usr/bin/env python3
"""Claude Code stream-json 实时处理器"""

import subprocess
import json
import sys

def run_claude_stream(prompt: str, cwd: str = None):
    """运行Claude Code并实时处理stream-json事件"""
    cmd = [
        "claude", "-p",
        "--output-format", "stream-json",
        "--max-turns", "10",
        prompt
    ]
    
    proc = subprocess.Popen(
        cmd,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        cwd=cwd,
        text=True
    )
    
    full_response = []
    tools_used = []
    total_cost = 0
    
    for line in proc.stdout:
        line = line.strip()
        if not line:
            continue
        
        try:
            event = json.loads(line)
        except json.JSONDecodeError:
            continue
        
        event_type = event.get("type", "")
        
        if event_type == "assistant":
            # 提取文本内容
            content = event.get("message", {}).get("content", [])
            for block in content:
                if block.get("type") == "text":
                    text = block["text"]
                    full_response.append(text)
                    print(f"[文本] {text[:100]}...")
                    
        elif event_type == "tool_use":
            tool_name = event.get("tool", {}).get("name", "unknown")
            tools_used.append(tool_name)
            print(f"[工具] 调用: {tool_name}")
            
        elif event_type == "tool_result":
            is_error = event.get("is_error", False)
            status = "❌ 失败" if is_error else "✅ 成功"
            print(f"[结果] {status}")
            
        elif event_type == "result":
            total_cost = event.get("cost_usd", 0)
            duration = event.get("duration_ms", 0)
            print(f"\n[完成] 耗时: {duration/1000:.1f}s | 费用: ${total_cost:.4f}")
            print(f"[工具] 共使用 {len(tools_used)} 次工具调用")
    
    proc.wait()
    return {
        "response": "\n".join(full_response),
        "tools_used": tools_used,
        "cost_usd": total_cost,
        "exit_code": proc.returncode
    }


# 使用示例
if __name__ == "__main__":
    result = run_claude_stream(
        "分析 src/ 目录下的所有TypeScript文件，找出潜在的性能问题",
        cwd="/home/user/myproject"
    )
    print(f"\n最终响应:\n{result['response'][:500]}")
```

---

## 六、完整实战案例：三级别联监控系统

现在将三级调度组合使用，构建一个完整的项目监控系统。

### 6.1 系统架构

```mermaid
graph TB
    subgraph "第一级：/loop 开发中"
        L1["监控CI构建<br/>间隔: 30s"]
        L2["监控热重载<br/>间隔: 10s"]
    end

    subgraph "第二级：Desktop定时"
        D1["早9点: 代码健康报告"]
        D2["午12点: 依赖安全检查"]
        D3["晚6点: 今日工作总结"]
    end

    subgraph "第三级：Cloud Routines"
        C1["PR审查Bot<br/>触发: PR opened"]
        C2["Issue分类Bot<br/>触发: Issue opened"]
        C3["周报生成<br/>触发: 每周五17:00"]
    end

    L1 -->|开发时使用| DEV["开发者终端"]
    D1 -->|日常执行| LAPTOP["本地电脑"]
    D2 --> LAPTOP
    D3 --> LAPTOP
    C1 -->|7×24运行| CLOUD["Anthropic Cloud"]
    C2 --> CLOUD
    C3 --> CLOUD
```

### 6.2 第一级配置（开发阶段）

在Claude Code交互会话中：

```
# 开发功能时，实时监控CI
/loop 30s 
运行以下命令检查CI状态：
1. gh run list --limit 1 --json status,conclusion,name
2. 如果status不是in_progress，报告最终结果
3. 如果有失败，分析失败日志 gh run view --log-failed
如果所有run都completed，停止loop
```

### 6.3 第二级配置（日常维护）

```
# 每日健康报告
/schedule "0 9 * * 1-5"
执行项目健康检查：
1. git log --since="1 day ago" --oneline | wc -l 获取提交数
2. npm outdated 2>/dev/null | tail -n +2 | wc -l 获取过期包数
3. npm audit --production 2>/dev/null | grep -c "critical" 获取严重漏洞数
4. find src -name "*.test.*" | wc -l 获取测试文件数
5. 汇总为中文健康报告

# 每周五总结
/schedule "0 17 * * 5"
生成本周工作总结：
1. git log --since="7 days ago" --format="%s" | sort | uniq -c | sort -rn
2. 按功能模块分类提交
3. 列出本周关闭的Issue和合并的PR
4. 生成中文周报
```

### 6.4 第三级配置（云端自动）

**routine-pr-reviewer.json**：

```json
{
  "name": "pr-reviewer",
  "repo": "myorg/project",
  "trigger": {
    "type": "github",
    "events": ["pull_request:opened", "pull_request:synchronize"],
    "filter": {
      "base_branch": ["main"]
    }
  },
  "prompt": "你是一位资深代码审查员。请审查这个PR并：\n1. 识别安全风险（注入、XSS、密钥泄露）\n2. 检查错误处理完整性\n3. 评估代码可读性和维护性\n4. 验证是否有相应的测试\n\n输出格式：\n- 对每个发现标注严重级别\n- 给出具体的改进建议和代码示例\n- 最终给出APPROVE或REQUEST_CHANGES",
  "allowedTools": ["Read", "Bash", "Grep", "Glob"],
  "maxTurns": 40
}
```

**routine-weekly-report.json**：

```json
{
  "name": "weekly-engineering-report",
  "repo": "myorg/project",
  "trigger": {
    "type": "schedule",
    "cron": "0 17 * * 5"
  },
  "prompt": "生成本周工程报告：\n1. 使用 gh pr list --state merged --search 'merged:>=$(date -d \"7 days ago\" +%Y-%m-%d)' 获取已合并PR\n2. 使用 gh issue list --state closed 获取关闭的Issue\n3. 分析代码变更统计（新增/删除/修改行数）\n4. 识别本周活跃贡献者\n5. 生成结构化中文周报并创建为GitHub Issue",
  "allowedTools": ["Bash", "Read", "Grep", "WebSearch"],
  "maxTurns": 30
}
```

部署所有Routines：

```bash
# 部署PR审查Routine
claude routine create --config routine-pr-reviewer.json
# ✅ Routine created: pr-reviewer (routine_abc123)

# 部署周报Routine
claude routine create --config routine-weekly-report.json
# ✅ Routine created: weekly-engineering-report (routine_def456)

# 验证部署
claude routine list
# NAME                    TRIGGER              STATUS    LAST RUN
# pr-reviewer             github:pr_opened     active    —
# weekly-engineering-report  schedule (Fri 17:00)  active    —
```

### 6.5 监控与调试

```bash
# 查看执行历史
claude routine history routine_abc123 --limit 5

# 输出示例：
# EXECUTION_ID          STATUS    TRIGGER          STARTED           DURATION
# exec_001              ✅ done   PR #142 opened   2026-05-30 10:15  2m 32s
# exec_002              ✅ done   PR #143 opened   2026-05-30 11:42  1m 58s
# exec_003              ❌ error  PR #144 opened   2026-05-30 14:05  0m 12s

# 查看失败执行的日志
claude routine logs exec_003
# Error: max turns exceeded. The routine used 50 turns without completing.
# Suggestion: Increase maxTurns or simplify the prompt.
```

---

## 七、Hooks与Routine的协同

Hooks（钩子）和Routines可以形成互补的自动化体系。Hooks是同步、实时的拦截器；Routines是异步、调度的执行器。

```mermaid
flowchart LR
    subgraph "实时层：Hooks"
        H1["PreToolUse<br/>拦截危险操作"]
        H2["PostToolUse<br/>自动格式化"]
        H3["PreCommit<br/>提交前检查"]
    end

    subgraph "调度层：Routines"
        R1["定时健康检查"]
        R2["PR自动审查"]
        R3["周报生成"]
    end

    H1 -->|保护| CC["Claude Code<br/>执行环境"]
    H2 --> CC
    H3 --> CC
    R1 -->|触发| CC
    R2 -->|触发| CC

    style H1 fill:#e74c3c,color:#fff
    style H2 fill:#f39c12,color:#fff
    style H3 fill:#27ae60,color:#fff
```

**配置示例**（`.claude/settings.json`）：

```json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "command": "if echo '$TOOL_INPUT' | grep -qE 'rm -rf|drop table|DELETE FROM'; then echo 'BLOCKED: 危险命令被拦截'; exit 1; fi"
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "command": "npx prettier --write '$FILE_PATH' 2>/dev/null || true"
      }
    ]
  }
}
```

这段配置确保：
- Claude Code（无论是交互模式还是Routine触发）执行任何Bash命令前，自动检查危险操作
- 编辑文件后自动格式化
- Routine执行时同样受Hooks约束，保证安全性

---

## 八、成本与配额管理

### 8.1 配额模型

| 级别 | 计费方式 | 适用计划 |
|------|----------|----------|
| /loop | 消耗当前会话配额 | 所有计划 |
| Desktop Scheduled | 消耗账户API配额 | Pro/Max/Team |
| Cloud Routines | 独立Routine配额 | Pro/Max/Team |

### 8.2 成本优化策略

```bash
# 1. 使用 --max-turns 限制工具调用轮次
claude -p --max-turns 5 "快速检查代码风格"

# 2. 使用 --allowedTools 限制可用工具
claude -p --allowedTools "Read,Grep,Glob" "只做代码分析，不修改文件"

# 3. 选择合适的模型
claude -p --model haiku "简单的代码格式检查"  # 便宜快速
claude -p --model sonnet "复杂的架构分析"       # 平衡性价比

# 4. Routine中设置cost上限
# 在routine配置中添加：
{
  "maxCostUsd": 0.50,
  "maxTurns": 15
}
```

### 8.3 监控Routine消耗

```bash
# 查看Routine执行成本
claude routine history <routine-id> --format json | \
  jq -r '.[] | "\(.started_at) | $\(.cost_usd) | \(.duration_ms/1000)s"'
```

---

## 九、最佳实践清单

### 选型指南

| 需求 | 推荐方案 | 原因 |
|------|----------|------|
| 开发时实时监控 | `/loop` | 零配置，随用随停 |
| 个人日常维护 | Desktop `/schedule` | 持久化，cron灵活 |
| 团队代码审查 | Cloud Routine + GitHub | 全员受益，云端运行 |
| 外部系统触发 | Cloud Routine + API | 可编程集成 |
| 紧急响应 | `-p` + 脚本 | 最快启动，完全可控 |

### 安全注意事项

1. **Cloud Routines使用`--allowedTools`白名单**，禁止写入操作除非必要
2. **Hooks保护所有执行路径**，包括Routine触发的会话
3. **API触发Routine需要认证**，妥善管理API密钥
4. **GitHub触发需要Webhook配置**，确保只响应合法事件
5. **设置`maxCostUsd`**，防止Routine失控消耗

---

## 延伸阅读

- [Claude Code官方文档：Automate work with routines](https://code.claude.com/docs/en/routines) — Routine三大触发器完整参考
- [Claude Code官方文档：Run prompts on a schedule](https://code.claude.com/docs/en/scheduled-tasks) — `/loop`与`/schedule`命令文档
- [Claude Code官方文档：Manage sessions](https://code.claude.com/docs/en/sessions) — 会话管理与断点续传
- [Builder.io: Claude Code Routines Tutorial](https://www.builder.io/blog/claude-code-routines) — Routine实战教程与25个创意示例
- [BetterStack: Claude Code Routines Guide](https://betterstack.com/community/guides/ai/claude-code-routines/) — 定时与事件驱动自动化指南

---

## 训练营适用性评估

| 维度 | 评估 |
|------|------|
| 适合训练营类型 | 自动化工程营、DevOps训练营、AI Agent开发营 |
| 预计教学时长 | 3-4小时（含动手实验） |
| 难度等级 | 中高级 |
| 前置知识 | Claude Code基础操作、Git/GitHub基本概念 |
| 实验环境要求 | 需要Anthropic Pro以上计划体验Cloud Routines |
| 建议分组 | 每2-3人一组，各负责一级调度方案 |

---

## 参考来源

1. [Automate work with routines — Claude Code Docs](https://code.claude.com/docs/en/routines) — Anthropic官方Routine功能文档，涵盖Schedule/GitHub/API三种触发器
2. [Run prompts on a schedule — Claude Code Docs](https://code.claude.com/docs/en/scheduled-tasks) — 官方定时任务文档，/loop与/schedule命令参考
3. [Builder.io: Claude Code Routines Tutorial](https://www.builder.io/blog/claude-code-routines) — Schedule/API/GitHub Triggers实战教程
4. [Stream-JSON Protocol Reference](https://github.com/claudification/claudewerk/blob/main/docs/stream-json-protocol.md) — stream-json输出协议完整事件类型参考
5. [Using Claude Code Programmatically — Gist](https://gist.github.com/JacobFV/2c4a75bc6a835d2c1f6c863cfcbdfa5a) — --print模式编程化使用完整指南

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
