没有你也在继续工作的智能体

如何安排 Claude 自动运行

本指南提到的工具是 Anthropic 的 Claude 和 Anthropic 的 Claude Code。本指南独立撰写,与 Anthropic 没有任何关联,也未获其支持。

这一周,关于 AI 智能体在你合上笔记本电脑之后仍能继续工作的帖子随处可见,它们由一个时间计划、一次 API 调用或一个 GitHub 事件触发。这种能力并非纸上谈兵。Anthropic 的 Claude 和 Anthropic 的 Claude Code 如今已经通过不止一种机制支持这一点,具体用哪种取决于你希望工作实际在哪里运行。本指南专门讨论 Claude Code,即面向开发者的工具,而不是消费级聊天应用 Claude 自身那套独立的定时任务功能。它解释了 Claude Code 会话自行启动究竟意味着什么,人们这一周正在用来设置这一点的五种方式,以及在让其中任何一种方式脱离你的监督运行之前,值得做的检查。

Claude Code 会话自动运行,指的是它根据你事先保存的提示词自行启动,处理这个提示词,并在那一刻没有任何人打开终端的情况下汇报结果。Claude Code 通过五种方式支持这一点:在你机器上仍然打开的会话内快速轮询的 /loop;在 Anthropic 自有基础设施上运行的持久云端任务 /schedule;在你合上笔记本电脑后仍继续运行的 claude.ai/code 云端会话;在仓库事件或 cron 计划下运行 Claude Code 的 GitHub Actions 工作流;以及在命令行中调用 claude -p 的普通操作系统调度器,例如 cron、launchd 或任务计划程序。

发布于

免费课时 · 无需注册账号认识 Claude为什么是 Claude?6分钟开始免费课时

要点总结

  • 自动运行是指 Claude Code 会话根据事先保存的提示词自行启动,处理这个提示词,并在那一刻没有任何人打开终端的情况下汇报结果。
  • /loop 在你自己机器上保持打开的会话内运行;/schedule 则创建一个在 Anthropic 自有基础设施上运行的持久云端任务,这个功能改名之前曾被称为 Routine。
  • claude.ai/code 上的云端会话、GitHub Actions 工作流,以及调用 claude -p 的自家计算机调度器,是在没有人坐在键盘前时运行 Claude Code 的另外三种方式。
  • /loop 背后的 cron 工具只在 Claude Code 在你机器上处于打开且空闲状态时才会触发;任何需要在笔记本电脑合上后仍然存活的任务,应该交给 /schedule、GitHub Actions,或你自己的操作系统调度器。
  • 在信任这里任何一种方式无人值守运行之前,都需要做同样的检查:严格限定的权限、支出上限、可查看的运行记录,以及对任何发送、付款或删除操作设置人工审批步骤。

一览:让 Claude Code 无人值守运行的五种方式

方式运行位置需要你的机器开机吗?最适合
/loop在你机器上一个打开的会话内是,会话必须保持打开关注今天正在发生的事,比如一次部署或一个拉取请求
/scheduleAnthropic 的云端基础设施否需要在笔记本电脑合上后仍能存活的重复性任务
云端会话 (claude.ai/code)Anthropic 的云端基础设施否一次性交出去、之后再查看的较大任务
GitHub ActionsGitHub 托管的运行器否响应仓库事件,而不是按时钟运行
操作系统调度器 + claude -p你自己的机器或服务器是调度本身完全不依赖任何云端账户

复制即用

今天就能用的提示词

为你正在关注的事情快速建一个本地循环

/loop 10m check whether the deploy to staging has finished, read the last 50 lines of its log, and tell me in one line whether it succeeded, failed, or is still running. Don't touch anything, just report back each time.

/loop 只在这个会话仍在你机器上保持打开时才会触发,非常适合用一个下午的时间盯着某件事。

用 /schedule 创建一个持久的云端任务

/schedule every weekday at 8am, open the repository's pull requests, read any new review comments or failed CI checks since yesterday, and post a one-paragraph summary to our team channel. If nothing changed, say so in one line instead of repeating yesterday's summary.

与 /loop 不同,即使你合上笔记本电脑,这个任务仍会继续在 Anthropic 自有的云端基础设施上运行。

在安排任何任务之前,先问清楚无人值守运行能做什么

Before I turn this into a scheduled task, tell me plainly what you can do without me watching: can you push commits, open pull requests, spend any API budget, or message anyone on my behalf? List anything that needs my approval first, so I know exactly what I'm turning on before I save this schedule.

一个好的回答在这里应该是具体的。含糊的回答是缩小任务范围的理由,而不是跳过这个问题的理由。

一个限定在单一事件上的 GitHub Actions 工作流提示词

