排程与无人值守运行
用例程按 cron 或一次性计划运行 ORG-2 智能体,控制补跑与并发策略,并回顾你不在时都跑了些什么。
大多数时候,智能体会话是你自己启动的。但有些工作你希望它不用你在场就跑起来——每晚一次的依赖审计、周一早上的 sprint 规划、一次趁你睡觉时做的重构。在 ORG-2 里,这就是例程(Routine):一个保存下来的触发器,加上一份运行模板。负责评估例程的调度器跑在 Rust 后端,所以哪怕一个窗口都没开,例程照样会触发。
创建例程
例程在设置的例程分类下管理。列表会展示每条例程的名称、触发器、Target 和状态,展开某一行还能看到它的配置和历史。添加 Routine 打开向导。
| 字段 | 作用 |
|---|---|
| 名称 | 必填,例如 Weekly sprint planning。 |
| 触发器 | 一次性或 Cron。 |
| 运行时间 | 仅一次性可用——要触发的时间点。 |
| 频率 / 时间 / 星期几 / 每月几号 | 仅 Cron 可用——一个引导式的构建器,Cron 表达式是它的兜底出口。 |
| 负责此例程的 Agent | 必填。选一个智能体或智能体团队。 |
| Prompt | 例程触发时,智能体应该做什么。 |
| Workspace | No workspace、Local workspace 或 Worktree——外加一个 Workspace path,用 Worktree 时还要填 Branch。 |
| Model | 可选的模型覆盖。 |
还有三个字段——输出、已有运行时和错过的运行(停机后)——在下文说明。
一次性运行与周期运行
一次性例程只有一个运行时间时间戳。一旦触发,后端会自动把这条例程停用——它不可能触发第二次。
Cron 例程用的是标准的 5 字段 cron 表达式(minute hour day month weekday)。预设覆盖了大部分场景:每天、工作日 (周一至周五)、每周(配一个星期几)和每月(配一个每月几号),每种都再搭一个时间。其他情况就展开自定义 cron 表达式直接手写——应用里给的提示是「例如 0 9 1 = 每周一 9:00」。
注意: 例程的 cron 表达式按 UTC 求值。没有按例程设置时区的选项,所以时间要自己做好偏移。
展开后的行里会显示下次运行,每完成一轮评估都会重新计算一次。
一次触发会产出什么
| 输出方式 | 结果 |
|---|---|
| 直接运行会话 | 用这条例程的 Prompt、Workspace 和 Model 启动一个会话。 |
| 创建工作项 | 在选定的项目(或独立(不属于项目))下创建一个工作项。自动开始执行决定是否立刻启动它的智能体;新建例程默认开启。 |
| 重新运行已有工作项 | 重新运行某个指定的工作项,需要给出项目和目标工作项的短 ID(例如 ABC-0042)。 |
凡是会在无人值守情况下写代码的例程,都把 Workspace 设成 Worktree,而不是 Local workspace。用 Worktree 跑的运行会拿到自己的检出和 Branch,这样一条通宵运行的例程不会把你的工作副本改到一半就丢在那儿,第二天早上你只要像看普通分支 diff 一样审阅结果就行。
机器休眠或应用关闭时
调度器是一个后台任务,每 30 秒醒来一次,评估所有已启用的例程。由此带来两个后果:
- 进程必须活着。 ORG-2 不会在操作系统层面安装 cron 任务、launch agent 或开机自启项。关掉窗口没关系——在 macOS 上以及 release 构建里,窗口只是被隐藏,进程仍在运行,例程照常触发。而退出应用会让它们停下,直到你重新打开。
- 休眠会让时钟停摆。 处于休眠的机器并没有在跑轮询循环。
每条例程都记着一个水位标记,表示它上一次被评估的时间。下一轮评估时,调度器会检查这个水位标记到当前时刻之间的所有触发时间点,所以停机期间错过的运行是能被发现的——至于要拿它们怎么办,由你决定:
| 错过的运行(停机后) | 行为 |
|---|---|
| 跳过错过的运行 | 只触发最近一次错过的时间点,更早的全部丢弃。 |
| 补跑一次 | 用一次补跑覆盖整个错过的时间窗。新建例程的默认值。 |
| 全部补跑(有上限) | 触发最近若干次错过的时间点,数量有上限。 |
每次由调度器发起的触发都带一个幂等键,由例程 ID 和计划时间推导而来;因此即使在记录触发和更新水位标记之间发生崩溃,重启后也不会重复触发。
如果想让机器为已经在跑的工作保持唤醒,请在常规设置里打开会话运行时阻止系统休眠。它默认关闭,只在 macOS 和 Windows 上有实现,并会在所有会话结束后释放。它不会为了启动一次排程运行而唤醒已经休眠的机器。
运行重叠时
如果一条例程触发时,它自己上一次的运行还没结束,已有运行时决定接下来怎么办:并入当前运行、跳过本次触发、排队等待当前运行,或者始终并行运行。
注意: ORG-2 不会根据 CPU 负载、剩余内存或你是否坐在键盘前来节流排程工作。并发由上面那条按例程配置的策略控制,而不是某个全局的资源调控器。设置里的性能监控会报告 CPU、内存、磁盘和网络的使用情况,但它只是一块观测面板——并不会拦住任何执行。
无人值守运行的护栏
凌晨 3 点在跑的智能体没办法向你提问,所以要提前想好给它多大的活动空间。
- 权限。 对 Claude Code CLI 智能体来说,默认权限模式有默认、计划、接受编辑和跳过权限四种。跳过权限只留给工作区是隔离 Worktree 的例程。
- 沙箱。 启用 Sandbox 会把 Bash 命令与文件系统和网络隔离;开启之后,自动批准 Bash 可以让命令免确认直接执行。排除的命令、允许的域名,以及文件系统的允许/拒绝列表能把影响范围进一步收窄。
- 通知。 启用系统通知和启用 Dock 徽标默认都是关闭的——如果你打算靠通知来得知夜里那次运行的结果,先把它们打开。任务完成、Agent 审批和错误和警告这几个类别默认开启;Session 状态和 Git 操作默认关闭。测试通知用来确认操作系统确实授予了权限。
- 在线状态。 侧边栏的在线状态控件——在线、隐身、离开——会往智能体的提示词里注入一段可编辑的指令。应用自带的离开文案会告诉智能体不要卡在等你上,先把能做的做完,并留下一份摘要和待你回来处理的问题。这是给模型的引导,不是强制约束。
回顾你不在时跑了什么
展开某条例程的行可以看到运行历史——最近 20 次触发,每条都带时间戳、状态,以及它产出的会话或工作项 ID。状态有 pending、started、succeeded、failed、skipped(被并发策略压制)、coalesced(并入了某次进行中的运行)和 queued。历史是按例程分开的;没有跨例程的合并信息流。
完全没能启动起来的运行会出现在 Inbox 里,表现为来自 Scheduler 或 Orchestrator 的高优先级消息——比如某个工作项没有配置代码账户,或者某个编排阶段正在等人做决定。
在工作项那一侧,Output 标签页就是无人值守运行留下证据的地方:它开的 Pull Request、它所用的分支、带逐文件 diff 统计的 Changed Files、启用了审查时的审查反馈,以及以美元和 Token 计的费用摘要。由例程创建的工作项还会带一个来自 Routine:{name} 标记,重新运行则会追加一条历史记录,写明是哪条例程、在什么时间触发的。
注意: 没有每日摘要,没有合并的「你不在时发生了什么」报告,也没有一张展示过去或即将到来的运行的日历——ORG-2 的日历组件按日期铺开的是工作项,而不是例程的触发记录。要回顾夜里的工作,就得先看 Inbox,再逐条查看你关心的那些例程的运行历史。
下一步
有问题?欢迎到 ORG-2 Discord 提问。 Discord。