最近話題の Loop Engineering とは一体何か

Anthropic のエンジニアが説く「ループエンジニアリング」方法論を徹底解説。AI に一言ずつ手動でプロンプトを送るのではなく、自分で回り続けるループシステムを設計する
著者:Loop Engineering (论文 PDF)06-29 · 12 分で読了⚑ 研究論文
🎧 ポッドキャスト版0:00 / --:--
0:00 / --:--
深度 ・ 小互解読
概要
  • Loop Engineering は、Addy Osmani、Boris Cherny、Peter Steinberger が 2026 年 6 月の同じ週にそれぞれ独立にたどり着き名付けたもの。AI に手動でプロンプトを送るのをやめ、AI に自動でプロンプトを送るシステムを設計する。自分自身が「AI を操作する人」から「AI を駆動するシステムを設計する人」へと変わる
  • 一つのループは五つのステップで構成される:タスクの発見、実行への引き渡し、独立検証、状態の永続化、自動スケジューリング。どれか一つでも欠けると、それぞれ名前の付いた失敗パターンに陥る(頷きループ/記憶喪失ループ/手動ループ/盲目ループ/もつれループ)
  • 最も重要かつ最も省略されやすいのが検証だ。AI に自分の出力を採点させると自画自賛してしまう。必ず独立した agent に粗探し役をやらせ、デフォルトで「コードは壊れている」と仮定し、実際にページをクリックしてスクリーンショットを撮る必要がある。コードを読むだけでは足りない
  • Stripe の Minions パイプラインは毎週 1300 件以上の、機械が書いた PR をマージしている。信頼性の源は確定的な制約(linter を強制実行させ、agent は迂回できない)であって、より大きなモデルではない
  • ループは気づかぬうちに四つの代償を積み上げる:検証負債、理解の劣化、認知的降伏、Token 請求額の暴発。四つは互いを強め合い、最後にまとめて噴き出す。門番は常に人間の判断力である
1発端 ・ 命名

一週間のうちに、三人が同じことに行き着いた

2026 年 6 月の同じ週、Google Chrome のエンジニア Addy Osmani、Anthropic の Claude Code 責任者 Boris Cherny、OpenClaw の作者 Peter Steinberger は、互いに口裏を合わせたわけでもないのに同じことに行き着いた。彼らはもう AI に手動でプロンプトを送るのをやめ、「AI に自動でプロンプトを送るシステム」を設計していたのだ。

Loop Engineering(ループエンジニアリング)が語るのは一つの身分転換だ。あなたは「キーボードの前に座って一言ずつ AI に指示を出す人」から、「AI に自分で仕事を割り振り続けるシステムを設計する人」へと変わる。この一文の重みはすべて「自分自身を置き換える」という点にかかっている。
⚡
なぜ見る価値があるか:Steinberger の「loop を設計すべきで、agent にプロンプトを送るべきではない」という投稿は閲覧数 800 万を突破した。Cherny の言葉では「今書いているのは loop で、僕の仕事は loop を書くことだ」。Osmani は6 月 7 日にそれを Loop Engineering と名付け記事にした。三つの言葉はすべて同じ動きを指している。あなたが設計するものが、agent の一つの振る舞いから、agent を駆動する仕組み全体へと変わったのだ。そして Stripe はすでにこのパターンで、毎週 1300 件以上の機械が書いた PR をマージしている。
8,000,000+
Steinberger の「loop を設計すべきで、agent にプロンプトを送るべきではない」という投稿の閲覧数
6 / 7
Osmani がこれを Loop Engineering と名付け記事にした日付。翌日 Substack にも同期された

なぜよりによってこの週に現れたのか

三人は相談したわけでもないのに、同じ週に同じ言葉に手を伸ばした。これは偶然ではなく、周囲のツールが静かにある閾値を越えたからだ。三つの条件が同時に熟した。coding agent はすでに、人手を介さず自明でないタスクをやり遂げられるほど信頼できるようになっていた。スケジューリングのプリミティブが主流ツールに現れたばかりだった。一回の実行コストは、何度繰り返しても無駄と言えないほどまで下がっていた。部品が揃ったことで、「それらを組み合わせる」という動作が、全員にとって同時に自明になったのだ。

名前は実践に何か月も遅れてやってくる。誰かがそれを Loop Engineering と呼ぶ前から、人々はとっくにループを書いていた。ちょうど「generator/evaluator 分離」に名前が付く前から、チームがコードを書く agent にコードを審査する agent を組み合わせていたのと同じだ。この法則は覚えておく価値がある。次の新語はモデルのリリースからではなく、ある能力が安くなりすぎて、かつては考えもしなかった組み合わせが日常になる、その瞬間から生まれる。

2位置づけ

これはこの四層の一番上に立つ

これら「〇〇エンジニアリング」は互いを置き換えるものではなく、層が積み重なっている。各層が扱う対象は下の層より一回り大きい。一言のプロンプトから、コンテキストウィンドウ一つ、実行一回、そして最後に自分で回り続けるループへ。各層を開いて、それが何を扱い、失敗したときにどれだけ被害が広がるかを見てみよう。

