首页 › tutorials › Claude Code定时巡检:从/loop到桌面操控

概述

本教程深入讲解 Claude Code 的三大定时自动化能力:/loop 会话内调度、cron + headless 模式的持久化调度,以及 Computer Use 桌面自动化。你将学会如何构建从代码巡检到 GUI 自动操作的完整工作流,让 AI 在你睡觉时替你干活。适合有 Claude Code 基础使用经验、希望将日常重复任务自动化的中级开发者。

适用人群:已有 Claude Code 使用经验,理解 MCP 基本概念的中级开发者。

前置条件

一、为什么需要定时自动化

开发者日常中有大量"等"的时刻:等 CI 构建完成、等 PR 被审查、等服务恢复、等部署上线。这些微中断破坏专注力,却是必要的。Claude Code 的定时自动化能力正是为解决这个矛盾而生。

Claude Code 提供三个层次的定时能力:

层次 工具 生命周期 适用场景
会话级 /loop 命令 随会话关闭而终止 编码时同步监控
系统级 cron + headless 独立于会话,系统重启后仍运行 夜间巡检、定时报告
GUI级 Computer Use 会话内,需桌面环境 操作无 API 的 GUI 工具
graph TD
    A[定时任务需求] --> B{需要 GUI 操作?}
    B -->|否| C{需要跨会话持久化?}
    B -->|是| D[Computer Use + /loop]
    C -->|否| E["/loop 会话内调度"]
    C -->|是| F["cron + headless 模式"]
    E --> G[构建监控<br/>PR 审查提醒<br/>Issue 分诊]
    F --> H[安全扫描<br/>夜间部署检查<br/>日报生成]
    D --> I[测试 Native App<br/>GUI 工具自动化<br/>截图回归测试]

    style A fill:#1a1a2e,color:#fff
    style D fill:#e94560,color:#fff
    style E fill:#0f3460,color:#fff
    style F fill:#16213e,color:#fff

二、/loop:会话内定时调度详解

2.1 基本语法与用法

/loop 是 Claude Code 内置的定时调度命令,首次执行立即触发,之后按间隔重复运行。由 Boris Cherny(Claude Code 负责人)在 2026 年 3 月推出,从社区中被称为"Ralph Wiggums"的技巧演变而来。

# 基本语法
/loop <间隔> "<prompt>"

# 示例:每 5 分钟检查构建状态
/loop 5m "check if the Vite build succeeded and summarize new errors"

# 每 15 分钟执行代码审查
/loop 15m "review changed files and queue review notes"

# 每 30 分钟分诊 GitHub Issues
/loop 30m "check for new GitHub issues, label them, add a proposed resolution comment"

间隔格式支持: - 5m — 5 分钟 - 1h — 1 小时 - 30s — 30 秒(最小粒度) - 自然语言也支持:"check every 5 minutes"

2.2 关键限制与设计决策

属性 值 说明
最大任务数 50 个/会话 超出需删除旧任务
最长存活 3 天 到期自动停止
生命周期 会话级 关闭终端即终止
Token 消耗 每次触发计费 与普通对话相同
首次触发 立即执行 不是等一个间隔后才执行

为什么只有 3 天? 这是安全机制。Claude Code 的设计理念是:长期持久化任务应该用 cron + headless 模式,而非无限循环。/loop 解决的是"我在编码时顺便帮我盯着"的场景。

2.3 实战:构建监控看板

# 在 Claude Code 会话中执行
/loop 5m "检查以下内容并给出状态摘要:
1. git status 是否有未提交的更改
2. npm test 最近一次运行结果
3. 当前分支是否有未合并的 PR
4. 磁盘使用是否超过 80%
如果有异常,用 ⚠️ 标记;如果一切正常,用 ✅ 标记"

预期输出(每 5 分钟):

📋 状态巡检 [2026-05-20 14:35]

✅ Git: clean, 分支 feature/auth
✅ Tests: 142/142 passed
⚠️ PR #347: 等待 review 已超过 24 小时
✅ Disk: 62% used

建议:提醒 @reviewer 查看 PR #347

