昨年 12 月、Boris Cherny は 1 か月で 259 件のプルリクエストを送信しました。すべて Claude が書いたものです。彼はその間、エディタを一度も開かなかったと語っています。
彼の仕事はコードを書くことではありませんでした。コードを書くものを作ることでした。Peter Steinberger はそれを 800 万回以上閲覧された 2 行にまとめています。「もうコーディングエージェントにプロンプトを送るべきではない。エージェントにプロンプトするループを設計すべきだ。」
それがループエンジニアリングです。仕事を見つけ、エージェントに渡し、結果を確認し、次の行動を決定する小さなシステムを構築し、あなたが寝ている間にそれを実行させるのです。
同じ月に欠点も現れました。誰かが 11 日間放置した別のループが 47,000 ドルを消費したのです。そのため、これは実際には 2 つのスキルであり、ほとんどの人が最初のスキルだけを教えています。つまり、仕事を進めるループを構築することと、崖っぷちから転落しないようにするブレーキを構築することです。
どのループを構築したかは、1 つの質問で決まります。それは真実に収束するのか、それとも単に高額なランダムウォークなのか?
1. ループは 6 つの部品と 1 つの質問
表面的なノイズの下には、6 つの部品からなる動作するループがあります。初めて見ると、そのリストはあまりにも単純に見えます。各パーツの詳細こそが、ループが機能するか、あるいは一晩で資金を流出させるかの分かれ目です。
これらを手動で構築する必要はもうありません。1 年前は、ループと言えば、自分で所有して常に監視する一連のシェルスクリプトでした。今では、これらの部品は製品に組み込まれており、同じ 6 つが OpenAI Codex アプリと Claude Code の両方にマッピングされています。それがわかれば、ツールは議論の対象ではなくなり、ループが設計になります。
1部品 ループ内の役割 CODEX CLAUDE CODE2------------- ------------------------- ------------------------- --------------------------3State 実行間での記憶 markdown / Linear (MCP) markdown / Routines + MCP4Automations スケジュールで実行 Automations タブ + Triage /loop (スキル), Routines, /goal5Worktrees 並列エージェントの分離 Worktree スレッドごと --worktree, isolation: worktree6Skills 意図のコード化 ~/.agents/skills/SKILL.md ~/.claude/skills/SKILL.md7Connectors 実際のツールとの接続 MCP サーバー (config.toml) MCP サーバー (.mcp.json)8Sub-agents 作成者と検証者の分離 .codex/agents/ 内の TOML .claude/agents/ + エージェントチーム
2. 実行が継承する唯一のものは状態
基本から始めましょう。他のすべてはこれに依存します。
モデルは実行が終了すると忘れます。会話は消え、コンテキストはクリアされ、次の実行は何も知らずに起動します。チャット内のメモリは実行とともに消えます。それはディスク上に存在しなければなりません。
実際には、それは 1 つのファイルです。リポジトリ内の STATUS.md、またはコネクタ経由でアクセスできる Linear ボードで、完了したこと、進行中のこと、次に行うこと、そしてループが決して触れてはならないいくつかの項目を保持します。
1# STATUS.md (ループはこれを最初に読み、最後に書き込む)2## 完了3- [x] auth: tokens v2 に移行完了、テストはグリーン4## 進行中5- [ ] billing: webhook リファクタリング (PR #214, CI レッド)6## 次7- [ ] dashboard: test/charts の不安定なテスト8## 禁止9- infra/ は人間なしで変更しない
ループを、あなたが決して監視しない夜勤シフトのように扱ってください。あなたは午前 3 時に何をしたかで評価されるのではなく、朝 9 時に机の上に置かれたメモで評価されます。そのメモを最初に設計すれば、ループのほとんどは自ずと設計されます。
3. 自動化こそが、ループと一度だけ実行したものの違い
ループは、それ自体で起動する場合にのみ、その名に値します。
Codex アプリでは、Automations タブでリポジトリ、プロンプト、実行頻度を設定します。何かを見つけた実行は Triage 受信トレイに届き、何も見つからなかった実行は自動的にアーカイブされます。OpenAI はこれをコードベースの地味なバックボーン、つまり毎日の issue トリアージ、CI 障害サマリー、先週紛れ込んだバグの捕捉に使用しています。
Claude Code では、いくつかのプリミティブを通じてこれを実現しますが、よく知られた記事は詳細を誤っているため、正確に述べる価値があります。/loop はスキルであり、組み込みコマンドではありません。セッションが開いている間、プロンプトを一定間隔で再実行します。定期的なクラウドジョブは Routines で、/schedule で設定され、最低 1 時間の間隔で、ラップトップを閉じても実行を続けます。ローカル crontab はありません。
学習する価値があるのは /goal です。あなたが書いた条件が真になるまで実行され、各ターンの後、別の小さなモデルが実際に完了したかどうかを確認します。コードを書いたエージェントは自分で評価することはできません。
1# Claude Code: 終わった気分になるまでではなく、本当に終わるまで実行2/goal test/auth のすべてのテストがパスし、lint ステップがクリーンである34# Claude Code: 定期的なクラウドジョブ (最低 1 時間間隔)5/schedule 毎日午前 9 時に PR トリアージを実行67# Codex: 自動化プロンプト (フォームで実行頻度を設定)8"平日午前 9 時: オープンな PR をスキャンし、CI 失敗やレビュアー不在をフラグし、Triage に投稿。"
停止条件は契約のように書きましょう。「test/auth のすべてのテストがパスする」は契約です。「より良くする」は、給料日までループが実行され続ける方法です。
4. Worktrees は並列エージェント同士の干渉を防ぐ
複数のエージェントを実行した瞬間、障害モードが変わります。それはもはやモデルではありません。2 つのエージェントが同じファイルに書き込み、誰も話さずに 2 人のエンジニアが同じ行にコミットするのと同じ混乱です。
git worktree はそれらの間の壁です。リポジトリ履歴を共有しながら、独自のブランチ上の独立した作業ディレクトリであり、一方のエージェントの編集が他方のチェックアウトに到達できないようにします。
1# Claude Code: エージェントごとに分離されたチェックアウト2claude --worktree feature-auth34# またはサブエージェントで、.claude/agents/<name>.md のフロントマターに:5# isolation: worktree67# Codex: スレッドを開くときに "Worktree" を選択 (それぞれ detached HEAD)
ツールが言及しない注意点が 1 つあります。Worktrees は衝突を取り除くだけで、ボトルネックは取り除きません。あなたは依然として上限です。いくつのエージェントを起動しても、あなた自身のレビュー帯域幅が、いくつ信頼できるかを決定します。
5. Skills はあなたの意図を、一度だけ、外側に書く
エージェントは毎回コールドスタートし、あなたの意図のギャップを自信を持って推測で埋めます。Skill は、モデルが毎回読み取る場所にその意図を書き留めたもので、推測を防ぎます。
フォーマットは両方のツールで同じです。手順と説明を含む SKILL.md と、必要なスクリプトを格納したフォルダです。名前で呼び出されるか、タスクが説明と一致したときに起動します。そのため、平坦で文字通りの説明が、賢い説明よりも優れています。
1# .claude/skills/triage/SKILL.md (Codex: ~/.agents/skills/triage/SKILL.md)2---3name: triage4description: 昨日の CI 障害、オープン issue、最近のコミットを読み取る。5 各発見を STATUS.md にタスクとして書き込む。6---71. 失敗した CI を取得し、根本原因ごとにクラスタリングする。82. それぞれを、原因となったオープン issue またはコミットにマッチングする。93. 実際の発見ごとに STATUS.md タスクを 1 つ書き込む。ノイズはスキップする。
スキルがなければ、すべてのサイクルがプロジェクトをゼロから再学習します。スキルがあれば、ループは毎朝少しずつシャープになります。
6. Connectors はループに行動させる
ファイルシステムしか見えないループはおもちゃです。共通の MCP 標準に基づくコネクタを使用すると、エージェントがイシュートラッカーを読み取り、ステージング API にアクセスし、データベースにクエリを実行し、チャネルに投稿できるようになります。
1# Claude Code2claude mcp add --transport http linear https://mcp.linear.app/mcp34# Codex5codex mcp add linear --url https://mcp.linear.app/mcp
これが、「修正はこちらです」と言うだけのエージェントと、プルリクエストを開き、チケットをリンクし、自分でグリーンと報告するループとの差です。両方のツールが MCP を話すため、一方のツール用に配線したコネクタは通常、もう一方にもそのまま使えます。
7. Sub-agents は作成者と検証者を分離する
ループで最も価値の高い動きは、コードを書くエージェントとチェックするエージェントを分離することです。
自分の作業をレビューするモデルは、毎回自分自身をパスします。別の指示と、理想的には別のモデルを持つ 2 番目のエージェントは、最初のエージェントが自分を説得してしまったものを見つけ出します。
1# Codex: .codex/agents/reviewer.toml2name = "reviewer"3description = "敵対的 PR レビュアー: 正確性、セキュリティ、不足テスト。"4developer_instructions = "オーナーとしてレビューする。著者が間違っていると仮定し、5 diff がそれを証明するまで。"6model_reasoning_effort = "high"78# Claude Code: .claude/agents/reviewer.md frontmatter9# name: reviewer10# description: 敵対的レビュアー。コード変更後は必ず使用。11# model: opus
1 つが探索し、1 つが実装し、1 つが仕様に対して検証します。これは /goal が内部で既に行っていることです。新しいモデルが作業が完了したかどうかを判断します。セカンドオピニオンにはトークンがかかります。各エージェントが独自のモデルとツールを実行するためです。間違いが高くつく場所にそれらを使いましょう。
8. ループの具体例
6 つを組み合わせると、1 つのスレッドが小さなマシンになります。
スケジュールされた自動化が毎朝リポジトリで実行されます。トリアージスキルを呼び出し、一晩の CI 障害、オープン issue、最近のコミットを読み取り、実際の発見を STATUS.md に書き込みます。実行する価値のある発見ごとに、ループは分離された worktree を開き、1 つのサブエージェントが修正案を作成し、2 番目のサブエージェントがスキルとテストに照らしてレビューします。コネクタは PR を開き、チケットを更新します。処理できないものはトリアージの受信トレイで待機します。STATUS.md は合格したものとまだ未解決のものを記憶し、明日は今日終わったところから始まります。
あなたが実際に目を覚ましたときに目にするのは、ログの壁ではなく、短い引き継ぎメモです。
1# 午前 9 時 — ループの一晩の引き継ぎ (トリアージ受信トレイ)2マージ準備完了3 PR #218 test/charts の不安定なテストを修正 CI グリーン4 PR #219 429 エラー時の webhook リトライ、バックオフテスト追加 CI グリーン5あなたの判断が必要6 auth/session.ts これを修正する安全な方法が 2 つあります。どちらも選びませんでした。あなたの判断です。7静穏8 7 件のスケジュール実行は何も見つからず、自己アーカイブされました
一度設計したら、プロンプトは一切ありません。
9. 立ち去る前にブレーキを構築する
これは誰も教えない半分であり、ループが資産か負債かを決定します。
あの 47,000 ドルの請求書は、賢いモデルが暴走したわけではありません。分析者と検証者の 2 つのエージェントが、互いに丁寧にさらに多くの作業を依頼し合い、ステップ制限も予算上限も停止条件もなかったのです。11 日間実行されました。1 つの制限があれば、最初の段階で止められたでしょう。
馬力の前にブレーキを取り付けましょう。 ブレーキペダルを搭載するまでエンジンを出荷してはいけません。
1# 立ち去る前にこれらを取り付けましょう:2- ステップ制限: --max-turns 50 (ハードストップ、例外なし)3- 予算上限: claude -p --max-budget-usd 10 (プリントモード; フェーズごと)4- 爆発範囲: 1 つの worktree、1 つのブランチ、src/ 以外は読み取り専用5- サーキットブレーカー: 同じツール + 同じ引数が 3 回連続 = 停止6- デッドマンスイッチ: 実行ごとに STATUS.md にハートビートを書き込む。沈黙はあなたをページングする
ループのスコープは、あなたがやりたいことではなく、それが破壊できるものによって決めます。どのリポジトリ、どのブランチ、いくらまで、強制終了までのステップ数。最初に爆発範囲を選び、次にタスクを選びます。
そして、正直に価格設定しましょう。Steinberger の 100 エージェント艦隊は実在し、月額約 130 万ドルで稼働しています。OpenAI が現在彼を雇用し、請求書を支払っているから機能しています。最先端のケースはスポンサー付きです。あなたはそうではありません。 月額 20 ~ 200 ドルのプランでは、効果的なループは小さく、上限があり、群れではなく、1 つの退屈な仕事に焦点を当てたものです。
1コストの内訳 (すべて実例、すべて過去 6 か月以内)2-----------------------------------------------------------------330 日で 259 PR 1 人のエンジニア、100 % Claude が作成411 日で 47,000 ドル 制限のない暴走ループ、監視なし5月額約 130 万ドル 100 エージェント艦隊 (請求書はスポンサー付き)6-----------------------------------------------------------------7同じテクノロジー。違いはブレーキです。
10. ループの死に方
失敗するすべてのループは、4 つの死に方のいずれかで死にます。今すぐ名前を覚えて、午前 3 時に気づけるようにしましょう。
暴走再帰。 2 つのエージェントが互いに永遠に給餌し合います。治療法は、上記のステップ制限と予算上限であり、それ以上に賢いものはありません。
静かな死。 ある開発者の一晩の実行がコンテキストウィンドウの上限に達し、停止し、その後も生存しているように見せながら同じ壁に再開を試み続けました。ループは、まだ進行中と報告しながら、何時間も死んでいる可能性があります。 治療法はハートビートと、1 つの無限実行ではなくフェーズごとの新しいコンテキストです。
ランダムウォーク。 検証可能な停止条件がないため、ループは目標に向かってではなく、そこから離れて漂流します。合格するテストスイートは、ループが到達できる不動点です。「終わったように見える」というのは不動点ではありません。
理解負債。 ループがあなたが書いていないコードをより速く出荷すればするほど、リポジトリが行っていることとあなたが理解していることのギャップは広がります。読み取らずに長時間実行させると、あなたはエンジニアではなくなり、ゴム印になります。治療法は、ループが決してスキップすることを許されない人間による読み取りゲートです。
11. ループを構築する。エンジニアであり続ける。
同じループを構築しても、2 人の人が真逆の結果を得ることができます。1 人はそれを、骨の髄まで理解している作業をより速く進めるために使います。もう 1 人は、その作業をまったく理解しなくなるために使います。ループはその違いを識別できません。あなたはできます。
Cherny の指摘は、作業が楽になったということでは決してありません。てこの作用が移動したということです。プロンプトからループへ、そしてタイピングから判断へ。これはプロンプトを送るよりも難しい仕事であり、簡単な仕事ではありません。
さて、ここで具体的な行動です。これは意図的に小さなものです。なぜなら、これはまだ初期段階であり、コストが大きく変動するからです。明日の朝、あなたがまだ手動で行っている最も退屈な仕事、CI のトリアージ、古い issue のクローズ、不安定なテストの追跡などを選び、その周りに 1 つの上限付きループを構築しましょう。ブレーキを先に。ループが出荷するすべての差分をあなたがまだ読める程度に小さく。
月に 200 のプルリクエストを出荷している人は、100 のエージェントから始めたわけではありません。彼らは信頼できる 1 つのループから始め、そしてずっとエンジニアであり続けました。その 1 つを構築しましょう。