Loop ・ ループエンジニアリング一番上の層
扱うもの:harness の上でスケジューリングを行い、それを何度も自分で回す。核心の問い:どうすれば無人でも繰り返し回り続けられるか。下の層より三つの動詞が増える。時間で起動する(時間が来たら自分で目覚める、人がボタンを押す必要はない)、子 agent に分ける(一つが改修案を書き、もう一つが粗探しを専門にする)、自分の出力を次の周回に食わせる(昨日の発見をファイルに書き、今朝それを読んで続きをやる)。失敗の爆発半径:誤りが state file に書き込まれ、翌日には既定事実として読み戻され、それを土台に積み上げ続け、何周回も伝播してからやっと発見されることがある。
Harness ・ 単発実行の装備arm one run
扱うもの:単発の agent 実行に装備を整える。使えるツールは何か、許される操作は何か、失敗時にどう復旧するか、どの状態を完了とみなすか。核心の問い:この一回の実行に何を持たせるか。これは一回の実行を武装させるが、その実行を自動的に繰り返させることはしない。失敗の爆発半径:agent が誤読したまま一度ファイルを改変しても、run が終わり diff が見える形で残り、人が review してから初めて本番に載る。
Context ・ コンテキストエンジニアリングthe window now
扱うもの:今このウィンドウに何を入れるか。何を検索するか、どう要約するか、どの古い情報を消すか。核心の問い:モデルに何を見せれば解けるようになるか。ノイズだらけのウィンドウは、どれだけ良いプロンプトも無駄にする。失敗の爆発半径:自信満々の誤答が出ても、間違いに気づけばコンテキストを消せば済む。
Prompt ・ プロンプトエンジニアリングthe words you write
扱うもの:モデルに書くその一文。言葉選び、例、役割設定、語調。核心の問い:モデルに何を伝えるべきか。境界は一回の対話そのもの。厄介なのは、毎回誰かがそこに座ってプロンプトを渡すことを前提にしている点だ。失敗の爆発半径:一回の対話でその場で気づけ、プロンプトを書き直せば済む。

同じバグ(agent がある関数の戻り値を誤読した)を四つの層に置いて見てみよう。上の層に行くほど、発見が遅れ、代償が大きくなる。ループ層まで来ると、この誤読は state file に書き込まれ、翌日には事実として読み戻され、それを土台に層を重ねて積み上げていく。誰かが気づいて見に行くころには、その誤った前提はすでに構造を支える壁になっている。

これがループエンジニアリングで最も覚えておくべき直感だ。誤りの代償は、それが人に発見されるまでに生き延びた周回数に等しい。そしてループは構造上、「周回数を最大化する」機械なのだ。この先に出てくるすべてのもの——evaluator、人手によるチェックポイント、予算上限——が存在する唯一の目的は、「間違いを犯す」ことから「発見される」ことまでの距離を縮めることにある。

3五つのステップ

一周回は五つのステップ、どれを欠いても決まったパターンで壊れる

「ループ」を空回りと誤解しないでほしい。毎周回、具体的な仕事をこなす。やる価値のある仕事を見つけ、agent に渡し、正しいか検証し、状態を保存し、次の一手を決める。五つのうちどれか一つでも欠けると、ループは回らないか、その場で空転するかのどちらかになり、しかも決まった名前を持つパターンで壊れる。

発見 引継 検証 NO可 永続化 自動化 loop 自分で回り続ける仕組み
五つのステップが時計回りに一周する。スケジューリングがこの周回でやり残した発見を明日の周回へつなぐ ・ 検証は一周回の中で唯一「NO」と言えるステップ

以下では Osmani が自分で組んだ「朝の triage ループ」を例に、各ステップが何をするか、そしてそれを飛ばすとどんなループに陥るかを見ていく。

