循环

循环 = 触发器 + 指令。TaskGoblin 做的每一件事都是一个循环——代码审查、领取 issue、夜间清理——这就是为什么工作会自己发生,而不需要有人记得开口。

大多数 AI 编码工具都围绕提示词打转。你描述想要什么,智能体回答,交流结束。这套做法一直有效,直到某一刻——真正有价值的不再是一个好答案,而是同一件工作可靠地、每一次都发生,且不需要任何人记得开口

TaskGoblin 转而围绕循环来构建。

循环 = 触发器 + 指令

这就是整个原语。

  • 触发器决定哥布林何时醒来。它要么是事件——拉取请求被打开、issue 被指派给哥布林——要么是计划:每个工作日 07:00。
  • 指令是自然语言,描述醒来后做什么。"审查这个合并请求的正确性与安全性——指出真正的问题,而不是 linter 就能抓到的风格细节。" 或者:"检查 acme/web 中安全的依赖升级,跑一遍测试,然后打开合并请求。"

把两者放在一起,你拥有的就不再是一次请求,而是一项常驻能力。没有人需要守在键盘前,也没有人需要记得。

一切都是循环

这不是摆在产品旁边的一个功能——它就是产品。那些你会以为是内置魔法的行为,都是普普通通的循环:

从外面看到的样子 底下的循环
每个拉取请求都被审查 拉取请求打开 上的事件循环
指派一个 issue,拿回一个合并请求 issue 被指派 上的事件循环
依赖无需开工单就保持更新 每周一 08:00 的计划循环
文档从不与代码脱节 每周三的计划循环
每天早上 Slack 收到一份动态摘要 09:00 的计划循环

当你连接 GitLab 或 GitHub 时,TaskGoblin 会给你装上一套起步循环——这就是为什么代码审查在你还没配置任何东西之前就开始工作了。它们并不特殊:打开它们,读指令,用你自己的话改写,暂停,或者删掉。

循环的一轮

每一轮的运行方式都一样,无论触发它的是 webhook 还是时钟,也无论这是第一轮还是第五百轮:

  1. 触发。 触发器匹配。TaskGoblin 为这件工作打开——或复用——一个线程。
  2. 上下文。 在动任何东西之前,哥布林会读 issue、线程、diff、你组织的约定,以及此前哥布林留下的笔记。
  3. 工作。 它在一个装有你仓库检出的隔离云端沙箱里运行:读文件、改文件、跑命令和测试。
  4. 交付。 它打开合并请求、留下行内审查评论,或在线程里回复——工作该去哪儿就去哪儿。
  5. 交接。 它写下学到了什么、还有什么悬而未决,好让下一轮从那里开始,而不是从零开始。

第 5 步正是循环与定时任务的分野。每一轮都被之前的轮次所塑造:一个连跑一年的每周循环,不是同一个循环重复了一百次,而是一个一直在留意的循环。

循环为什么胜过提示词

  • 它不需要你在场。 你去看的时候工作已经做完了,而不是等着有人注意到该做了。
  • 它可审查。 每一轮都以分支和合并请求收尾,像审查同事一样审查。没有东西会自己合并。
  • 它会累积。 纠正哥布林一次,这条纠正就为之后每一个哥布林写了下来。
  • 它有开关。 循环是属于你的一行记录。暂停它,行为立刻停止。

循环住在哪里

在你组织的 Loops 区域管理它们(/{organisation}/loops)。每个循环都有自己的页面:指令、触发器、启用开关,以及最近运行的历史——这样你能看到它到底做了什么,而不是靠猜它有没有触发。

哥布林也能在运行途中自己创建循环。一个注意到你每周五都提同样要求的哥布林,可以主动提议那个让你不必再提的循环。

接下来去哪

  • 事件循环 — 由拉取请求、被指派的 issue 或标签触发的循环,以及你已经拥有的那些。
  • 计划循环 — 按周期触发的循环,以及可以起步的模板。
  • 临时运行 — 那些不是循环的直接请求,以及如何判断哪一个想变成循环。
  • 一次运行是如何工作的 — 单独一轮里发生了什么。