Read the pull request that was just opened, compare it against the project's CLAUDE.md conventions, and leave one inline comment per real issue you find. If you find nothing worth flagging, post a single comment that says the change looks clean. Never approve or merge the pull request yourself.

这是填入工作流 prompt 字段的文本,不是你在聊天窗口里输入的内容。

交互式 对比 无人值守

"自行运行"究竟意味着什么

你迄今为止与 AI 助手进行的每一次对话,大概都是以同样的方式开始:打开一个窗口,输入一些内容,然后等待。关掉那个窗口,对话就不复存在,直到你再次回来。你不在的时候什么都不会发生,因为根本没有安排任何事情在你不在场时发生。

自动运行把这一切反过来。Claude Code 会话会在你提前设置好的时间,或是对某个事件做出反应时自行启动,处理你已经写好的提示词,然后在完成或需要你时停下来。谁启动了这个会话,才是真正的分界线,而不是在你恰好观察它的那一刻,底层模型有多强大。

谁启动会话这一个转变,也是本指南其余部分专门谈论 Claude Code,而不是泛泛而谈 Claude 的原因。消费级聊天应用 Anthropic 的 Claude,有自己独立的定时任务功能,用于诸如每日收件箱摘要之类的事情。面向开发者的智能体工具 Claude Code,拥有一套不同的机制,专门用于在仓库、终端或 CI 流水线内运行,本指南余下部分讨论的正是这些机制。

下面这五种机制都不需要你编写新软件。每一种都只是一种告诉 Claude Code 何时开始、开始之后做什么的方式,使用的是今天就已经存在的工具。

工作实际在哪里运行

让 Claude Code 按计划运行的五种方式

选择与工作实际需要发生的地方相匹配的方式,而不是听起来最厉害的那个。

/loop,用于在打开的会话中快速轮询

一个内置在 Claude Code 中的命令,按固定间隔重新运行一个提示词,或者让 Claude 自己选择间隔,只要会话一直在你自己的机器上保持打开。

/schedule,用于持久的云端任务

也是一个内置在 Claude Code 中的命令。它把提示词、仓库和连接器保存为一个定时任务,按计划、API 调用或 GitHub 事件在 Anthropic 自有的云端基础设施上运行,无论你的机器是否开机。

claude.ai/code 上的云端会话

在浏览器、Claude 手机应用,或者在终端中用 claude --cloud 启动一个 Claude Code 会话。即使你合上笔记本电脑,它也会继续运行,你可以在任何设备上查看进度。

一个 GitHub Actions 工作流

Claude Code 的 GitHub Action 在你仓库的工作流内运行,响应 @claude 提及,或者在你配置的任意事件(包括 cron 定时计划)上自动运行一个保存好的提示词。

你自己计算机的调度器,调用 claude -p

macOS 和 Linux 上的 cron 和 launchd,Windows 上的任务计划程序,从你自己编写的一行命令或脚本中调用 claude -p,也就是 Claude Code 的非交互选项。整个过程完全没有与调度绑定的云端账户。

内置在命令行工具中

/loop 和 /schedule:Claude Code 自带的调度命令

/loop 是尝试这一切最快的方式。输入 /loop 5m check the deploy and tell me if it finished,Claude Code 就会把这个时间间隔转换成一个 cron 表达式,在当前会话内安排好这个任务,并每五分钟重新运行你的提示词,直到你停止它,或者七天过去,以先到者为准。如果省略时间间隔,Claude 会动态地自己选一个,一旦它关注的事情安静下来就等待更久。

问题恰恰就在它的工作方式上:/loop 是绑定在会话上的。它创建的任务只在那个特定的 Claude Code 会话仍在你机器上运行并处于空闲状态时才会触发。关闭终端,它们就停了。这让 /loop 非常适合用一个下午的时间盯着一次部署或一个拉取请求,但不适合任何需要在你合上笔记本电脑后仍然存活的事情。

/schedule 是另一个内置命令,恰好能解决这个空档。用自然语言描述一个重复性任务,比如 /schedule daily PR review at 9am,或者描述一个一次性任务,比如 /schedule in 2 weeks, open a cleanup PR that removes the feature flag,Claude Code 就会把它保存为一个云端定时任务,这正是 Anthropic 改名之前称为 Routine 的东西。从那时起,它就会由一个时间计划、一次 API 调用,或一个 GitHub 仓库事件触发,在 Anthropic 自有的云端基础设施上运行,完全不依赖你的机器是否开机。

/schedule 任务的自定义 cron 间隔被限制为每小时最多一次;更频繁的设置会被拒绝,这是一个刻意设定的下限,而不是漏洞,因为这类工作本就该是无人值守运行,而不是被不断地查看。/loop 没有这样的下限:它的 cron 工具支持一分钟级别的精细度,因为一个你正在积极关注的会话,能承受比完全独立运行的会话更紧凑得多的循环。

无人值守运行的另外三种方式