1
発見Discovery
triage skill が昨日落ちた CI、まだ開いている issue、直近マージされた commit を読み、この周回で何をすべきか自分で見つけ出す。肝心なのは agent 自身に仕事を見つけさせることで、リストを手渡されるのではない。このステップがループ全体の品質の天井を決める。拾い上げた仕事に価値がなければ、後の四ステップをどれだけ丁寧にやっても無駄になる。
省略すると → 盲目ループに:結局あなたが毎朝手動で「このバグを三つ直して」と仕事を割り振ることになる。「やる」は自動化できても「見つける」は自動化できておらず、しかも「見つける」こそがしばしば一番コストの高い部分だ
2
引き渡しHandoff
仕事をスケジューリングシステムから実際に作業する agent の手に渡す。やる価値のある発見ごとに独立した git worktree を一つ開き、複数の agent がそれぞれのディレクトリでコードを書き換え、ファイルがぶつからないようにする。仕事の切り分けがきれいであるほど、後の検証とマージが楽になる。
省略すると → もつれループに:複数の agent を並行させても全員が同じディレクトリを書き換えてしまい、変更同士がぶつかり合い、merge は誰にも解けない糸くずになる。agent が一つのときは問題が見えず、五つの agent が同時に走ったあの朝になって初めて露呈する
3
検証Verification
⊘ 一周回の中で唯一「NO」と言えるステップ
最も手を抜きやすく、そして最も省いてはいけないステップだ。一つ目の子 agent が修正を起草したら、二つ目の子 agent に交代して審査させる。指示は別物で、時にはモデルごと変える。コードを書いた agent は自分の宿題を採点すると甘くなりがちだが、粗探し専門の agent なら、前者が自分を納得させて通してしまったものを捕まえられる。本物のチェックがないループは、自分に頷いているだけの agent にすぎない。
省略すると → 頷きループに:最もよくある失敗だ。毎周回自分で自分を承認し、機械の速度で一見問題なさそうなミスの山を積み上げていく。何百周回走っても一度も「NO」と言ったことがない——どんな現実の作業量に対しても統計的にありえないことであり、まさに本物のチェックが存在しない証拠だ
4
永続化Persistence
結果をこの対話より長く生き残る場所に落とし込む。connector 経由で PR を開いたりチケットを更新したり、手に負えないものは inbox に送り、さらに一つの state file に進捗を記録する。ループの記憶はコンテキストウィンドウの中だけに生きていてはいけない。markdown やカンバンに書かれたものは忘れられない。
省略すると → 記憶喪失ループに:良い仕事を見つけてやり遂げても、やったこと自体を忘れてしまう。結果がクリアされるコンテキストウィンドウの中にしか残らないからだ。翌日また同じ仕事を発見し、やり直してしまって最初の成果とぶつかることすらある。毎朝同じ地点からスタートし、何一つ積み上がらない
5
スケジューリングScheduling
triage が毎朝自動で走り、state file がやり残した発見を翌日へつなげ、翌日には自分で続きをやる。Osmani の言葉を借りれば:一つのループを本物のループにするのは automation であって、あなたが一度だけ走らせたただの実行ではない。
省略すると → 手動ループに:四つのステップはどれもよくできているのに自動化されていない。それはループではなく、あなたが手動で走らせて、また走らせるのを忘れるスクリプトだ。組み上げたその日のデモは見事でも、注意がそれた瞬間に静かに止まってしまう。最後に実行されたのは、デモを披露したあの日のままだ

この五つのステップは選択式のチェックリストではなく、互いに依存し合う一つの全体だ。規律のあるチームは五つとも実装する。急いでいるチームは最初の二つ(発見+引き渡し)しか実装しない。この二つは目に見える成果を生むが、残り三つが生むのは「安全」であり、最も省かれやすい部分だからだ。

4六つの部品

ループを組み立てるには、六つの部品を揃える必要がある

五つのステップが語るのは「一周回で何が起きるか」、六つの部品が語るのは「回すために手元に何が必要か」だ。両者は一対一で対応する:発見は skills、引き渡しは worktrees、検証は sub-agents、永続化は memory、スケジューリングは automations が担う。各カードを開いて、それぞれが何を解決するのか見てみよう。

① Automations(自動化) スケジューリング
タイムテーブルやトリガーに掛けておき、ループを自分で動かす。これがなければ、手元にあるのはただの一回の実行であって、ループではない。スケジューリングには二種類ある:ローカル(マシンを起動しておく必要がある)とクラウド(電源を切っていても回り続ける)。トリガーで呼び出すべきは名前の付いた skill であって、cron job に貼り付けた大きな指示の塊ではない。
② Worktrees(隔離ディレクトリ) 引き渡し
git 組み込みの仕組みで、一つのリポジトリ内に互いに干渉しない作業ディレクトリを複数開ける。価値は並行度が上がるほど大きくなる:二つの agent が同時に同じファイルを書き換えるのは、二人のエンジニアが同じ行にコミットするのと同じくらい頭が痛い。これは並行処理を「動くが乱雑」から「動いてかつきれい」へと変える。
③ Skills / SKILL.md 発見
プロジェクトの知識を一つのファイルに固定化し、agent が毎周回コンテキストを推論し直さずに済むようにする。Osmani はこれによって節約されるコストを intent debt(意図の負債) と呼ぶ。新しいセッションを開くたびに「このプロジェクトは何か、ルールは何か、落とし穴はどこか」を説明し直す積み重なるコストのことだ。skill は再利用でき、メンテナンスできる。プロンプトの壁はそれができない。
④ Connectors(外部システム接続) 永続化 / 発見
MCP(Model Context Protocol、AI が外部ツールを呼び出すための標準インターフェース)の上に組まれた接続口で、ループを外の世界につなぐ:issue tracker、データベース、staging API、Slack。ローカルのファイルシステムしか見えないループは、とても小さなループだ。あるツール向けに書いた connector は、たいていそのまま別のツールにも流用できる。
⑤ Sub-agents(生成と評価の分離) 検証
書く役と判定する役を二つの agent に分ける。一つの agent が選手と審判を兼ねると、審判は自分をひいきしてしまう。直感に反するが、独立した審判を辛口に調整するほうが、書いた本人を自己批判的に調整するよりずっと簡単だ。だからループは、agent をもう一つ余分に飼ってでも、一つの agent に自分で自分を審査させることはしない。
⑥ Memory / state file(ディスク上の状態) 永続化
一回の対話の外側で生き続ける永続的な状態、markdown ファイル一枚、あるいはカンバン一枚。コンテキストウィンドウがクリアされれば、agent は何も覚えていない。今日を昨日につなげるには、記憶をディスクに落とし込むしかない。agent は忘れるが、repo は忘れない。記憶はコンテキストではない:コンテキストはこの周回で見えているだけでリフレッシュすれば消える。記憶は周回をまたぎ、日をまたいでも残り続ける。
worktree とは何か

