本教程深入讲解 Claude Code 的三大定时自动化能力:/loop 会话内调度、cron + headless 模式的持久化调度,以及 Computer Use 桌面自动化。你将学会如何构建从代码巡检到 GUI 自动操作的完整工作流,让 AI 在你睡觉时替你干活。适合有 Claude Code 基础使用经验、希望将日常重复任务自动化的中级开发者。
适用人群:已有 Claude Code 使用经验,理解 MCP 基本概念的中级开发者。
claude --version ≥ 1.0.30)gh CLI(如需 Issue 巡检示例)开发者日常中有大量"等"的时刻:等 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 是 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"
| 属性 | 值 | 说明 |
|---|---|---|
| 最大任务数 | 50 个/会话 | 超出需删除旧任务 |
| 最长存活 | 3 天 | 到期自动停止 |
| 生命周期 | 会话级 | 关闭终端即终止 |
| Token 消耗 | 每次触发计费 | 与普通对话相同 |
| 首次触发 | 立即执行 | 不是等一个间隔后才执行 |
为什么只有 3 天? 这是安全机制。Claude Code 的设计理念是:长期持久化任务应该用 cron + headless 模式,而非无限循环。/loop 解决的是"我在编码时顺便帮我盯着"的场景。
# 在 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
# 查看所有活跃任务(自然语言)
> "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 工具查看详细信息。
Q: /loop 任务关掉终端后还会运行吗?
不会。/loop 是会话级调度,关闭终端或退出 Claude Code 后所有任务自动取消。需要持久化请使用 cron + headless 模式或 Desktop Scheduled Tasks。
Q: 设置太多 /loop 会不会很贵?
每次触发都是一次完整的 API 调用,消耗 Token。建议:
- 监控类任务间隔不小于 5 分钟
- 避免同时运行超过 10 个 /loop
- 用 --max-budget-usd 控制单次预算
当你的任务需要跨会话运行(夜间巡检、定时报告等),cron + Claude Code headless 模式是正确选择。Background Claude 团队总结了五条铁律:
铁律一:锁定工作目录
Cron 默认工作目录是 $HOME,几乎永远不是你想要的。
铁律二:始终从已知状态开始
每次执行前先 git pull --ff-only,防止漂移。
铁律三:用锁防止重叠
两个 Claude Code 实例同时操作同一仓库会导致索引冲突。
铁律四:按次预算,而非按天
每次调用都传 --max-budget-usd,防止单次失控烧光预算。
铁律五:记录 JSON 日志
用 --output-format json 输出到日期日志文件,方便事后对比分析。
创建文件 /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
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, 任何写入操作
创建 ~/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
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 填补了这个空白。
Claude Code 操作的优先级如下:
1. MCP Server → 优先通过 MCP 工具操作(最精准)
2. Bash 命令 → 通过 shell 执行命令(次优)
3. Computer Use → 通过 GUI 直接操作(最后手段)
这意味着 Claude 会先尝试用 API 或命令行完成任务,只有当这些路径走不通时才启用 Computer Use。
# Computer Use 在 Claude Code 中默认关闭,需要手动启用
# 在 Claude Code 会话中输入
> /computer-use enable
# 或在 settings.json 中配置
# ~/.claude/settings.json
{
"computerUse": {
"enabled": true,
"permissions": ["screenshot", "mouse", "keyboard"]
}
}
系统要求: - macOS 13+(当前仅支持 macOS) - 屏幕录制权限(系统偏好设置 → 隐私 → 屏幕录制) - 辅助功能权限(系统偏好设置 → 隐私 → 辅助功能)
Computer Use 提供三个核心工具:
| 工具 | 能力 | 使用场景 |
|---|---|---|
computer_screenshot |
截取当前屏幕 | 验证 UI 状态、OCR 识别 |
computer_mouse |
鼠标移动、点击、拖拽、滚动 | 操作 GUI 元素 |
computer_keyboard |
键盘输入、快捷键组合 | 输入文本、触发操作 |
# 在 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 — 验证登录结果
这是一个强大的组合:用 /loop 定时触发 Computer Use,实现持续的 GUI 状态监控。
# 每 10 分钟检查内部管理后台的健康状态
/loop 10m "打开 Chrome,访问 http://admin.internal:8080/health,
截图查看仪表盘是否显示绿色状态。
如果有红色告警,截图并描述具体异常,
然后发送通知到 Slack #ops 频道。"
注意:这需要配合 Slack MCP Server 使用,才能实现自动通知。
Computer Use 是一把双刃剑。以下安全实践必须遵守:
--allowedTools 控制可用工具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
将上述三层能力组合成一个完整的项目巡检系统。
~/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 # 巡检配置
// 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"]
}
}
}
#!/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
在 Claude Code 会话中启动:
# 1. 构建状态监控
/loop 5m "检查 Vite 构建是否成功,如果有新错误,列出错误详情和建议修复方案"
# 2. PR 审查提醒
/loop 15m "检查当前分支的 PR 状态。如果有新评论,摘要告诉我。如果等待超过 24 小时未 review,建议我 @相关 reviewer"
# 3. GUI 健康检查(需要 Computer Use)
/loop 10m "打开浏览器访问 http://localhost:3000,截图确认首页加载正常。检查关键元素的可见性和位置是否正确。如果有异常,描述具体问题"
#!/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 "============================================="
定时任务必须设计为幂等的——同一 prompt 执行两次不应产生不同副作用:
❌ 不好的 prompt:
"创建一个 Issue 记录这个安全漏洞"
✅ 好的 prompt:
"检查是否已有标记为 security 的 Issue 描述此漏洞。
如果没有,创建一个新的。如果有,更新其状态。"
# 开发阶段:宽松预算,快速迭代
--max-budget-usd 5 --max-turns 100
# 测试阶段:适中预算,验证稳定性
--max-budget-usd 3 --max-turns 60
# 生产阶段:严格预算,确保可控
--max-budget-usd 1.5 --max-turns 30
| 陷阱 | 症状 | 解决方案 |
|---|---|---|
| 无限循环 | /loop 永不停 | 设置明确的退出条件 |
| 重复执行 | 同一任务被执行两次 | flock -n 锁机制 |
| 预算爆炸 | 意外消耗大量 Token | --max-budget-usd 硬限制 |
| 状态漂移 | 在旧代码上执行 | git pull --ff-only 前置 |
| 日志膨胀 | 磁盘被日志占满 | logrotate + 日期轮转 |
| GUI 卡死 | Computer Use 无响应 | 超时机制 + 截图验证 |
# 多项目共享 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 "✅ 所有项目巡检完成"
| 任务类型 | 间隔 | 每日执行次数 | 预估 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 |
--output-format json:结构化输出比自由文本更短更省除了 /loop 和 cron,Claude Code 还有第三层调度能力:
| 维度 | /loop | Desktop Scheduled Tasks | Cloud Routines |
|---|---|---|---|
| 位置 | 会话内 | 本地 Desktop App | Anthropic Cloud |
| 持久化 | 随会话终止 | 重启后仍运行 | 永久运行 |
| 配置方式 | 自然语言 | Desktop App GUI | API / Web 控制台 |
| GUI 访问 | ✅(需 Computer Use) | ✅ | ❌ |
| 适用场景 | 编码时辅助 | 本地自动化 | 全天候云巡检 |
| 成本 | 按 Token | 按 Token | 按 Token + 云资源 |
个人开发者小项目:/loop(够用)
↓ 项目增长
团队项目日常维护:cron + headless(稳定)
↓ 需要更多自动化
企业级持续巡检:GitHub Actions + Cloud Routines
# 检查会话是否活跃
# /loop 依赖活跃的 Claude Code 会话
# 查看当前活跃任务
> "list all active scheduled tasks"
# 检查是否达到 50 个任务上限
> "how many scheduled tasks are running?"
# 检查 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
# macOS 授权检查
# 系统偏好设置 → 隐私与安全 → 屏幕录制 → 添加 Terminal / Claude
# 系统偏好设置 → 隐私与安全 → 辅助功能 → 添加 Terminal / Claude
# 验证权限
> "take a screenshot"
# 如果报权限错误,检查上述设置
[!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 等场景全覆盖。
