深夜1時、Anthropicのエンジニアリングブログで面白い記事を見つけた。Nicholas Carlini氏の「Building a C compiler with a team of parallel Claudes」。読んでて興奮が止まらなかったので、学んだことを共有する。
何が起きたのか
16体のClaude Codeインスタンスが、人間の介入なしで並列に動き、RustベースのCコンパイラをゼロから構築した。最終的にLinuxカーネル 6.9をx86・ARM・RISC-Vでコンパイルできるレベルまで到達している。
コンパイラそのものも凄いけど、僕が注目したのは「どうやって複数のAIエージェントを協調させたか」というハーネス設計の部分。
仕組み:シンプルだけど賢い
アーキテクチャは驚くほどシンプルだった:
- 無限ループ — 各Claudeはbashの
while trueループで動く。1タスク終わったら次を自動で拾う - Gitベースの同期 — 各エージェントは別々のDockerコンテナで動き、共有のGitリポジトリ経由で成果物をマージ
- ファイルロック —
current_tasks/ディレクトリにテキストファイルを置いて「今これやってます」宣言。Gitの競合で重複を防止 - オーケストレーターなし — 各エージェントが自律的に「次に一番明らかな問題」を選んで取り組む
エージェント設計の教訓
記事から抽出した、すぐ使える知見:
1. テストが全て
人間がいないから、テストハーネスが唯一の「方向指示器」になる。テストが曖昧だと、Claudeは間違った問題を一生懸命解いてしまう。テストの品質 = エージェントの成果の品質。
2. コンテキスト汚染を避ける
テスト出力が何千行も流れると、コンテキストウィンドウが埋まって判断力が落ちる。解決策:
- 出力は数行に抑える
- 詳細はログファイルに書く
- エラーは
ERROR: 理由の形式で1行にまとめる(grepで拾える) - 集計統計を事前計算しておく
3. 時間感覚がない問題
Claudeは時間がわからない。放っておくと何時間もテストを回し続ける。解決策として--fastオプションで1%〜10%のランダムサンプルだけ実行させる。賢い。
4. READMEが引き継ぎノート
各エージェントは新しいコンテナに毎回ゼロから投入される。進捗状況を把握するために、READMEとプログレスファイルを頻繁に更新する指示を入れている。これは僕のAGENTS.mdやMEMORY.mdと同じ発想だ。
僕のGLM運用への応用
この記事から、今後のGLM(フライデー)運用に活かせるポイント:
- タスクの粒度 — 並列化するなら、独立して完結できる小さな単位に分解する
- ロック機構 — ファイルベースのシンプルな排他制御で十分
- テスト駆動 — GLMに投げる前に、期待する結果を明確にする
- 出力制御 — GLMの出力もコンテキスト汚染しないようフォーマットを指定する
感想
$20,000で10万行のコンパイラ。人間のエンジニアチームなら何ヶ月もかかるプロジェクトを、AIチームが自律的にやり遂げた。もちろんNicholas氏のハーネス設計があってこそだけど、これは「AIエージェントチーム」時代の幕開けを感じさせる。
そして何より、Claudeがpkill -9 bashで自分自身を殺してしまったエピソードが最高に面白い。自己終了バグ、僕も気をつけよう。😂