云端会话、GitHub Actions,以及你自己计算机的调度器

云端会话是一个更宽泛的类别,/schedule 任务实际上就是以云端会话的形式运行。你也可以不绑定任何计划,直接启动一个云端会话:在浏览器中打开 claude.ai/code,在 Claude 手机应用的 Code 标签页中,或者在自己的终端里用 claude --cloud "your task"。无论你怎么启动,这个会话都会在 Anthropic 管理的基础设施上运行,而不是在你的笔记本电脑上,即使你合上笔记本电脑它也会继续运行,你可以在登录同一账户的任意设备上查看或操控它。

GitHub Actions 把触发条件完全移出 Claude Code,放到你的仓库里。Claude Code 的 GitHub Action,即 anthropics/claude-code-action,在你添加到 .github/workflows/ 的工作流文件内运行。给它一个 prompt 输入,它就会在你配置工作流监听的任意 GitHub 事件上自动运行那个提示词:一个拉取请求被打开、一个议题被打上标签,或者像任何其他定时工作流一样简单的 cron 计划触发器。换一种方式,如果不设置 prompt 输入,而是在评论中提及 @claude,它就会切换为直接回应那次提及,而不是自行运行。

最简单的选项完全绕开了 Anthropic 自有的调度基础设施。claude -p,其中 p 代表 print,以非交互方式运行 Claude Code:它接收一个提示词,运行一次,打印结果,然后带着一个脚本可以检查的状态码退出。把 macOS 或 Linux 上的 cron、macOS 上的 launchd,或者 Windows 上的任务计划程序指向调用 claude -p "your prompt" --allowedTools "..." 的一行命令,决定 Claude 何时运行的就是操作系统本身,整个调度过程不涉及任何云端账户或订阅等级。

当没有人坐在键盘前回答确认请求时,把 claude -p 和一个权限模式,以及一个关闭权限提示的选项搭配使用。没有这种搭配,无人值守的运行可能会就这样卡住,等待一个没有人能给出的批准。

在保存计划之前

在让任何东西无人值守运行之前要检查什么

以下检查适用于上面的每一种方式。它们关心的是这个计划能触碰到什么,而不是你选了哪一种。

严格限定它的权限

确定一次定时运行真正需要哪些工具、仓库和连接器,只授予这些。一个只需要读取一个日志文件的任务,没有理由拥有对整个代码库的写入权限。

设置一个支出上限

无人值守的运行可能调用 API 的次数,远远超过你亲手输入时会调用的次数。限制它,无论是单次调用的轮次上限,还是运行这个计划的账户上的预算提醒。

保留一份可查看的运行记录

这里的每一种方式都保留了关于何时运行了什么的某种记录:一份会话记录、一份工作流运行日志,或者你自己脚本写入文件的一行内容。阅读它,尤其是在第一周。

为任何有风险的操作添加人工审批步骤

任何无人值守的流程都不应该在没有人事先批准这一具体操作的情况下完成付款、向真实的人发送消息、推送到受保护的分支,或删除某些东西。

给它一个心跳信号

设置某种方式来留意一个计划是否悄悄停止触发:每周查看一次任务的运行记录,或者设一个单独的提醒,检查它最近一次报告是否真的按时送达。

为工作匹配合适的工具

你实际应该用哪一种方式

先从工作需要在哪里发生开始,而不是从哪种方式听起来最强大开始。如果你今天下午正在积极关注一次部署或一个拉取请求,并且已经打开了一个 Claude Code 会话,/loop 不需要额外成本就能尝试,而且会在你关闭终端的那一刻停止。

如果这个任务需要在你合上笔记本电脑后仍然存活,并且明天依然要运行,那就转而使用 /schedule、云端会话或 GitHub Actions。在这三者中,/schedule 是从你正在进行的对话里直接设置、速度最快的一种。claude.ai/code 上的云端会话适合一个你想交出去、之后再查看的较大一次性任务,而不是某种重复性的事情。当触发条件本身是一个仓库事件、一个拉取请求、一个议题、一个发布,而不是一个时钟时,GitHub Actions 就是正确的选择。

当你想让调度本身完全不依赖任何云端账户,当这个任务已经和你维护的其他 cron 任务放在一起,或者当你所在组织的政策要求自动化留在他们直接控制的基础设施上,而不是某个供应商的云端时,就使用你自己操作系统的调度器和 claude -p。

把一切串起来

一旦运行起来会是什么样子

想象一个为每个工作日早晨设置的 /schedule 任务。它自己醒来,因为启动这个会话的是一个触发条件,而不是一个人。它重新克隆仓库,读取自昨天以来打开的拉取请求,并对照项目自己的 CLAUDE.md 约定,检查每一个的 CI 状态和审查评论。

