加载中

定时任务与无头模式

第 6 课7 分钟
加载中

定时任务与无头模式

一旦您信任 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 命令将其提取出来,并通过管道传入数据库或另一个脚本:

bash
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 适用于工作本应属于您自己产品内部的情况。

从云端定时任务开始。只有当任务需要额外的控制权时,才沿着光谱向下切换。