コーディング向けAIツールの多くはプロンプトを中心に据えています。ほしいものを書き、エージェントが答え、やり取りは終わる。それで十分なのは、価値のあるものが一つの良い答えである間だけです。やがて価値は同じ仕事が、毎回、確実に、誰も頼むのを覚えていなくても進むことに移ります。
TaskGoblinは代わりにループを中心に作られています。
ループはトリガーと指示
基本単位はこれだけです。
- トリガーはゴブリンがいつ起きるかを決めます。イベント(プルリクエストが開かれた、課題がゴブリンに割り当てられた)か、スケジュール(平日07:00など)のどちらかです。
- 指示は、起きたら何をするかをふつうの文章で書いたものです。「このマージリクエストを正しさとセキュリティの観点でレビューして。リンターが拾うようなスタイルの指摘ではなく、本当の問題を挙げて」。あるいは 「
acme/webの安全な依存関係の更新を確認し、テストを流して、マージリクエストを開いて」。
この二つを組み合わせた時点で、それはもう依頼ではなく恒常的な能力です。誰もキーボードの前にいる必要はなく、誰も覚えている必要もありません。
すべてがループ
これは製品の横に置かれた機能ではなく、製品そのものです。組み込みの魔法だと思うような挙動は、どれもごく普通のループです。
| 外から見える姿 | その下にあるループ |
|---|---|
| すべてのプルリクエストがレビューされる | プルリクエストのオープン のイベントループ |
| 課題を割り当てるとマージリクエストが返る | 課題の割り当て のイベントループ |
| チケットなしで依存関係が最新に保たれる | 毎週月曜08:00のスケジュールループ |
| ドキュメントがコードから乖離しない | 毎週水曜のスケジュールループ |
| 毎朝Slackに動きの要約が届く | 09:00のスケジュールループ |
GitLabやGitHubを接続すると、TaskGoblinが最初の一式を入れてくれます。何も設定しないうちからコードレビューが動き出すのはそのためです。特別なものではありません。開いて、指示を読み、自分の言葉に書き換え、一時停止し、削除できます。
ループの1ターン
どのターンも同じ流れで動きます。トリガーがWebhookでも時計でも、1回目でも500回目でも同じです。
- 発火。 トリガーが合致し、TaskGoblinがその仕事のスレッドを開く(あるいは再利用する)。
- 文脈。 ゴブリンは何かに触れる前に、課題、スレッド、差分、組織の規約、そして前任のゴブリンが残した記録を読む。
- 作業。 リポジトリのチェックアウトを持つ隔離クラウドサンドボックスの中で動く。ファイルを読み、書き換え、コマンドとテストを実行する。
- 納品。 マージリクエストを開く、インラインのレビューコメントを残す、スレッドに返信する — その作業が属する場所へ。
- 引き継ぎ。 学んだこと、未解決のことを書き残し、次のターンがゼロではなくそこから始められるようにする。
ステップ5こそがループとcronの分かれ目です。各ターンは前のターンに学んでいるので、1年間毎週動いたループは同じループの100回分ではなく、ずっと注意を払ってきた一つのループです。
ループがプロンプトに勝る理由
- あなたがいなくても動く。 見に行った時点で作業は終わっています。誰かが必要性に気づくのを待ちません。
- レビューできる。 どのターンもブランチとマージリクエストで終わり、同僚のものと同じようにレビューします。勝手にマージされることはありません。
- 積み上がる。 ゴブリンを一度正せば、その修正は以降のすべてのゴブリンのために書き残されます。
- 切れるスイッチがある。 ループはあなたのものである1行です。一時停止すれば挙動は即座に止まります。
ループはどこにあるか
組織の Loops 画面(/{organisation}/loops)で管理します。ループごとにページがあり、指示、トリガー、有効/無効の切り替え、直近の実行履歴が並びます。動いたはずと信じるのではなく、実際に何をしたかを見られます。
ゴブリン自身が実行中にループを作ることもできます。毎週金曜に同じことを頼まれていると気づいたゴブリンは、その依頼をなくすループを提案できます。