2.4 管理 /loop 任务

# 查看所有活跃任务(自然语言)
> "what scheduled tasks do I have?"

# 删除特定任务
> "stop the build monitoring loop"

# 修改间隔
> "change the issue triage loop to every hour"

# 一次性提醒(不是循环)
> "remind me at 3pm to review the API docs"

每个任务分配一个 8 字符的唯一 ID,可通过 CronList 工具查看详细信息。

2.5 常见问题

Q: /loop 任务关掉终端后还会运行吗?

不会。/loop 是会话级调度,关闭终端或退出 Claude Code 后所有任务自动取消。需要持久化请使用 cron + headless 模式或 Desktop Scheduled Tasks。

Q: 设置太多 /loop 会不会很贵?

每次触发都是一次完整的 API 调用,消耗 Token。建议: - 监控类任务间隔不小于 5 分钟 - 避免同时运行超过 10 个 /loop - 用 --max-budget-usd 控制单次预算

三、Cron + Headless:持久化定时任务

3.1 Cron 调度的五条铁律

当你的任务需要跨会话运行(夜间巡检、定时报告等),cron + Claude Code headless 模式是正确选择。Background Claude 团队总结了五条铁律:

铁律一:锁定工作目录

Cron 默认工作目录是 $HOME,几乎永远不是你想要的。

铁律二:始终从已知状态开始

每次执行前先 git pull --ff-only,防止漂移。

铁律三:用锁防止重叠

两个 Claude Code 实例同时操作同一仓库会导致索引冲突。

铁律四:按次预算,而非按天

每次调用都传 --max-budget-usd,防止单次失控烧光预算。

铁律五:记录 JSON 日志

用 --output-format json 输出到日期日志文件,方便事后对比分析。

3.2 完整 Cron 配置示例

创建文件 /etc/cron.d/claude-nightly:

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin

# 每晚 02:47 执行安全扫描
47 2 * * * deploy cd /srv/myproject \
  && git pull --ff-only \
  && flock -n /tmp/claude-security.lock claude \
    -p "$(cat ~/prompts/security-sweep.md)" \
    --allowedTools "Bash(git:*),Bash(npm audit),Read,Grep" \
    --max-turns 60 \
    --max-budget-usd 3 \
    --output-format json \
    > /var/log/claude/sweep-$(date +\%F).json \
    2> /var/log/claude/sweep-$(date +\%F).err

# 每 4 小时检查依赖更新
0 */4 * * * deploy cd /srv/myproject \
  && flock -n /tmp/claude-deps.lock claude \
    -p "检查 package.json 中是否有安全更新。如果有,创建一个分支并提交 PR。" \
    --allowedTools "Bash(git:*),Bash(npm:*),Read,Write" \
    --max-turns 30 \
    --max-budget-usd 1.5 \
    --output-format json \
    > /var/log/claude/deps-$(date +\%F-\%H).json \
    2> /var/log/claude/deps-$(date +\%F-\%H).err

3.3 Headless 模式参数详解

claude \
  -p "your prompt here" \        # 非交互模式,直接执行 prompt
  --allowedTools "Bash(git:*),Read,Grep" \  # 白名单工具,限制能力
  --max-turns 60 \               # 最大对话轮次
  --max-budget-usd 3 \           # 单次执行预算上限(美元)
  --output-format json \         # 输出 JSON 格式
  --model claude-sonnet-4-6      # 指定模型(节省成本)

--allowedTools 权限控制:

这是生产级 cron 任务的关键安全措施。Bash(git:*) 表示只允许执行以 git 开头的 Bash 命令:

--allowedTools "Bash(git:*),Bash(npm audit),Read,Grep"
# ✅ 允许:git status, git log, git diff
# ✅ 允许:npm audit
# ✅ 允许:Read, Grep(只读操作)
# ❌ 禁止:rm, curl, npm publish, 任何写入操作

3.4 Prompt 模板:安全巡检

创建 ~/prompts/security-sweep.md:

你是一个安全巡检助手。请执行以下检查:

