Minions
https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents
Stripeが内製した完全無人のコーディングエージェント
タスクをワンショットで完了することを目指す
毎週1000以上のプルリクエストがMinion製でマージされている
人間がレビューするが、人間が書いたコードは含まれない
開発者の注意力が最も希少なリソースであるという前提に立つ
無人エージェントによりタスクの並列化が可能になる
なぜ内製したのか
Stripeのコードベースは数億行規模で、大規模リポジトリが複数ある
バックエンドはRuby(Railsではない)+ Sorbet型付けという珍しいスタック
独自の社内ライブラリが大量にあり、LLMにとってネイティブに未知
年間1兆ドル以上の決済を処理する本番環境のコードであり、リスクが高い
金融機関・規制・コンプライアンスへの依存が複雑
ゼロからのVibe Codingと成熟した巨大コードベースの開発は根本的に異なる
既存の開発生産性基盤(ソース管理、環境、CIなど)との密な統合が必要
使い方
主な起動方法はSlackからの呼び出し
Slackアプリをタグ付けするとスレッドのコンテキストを読み取って起動する
CLIやGUIからも起動可能
社内ドキュメントプラットフォーム、Feature Flags、チケットUIからも統合
Flaky test検出時に自動チケットが作られ、Minionで修正を促す
エンジニアは複数のMinionを並列で起動できる
オンコール中の多数の小さな問題を効率的に解決できる
動作の流れ
Slackメッセージで開始 → プルリクエストで終了、途中の人間の介入なし
隔離された開発環境(devbox)で実行される
本番環境やインターネットから隔離されており、人間の許可チェック不要
10秒でスピンアップ可能(プリウォーム済み)
完了後にブランチ作成 → CI実行 → PRテンプレートに沿ったPR準備
完全でなくても、エンジニアの作業の優れた出発点になる
アーキテクチャ
コアエージェントループはBlock社のgoose(コーディングエージェント)のフォーク
エージェントループと決定的コード(git操作、リンター、テスト)を交互に実行
エージェントの創造性と必須ステップの確実な実行を両立
人間向けツール(Cursor、Claude Code)と同じくAGENTS.mdのようなルールファイルを読む
ほぼ全てのルールはサブディレクトリに基づいて条件付きで適用
MCPの活用
MCP(Model Context Protocol)でネットワーク越しのLLM関数呼び出しを統一
社内ドキュメント、チケット、ビルド状況、Sourcegraph検索などのコンテキスト取得に使用
Minion実行前に関連リンクに対してMCPツールを決定的に実行し、コンテキストを事前に補充
中央集約型の社内MCPサーバー「Toolshed」を構築
400以上のMCPツールを提供(社内システム + SaaSプラットフォーム)
Minionや他のエージェントはキュレーションされたサブセットにアクセス
テストとフィードバック
ワンショットが目標だが、失敗時のフィードバックが重要
ローカルの自動テスト(ヒューリスティクスベースのlint選択)が最初の防御線
git pushごとに5秒以内で実行
「フィードバックを左にシフト」する思想
CIで失敗するlintはIDEやgit push時に即座にエンジニアに提示すべき
CIはStripeの300万以上のテストから選択的に実行
多くのテストには失敗時の自動修正がある
CIは最大2ラウンドまで
初回プッシュ後にテスト失敗があればMinionが修正して再プッシュ
LLMが多数のCIループを回しても限界収益逓減する