シリーズ: AI とともにコードを学ぶ

282コミット、公開ログ最初の週末

282件の初週末コミット:メインループ、レイテンシトラッカー、C API。

282コミット、最初の週末 ループ:ファイル、拾う、下書き、レビュー、マージ - そして補充 イシューをファイル鋭くスコープする エージェントが拾う下書きPRを開く レビュー人間、両日とも マージ/再ファイル違えば研ぎ直す キューの補充こそがボトルネック 出来上がったもの:メインループ - レイテンシトラッカー - C API - テストハーネス - ABI検証 282コミット ほとんどは自律コーディングエージェントが作成
エージェントには本業がない - この成果は、休みなく回り続けるキューから自然にこぼれ落ちてきたものだ。

重要だったコミットはC APIだった。ランタイムが安定した公開インターフェースを持った瞬間、2つのエージェント作成の作業ストリームが互いに足を引っ張り合わなくなった。これが、ループがかみ合ったときのAIネイティブなランタイムの姿だ。

先週の土曜日、私はイシューを山ほどファイルし、自律コーディングエージェントをそのキューに向けた。月曜日の前にもう一度だけキッチンテーブルでラップトップを開いた日曜の夜には、ランタイムリポジトリ全体で282件のコミットが積み上がっていた。私が著者だったのはそのごく一部だ。残りのほとんどは自律コーディングエージェントが著者だった。

この件数がスプリント1週間分の作業のように見える理由は、私がキーボードの前にいないあいだも作業が休みなく続いていたからだ。私がキーボードの前にいるのは週末だけだ。エージェントには本業がない。この成果は、その体制から自然にこぼれ落ちてきたものだ。

キューの仕組み

土曜の朝はファイリングの日だ。コーヒーを片手に座り、GitHubのイシューを書く。それぞれが、エンジンが次に必要とする鋭くスコープされた作業だ。おおよその形はこうだ。

  • イシューごとに1つのサブシステムまたは1つの機能
  • エージェントが自己チェックできる明確な受け入れ基準
  • 関連ドキュメント、仕様、そして作業が触れるべき既存ファイルへのポインタ
  • 明示的な「agent-queue」ラベル

さらに、ランタイムリポジトリのこの週末のイシュー#37にあるように、キューが未解決のエージェント向けイシュー15件を下回らないようにする夜間ワークフローもある。もし下回れば、そのワークフローはロードマップからプレースホルダーのタスクを下書きする。エージェントはキューを読み、次にできるものを拾い、下書きPRを開き、反復し、最終的にレビュー準備完了だと自分でマークする。

土曜から日曜にかけて、私はレビューとマージをする。エージェントが何かを間違えた箇所は、PRを閉じ、イシューを研ぎ直し、再ファイルする。エージェントが正しくやった箇所は、PRが着地し、イシューが閉じる。リズムは、週末の初めにファイルし、両日を通してレビューし、日曜の夜にラップトップを閉じるときには新鮮なキューを残しておく、というものだ。私が本業に戻っているあいだ、エージェントはキューを黙々とこなし続ける。

それがワークフローだ。特に微妙なところはない。これを書き留める価値がある理由は、これが機能するからだ。

何が構築されたか

282件のコミットからの見出しはこうだ。

  • 骨格だけではない、実際に動くランタイムのメインループ
  • センサー入力からレンダリングまでのエンドツーエンドのタイミングを計測するレイテンシトラッカー
  • 設定可能な閾値と定期レポートを備えたメモリ使用量モニター
  • INFO / WARNING / ERRORの各レベル、コンソールとファイルの両方への出力を備えたロギングサブシステム
  • 正常なシャットダウンのためのシグナルハンドラを備えたエラーハンドリング
  • SDKがリンクできるようにランタイムを公開するC API
  • SDK統合のためのC API内のモジュール/エージェント管理システム
  • ランタイムの並行性モデル。タスクキューとワーカースレッド
  • 包括的なテストハーネス
  • ABI検証とSDKリンケージの検証
  • 製品ターゲットとして最終化されたAR1+スマートグラス仕様

どれも華やかなものではない。だがすべてが、その上に面白いものを構築する前にARランタイムが必要とするものだ。

振り返って見て、最も重要だったコミットはC APIの公開だ。ランタイムが、SDKがリンクできる安定した公開インターフェースを持った瞬間、ランタイムの作業とSDKの作業は互いに足を引っ張り合わなくなった。そのコミットの前は、片方のリポジトリでの変更をもう片方と慎重に同期させる必要があった。そのコミットの後は、両者は分離した。2つのエージェント作成の作業ストリームが、マージコンフリクトを生むことなく並行して走れるようになった。

驚いたこと

3つある。

エージェントは、退屈なインフラ作業において私よりも速い。 テレメトリ、ロギング、エラーハンドリング、テストハーネス。これらは、作業が地味であるために人間が気を散らされる種類のタスクだ。エージェントは気を散らされない。ただ差分を着地させるだけだ。

エージェントはアーキテクチャに関して保守的だ。 「センサーからレンダリングまでの時間を計測するレイテンシトラッカーを実装せよ」と書かれたイシューを渡せば、まさにその通りのものを構築する。レイテンシとは何かについての形而上学を発明したり、APIの別の形を提案したりはしない。それは良いことだ。アーキテクチャは私の仕事だ。実装はエージェントの仕事だ。

キューの補充こそがボトルネックだ。 エージェントが1日に15件のPRを出荷し、夕方にはキューが空になると、スループットはエージェントがどれだけ速く働けるかという話ではなくなる。私が次の一連のタスクをどれだけ速く言語化できるかという話になる。それが土曜の朝の形を変えた。最初の1時間はファイリングだ。

何が壊れたか

2つある。どちらも致命的ではない。

CMakeビルドは2回壊れた。エージェントが、単体ではコンパイルできるが、ランタイムの残り部分とリンクできないコードを着地させたときだ。両方とも修正は同じだった。エージェントはまだ、プロジェクトのリンク時の依存グラフを完全には見通せていない。修正はイシューの組み立て方に入っている。これからは、ライブラリに触れるすべてのイシューで、他のどのライブラリがそれにリンクするかを明示的に述べることにする。

テストハーネスはこの実行の後半に追加され、手作業のスモークテストは通過していたが新しいハーネスには落ちる4つのバグを、追加直後に早速表面化させた。ここでの教訓は地味なものだ。テストは追加作業としてではなく、機能の一部として書くこと。エージェントは、イシューがそう指示すれば、その通りにする。イシューが指示しなければ、しない。常にそう指示するようにする。

パートナーとビルダーに知っておいてほしいこと

このエンジンの形は、まさに今作られている最中だ。来月末までには、基礎的な決定のほとんどが固まっているだろう。もしあなたがモデルラボにいて、AIレイヤーがどう接続されるべきかについて意見があるなら、今が意見を安く取り入れられる窓だ。もしあなたが、いずれUnityやUnreal統合を考えている開発者なら、SDKはこの週末に形作られている最中であり、バインディングはランタイムができることを反映する。60週目ではなく6週目に、あなたから話を聞きたい。

ランタイムのリポジトリは公開されている。SDKのリポジトリは公開されている。未解決イシューのキューは公開されている。これがリアルタイムで起きるのを見守ることこそが、そもそもの狙いだ。

282コミット、公開ログ最初の週末。日曜日は貯金できた。次は月曜日だ。

意見が安いうちに、このランタイムを形作る

基礎的な決定は、まさに今、公開の場で起きている - あなたがモデルを作るにせよグラスを作るにせよ、今が接続する窓だ。

← すべての記事