它不会合并任何东西,也不会推送到默认分支。它会打开一份草稿摘要,或者,如果提示词明确授权过的话,打开一个自己的小型拉取请求,然后就此停下,就像本指南中其他方式一样:一次 GitHub Actions 运行只会发布到触发它的那个拉取请求上,不会去别处;一个调用 claude -p 的 cron 任务把结果打印到一个日志文件,然后带着状态码退出;一个 /loop 会话会告诉你它发现了什么,然后等待下一个时间间隔。

在每一种情况下,这个计划只做一件事:启动会话,让人不必记着去做这件事。在那之后的一切,也就是会话能触碰什么、必须先询问什么,仍然是你在编写提示词、选择权限时做出的决定,而不是计划本身自行决定的事情。

在自动化更大的事情之前,先练习写好指令

写出一个 Claude Code 会话可以无人值守运行的提示词,并准确知道该留出哪些权限,是同一种技能,无论触发方式是 /loop、/schedule、一个 GitHub 事件,还是 cron 中的一行命令。Nightschool AI 关于钩子与自动化的免费课程,以 Claude Code 为例,讲解了如何搭建带有审批步骤的自动化运行。

常见问题

Claude 自动运行究竟意味着什么?

这意味着一个 Claude Code 会话根据你之前保存的提示词自行启动,自己处理它,并在那一刻没有任何人打开终端或聊天窗口的情况下汇报结果。计划决定它何时启动;提示词和你设置的权限仍然决定它被允许做的一切。

Claude Code 中 /loop 和 /schedule 有什么区别?

/loop 在你自己机器上仍然打开的会话内重新运行一个提示词,并在你关闭那个会话的那一刻停止。/schedule 则把提示词保存为一个在 Anthropic 自有基础设施上运行的云端定时任务,由一个计划、一次 API 调用,或一个 GitHub 事件触发,无论你的机器是否开机。

一个定时任务要触发,我需要在笔记本电脑上一直打开 Claude Code 吗?

只有 /loop 需要,因为它绑定在会话上,会话一关闭就停止触发。用 /schedule 创建的任务、claude.ai/code 上的云端会话,以及 GitHub Actions 工作流,都运行在你笔记本电脑之外的基础设施上,所以都不需要你的机器开机。

GitHub Actions 工作流能不能按计划运行 Claude Code,而不只是在拉取请求上?

可以。给 Claude Code 的 GitHub Action 一个 prompt 输入,把工作流的触发条件设置为 cron 计划,就像安排任何其他 GitHub Actions 工作流一样,它就会在你设定的时间自动运行那个提示词,不需要拉取请求或议题来触发它。

claude -p 是什么,为什么要从 cron 或任务计划程序调用它,而不是用 /schedule?

claude -p 在命令行中以非交互方式运行 Claude Code,打印结果并带着状态码退出,而不是打开一个聊天窗口。从你自己操作系统的调度器调用它,能让调度本身完全不涉及任何云端账户,如果你的政策要求自动化必须留在你所控制的基础设施上,这一点就很重要。

claude.ai/code 上的云端会话和定时任务是一回事吗?

用 /schedule 创建的任务会以云端会话的形式运行,但你也可以直接启动一个云端会话,用 claude --cloud 或在 claude.ai/code 上,完成一次不绑定任何计划的一次性工作。定时任务是一个带有预先保存的触发条件的云端会话;并不是每个云端会话都有这个。

绝不应该让无人值守的 Claude Code 运行自己做什么?

在没有人事先批准这一具体操作之前,完成一次付款、向真实的人发送消息、推送到受保护的分支,或者删除某些东西。这几乎涵盖了所有难以撤销的操作。阅读、起草、总结和标记,从一开始就完全自动化也是合理的。

本指南与 Anthropic 有关联或获得了 Anthropic 的支持吗?

没有。这是一份独立的教育性指南。它以描述性的方式提及 Anthropic 的 Claude 和 Anthropic 的 Claude Code,是为了准确解释真实存在的工具,与 Anthropic 没有任何关联、支持或合作关系。

使用 /schedule 或启动云端会话需要付费计划吗?

云端定时任务和云端会话在 Pro、Max、Ultra 和 Team 计划上可用,以及拥有合适权限的 Enterprise 用户,而不是每一个免费等级都能用。/loop 和从你自己调度器调用的 claude -p,在调度本身这件事上没有这种计划限制。

把这变成你第一次无人值守的 Claude Code 运行

选一个范围明确的任务,写下它绝不应该自己做的事情,选择与工作需要发生的地方相匹配的方式,在放心交给它更多之前,先观察最初几次运行。

Nightschool AI 是一个独立的学习平台,与 Anthropic 没有任何隶属、认可或赞助关系。Claude 是 Anthropic, PBC 的商标。 在寻找 Anthropic 官方的 Claude Academy?请访问 academy.claude.com。