Skip to content

自动化

自动化是一项你设置一次、然后让 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,它就是标准的五个字段:

text
┌─ 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,并将其放入自动化的提示词中。

基于 Apache-2.0 许可证发布。