自动化
自动化是一项你设置一次、然后让 Codeg 自行运行的智能体任务——按计划运行,或按一下按钮运行。你像撰写一条普通消息那样撰写它(一段提示词、一个智能体、一个文件夹、一种模式),给它设定一个节奏,此后 Codeg 便会以无头方式触发它:每次运行都会启动智能体、完成工作,并落地为一次你可以打开阅读的普通对话。无需任何人守在键盘前。
从 0.23 起,一次触发也可以排入一条任务而不是启动会话——计划照旧,但工作会落到待办看板上,等你验收。
它是聊天频道的“放手不管”对应物:聊天频道让你从手机上驱动 Codeg,而自动化则在完全无人驱动的情况下运行。对于那些你不愿手动启动的例行智能体工作,就用它——每晚一次的代码审查、每周一次的依赖升级、CI 排障、周期性的安全扫查。
自动化位于何处
自动化有自己的视图,从左侧边栏的自动化(那个 ⚡ 图标项,就在你的对话旁边)打开。顶部横贯着一条工具栏——一个文件夹筛选、一个已启用 / 已禁用筛选,以及右侧的新建——其下则是一个整体面板,内部分为你的自动化列表和所选自动化的详情。如果某次计划运行失败了,侧边栏项会带上一个小徽标以引起你的注意——当你打开该视图时它就会清除。
第一次进入时没有任何内容可显示,因此你会来到一个可供起步的模板库。
创建一个——从模板或从零开始
点击新建自动化,然后要么选择一个模板,要么从空白开始。Codeg 附带七个模板,每个都是一段可直接编辑的起始提示词:
| 模板 | 作用 |
|---|---|
| 代码审查 | 审查近期变更中的缺陷、回归和质量问题 |
| 依赖更新 | 找出过时的依赖并应用安全的升级 |
| 测试覆盖 | 为价值最高的缺口编写测试 |
| 安全审计 | 扫查注入、认证漏洞、密钥处理等问题 |
| CI 排障 | 调查失败的检查并提出修复方案 |
| TODO 清理 | 收集 TODO/FIXME 注释并排定优先级 |
| 发布说明 | 总结自上一个发布标签以来的变更 |
模板只是为编辑器填充初始内容——一段建议的提示词和节奏,之后由你调整。编辑器本身就是你在普通对话中使用的同一个 composer:一个富文本提示框,支持用 @ 提及文件、智能体、会话、提交和技能,还有 / 命令菜单、一个智能体选择器,以及模式与选项栏。凡是你会为一次性消息设置的东西,都可以在这里捕获为可复用的启动配置。给它起个名字,写好提示词,剩下的就是在何处和在何时。
选择一次触发做什么
在操作下,决定自动化触发时究竟发生什么:
- 启动会话 (默认)——原有的行为,也是本页其余部分所描述的一切:一次运行会启动一个智能体并产生一次对话。
- 排入任务——它不运行任何东西,而是在该文件夹的待办看板上排入一张卡片,标题取自这个自动化,并携带同样的提示词和智能体。此后由任务引擎负责执行,遵循看板自己的设置和并发上限。
对于那些你一直没抽出时间去看的夜间作业,"排入任务"就是答案。计划留给你的是看板上的一条队列,而不是一堆得自己去翻的已完成会话——而且既然此后由看板负责执行,这些待办要怎么处理就由你决定。放着不管,它们会一直等你点开始;打开看板的自动处理,它们就会在夜里跑完,各自隔离在自己的 worktree 中,等你第二天早上带着 diff 逐条验收。
选择它之后有两处变化:文件夹列表会收窄到项目根目录(待办看板属于项目,绝不属于 worktree),而下方的隔离控件不再适用——任务本来就会拿到自己的 worktree。
已保存的自动化行为不变
0.23 之前创建的自动化仍然启动会话。没有任何迁移,也不需要迁移。
将它指向一个文件夹——并隔离运行
在目标下,选择自动化运行所在的工作区文件夹;如果它是一个启动会话的自动化,再选择它如何隔离自己的工作:
- 每次运行新建 worktree (默认)——每次运行都会新建一个全新的 git worktree,因此它绝不会触及你的工作树,重复运行之间也绝不会相互冲突。对于任何会写入文件的操作,这都是你想要的。
- 在文件夹中运行——运行直接在该文件夹的树中进行,可选地在你选定的分支上进行。它会共享你未提交的更改,因此可能与正在进行的工作发生冲突——Codeg 会就地这样提示你。(仅存在于远程的分支需要使用 worktree 选项;共享模式无法跟踪它。)
为它排期——或保持手动
在触发器下,选择按计划或仅手动。
对于计划,你不必手写 cron。这里有一键预设——每小时、每天上午 9 点、工作日上午 9 点——如果你需要,还有一个原始 cron 输入框,以及一个可视化的计划生成器(选择一个频率——每 N 分钟、每小时、每天、工作日、每周的某个工作日、每月的某一天——它就会写出表达式)。一行实时的下次运行会精确显示它下次将在何时触发,采用你设备自动检测的时区,且由调度器所用的同一个求值器计算得出——因此预览绝不会骗你。
如果你确实要手写 cron,它就是标准的五个字段:
┌─ minute (0–59)
│ ┌─ hour (0–23)
│ │ ┌─ day of month (1–31)
│ │ │ ┌─ month (1–12)
│ │ │ │ ┌─ day of week (0–6, Sun–Sat)
│ │ │ │ │
0 9 * * 1-5 # 09:00, Monday–Friday
0 * * * * # every hour, on the hour
*/30 * * * * # every 30 minutes仅手动的自动化永远不会自行触发——它们会一直待命,直到你按下立即运行。
一次运行究竟做了什么
无论是按计划触发还是你点击了立即运行,一次启动会话的运行都是一个真实、实时的会话:
- 它以无头方式启动智能体,并产生一次普通对话,该对话在它一开始的那一刻就出现在你的侧边栏中。打开它即可观看工作实时呈现,或亲自介入。从 0.26.1 起,这段对话会以该自动化命名——而不是取提示词的前八十个字符,那串字符每次运行都一模一样,从来说不清一个会话属于哪一个自动化。
- 它会重放你保存的模式,因此它自行推进的程度恰好就是你在编辑器中选择的那种模式。一次运行是一个真正的智能体会话:如果智能体停下来请求权限或提出问题,这会在所产生的对话中呈现出来。若要实现真正无人值守的节奏,请选择一种不会因等待批准而暂停的模式,或者让任务保持只读——那些分析类模板是特意写成不更改文件的。
- 每个自动化同一时间只运行一次。 如果下一次到期时上一次运行仍在进行,新的这次会被记录为已跳过,而不是叠加上去。
一次排入任务的运行则恰好相反——它完全不碰上面这些。没有 worktree,也没有智能体:它只是往看板上写下一条待办,然后立刻落定为成功,摘要里写明它排入了哪条任务。由于下一次到期时上一次运行绝不会还在进行,排任务的自动化永远不会被标记为已跳过。但任务本身是会累积的——每小时一次的计划加上关闭的自动处理,会给你堆出很长的一列待办,所以请挑一个你真的处理得完的节奏。
详情面板的运行历史是每次运行的时间线——其状态(运行中、成功、失败、已取消或已跳过)、开始时间和耗时、一行摘要或错误信息、一个用于跳入其产物的查看对话链接,以及在运行仍在进行时的一个取消按钮。
运行发生在 Codeg 运行期间
调度器位于 Codeg 内部——桌面应用或服务器。在 Codeg 关闭期间到期的计划,会在它下次打开且到期时触发一次,而不是为每个错过的时段各触发一次。而如果 Codeg 在运行中途退出,那次运行会在下次启动时被标记为失败(绝不会伪装成已完成)——该自动化只会在它的下一个计划时间再次触发。
让智能体替你写一个
能保存自动化的不只有你。对话中的智能体可以把工作寄存下来,而不是只能当场做掉:一个工具用来保存自动化(cron 计划或手动触发),另一个用来排一条待办。于是"这项检查其实应该每晚跑一次"就地变成一个已保存的自动化,你不必离开对话去把它建出来。
两者都默认关闭,位于设置 → 通用 → 会话内工具。它们是那里仅有的两个会写入应用状态、而不只是读取的开关,所以刻意做成需要显式打开;而且与只读的那些工具不同,它们在被调用的那一刻会再检查一次——也就是说,关掉开关能挡住已经在运行的会话继续使用它。→ 设置 → 通用
有两处细节值得知道:
- 项目是解析出来的,不是猜的。 显式给出的文件夹路径优先;否则取该对话所属的文件夹,再否则取它的工作目录——而 worktree 会被归一回它被切出来的那个仓库,因此待办绝不会落到一个临时检出目录的看板上。任何解析不出来的情况,都会作为一句智能体可以据此行动的婉拒返回,而不是一个不知所云的错误。
- cron 在工具边界处被限定为五段。 六段的表达式本会被欣然存下、然后触发时间差出两天,所以它会被直接拒绝。
智能体保存下来的就是一个普通的自动化——它会出现在这个界面里,你可以像编辑自己写的那样编辑、停用或删除它。
管理它们
每一行——通过 ⋯ 菜单或右键单击——都提供立即运行、启用/禁用、编辑和删除。在详情一侧,启用开关位于标题栏中,而立即运行和编辑就在标题下方,在计划信息、提示词和运行历史之上。当你有好几个时,工具栏中的两个筛选可按文件夹或启用状态收窄列表;若某个文件夹筛选所指向的文件夹已不再有任何自动化,它会悄悄退回到全部。这个文件夹控件就是整个工作台通用的那个可搜索选择器——每个文件夹一行,显示为别名 [ 名称 ] 外加它的路径,三者都参与匹配——自动化编辑器里的工作区文件夹也是同一个。
须知
- 在服务器上运作方式相同。 该引擎在桌面应用和独立服务器中都能运行,因此无论 Codeg 在哪里运行,自动化都会触发。(如果桌面应用和服务器共享同一个数据目录,那么只有其中之一会驱动这些自动化——它们不会重复触发。)
- 每次会话运行都是一个完整的智能体会话——有它自己的令牌开销,在你的历史中有它自己的条目。频繁的计划会把两者成倍放大。而一次排任务的运行在看板真正开始处理它之前不产生任何开销。
- worktree 运行会留下文件夹。 每个按次运行的 worktree 都是一个由 Codeg 跟踪的真实文件夹;用同样的 worktree 工具即可清理它们。较旧的运行历史会随时间自动修剪。
后续步骤
- 待办任务——"排入任务"的自动化把工作排到哪里,以及你如何验收并合并它。
- 聊天频道——让 Codeg 无需人工干预运行的另一种方式:从 Telegram、Lark 或 WeChat 驱动它。
- Git 与 Worktree——按次运行的隔离是如何工作的,以及如何管理运行所创建的 worktree。
- 使用智能体——自动化所重放的智能体和模式。
- 技能——把一个可重复的工作流封装进一个
/command,并将其放入自动化的提示词中。