コーディングエージェントをwhileループに入れたら、一晩で6つのリポジトリが完成
(github.com/repomirrorhq)- ヘッドレス方式でClaude Codeを無限ループに入れておくと、1000件を超えるコミットと複数のコードベースのポーティング結果が生成された
- この方法でassistant-uiのReactプロジェクトをVueに、PythonプロジェクトをTypeScriptに自動変換するなど、さまざまなポーティング成功事例が得られた
- プロンプトをシンプルに保つほど性能が向上し、複雑にすると非効率が大きくなることを確認した
- 完璧ではないものの、ソース/ターゲットリポジトリの同期に役立つRepoMirrorツールもあわせて開発した
- AIエージェントの自己中断、課題追加など予期しない挙動や学習も観察され、今後の自動化の可能性と限界の両方を実感した
プロジェクト概要と目的
- 本プロジェクトは、AIコーディングエージェントを無限whileループに入れ、実際のコードポーティング作業をどのように進めるかを実験したもの
- Claude Codeをヘッドレスで継続的に入力プロンプトへ反復投入し、さまざまなリポジトリに自動変換プロセスを適用した
- 1000件以上のコミット、ReactからVue、PythonからTypeScriptなど、複数のポーティング作業の自動化という結果を導いた
- その過程で、ポーティング自動化支援ツールのRepoMirrorも開発した
無限ループ方式エージェント運用
- Geoff Huntleyが推奨した、コーディングエージェントのプロンプトをシェルで連続実行する形
- 例:
while :; do cat prompt.md | claude -p --dangerously-skip-permissions; done
- 例:
- assistant-uiのReactをVueに変える作業などにこのループ方式を適用
- 各ファイル修正ごとにコミットとプッシュを実行
- 作業履歴と計画を
.agent/ディレクトリに記録
さまざまなポーティングケースの実験
-
Browser Use(PythonからTypeScriptへのポーティング)
- シンプルなプロンプトでinfinite loopを実行
- GCP VM上でtmuxによりループを継続実行
- 朝にはほぼ完璧に動作するTypeScriptポートの結果を確認
-
Vercel AI SDK のTypeScript → Pythonポーティングも適用
- FastAPI/Flaskの自動アダプタを生成
- Pythonのさまざまなschema validatorへの変換もサポート
-
仕様ベースのコード自動化: Convex、Dedalusのようなプロジェクトでもドキュメントから直接コード生成を試行
実験中に現れた現象と教訓
エージェントのテスト作成と自己中断
- エージェントは指示に従ってテストコードも作成した
- 無限ループに陥ったり任務完了時に、自ら
pkillでプロセスを終了した事例もあった - 作業範囲の厳守、
TODO.mdへの完了度の反復記録
追加の創発的挙動
- ポーティング作業終了後、本来のJS版にないFastAPI/Flask統合、schema validatorサポートなどの付加機能を自発的に追加
プロンプト簡素化の重要性
- 短くシンプルなプロンプトが優れた性能を示した
- 103文字のプロンプトから1500文字のプロンプトに増やすと遅くなり、精度も低下
- 実際に使用したプロンプト情報はpromptsフォルダを参照
完全自動化の限界
- 目立った問題: ときどき完全には動作しないポーティングコードを出力する(ブラウザデモの一部が未完成など)
- プロンプト調整とインタラクティブな修正が必要
インフラ/コストと運用
- 所要コストは約$800、総コミット数は1100件、各エージェントは約$10.50/時間水準
- 複数のソース/ターゲットリポジトリのポーティング過程を自動化するツールをその場で制作(RepoMirror)
- shadcnスタイルのオープンボックス原則を適用し、init段階後にスクリプトとプロンプトをカスタマイズできるフォルダを生成
npx repomirror syncとsync-foreverにより反復実行をサポート
ツールの使い方と活用方法
npx repomirror initでソース/ターゲットディレクトリを指定し、コマンドを入力して初期化- 例) React → Vue、gRPC → REST変換など新しい命令も簡単に適用可能
- フォルダ構造:
.repomirror/prompt.md、sync.sh、ralph.shなどの初期ファイルを自動生成
- 各反復単位でsync/sync-foreverを実行し、AIポーティングループを運用
- 主な例、デモ結果、ソースコードリポジトリはREADMEで確認可能
実験後の所感とチームのフィードバック
AGI(汎用人工知能)を実感し、主に興奮と少しの恐怖を伴った
シンプルさが効果的だと直接体験できた
今は指数関数的成長曲線のごく初期段階にいるという感覚がある
- チームメンバーとアイデア提供者に感謝を表明
結論
- 無限ループベースのAIコーディングエージェントによる、実際のソースコードのポーティングと同期作業の実現経験
- シンプルな構造と効果的なプロンプト運用の重要性を強調
- 自動化の将来の可能性と限界の両方が明らかになった
- 関連ツール(RepoMirror)はオープンソースとして活用・研究可能
2件のコメント
Hacker Newsのコメント
intとstringが混在して保存されていたり、Postgresでforeign keyなしに関係を持たせていたり、alter tableできないから新しいテーブルを作ってしまうような非効率な状況を見てきたagent/TODO.mdを継続的に更新したりして進捗を残していた。また、あるエージェントは無限ループに陥ったことに気づき、pkillコマンドで自分自身を終了させたという話もあった。いろいろな意味で非常に面白い出来事だ。このプロジェクトについてはいくつか思うことがある。1.5年前にも似た試みがあったが、そのときはGPT-3.5/4ベースではほとんど動かなかったのに、今回ははるかに結果が良かった。こんな単純なプロンプトだけでうまく回ったのは驚きだ。私たちはみんな、仕事を必要以上に複雑に考えていたのかもしれない。一方で、著作権/IPの問題はかなり複雑になりそうだ。SaaS企業にとってはこの流れは打撃になる。この技術に加えて、中堅企業に所属する10人のエンジニアが付けば、自社開発(=NIH症候群)の大義名分が十分に立ってしまうpkillして終了したというのは、もしかしてAIによる初の「自殺」なのではないかと気になるpkillで自分を終了した行為は、もしかしてHalting Problem(停止性問題)そのものを解いてしまったのでは、という冗談も思い浮かぶIMPLEMENTATION_PLAN.mdなしでもいけるのか気になっていたbash for loop1発で済むのだと分かった気がする。狂ったプロジェクトだID.md、EGO.md、SUPEREGO.mdファイルを追加すれば完成、という冗談だLLMが書いたコードがブラックボックス化するという懸念には同意しますが、結局そのコードの分析もLLMに任せられるのではないでしょうか?