何人かのシェフが同時に仕込みをするとき、それぞれに専用のまな板を渡せば、互いの手がぶつからず自分の分だけ切れる。まな板を共用すればぶつかり合う。worktree は、並行して動く agent 一人ひとりに自分専用のまな板を配るようなものだ。

六つの部品が揃えば、ループは骨格を得る。automation がそれを動かし、worktree が自滅的な衝突を防ぎ、skill が同じ労働の繰り返しを防ぎ、connector が外の世界を見せ、sub-agent が自己修正させ、memory が記憶させる。だが骨格を組み上げるのはまだ始まりにすぎない。同じ六つの部品からでも、二人の人間はまったく正反対のものを組み立てられる——それが最後の節のテーマだ。

5核心 ・ 検証

最も難しいステップ:なぜ AI に自分を採点させてはいけないのか

ループで一番難しいのは、agent を走らせることでは決してなく、その中に「NO」と言えるものを組み込むことだ。そしてコードを書いたその agent こそ、最も「NO」と言いそうにない存在なのである。

核心となる発想 ・ generator / evaluator の分離

① なぜ必ず自分を褒めてしまうのか。agent に自分がたった今作ったものを採点させると、人が一目で凡庸だと分かるものでも、自信満々に褒める傾向がある。Anthropic のエンジニア Prithvi Rajasekaran は、長時間実行されるアプリケーションを作っているときにこれを観察した。これは知力の問題ではない。このコードを書いたときのコンテキストには、すでに「なぜこう書くのか」という理由がびっしり詰まっている。だから agent が自分の出力を見るとき、見えているのは結果ではなく、自分をここまで納得させてきたその理屈の連鎖なのだ。ループに組み込むとこの欠点は増幅される。「これで十分か」という判断が毎回、書き終えたばかりのその agent によって下される。周回を重ねるたびに自分に頷き続け、走れば走るほど本当の品質から遠ざかっていく。

② 解決策は作者を変えることではなく、審判を交代させることだ。generator をより自己批判的に調整する、という道は通用しない。作者に自分の視点から抜け出せと要求することはできないからだ。できるのは、独立した agent に交代させ、まっさらな目でコードを見せ、まったく別の指示セットを与え、いかなる自己説得も身にまとわせないことだ。独立した懐疑者を調整するほうが、作者を自己批判的に作り変えるより、はるかに簡単だ。着想は GAN(敵対的生成ネットワーク)から来ている。一方のネットワークが作り、もう一方が粗探しをする。コードに置き換えれば、一つが書き、一つが審査する、ということになる。

③ コードを読むだけでは足りない、手を動かす必要がある。evaluator がコードを読むだけなら、判定するのは「見た目が正しいかどうか」であって「実際に動くかどうか」ではない。フロントエンドのタスクで、Rajasekaran は evaluator に Playwright MCP を接続し、QA のように実際にページを開き、ボタンをクリックし、スクリーンショットを撮り、DOM を検査させた。判断根拠は「この JSX は問題なさそうだ」から「ボタンをクリックしたらページが遷移した、スクリーンショットはこれだ」へと変わる。ついでに土台のモデルも入れ替えておく。同じモデルに別の指示セットを与えるだけでは、たいてい同じ盲点を引きずったままだからだ。コミュニティでよく使われる校正の一言:evaluator にはデフォルトで「コードは壊れている」と仮定させ、そうでないと証明されるまでそう扱わせる。デフォルトの立場は信頼ではなく懐疑であるべきだ。

④ maker-checker:最後の一撃は誰が下すのか。Claude Code は /goal でこの構造を一つのプリミティブに変えた。条件を一つ与えれば、その条件が満たされるまで走り続ける。肝心なのは、毎周回の終わりに、条件が達成されたかどうかを判断するのが、まったく新しい小型で高速なモデルであって、今まさに作業しているそのモデルではない、という点だ。これはまさに銀行業界で数十年使われてきた maker-checker 原則である。

generator / evaluator の分離

銀行で高額送金を入力する人と、その送金を複査する人は、必ず別々の二人でなければならない。この規則は銀行業界で数十年使われており、maker-checker と呼ばれる。それをループに持ち込めばこうなる:コードを書く agent と「通ったかどうか」を判定するモデルは、必ず別の二つでなければならず、しかも後者はゼロから見直し、デフォルトで「あなたは間違えている」と仮定する。

