Symphony:自律型AIコーディングエージェントのためのオープンソースオーケストレーション仕様
自律型エージェントオーケストレーションの核心:Symphonyの概要と目的
OpenAIが公開したSymphonyは、自律型AIコーディングエージェントの作業を調整するためのオープンソース仕様であり、ソフトウェア開発プロセスの自動化を根本から変革することを目指しています。このサービスは、イシュートラッカー(現在の仕様ではLinear)から継続的に作業を読み込み、各イシューに対して隔離されたワークスペースを作成し、その中でコーディングエージェントのセッションを実行する、長時間稼働型の自動化サービスとして定義されています。従来のスクリプトによる手動実行に代わり、Symphonyはイシューの実行を再現可能なデーモンワークフローへと変換します。
Symphonyが解決する主な運用上の課題は以下の4点です:
-
ワークフローの自動化と再現性: イシューの実行をスクリプトではなく、自動化されたデーモンワークフローとして提供します。
-
エージェント実行の隔離: 各イシューに対して独立したワークスペースを確保し、エージェントのコマンドがその特定のディレクトリ内でのみ実行されるようにします。これにより、環境間の干渉を防ぎ、予測可能な結果をもたらします。
-
ワークフローポリシーのバージョン管理: エージェントのプロンプトやランタイム設定を含むワークフローポリシーをリポジトリ内の
WORKFLOW.mdファイルに保持することで、コードと共にバージョン管理を可能にします。 -
高い可観測性: 複数の並行するエージェントの実行状況を監視およびデバッグするための十分な可観測性を提供します。
Symphonyは、AIエージェントの管理から「達成すべき作業の管理」へと焦点を移すことで、開発者がより高レベルでの作業管理に集中できるよう支援します。これは、プロジェクト管理ツールとコード実行の間のギャップを埋めることに特化した、スケジューラー、ランナー、トラッカーリーダーとしての役割を担います。
Symphonyのアーキテクチャと主要コンポーネント
Symphonyのアーキテクチャは、その効率性と信頼性を支える複数のコンポーネントと層で構成されています。中心となるのは「Orchestrator(オーケストレーター)」であり、ポーリング、ランタイム状態、ディスパッチロジック、リトライキューを管理するSymphonyの「頭脳」と位置付けられています。オーケストレーターは、固定のポーリング間隔(デフォルト30秒)で候補となるイシューをトラッカーからフェッチし、実行可能かどうかを評価し、エージェントランナーにディスパッチします。
主要なコンポーネントとその機能は以下の通りです:
- Workflow Loader:
WORKFLOW.mdを読み込み、YAMLフロントマターとプロンプト本体を解析し、設定とプロンプトテンプレートを返します。 - Config Layer: ワークフロー設定値への型付きゲッターを公開し、デフォルト値と環境変数による間接指定を適用し、検証を実行します。
- Issue Tracker Client: 候補となるイシューや調整のための現在の状態、起動時のクリーンアップのための終了状態のイシューをフェッチし、トラッカーのペイロードを正規化します。
- Orchestrator: ディスパッチ、リトライ、調整のための単一の信頼できるオーケストレーター状態を維持します。
- Workspace Manager: イシューごとに決定論的なワークスペースを作成し、複数の実行間でそれらを維持します。
- Agent Runner: コーディングエージェントのセッションを実行する役割を担います。OpenSymphonyの実装では、OpenHandsが独立した実行ハーネスとして使用されています。
- Status Surface / Logging: オペレーターがオーケストレーターとエージェントの振る舞いを可視化できるように、構造化されたログやステータス情報を提供します。
Symphonyは以下の6つの distinct な層で構成されており、それぞれが特定の役割を担っています:
- Policy Layer: リポジトリ内で定義される
WORKFLOW.mdファイルに格納される、エージェントのプロンプトとランタイム設定。 - Configuration Layer: YAMLフロントマターから解析される型付きランタイム設定。
- Coordination Layer: ポーリング、並行性、リトライを管理するオーケストレーター。
- Execution Layer: ワークスペースとエージェントのサブプロセス管理。
- Integration Layer: イシュートラッカー(例: Linear API)との連携。
- Observability Layer: オーケストレーターとエージェントの振る舞いをオペレーターが可視化するためのログとオプションのステータス表示。
ハーネスエンジニアリングと安全なエージェント実行
Symphonyは、特に「ハーネスエンジニアリング」の実践が推奨されるコードベースで最も効果を発揮するとされています。ハーネスエンジニアリングとは、機械によるインタラクションに最適化されたリポジトリ構造を指し、以下の要件が含まれます:
- 独立したテスト (Hermetic Testing): 外部依存性なしにローカルで信頼性高く実行できるテスト。
- 機械可読なドキュメント (Machine-Readable Docs): エージェントがプロジェクトの構築、テスト、デプロイ方法を自律的に発見できるドキュメントとスクリプト。
- モジュール型アーキテクチャ (Modular Architecture): 副作用が最小限に抑えられ、エージェントが高い確信度で変更を行えるコードベース。
Symphonyは、AIエージェントを信頼性の高い生産的なものにするためのインフラ、制約、フィードバックループを設計する規律であるハーネスエンジニアリングのリファレンス実装です。これにより、手動でのプロンプト調整から、自動化されたループへとAIコーディングを移行させます。
安全性とサンドボックス化もSymphonyの重要な考慮事項です。Symphonyは複数のレイヤーでセキュリティを確保しています:
- 承認ポリシー (Approval Policies): エージェントの各アクションに対して、完全に自動承認(
never)から明示的な承認を要求する設定まで、範囲を選択できます。 - サンドボックスポリシー (Sandbox Policies): ファイルシステムへのアクセスを制御し、
read-only(エージェントは読み取りのみ可能)、workspace-write(エージェントは自身のワークスペースディレクトリ内でのみ書き込み可能)、full-access(制限なし、注意して使用)などのオプションを提供します。
さらに、Symphonyはコードがマージされる前に「Proof of Work」(CI合格やウォークスルーなど)を要求することで、エージェントによって生成されたコードの品質と安全性を保証します。これは、イシューを解消し、検証済みのプルリクエスト(CIステータス、コードレビュー、ウォークスルービデオを含む)を人間がコードを見る前に提供することを可能にします。
開発者・エンジニア視点での考察:Symphonyが拓く次世代開発ワークフロー
-
エージェント行動のコードとしての管理とバージョン管理の徹底: Symphonyの
WORKFLOW.mdファイルは、エージェントのプロンプトとランタイム設定を直接リポジトリ内に配置することを可能にします。これにより、エージェントの振る舞いが単なる指示ではなく、ソフトウェアコードの一部として扱われ、厳密なバージョン管理、コードレビュー、そして再現可能なデプロイメントが可能になります。これは、エージェント駆動型開発における「設定ドリフト」の問題を根本的に解決し、エージェントの行動が予測可能で監査可能な状態を維持する上で極めて重要です。 -
開発環境の一貫性と再現性の向上: 各イシューに対して決定論的かつ隔離されたワークスペースが提供されるSymphonyの設計は、開発プロセスにおいて長年の課題であった「私の環境では動く」といった問題の解決に大きく貢献します。エージェントは常にクリーンで標準化された環境で作業を行うため、予期せぬ依存関係や環境設定の違いによるバグのリスクが大幅に減少します。これは、特に大規模なチームや複雑なプロジェクトにおいて、開発効率とコード品質の向上に直結します。
-
ヒューマン・イン・ザ・ループの戦略的シフト: Symphonyは、人間の役割を従来の細かいプロンプト調整やエージェントの「お守り」から、より戦略的なワークフロー全体の監督、ポリシーの変更、そして最終的なプルリクエストのレビューへと引き上げます。これにより、開発者は反復的で時間のかかるタスクから解放され、システムの設計、アーキテクチャの決定、複雑な問題解決といった高次の知的活動に集中できるようになります。Symphonyは、AIを単なるツールとしてではなく、プロジェクト全体の生産性を向上させるための協力的な「同僚」として位置づける、開発パラダイムの転換を促します。