1. **依赖漏洞扫描**:运行 npm audit,列出所有 high/critical 级别漏洞
2. **密钥泄露检查**:搜索代码中是否有硬编码的 API key、密码、token
3. **权限审计**:检查最近 7 天的 git log,标记可疑的大范围权限变更
4. **配置漂移**:比较当前 .env.example 和 .env(如果存在),发现新增的敏感配置项

输出格式:
- 每项检查给出 ✅ 通过 或 ⚠️ 发现问题
- 发现的问题给出具体的文件路径和行号
- 最后给出总体安全评分(A-F)
- 如果发现 critical 问题,创建 GitHub Issue 标记为 security
sequenceDiagram
    participant Cron as Cron 调度器
    participant Lock as flock 锁
    participant Claude as Claude Code
    participant Git as Git 仓库
    participant GH as GitHub API

    Cron->>Lock: 获取 /tmp/claude-security.lock
    alt 获取锁成功
        Lock-->>Cron: ✅ 锁定
        Cron->>Git: git pull --ff-only
        Git-->>Cron: 最新代码
        Cron->>Claude: -p "安全巡检..."
        Claude->>Git: npm audit, grep secrets
        Git-->>Claude: 扫描结果
        Claude->>GH: 创建 Issue(如有问题)
        GH-->>Claude: Issue URL
        Claude-->>Cron: JSON 报告
        Cron->>Cron: 写入日期日志
    else 锁已被占用
        Lock-->>Cron: ❌ 跳过本次
    end

四、Computer Use:桌面自动化

4.1 Computer Use 是什么

2026 年 3 月 31 日,Anthropic 为 Claude Code 正式上线了 Computer Use 功能(Product Hunt 当日排名第 2)。这个功能让 Claude Code 从一个只能操作终端的 CLI 工具,变成了能"看到"屏幕、"移动"鼠标、"敲击"键盘的桌面操作员。

Computer Use 解决的核心问题:不是所有工具都有 API。当你需要: - 测试 Native macOS 应用 - 操作只有 GUI 界面的内部工具 - 在 iOS 模拟器中执行 UI 测试 - 截图验证布局效果

传统的 CLI 自动化无能为力,而 Computer Use 填补了这个空白。

4.2 工具优先级层级

Claude Code 操作的优先级如下:

1. MCP Server → 优先通过 MCP 工具操作(最精准)
2. Bash 命令  → 通过 shell 执行命令(次优)
3. Computer Use → 通过 GUI 直接操作(最后手段)

这意味着 Claude 会先尝试用 API 或命令行完成任务,只有当这些路径走不通时才启用 Computer Use。

4.3 启用与配置

# Computer Use 在 Claude Code 中默认关闭,需要手动启用
# 在 Claude Code 会话中输入
> /computer-use enable

# 或在 settings.json 中配置
# ~/.claude/settings.json
{
  "computerUse": {
    "enabled": true,
    "permissions": ["screenshot", "mouse", "keyboard"]
  }
}

系统要求: - macOS 13+(当前仅支持 macOS) - 屏幕录制权限(系统偏好设置 → 隐私 → 屏幕录制) - 辅助功能权限(系统偏好设置 → 隐私 → 辅助功能)

4.4 Computer Use API 工具清单

Computer Use 提供三个核心工具:

工具 能力 使用场景
computer_screenshot 截取当前屏幕 验证 UI 状态、OCR 识别
computer_mouse 鼠标移动、点击、拖拽、滚动 操作 GUI 元素
computer_keyboard 键盘输入、快捷键组合 输入文本、触发操作

4.5 实战:自动化 GUI 测试

# 在 Claude Code 中执行
> 打开 Safari,访问 http://localhost:3000,
> 截图验证首页是否正常加载,
> 然后点击"登录"按钮,
> 输入测试账号 [email protected] / test123,
> 截图确认是否登录成功

Claude 会自动分解为: 1. computer_keyboard — Cmd+Space,输入 "Safari",回车 2. computer_keyboard — Cmd+L,输入 URL,回车 3. computer_screenshot — 截取当前页面 4. computer_mouse — 定位到"登录"按钮坐标,点击 5. computer_keyboard — 输入测试凭证 6. computer_screenshot — 验证登录结果