Generator ・ コードを書く
コンテキストには「なぜこう書くか」の理由が詰まっており、見えているのは自分を納得させてきた理屈の連鎖だ
↓  draft(草稿)
Evaluator ・ 独立した agent
モデルを変える ・ コードは壊れていると仮定する ・ Playwright MCP で実際にページをクリックし、スクリーンショットを撮り、DOM を調べる。意図ではなく振る舞いを判定する
↓
REJECT + 理由を一つずつ列挙 ↩
generator に差し戻して書き直させる
PASS ✓
次の関門へ
↓
まったく新しい小型モデルが stop condition を判断
今作業しているそのモデルが判断するのではない ・ この一撃こそが maker-checker

evaluator を設定に落とし込むと、こうなる。どの行も上の四つを実行している:役割を交代する、デフォルトで壊れていると仮定する、実際に手を動かして検証する、理由を一つずつ述べる。

.claude/agents/reviewer.md ・ 敵対的レビュー agent
ROLE: Adversarial code reviewer.(敵対的レビュアー)
ASSUME: this code is BROKEN until proven otherwise.
       # デフォルトでコードは壊れていると仮定し、そうでないと証明されるまでそう扱う
DO NOT praise. Find what fails.  # 褒めるな。どこが壊れるかを見つけろ

