夜间报告、周一早上的检查,是大多数人最先想让 agent 自己完成的事。两件事决定它行不行:计划本身,以及 agent 遇到没人醒着回答的问题时会怎样。本文把两件事都讲到。
开始之前
- 已安装并运行 Crewly,要用的 agent 已启动。还没装的话:
试用 Crewly:请先安装 Node.js 22 或更新版本(nodejs.org 的安装包,或 Homebrew / 系统包管理器),再运行:
curl -fsSL https://crewlyai.com/install.sh | bash
然后打开一个新的终端,运行:
crewly start
想用 npm?如果你的 Node 来自 Homebrew 或 nodejs.org 安装包,npm install -g crewly 也可以。
- 夜里不会休眠的机器。任务触发时,Crewly 和 agent 必须在运行。
第 1 步:创建计划
计划在仪表盘左侧栏 TOOLS 下面。
Crewly 仪表盘的 Schedules 页面,从左侧栏 TOOLS 进入,右上角是 New schedule 按钮,列表为空
- 打开仪表盘,点 Schedules。
- 点右上角的 New schedule。
- Type: 保持 On a schedule。另一个选项是 On an event。
- Name: 起个以后认得出的名字,例如“Nightly report”。
- Cron expression: 五段,分钟 小时 日 月 星期,使用本地时区。
0 2 * * *表示每天 02:00。表单默认填0 9 * * 1-5,即工作日 09:00。 - Send to: 要做这件事的 agent 的会话名。这是自由文本框,没有选择器,请从 Teams 页面复制。
- Message: 任务触发时 agent 收到的完整指令。请当作 agent 今天从没见过这个项目来写:做什么、在哪里做、产出什么。
- Max runs(可选): 一晚的任务填 1。留空表示一直重复,直到你停止。
- 点 Create。任务会出现在所属团队下的 Schedules 标签里,显示类似“Every day 02:00 ET · next in 9 h”。
填好的 New schedule 表单:类型 On a schedule,名称 Nightly report,cron 为 0 2 * * *,agent 会话名、消息,Max runs 为 1
点 Create 之后的 Schedules 列表:Nightly report 任务出现在所属团队下,显示 Every day 02:00 ET 和下次运行时间
要停止,用该行的暂停图标,或菜单里的 Cancel schedule。已结束的任务会移到 History 标签。你也可以在聊天里请团队负责人帮你建。
我们验证过的:按这个方式建了一个 Max runs 为 1 的任务,它在预定的那一分钟触发,记为一次运行,并以成功结果结束。我们没有声称的:agent 完成了任务。计划的工作是触发并把消息发给 agent,工作做得好不好,要靠你早上的检查。
你会注意到的毛刺:计划只支持 cron(没有一次性的日期和时间),agent 字段是原始会话名,设了运行上限的任务会立刻显示“Expiring soon — renew”,这是无害的。Schedules 页面的其他功能,见 Crewly in September。
第 2 步:你不在时,agent 能做什么
这一步最容易被跳过。按 Claude Code 权限文档,Manual 模式(设置里叫 default)下 shell 命令和文件编辑需要批准,而工作目录内的读取不需要。凌晨两点没人批准,所以需要你没允许的命令的任务可能就停在那里等。
有三种处理方式,从最安全到最宽松:
- 只允许任务需要的。 在设置文件里或通过
/permissions为具体命令加 allow 规则,例如Bash(git diff *)。规则的检查顺序是先 deny,再 ask,最后 allow,所以你可以允许一类命令,同时仍然禁止其中危险的。 - 使用
dontAsk模式。 它会自动拒绝所有本来要弹出确认的调用。读取和你预先批准的工具照常运行。任务不会卡在确认上,只是做不了你没允许的事。在设置里改defaultMode可以改变会话启动时的模式。 - 除非 agent 跑在容器或虚拟机里,否则避免
bypassPermissions。 它会跳过权限确认,文档说只应在 Claude Code 无法造成破坏的隔离环境里使用。
也用 deny 规则写下夜里绝不能发生的事,例如用 Read(./.env) 保护密钥。deny 规则里只写工具名,会把这个工具从 agent 那里整个移除。
如果你不通过 Crewly、直接单独运行 Claude Code,同样的思路适用于非交互运行:claude -p "..." --allowedTools "Read,Edit" 会预先批准你列出的工具,--permission-prompts none(Claude Code 2.1.259 或更高版本)会拒绝本来要弹出确认的操作,而不是等待。
第 3 步:写一条能独立完成的消息
好的夜间消息有四部分:
- 一句话说明任务。“运行测试套件并总结失败项。”
- 边界。“不要推送,不要修改
reports/以外的文件。” - 结果放哪里。 一个文件路径、一张工单或一条 Slack 消息。
- 卡住时怎么办。“如果需要一个无法运行的命令,就停下来,写明是哪一个。”这样静默的停滞会变成早餐时能读到的一行字。
第 4 步:早上检查
打开 Schedules,再看 History,确认任务触发了。然后打开消息里要求 agent 产出的结果。如果没有,先看机器是不是休眠了,以及 agent 是不是在等某个权限确认。
第一晚先把 Max runs 设为 1。跑通以后再清空这个字段。
来源
Crewly 的步骤和标签:2026 年 10 月 9 日在仪表盘(版本 1.20.279)中核对。Claude Code 的事实:Configure permissions 和 Run Claude Code programmatically,2026 年 10 月 9 日读取。