4.6 Computer Use + /loop:持续 GUI 监控

这是一个强大的组合:用 /loop 定时触发 Computer Use,实现持续的 GUI 状态监控。

# 每 10 分钟检查内部管理后台的健康状态
/loop 10m "打开 Chrome,访问 http://admin.internal:8080/health,
截图查看仪表盘是否显示绿色状态。
如果有红色告警,截图并描述具体异常,
然后发送通知到 Slack #ops 频道。"

注意:这需要配合 Slack MCP Server 使用,才能实现自动通知。

4.7 安全注意事项

Computer Use 是一把双刃剑。以下安全实践必须遵守:

  1. 永远在虚拟桌面运行:使用 macOS 的 Space 或 Docker 容器隔离
  2. 限制操作范围:通过 --allowedTools 控制可用工具
  3. 预算上限必设:GUI 操作的 Token 消耗远高于纯文本
  4. 截图不要包含敏感信息:关闭密码管理器、邮件客户端等窗口
  5. 定期审计操作日志:Computer Use 的每次操作都有记录

五、三层调度选择决策树

graph LR
    A[需要定时任务] --> B{需要 GUI 操作?}
    B -->|是| C[Computer Use + /loop]
    B -->|否| D{会话关闭后仍需运行?}
    D -->|否| E["/loop(会话内)"]
    D -->|是| F{需要多仓库/多任务并发?}
    F -->|否| G["cron + headless"]
    F -->|是| H["GitHub Actions<br/>或 CI/CD 平台"]

    C --> I["示例:GUI 监控<br/>Native App 测试"]
    E --> J["示例:构建监控<br/>PR 审查提醒"]
    G --> K["示例:安全扫描<br/>依赖更新"]
    H --> L["示例:多项目巡检<br/>定时部署"]

    style C fill:#e94560,color:#fff
    style E fill:#0f3460,color:#fff
    style G fill:#16213e,color:#fff
    style H fill:#533483,color:#fff

六、完整实战项目:智能项目巡检 Agent

将上述三层能力组合成一个完整的项目巡检系统。

6.1 项目结构

~/claude-patrol/
├── prompts/
│   ├── security-sweep.md      # 安全巡检 prompt
│   ├── build-monitor.md       # 构建监控 prompt
│   └── gui-health-check.md    # GUI 健康检查 prompt
├── scripts/
│   ├── cron-setup.sh          # Cron 配置脚本
│   └── patrol-report.sh       # 报告汇总脚本
└── config/
    └── patrol.json            # 巡检配置

6.2 巡检配置文件

// config/patrol.json
{
  "project": "my-saas-app",
  "repo": "/srv/my-saas-app",
  "schedules": {
    "security": {
      "cron": "47 2 * * *",
      "budget": 3,
      "maxTurns": 60,
      "tools": ["Bash(git:*)", "Bash(npm audit)", "Read", "Grep"],
      "output": "/var/log/claude/security-{date}.json"
    },
    "deps": {
      "cron": "0 */4 * * *",
      "budget": 1.5,
      "maxTurns": 30,
      "tools": ["Bash(git:*)", "Bash(npm:*)", "Read", "Write"],
      "output": "/var/log/claude/deps-{date}-{hour}.json"
    },
    "gui": {
      "loop": "10m",
      "prompt": "check-gui-health",
      "budget": 0.5,
      "tools": ["computer_screenshot", "computer_mouse", "computer_keyboard"]
    }
  }
}

6.3 Cron 安装脚本

#!/bin/bash
# scripts/cron-setup.sh

PROJECT_DIR="/srv/my-saas-app"
LOG_DIR="/var/log/claude"
PROMPT_DIR="$HOME/claude-patrol/prompts"

mkdir -p "$LOG_DIR"

cat > /tmp/claude-patrol-cron << EOF
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin

# 安全巡检 - 每晚 02:47
47 2 * * * cd $PROJECT_DIR && git pull --ff-only && \\
  flock -n /tmp/claude-security.lock claude \\
    -p "\$(cat $PROMPT_DIR/security-sweep.md)" \\
    --allowedTools "Bash(git:*),Bash(npm audit),Read,Grep" \\
    --max-turns 60 \\
    --max-budget-usd 3 \\
    --output-format json \\
    > $LOG_DIR/security-\$(date +\%F).json 2>&1

# 依赖更新检查 - 每 4 小时
0 */4 * * * cd $PROJECT_DIR && git pull --ff-only && \\
  flock -n /tmp/claude-deps.lock claude \\
    -p "检查依赖更新,如有安全补丁创建 PR" \\
    --allowedTools "Bash(git:*),Bash(npm:*),Read,Write" \\
    --max-turns 30 \\
    --max-budget-usd 1.5 \\
    --output-format json \\
    > $LOG_DIR/deps-\$(date +\%F-\%H).json 2>&1
EOF

crontab /tmp/claude-patrol-cron
echo "✅ 巡检 cron 已安装"
crontab -l

6.4 会话内 /loop 任务(GUI 监控)

在 Claude Code 会话中启动:

# 1. 构建状态监控
/loop 5m "检查 Vite 构建是否成功,如果有新错误,列出错误详情和建议修复方案"

# 2. PR 审查提醒
/loop 15m "检查当前分支的 PR 状态。如果有新评论,摘要告诉我。如果等待超过 24 小时未 review,建议我 @相关 reviewer"

# 3. GUI 健康检查(需要 Computer Use)
/loop 10m "打开浏览器访问 http://localhost:3000,截图确认首页加载正常。检查关键元素的可见性和位置是否正确。如果有异常,描述具体问题"

6.5 报告汇总脚本

#!/bin/bash
# scripts/patrol-report.sh

DATE=$(date +%F)
LOG_DIR="/var/log/claude"

echo "========== 项目巡检日报 $DATE =========="

# 安全扫描报告
if [ -f "$LOG_DIR/security-$DATE.json" ]; then
  echo ""
  echo "🔒 安全扫描:"
  cat "$LOG_DIR/security-$DATE.json" | jq -r '.result // "无结果"' 2>/dev/null | head -20
else
  echo "⚠️ 安全扫描:今日未执行"
fi

# 依赖更新报告
echo ""
echo "📦 依赖检查:"
ls -t "$LOG_DIR"/deps-$DATE-*.json 2>/dev/null | head -1 | \
  xargs cat 2>/dev/null | jq -r '.result // "无更新"' 2>/dev/null | head -10

echo ""
echo "============================================="

七、进阶模式与最佳实践

7.1 幂等性设计

定时任务必须设计为幂等的——同一 prompt 执行两次不应产生不同副作用:

❌ 不好的 prompt:
"创建一个 Issue 记录这个安全漏洞"

✅ 好的 prompt:
"检查是否已有标记为 security 的 Issue 描述此漏洞。
如果没有,创建一个新的。如果有,更新其状态。"

7.2 渐进式预算控制

# 开发阶段:宽松预算,快速迭代
--max-budget-usd 5 --max-turns 100

# 测试阶段:适中预算,验证稳定性
--max-budget-usd 3 --max-turns 60

# 生产阶段:严格预算,确保可控
--max-budget-usd 1.5 --max-turns 30

7.3 避免定时任务陷阱

陷阱 症状 解决方案
无限循环 /loop 永不停 设置明确的退出条件
重复执行 同一任务被执行两次 flock -n 锁机制
预算爆炸 意外消耗大量 Token --max-budget-usd 硬限制
状态漂移 在旧代码上执行 git pull --ff-only 前置
日志膨胀 磁盘被日志占满 logrotate + 日期轮转
GUI 卡死 Computer Use 无响应 超时机制 + 截图验证

7.4 多项目巡检模板

# 多项目共享 prompt 模板
TEMPLATE_DIR="$HOME/claude-patrol/prompts"

