定时任务与无头模式
一旦您信任 Claude 能够完成某项任务,下一步就是不再手动执行它。如果是同一个提示在重复触发器上运行,您不应该每次都坐在那里亲自启动它。本课介绍了两种将这项工作交出去的方法:云端定时任务(原名 Routine,您无需构建任何东西)和无头模式(您可以通过自己的脚本获得完全控制)。
可以把它想象成一个光谱。一端是运行在 Anthropic 托管基础设施上的云端定时任务。另一端是无头模式和 Agent SDK,它们从您自己的代码中运行 Claude Code。让我们从构建最少的那一端开始。
定时任务:在云端运行的已保存提示
云端定时任务是自动化重复工作最直接的方式。没有脚本,也没有服务器。它将三样东西打包在一起:一个提示、它所操作的代码仓库,以及它所需要的任何连接器。然后,每当被触发时,它就会在云端运行这个组合。
关键在于,基础设施是 Anthropic 的。不需要您的机器整夜开着,也没有需要您维护的工作流文件。您只需描述一次任务,它就会自动运行。
定时任务不一定需要计划。它可以由几种触发器启动:
- 一个 cron 计划,比如每天早上 9 点。
- 向其 API 端点发送 HTTP POST 请求,这样您自己的代码就可以启动它。
- 一个 GitHub 事件,比如有新的拉取请求提交。
任何在重复触发器上使用相同提示的任务都很适合。比如每天早上的依赖审计、在新拉取请求到来时触发的 PR 分类器,或者每天扫描您的 Sentry 工单以找出最紧急的问题。
以下是定时任务所整合内容的思维模型:一个提示、代码仓库、连接器和一个触发器。
两种创建方式
您可以在网页端 claude.ai/code/routines 创建定时任务。您为它命名,编写描述 Claude 在每次会话中应该做什么的指令,选择一个代码仓库,并选择一个触发器。
您也可以在 Claude Code 内部创建定时任务,而无需离开终端。只需运行 /schedule 命令,并用自然语言描述您想要的内容,例如:
/schedule daily dependency audit at 9am无论哪个入口,思路都是一样的。选择最适合您工作流程的那个即可。
在依赖云端定时任务之前需要了解的三件事
在将云端定时任务用于任何重要任务之前,请牢记以下三个限制。
- 云端定时任务目前处于研究预览阶段。 其行为和限制会持续变化,如果出现变动请不要感到意外。
- 重复计划最多每小时运行一次。 如果您需要更高的频率,云端定时任务就不是合适的工具。
- 运行会从您默认分支的全新克隆开始,并推送到
claude/分支,除非您的提示中指定了其他分支。 当 GitHub 拉取请求事件触发运行时,只要该仓库是定时任务中的第一个仓库,拉取请求所在的仓库就会改为从该拉取请求的头部提交开始。要控制运行可以推送到哪些分支,请在 GitHub 上使用分支保护规则或规则集。GitHub 会将这些规则应用到您所连接的 GitHub 访问权限上,因此如果您的访问权限可以绕过某条规则,该规则就不会阻止推送。
无头模式:当您需要自己的环境时
当工作可以在 Anthropic 的基础设施上运行时,云端定时任务非常好用。但有时任务需要您自己的环境,或者需要在运行周围包裹一些逻辑。这时您就需要降级到无头模式,文档中现在将其称为非交互模式。
无头模式的核心是 -p 标志(--print 的缩写)。它将 Claude Code 作为一次性命令运行,没有交互式界面。它读取标准输入并写入标准输出,因此可以像任何其他 shell 工具一样进行管道操作:
claude -p "summarize the changes in this diff"有一点值得了解:单独使用时,-p 会加载与交互式会话相同的上下文,包括 hooks、skills、插件、MCP 服务器以及 CLAUDE.md 文件。要跳过所有这些内容,请添加 --bare,下文会介绍。
获取结构化输出
由于无头模式可以像任何 shell 工具一样进行管道操作,您通常会希望获得结构化数据而不是散文文本。您可以将 JSON schema 与 JSON 输出格式配对使用,Claude 会将其输出限制为与您的 schema 相匹配。
与您的 schema 相匹配的对象会出现在 JSON 响应的 structured_output 字段中。因此,您可以使用 jq 命令将其提取出来,并通过管道传入数据库或另一个脚本:
claude -p "Extract the exported function names from src/core/style.js" \
--output-format json \
--json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}' \
| jq '.structured_output.functions'这样您就能得到一个干净的数组,可以交给后续的任何流程处理。
使用会话实现多步自动化
对于跨多个步骤进行的工作,您不必把所有内容都塞进一条命令里。从 JSON 输出中捕获会话 ID,之后再恢复该会话:
claude --resume "$(jq -r .session_id /tmp/plan.json)"一个脚本启动工作,另一个脚本稍后带着完整上下文恢复它。当第一轮生成一个计划、第二轮执行该计划时,这种方式非常方便。
为 CI 提供一致的运行
当 CI 需要在每台机器上使用相同的设置时,有一种专为此设计的模式。
--bare 标志会跳过对 hooks、skills、插件、MCP 服务器以及 CLAUDE.md 文件的自动发现。您将获得带有 Bash、文件读取和文件编辑工具的 Claude,再加上您通过 --settings 或 --mcp-config 等标志传入的任何内容。这样每台机器都从相同的设置开始,启动速度也更快。Bare 模式不使用您的订阅登录,因此请先设置 ANTHROPIC_API_KEY。
Agent SDK:在您自己的应用中嵌入 Claude Code
光谱上的最后一步是 Agent SDK。它为您提供一个库,可以将 Claude Code 嵌入到您自己的 TypeScript 或 Python 应用程序中。
这两种语言都暴露了一个 query 函数,以及与 CLI 相同的基本元素。您传入一个提示以及一些选项,例如:
allowedTools,用于控制 Claude 可以做什么,- 一个系统提示,
- 以及一个权限模式。
然后,您遍历 Claude 流式返回的消息,并按照您应用的需要进行处理。这与 CLI 使用的是同一个引擎,只是可以从您的产品内部调用。
您应该选择哪一个?
以下是快速决策指南:
- 云端定时任务 是重复性工作的默认选择。它们运行在 Anthropic 的基础设施上,您无需托管任何东西。
- 使用
-p的无头模式 适用于任务需要您的管道、并且您想通过脚本传递数据的情况。 --bare适用于 CI 需要在每台机器上使用相同设置的情况。- Agent SDK 适用于工作本应属于您自己产品内部的情况。
从云端定时任务开始。只有当任务需要额外的控制权时,才沿着光谱向下切换。