CHECK, in order:        # 順番にチェックする
  1. Does it run? (execute, don't read)   # 動くかどうか:実行せよ、読むだけにするな
  2. Tests: run them, paste real output.  # テストを実行し、実際の出力を貼り付けろ
  3. Edge cases the author skipped.       # 作者が見落としたエッジケース
  4. Does behavior match the ticket?      # 振る舞いはチケットの内容と一致するか

USE Playwright MCP: open the page, click,
    screenshot, inspect the DOM. Judge behavior, not intent.

VERDICT: PASS only if every check holds.
         Otherwise REJECT + list each reason.
         # すべて満たして初めて PASS、そうでなければ REJECT して理由を一つずつ列挙する
停止条件 ・ まったく新しい小型モデルが判断する
/goal all tests in test/auth pass and the lint step is clean
# 「test/auth が全部通り、かつ lint がクリーン」になるまで走る
# 注意:/goal は条件が満たされるまで走り続けるもので、/loop(一定間隔で繰り返し実行する)とは別物だ

ループの下限は、その evaluator によって決まる。generator の水準がループの産出できるものを決め、evaluator の水準がループの産出できないものを決める。生成と評価を構造的に切り離し、evaluator を懐疑者として調整し、実際に手を動かして検証させ、最後の一撃をまったく新しいモデルに委ねる——この四つが合わさって初めて、ループに「NO と言う」力が宿る。

6実践事例

ある人の朝と、Stripe の毎週 1300 件の PR

二つの実在するループは、規模こそ両極端に違うが骨格はまったく同じだ。トリガーが押されて始まり、一組の制約がそれを軌道に縛り付け、末尾には人間のチェックポイントが座っている。「あなたが寝ている間も動く」というのは、モデルがどれだけ強いかではなく、この骨格がどれだけ安定しているかにかかっている。

事例 A ・ 一人一台

Osmani の朝の triage

  • 毎朝一つの automation が自分で起動する
  • triage skill が昨日落ちた CI、開いている issue、直近の commit を読む
  • 呼び出すのは一つの skill であって、タイムテーブルに貼り付けた指示の塊ではない
  • 発見ごとに worktree を一つ開く:一方の子 agent が起草し、もう一方が skill とテストを照らし合わせて審査する
  • connector が自動で PR を開き、チケットを更新する
  • 手に負えないものは inbox に入って人を待ち、state file が明日を昨日につなげる
事例 B ・ 企業規模

Stripe の Minions

  • 毎週 1300+ 件の PR をマージ、一行たりとも人手で書かれていない
  • トリガーは軽い:Slack で bot に @ するか、emoji リアクションを付けるだけ
  • 本当の勝負はモデルが目覚める前にある:確定的なオーケストレーターが先にコンテキストを組み立てておく
  • サンドボックスは EC2 上の Devbox で、「牛であってペットではない」——使い捨てで、数千の agent が同時に走ってもぶつからない
  • その 1300 件の PR は依然として人が review する:人がいなくなったのではなく、コードを書く机から review する机に移っただけだ

Stripe の最も直感に反する点:Minions はより強力なモデルの上に建てられたものではなく、オープンソースツール Goose の fork だ。その核心的な主張は、信頼性は制約の質から生まれるのであって、モデルの大きさからではない、というものだ。アーキテクチャ上、確定的な関門(青)と創造性のある LLM ステップ(緑)が噛み合うように交互に並んでいる。確定的なロジックで解決できることは絶対に確率モデルに任せない——この線をどこに引くかが、ループが信頼できるかどうかを決める。(この事例は Stripe のエンジニア Steve Kaliski が How I AI ポッドキャストで明らかにしたものだ。)

確定的なステップ(非 LLM、ルールで固定)LLM ステップ(創造性がある)
Human trigger
Slack で @bot するか、emoji リアクションを付ける
↓
確定的オーケストレーター
リンクをスキャンし、Jira を取得し、Sourcegraph + MCP で関連コードを特定する。LLM 自身にコンテキストを探させない
↓
LLM
材料が揃ったところでコードを書く
↓
ハードコードされた関門
linter を強制実行し、agent は迂回できない
↓
LLM
lint を直す
↓
ハードコードされたステップ
git commit
↓
Human review
毎週 1300 件の PR、依然として人が審査する

「あなたが寝ている間も動く」を支えているのは何か

ローカルの /loop やデスクトップの定期タスクは、どちらもマシンを起動しておく必要があり、電源を切れば止まる。マシンの電源が切れていても動かしたいなら、正解は Cloud Routines か GitHub Actions の定期トリガーだ。三つの方式はそれぞれ別の区間を担う:

スケジューリング方式実行場所マシンの起動が必要?セッションを開いておく必要?最短間隔ローカルファイルを読める?
ローカル /loop自機必要必要1 分可
デスクトップ定期タスク自機必要不要1 分可
Cloud Routines / CIクラウド不要不要1 時間不可

大事なのはどれが優れているかを選ぶことではなく、この二つが別の能力だということだ。ローカルのスケジューリングは「自分がいる間に何周回か余分に回す」、クラウドのスケジューリングは「自分がいない間も動かす」。ローカルでの再実行を「無人運転」のすべてだと思い込むのが最もよくある誤解で、ノートパソコンの蓋を閉じた瞬間、自律的だと思っていたそのループは静かに止まってしまう。成熟したループはたいてい両方を使う:ローカルは身近な密なチェックを、クラウドは夜通しの全体スキャンを担当する。

ついでに一言:コマンドは Claude Code のものだが、能力はそれに縛られない

この記事のコマンドは Claude Code の書き方だが、その能力は Claude Code だけのものではない。Codex は違う名前で同じ六つの器官を提供している:スケジューリング、条件達成まで走る、並行隔離、子 agent、外部接続、skill の明示的な呼び出し。あるツール向けに書いた connector は、たいてい別のツールにそのまま流用できる。どのツールチェーンに乗り換えるにせよ、問うべきは「六つすべて揃っているか」であって、「このコマンドはどこの会社のものか」ではない。

7手を動かす

手取り足取り:最初のループを組み立てる

Stripe のあのパイプラインは終点であって、出発点ではない。最初のループは、ほとんどシステムに見えないくらい小さくていい。時間が来たら何かをチェックしにいく小さな仕掛けだ。以下の五つのステップはそのまま真似できる。各ステップにコマンドと設定を添え、最後に六要素をすべて備えた最小の完全なループへと組み上げる。

v2.1.72
Claude Code が /loop コマンドをサポートし始めたバージョン
v2.1.139
/goal(条件が満たされるまで走る)をサポートし始めたバージョン

① /loop を一つ起動する

v2.1.72 以降で使える。同じタスクを間隔ごとに再実行するものだ。スコープは session で、繰り返しタスクは 7 日後に期限切れとなり、自機上で動き、電源を切れば止まる。三つの使い方がある:

/loop ・ 三つの使い方
/loop 5m check the deploy   # 固定:5 分おきに実行する
/loop check the deploy      # agent が自分でペースを決める
/loop                       # .claude/loop.md 内のタスクを読む

② skill で自動発見をする:まず triage

一行をただ再実行するだけではループとは言えない。毎朝三つのものをチェックして対処する価値があるものをリストアップするようプロンプトを与える。「定期実行+自動発見」が揃って初めてループの入門と言える。発見のロジックは skill に書くべきで、タイムテーブルに書いてはいけない。cron job 内の指示は誰も更新しなければ腐っていくが、SKILL.md はメンテナンスでき、再利用できる。

.claude/skills/morning-triage/SKILL.md
NAME: morning-triage
WHEN: invoked each morning by automation.
      # 毎朝 automation によって呼び出される
READ:
  - CI runs that failed since yesterday   # 昨日以降に落ちた CI
  - issues opened in the last 24h         # 過去 24 時間に新しく開かれた issue
  - commits merged since the last run      # 前回実行後にマージされた commit
JUDGE: for each item, is it worth acting on?
       Skip noise. Keep only actionable findings.
       # 一件ずつ判断する:今すぐ対処できるか、それともノイズか?対処できるものだけ残す
OUTPUT: write findings + status to
        ./state/triage.md (one row per finding).
        # ./state/triage.md に書き込む、1件につき1行

③ state ファイルを一つ加える

結果をチャットウィンドウの中に残してはいけない。発見ごとに、どこまで対処が進んだかを markdown ファイル(または Linear のカンバン)に書き込む。agent は忘れるが、repo は忘れない。

./state/triage.md ・ このループの記憶
| finding         | source    | status   |
|-----------------|-----------|----------|
| auth test flaky | CI #4821  | fixing   |
| null deref      | issue 92  | PR open  |
| stale dep       | commit a3 | inbox    |

④ /goal 評価器を加える

最も肝心で、最も省略されやすいステップだ。/goal(v2.1.139 以降)は一つの条件が満たされるまで走り続け、条件が達成されたかどうかは別のモデルが判断する。/loop とは違う点に注意してほしい:/loop は一定間隔で繰り返し実行するもの、/goal は達成まで走り続けるもので、停止条件はまったく新しい小型モデルが判定する。前節の reviewer.md(コードは壊れていると仮定し、実際に検証し、理由を一つずつ述べる)を組み合わせて、毎周回で粗探しをさせよう。

/goal ・ 客観的に判定できる停止条件を与える
/goal all tests in test/auth pass and the lint step is clean
# 「test/auth が全部通り、かつ lint がクリーン」になるまで走る。判定はまったく新しい小型モデルが行う

⑤ --worktree で並行隔離を加える

--worktree(または -w)を使って、バックグラウンドの agent ごとに独立した worktree を一つ開く。一つの worktree が一つのタスクに対応し、複数の agent が同時にコードを書き換えてもファイルがぶつからない。

発見ごとに独立した worktree を
claude --worktree fix/auth-test  "draft the fix"
claude --worktree fix/null-deref "draft the fix"

最初のループの六要素チェックリスト

チェックを入れて、自分がすべて揃えたか確認しよう。最初の二つが「動くかどうか」を決め、残り四つが「動いたときに問題が起きても誰も対処しない」かどうかを決める。初心者が最もよく犯す間違いは、最初の二つしか揃えないことだ。結果として、誰も見ておらず、誰も止められず、それでいて自分に頷き続けているループができあがる。

発見のソース動くかどうかを決める
時間が来たら何を読むのか?CI / issues / commits / inbox
state ファイル動くかどうかを決める
どのディスクファイルが周回をまたぐ記憶を保存するのか?
独立検証問題が起きても誰も対処しない
「NO」と言える独立した agent はあるか?
worktree 隔離問題が起きても誰も対処しない
並行する agent それぞれに専用のディレクトリはあるか?
Token 上限問題が起きても誰も対処しない
一回あたりの予算と一日の上限は設定したか?誰がそれを止めるのか?
人手による review のチェックポイント問題が起きても誰も対処しない
どのステップで一時停止してあなたの確認を待つのか、全行程を自動で走り切らせないのか?

六要素をすべて備えた最小のループ

チェックリストをコードに落とし込むと、こうなる。以下のコードは一息で読み切れるほど小さいが、本物のループに必要な器官はすべて詰まっている、ただ縮小されているだけだ。六つのコメントは六要素と一対一で対応している。

.github/workflows/triage.yml ・ 完全な最小ループ
# 1. スケジューリング ・ 本物のトリガー
on:
  schedule:
    - cron: '0 6 * * *'   # 毎日 06:00、クラウドで実行

# 2. 発見 ・ skill を一つ呼び出す、指示の塊ではない
run: claude --skill morning-triage

# 3. 永続化 ・ 状態をディスクへ
#    skill が ./state/triage.md に書き込み、repo に commit し直す

# 4. 引き渡し+検証 ・ 発見ごとに worktree を一つ、達成まで走る
for finding in $(parse ./state/triage.md); do
  claude --worktree "fix/$finding" \
    --goal "tests pass and lint is clean" \
    "draft a fix for $finding"
done

# 5. 検証 ・ 毎周回後にまったく新しいモデルが stop を判定し、
#    さらに reviewer agent が専門に粗探しをする

# 6. 人手による review ・ 残しておくべきその扉
#    PR は開くだけで自動マージしない。判断がつかないものは ./inbox/ へ

六つすべてが揃っていれば、どれだけ小さくても本物のループだ。どれか一つでも欠ければ、それは前節で見た五つの失敗パターンのどれかが、姿を変えて現れたにすぎない。最初のループは小さいほうがいいが、「NO」と言えるチェックと人手による review のチェックポイントだけは、絶対に手を抜いてはいけない。

8代償

ループはこっそり四つの帳簿をつける

自分で走れるループは、同時に自分で間違えられるループでもある。楽しげに走れば走るほど、その誤りは静かになる。四つの代償はループが動いている間にひそかに積み上がり、どれ一つとしてその場でアラートを鳴らさない。

検証負債 理解劣化 認知降伏 Token 暴発 互いに強化 同時爆発
検証されていない出力が理解を蝕み、理解の遅れが降伏を招き、降伏がループをより長く、より多く走らせ、さらに検証されていない出力を増やし、検証負債へと戻っていく

具体的なシナリオで、四つがどう段階的に引き起こされるかを見てみよう。ループが一晩で 20 件の PR を開き、テストは全部グリーン、表面上は大勝利に見える。だがそのうち 3 件には、テストのカバレッジが及ばない小さなバグが潜んでいる。

独立した evaluator がないため、その病を抱えた 3 件もマージされてしまう → これが検証負債
↓
読まずに 20 件マージしたことで、頭の中のコード地図が 20 件分の変更遅れになる → これが理解の劣化
↓
ループがこんなに順調に動くなら、と翌朝あなたはもう見なくなる → これが認知的降伏
↓
一晩中子 agent を分岐させ、何度もリトライを繰り返し、請求額は見積もりの三倍に → これがToken 暴発

その 3 件に埋め込まれた誤りは、今やあなたがもう完全には理解できないコードベースの中に横たわり、もう見なくなった人間に「守られて」いる。どれかが本番環境で頭をもたげるまで発見されることはない。四つの代償はそれぞれ独立したリスクリストなどではなく、同じ一つの失敗が生やした四つの顔であり、互いを養い合い、最後にまとめて満期を迎える。

門番の方法はそれぞれ違う:

検証負債
独立した evaluatorを一つ用意し、作業する agent とは別物にする。「動く」と「正しい」の間にあるその隙間で粗探しをさせる
理解の劣化
毎日いくつかサンプリングして読み、「何を変えたか、なぜそう変えたか」を自分に説明させる。説明できなければ、それは地図が遅れている証拠だ
認知的降伏
少なくとも一つ、人間が押さなければならないチェックポイントを残す。ループは実行はできても決定はできない。少なくとも「これは間違っている」と言える能力だけは保っておくべきだ
Token 暴発
初めて無人で走らせる前に一回あたりの予算+一日の上限+最大リトライ回数を設定しておく。空回りするバグに一晩分の予算を焼き尽くされないように

四つには共通点が一つある:ループが動いている間、そのすべてが静かなままだということだ。ループエンジニアリングの最も魅力的な点は、一人にチームの仕事をさせられることにある。そして最も危険な点も同じところにある。チームなら自分たち同士で言い争うものだが、一人に大量のループを加えると、誰も異論を挟まないエコーチェンバーになりやすい。門番は常に人間の判断力である。

9締めくくり

あなたは依然としてエンジニアであり、ボタンを押すだけの人ではない

同じループでも、二人が組み立てれば正反対の場所へたどり着くことがある。そしてその違いはループそのものにあるのではない。

ある人はループを使って、自分がすでに完全に理解している領域でより速く走る。彼はコードを読み、方向性に確信を持っており、ループが増幅するのは彼がもともと持っていた判断力だ。もう一人は同じループを、「もう理解しなくて済むように」使う。六か月後、前者はより強くなり、後者は自分では読み解けない機械の門番になっている。

ループは「品質がツールによって固定される」類のツールではない。それは、あなたが持ち込んだものをそのまま増幅してしまうほど強力だ。理解を持ち込めば理解を増幅し、怠惰を持ち込めば怠惰を増幅する。それは忠実な乗算記号であり、掛けられる対象はループを組み立てたその人自身だ。

ループは生成をほぼ無料にする:コード、計画、PR、修正——ほとんどただで手に入る。残った希少なものが判断だ。どの計画が正しいか、どの行で止めるべきか、動きはするが根本的には間違っている出力はどれか、を知ること。ループは百通りの選択肢を生成できても、本当の意味で「選ぶ」ことはできない。あるいはこう言ってもいい——それは「実際に正しいか」ではなく「もっともらしく見えるか」で選ぶのだ。この二つの間にある隙間こそ、エンジニアが存在する理由だ。だからループエンジニアリングは判断の価値を下げたのではなく、判断を必要としないすべての仕事を剥ぎ取り、判断だけを唯一残るものにした。エンジニアの価値は、「タイピングが速い、API を数多く暗記している、テンプレートコードを厭わない」から、「どの道が正しいか、どの行で止めるべきか、どの出力は動くが根本的には間違っているかを知っている」ことへと移った。

build the loop, but build it like someone who intends to stay the engineer, not just the person who presses go.Addy Osmani、『Loop Engineering』、2026 年 6 月
出典:本稿は HuaShu「Orange Book」オープンガイド『Loop Engineering: Stop Asking Me What It Is』(v260615, 2026 年 6 月) の会議体整理稿を基に解説したものです。フレームワークと原文の言葉は Addy Osmani に帰属します。generator/evaluator の発見は Anthropic の Prithvi Rajasekaran に帰属します。Stripe Minions の企業事例(毎週 1300+ PR)は Stripe のエンジニア Steve Kaliski が How I AI ポッドキャストで明らかにしたものです。コマンドのバージョン番号(/loop は v2.1.72 から、/goal は v2.1.139 から)およびスケジューリングのパラメータは各ツールの公式ドキュメントに準拠し、バージョンによって変わる可能性があります。
出典
Loop Engineering (论文 PDF)Loop Engineering (论文 PDF)·原文を見る
↑ 本文ここまで
✓ この記事は全文無料です

メンバーは全文 Markdown のコピー・保存に加え、自分の AI に購読・質問させることができます。

原文を読む ↗
📮 新着解説をメールでいち早く

役に立ちましたか?メールを登録すると、新着解説を公開と同時にお届けします。解除はいつでも。