for repo in /srv/project-a /srv/project-b /srv/project-c; do
  PROJECT=$(basename "$repo")
  cd "$repo" && git pull --ff-only && \
  flock -n "/tmp/claude-$PROJECT.lock" claude \
    -p "$(sed "s/{{PROJECT}}/$PROJECT/g" "$TEMPLATE_DIR/patrol.md")" \
    --allowedTools "Bash(git:*),Read,Grep" \
    --max-turns 30 \
    --max-budget-usd 1 \
    --output-format json \
    > "/var/log/claude/$PROJECT-$(date +%F).json" 2>&1 &
done
wait
echo "✅ 所有项目巡检完成"

八、成本估算与 ROI 分析

8.1 典型任务 Token 消耗

任务类型 间隔 每日执行次数 预估 Token/次 日成本(Sonnet)
构建监控 5min 96 ~2,000 ~$0.58
PR 审查 15min 32 ~5,000 ~$0.48
Issue 分诊 30min 16 ~8,000 ~$0.38
安全扫描 24h 1 ~50,000 ~$0.19
GUI 检查 10min 48 ~15,000 ~$2.16

8.2 成本优化建议

  1. 优先用 Sonnet 而非 Opus:巡检类任务 Sonnet 性价比更高
  2. 调整间隔到实际需要的最小频率:5 分钟够用的不要设 1 分钟
  3. 区分工作时间和非工作时间:夜间只保留关键巡检
  4. 合并相似任务:一个综合 prompt 比三个分开的更省
  5. 使用 --output-format json:结构化输出比自由文本更短更省

九、Desktop Scheduled Tasks 与 Cloud Routines

除了 /loop 和 cron,Claude Code 还有第三层调度能力:

9.1 三层调度对比

维度 /loop Desktop Scheduled Tasks Cloud Routines
位置 会话内 本地 Desktop App Anthropic Cloud
持久化 随会话终止 重启后仍运行 永久运行
配置方式 自然语言 Desktop App GUI API / Web 控制台
GUI 访问 ✅(需 Computer Use) ✅ ❌
适用场景 编码时辅助 本地自动化 全天候云巡检
成本 按 Token 按 Token 按 Token + 云资源

9.2 升级路径

个人开发者小项目:/loop(够用)
↓ 项目增长
团队项目日常维护:cron + headless(稳定)
↓ 需要更多自动化
企业级持续巡检:GitHub Actions + Cloud Routines

十、排查与调试

10.1 /loop 不触发

# 检查会话是否活跃
# /loop 依赖活跃的 Claude Code 会话

# 查看当前活跃任务
> "list all active scheduled tasks"

# 检查是否达到 50 个任务上限
> "how many scheduled tasks are running?"

10.2 Cron 任务静默失败

# 检查 cron 日志
grep CRON /var/log/syslog | tail -20

# 手动运行一次测试
cd /srv/myproject && \
  claude -p "测试 prompt" \
    --max-turns 5 \
    --max-budget-usd 0.5 \
    --output-format json

# 检查输出文件
cat /var/log/claude/sweep-$(date +%F).json | jq .

# 检查错误文件
cat /var/log/claude/sweep-$(date +%F).err

10.3 Computer Use 权限问题

# macOS 授权检查
# 系统偏好设置 → 隐私与安全 → 屏幕录制 → 添加 Terminal / Claude
# 系统偏好设置 → 隐私与安全 → 辅助功能 → 添加 Terminal / Claude

# 验证权限
> "take a screenshot"
# 如果报权限错误,检查上述设置

延伸阅读

参考来源

  1. Run prompts on a schedule — Claude Code 官方文档 — /loop 和 cron 调度的官方说明文档
  2. Scheduled Claude Code — cron, /loop, and when to graduate — cron 调度五条铁律、flock 锁机制、预算控制实践
  3. Computer Use in Claude Code: Let Claude use your computer from the CLI — Computer Use 功能的详细解读和实战案例
  4. Claude Code /loop: Automate Your Recurring Tasks Like a Pro — /loop 命令的语法详解和监控场景示例
  5. Claude Code Scheduled Tasks & Routines: The Complete Guide (2026) — 三层调度体系(/loop / Desktop / Cloud)的完整对比

[!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学通信知识星球海报-扫码加入