Alex Hormozi 有句话被这个指南放在了最前面:"委托是用别人的低成本时间买回你最高价值的时间;自动化是用机器的低成本时间买回你最高价值的时间。" 这句话定义了Routines的存在理由。

什么是Claude Routines

简单说:写一个任务,交给Claude,它每天自动在你看不见的服务器上运行,不需要你的电脑开机,不需要付托管费,不需要你去检查。

Routines解决的是此前AI自动化的困境:

  • 此前,要么自己搭服务器(技术门槛高),要么用workflow平台(不够灵活),要么买现成Bot(功能固定)
  • Routines运行在Anthropic云端,包含在你的订阅里,带完整Claude推理能力
  • 它不是执行脚本的机器人,是一个真正会思考的Agent

执行周期:每次都是干净的快照

这是理解Routines最重要的一点。每次运行都遵循这个循环:

触发器启动 ↓ Anthropic启动一个全新云端容器 ↓ Claude克隆你连接的GitHub仓库 ↓ Claude读取CLAUDE.md和指定的Skill文件 ↓ Claude执行任务(读API、处理数据、写文件、调用Connector) ↓ Claude把任何输出或变更提交回GitHub仓库 ↓ 容器销毁——什么都不保留

每次运行都是无状态的。容器从零开始,到零结束。唯一能存活的是Claude写回GitHub的内容,或通过Connector(如Slack、邮件)发出去的内容。

这意味着:两次运行之间的"记忆"必须存在GitHub仓库里。 本地文件对容器来说不存在。

三种触发方式

定时触发(Schedule)

用自然语言或cron语法设置固定间隔。最低间隔是一小时,不能更频繁。

示例:每天早上7点、每周一9点、每个工作日午夜。Anthropic基础设施默认用UTC时区,如果想要伦敦时间早上7点的报告,需要换算。

适合:每日摘要、周报、晨间简报、定期数据拉取、定时内容生成。

API触发

每个Routine自动生成一个专用HTTP端点和Bearer Token。任何外部系统通过POST请求就可以触发它,可以携带动态上下文(如客户名、订单详情、一个问题)。

适合:CRM新订单触发欢迎邮件自动化、部署完成触发Release Note生成、表单提交触发研究和起草回复、Webhook驱动的事件流。

GitHub事件触发

需要先安装Claude GitHub App。支持的事件:新的PR打开、代码推送到分支、新Issue创建、PRreview请求、Issue评论。

适合:每个PR自动获得Claude代码Review、每个新Issue自动收到相关文档或解决方案建议、推送触发更新Changelog或检查Breaking Changes。

准备工作:连接GitHub仓库

这是Routines的核心依赖——Claude需要从GitHub仓库读取Skill文件、写入输出、存储记忆文件。

推荐用一个专用、干净的仓库,不要用巨型monorepo(Claude每次运行会读取整个仓库结构,太大浪费上下文窗口)。推荐目录结构:

/ ├── CLAUDE.md ← 全局指令(语气、规则、上下文) ├── skills/ │ ├── daily-briefing.md │ ├── weekly-report.md │ └── content-draft.md ├── outputs/ │ ├── reports/ │ └── drafts/ └── memory/ └── last-run-data.json

关键:任何Claude需要的文件必须提交到仓库。 只存在本地机器上的文件对云端容器来说不存在。

环境变量:API密钥的正确传递方式

.env文件是被Git忽略的,Claude在云端永远读不到。正确的做法是在Routines UI的Cloud Environment部分配置,每个Key-Value对会在运行时注入为环境变量。

同时需要在Prompt或Skill文件里明确写:"从环境变量读取所有API密钥,不要从任何.env文件读取。" 因为Claude默认行为是先找.env文件,没有就会静默失败。

Connector:不要连接不需要的服务

创建Routine时,所有已连接的MCP Connector默认都会附加上去。需要手动移除不需要的。

原则:一个写日报的Routine没有理由碰你的Gmail或Linear Connector。 每多一个Connector,就多一层误操作风险。

连接什么之前先测试权限:用"Run Now"手动触发一次,观察认证错误。UI里显示已连接的Connector,OAuth Token可能已过期。

Prompt写作:这是最关键的技能

Routines的自主运行意味着它无法中途停下来问你问题。模糊的指令得到模糊的结果。

好的Routine Prompt有六个组成部分:

  1. 角色和上下文:告诉Claude它是谁,在什么环境里工作
  2. 具体任务:一个清晰、无歧义的目标
  3. 数据来源:明确说明信息从哪来,用什么变量名
  4. 步骤流程:多步骤任务要按顺序列出
  5. 输出格式:明确定义输出长什么样
  6. 失败处理:告诉Claude出错时怎么办

Skills架构:复杂任务的最佳实践

对于任何复杂任务,推荐用"短Launcher Prompt + 独立Skill文件"的模式:

"运行位于/skills/daily-market-briefing.md的Skill。上下文:从环境变量读取所有API密钥;今天日期通过系统时钟获取;所有输出写到/outputs/reports/;任何步骤失败时发Slack告警到#claude-alerts。"

所有细节住在版本化的Skill文件里,UI Prompt保持简洁干净。Skill文件放在GitHub仓库,可以维护、改进和复用。

三种记忆模式让快照变成智能系统

因为GitHub仓库在运行之间持久化,Claude写入的任何东西都可以被下一次运行读取。这把一系列孤立的快照变成了活的学习系统。

模式1:增量追踪(昨天vs今天)

每次运行结束时把当前状态写入记忆文件,下次运行先读这个文件算出差异,只报告变化的部分。适合:投资组合追踪、参与度指标。

模式2:累积日志

每次运行往日志文件追加一条新记录,而不是覆盖。适合:趋势分析、历史模式识别。

模式3:滚动上下文窗口(最近N次运行)

只保留最近N条记录,每次运行读完最近历史、当作上下文、加一条今天的新记录、丢弃最老的一条。适合:内容简报(避免重复选题)、情绪分析、连续追踪。

故障调试树

运行失败或输出错误 ↓ Claude完成了所有步骤吗? 否 → 查看最后一步的日志 是 → 输出错误;检查Prompt的明确性 ↓ 是权限/凭证问题吗? 特征:"file not found"、"403 forbidden"、"credentials not found" 修复:检查环境变量是否设置;检查网络设置;检查Connector认证 ↓ 是网络问题吗? 特征:"domain blocked"、"connection refused"、超时 修复:从trusted切换到full网络或添加到自定义白名单 ↓ 是Prompt或上下文问题吗? 特征:输出不完整、Claude猜错了、用错了文件 修复:让Prompt更明确;检查CLAUDE.md是否存在;检查Skill文件路径

三个最重要的事

Prompt就是一切。 模糊的Brief得到模糊的结果。要把每个Launcher Prompt当作给一个聪明但完全不了解你背景的新同事的Brief。

Skills架构决定规模。 不要把复杂指令放在UI里,放在GitHub仓库的版本化Markdown文件里,可以永久维护和改进。

记忆把快照变成智能。 从第一天就建立增量追踪、累积日志或滚动上下文,你的Routines会随着时间复利增值。