OpenAIが「Symphony」を開発し、無料で公開した理由

BBetter Stack
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00これはOpenAIのSymphonyです。長期実行エージェントをオーケストレーションするオープンソースツールで、
00:00:05Linearのような既存の課題トラッカーを使用して、人間の監視なしにエージェントが
00:00:10自律的にタスクを完了するのを助けます。しかし、なぜ使用前にゼロから構築する必要がないのでしょう?
00:00:14Codex CLIのみの対応でしょうか?そして、これはOpenAIからのさらなる
00:00:18オープンソースツールの始まりなのでしょうか?チャンネル登録して、確かめてみましょう。
00:00:25Symphonyが誕生したのは、OpenAIが「人間の注意力のボトルネック」に直面したからです。つまり、
00:00:30コンテキストスイッチが生産性に悪影響を及ぼし始める前に、エンジニアが同時に監視できる
00:00:35Codexセッションは3〜5個が限界でした。当然、これでは拡張できません。では、OpenAIはこの
00:00:41「高速なエージェントと低速な人間マネージャー」の問題をどう解決したか?人間を排除したのです。ある意味では。
00:00:47Symphonyでは、人間がボードにタスクを置くと、そのタスク完了のために新しいエージェントが起動され、
00:00:52レビューが必要な場合のみ、エージェントが人間に介入を求めます。
00:00:55しかし、SymphonyはMulticaやConductorのような類似ツールと比べてどうでしょうか?
00:00:58デモを見れば一目瞭然です。始める前に、これだけは言わせてください。
00:01:03Symphonyのインストール手順は、私の人生で見た中で最も奇妙です。あるいは、
00:01:07最も天才的な方法かもしれません。これについては後ほど詳しく。
00:01:10まずは、基本的な例を見てみましょう。Symphonyを実行し、
00:01:14Linearのタスクをポーリングしています。Linearで新しいチケットを作成します。
00:01:18内容は、TypeScriptとBUNを使った「Hello World」アプリの構築です。
00:01:22現在、Symphonyはバックログを処理しない設定なので、ステータスを「To-Do」に変更し、
00:01:27チケットを作成します。タスクのID「SYN7」を覚えておいてください。
00:01:31しばらくすると、SymphonyがそのタスクIDを検出します。数秒後、
00:01:36GraphQLの検証エラーが出ますが、大したことではなく、Codexなら簡単に修正できます。
00:01:41その後、Codexが作業を完了し、チケットのステータスを
00:01:45「To-Do」から「Done」に変更し、Symphonyからコメントが残されました。つまり、
00:01:49Symphonyのワークスペース・ディレクトリ(詳細は後述)を確認すると、
00:01:53チケットと同じIDの新しいワークスペースができています。その中には、
00:01:58Hello World TypeScript Bunアプリ用に作成されたファイルの一覧があります。そしてsourceディレクトリに行くと、
00:02:04見ると、アプリのコードがここにあります。これがSymphonyの基本的な仕組みです。
00:02:08では、セットアップ方法を説明します。このリポジトリによると、
00:02:12インストール方法は2つあります。オプション2は、私たちが慣れている方法です。Elixirをセットアップし、
00:02:16リポジトリをクローンしてコードをビルドし、既存のワークフロー・ファイルで実行します。
00:02:20しかしオプション1は、おそらく最も奇妙で、あるいは最も先進的なインストール方法です。
00:02:25基本的にはコーディング・エージェントにこのプロンプトを与えるだけです。エージェントは2,000行以上の
00:02:30スペックファイルを読み込みます。これは、エージェントに対して
00:02:34Symphonyの構築方法を詳細に指示するものです。驚くべきことに、全員がこの方法をとれば、
00:02:39同じSymphonyは二つとして存在しなくなります。人によって異なる言語で、
00:02:43異なる機能を持つことになり、OpenAIの維持・サポートはカオスになるでしょう。
00:02:47しかし、ある意味では天才的です。自分専用のSymphonyを構築すれば、
00:02:51それに責任を感じるからです。バグを直し、機能を追加し、
00:02:55基本的には自分で維持管理することになります。SymphonyにLinearや
00:02:59Codexを使わせたくないなら、それも自由です。ある人はCharm CLIで動くGo版のSymphonyを、
00:03:04また別の人はClaude SDKで動くものを作りました。私はそこまで独創的ではないので、
00:03:09GPT 5.5 Low Effortを使ってCodexにデフォルトのプロンプトを入れたところ、Python版の
00:03:15Symphonyが生成されました。LLMはPythonが得意ですからね。構築が終わったら、
00:03:19Linearの個人用APIキーが必要です。「セキュリティとアクセス」から
00:03:23作成できます。次に、そのキーをワークプロフィールに追加します。
00:03:28これはSymphonyに仕事を教えるファイルで、YAMLフロントマターを含み、
00:03:32APIキー、エージェントがタスクに着手できるアクティブ状態の定義、
00:03:37ワークスペースのルート、そしてSymphonyがコーディング・エージェントを起動するために
00:03:42使用するシェルコマンドであるCodexコマンドが含まれています。その下には、
00:03:46各課題に対してエージェントに送信されるMarkdownプロンプトがあります。OpenAIのリポジトリで詳細を確認できます。
00:03:51しかし現時点では、このワークフローは実際のプロジェクトには不十分です。例えば、
00:03:56開発中のフィルムエミュレーション・アプリに変更を加えたいとします。「create-after」フックを追加する必要があります。
00:04:01これはワークスペース作成後に実行され、まずリポジトリをワークスペースに
00:04:06クローンし、新しいブランチをチェックアウトします。さらに「run-after」フックも
00:04:10追加しました。Codexが作業を終えた後に、ファイルをステージングし、
00:04:15コミットを作成してブランチをプッシュし、プルリクエストを作成します。
00:04:20では、OpenAIが買収した(これは別動画のネタですが)UVを使ってSymphonyを実行すると、
00:04:25新しい課題をポーリングし始めます。ここでREADMEを更新する新しい課題を作成しましょう。
00:04:30一括処理のセクションで、複数ファイルを表示する代わりにワイルドカードを使うよう指定し、
00:04:35ステータスを「To-Do」に変えて作成します。Symphonyが課題を
00:04:40ピックアップしました。ワークスペース・ディレクトリを見ると、課題IDに一致する
00:04:45新しいフォルダがあり、プロジェクトがクローンされています。作業が終わると、
00:04:49ステータスは「Done」になり、Linearチケットへのリンクと要求通りの変更を含む
00:04:54新しいプルリクエスト(PR)が作成されました。もちろん、Symphonyのコードを変更して
00:04:59PRの説明を改善したり、コメントにPRへのリンクを貼るのも、
00:05:04Codexなら簡単でしょう。以上がSymphonyの概要です。すでにLinearを
00:05:08使っている、または会社で導入しているなら、インターフェースに馴染みがあるはずです。Codexユーザーなら、
00:05:13手持ちのスキルやMCPツール、プラグインを活用できます。私は個人的に
00:05:18Codexを使いませんが、OpenAIがSymphonyで目指しているビジョンは理解できます。
00:05:22AIを使って同じプロジェクトに取り組む開発者チームを想像してください。各自が個別の
00:05:28ワークフローを持つのではなく、共通のスキル、ツール、ワークフロー、プラグインを持つ
00:05:33中央エージェントを置くのです。各開発者はタスクを与えることで対話し、
00:05:37他の人がどんなタスクをし、どんなプロンプトを使ったかを把握でき、自分の作業が
00:05:41他の機能にどう影響するかを一目で確認できます。誰かが触っているコードに
00:05:46干渉しない機能を作るのは難しいことですから。しかし、Symphonyはクールですが、
00:05:49個人的にはMulticaの方が優れていると思います。セットアップやエージェントの追加が簡単で、
00:05:54タスクのスケジュールも可能です。それでも、
00:05:59Symphonyの居場所はあるはずです。これはMulticaの骨組みバージョンのようなもので、
00:06:04既製品ではなく、欲しい機能を正確に追加できるからです。つまり、
00:06:08SymphonyはPi Harnessのようなもので、MulticaやConductorはClaude Codeのようなものです。
00:06:13Multicaについて詳しく知りたい方は、こちらの動画ですべて解説して
00:06:18いますので、ぜひご覧ください。

Key Takeaway

OpenAIのSymphonyは、エンジニアの監視コストを削減するために、既存の課題トラッカーと連携してエージェントを自律的にオーケストレーションし、タスク完了からプルリクエスト作成までを自動化するオープンソースツールである。

Highlights

  • エンジニアが同時に監視できるエージェント数は3個から5個が限界であり、人間の注意力がボトルネックとなる問題を解決するためにSymphonyが開発された。

  • 2,000行を超えるスペックファイルをAIエージェントに読み込ませてツール自体を構築させるという、独自性の高いインストール手法を採用している。

  • Linearのタスクステータスを「To-Do」に変更するだけで、Symphonyが自動的に課題IDを検出し、コード生成からファイルの作成までを自律的に完了する。

  • 「create-after」や「run-after」といったフック機能を使用することで、リポジトリのクローンからプルリクエストの作成までの一連の開発ワークフローを自動化できる。

  • YAMLフロントマターを含むワークプロフィールを通じて、APIキー、アクティブ状態の定義、エージェント起動用のシェルコマンドを細かく制御できる。

Timeline

人間の注意力のボトルネック解消

  • エンジニアが同時に監視できるCodexセッションは3個から5個が限界である。
  • 人間のコンテキストスイッチが生産性を阻害するため、監視の自動化が必要となる。
  • 人間が管理ボードにタスクを置くと、エージェントが自律的に起動し、必要な場合のみ人間に介入を求める。

人間の管理能力がエージェントの処理速度に追いつかない課題を解決するために開発された。SymphonyはLinearなどの既存ツールを監視し、エンジニアが各エージェントを常時監視しなくてもプロジェクトが進む仕組みを提供する。これにより、開発組織の拡張性が確保される。

タスクの自動処理プロセスとデモ

  • Linearでチケットを作成し、ステータスを「To-Do」に変更するとSymphonyがタスクを検知する。
  • CodexがTypeScriptとBunを使用したアプリ構築タスクを実行し、ソースファイルを自動生成する。
  • 作業完了後、チケットのステータスは自動的に「Done」に変更され、実行ログがコメントとして残る。

実際の動作デモでは「SYN7」というIDのタスクが数秒で検出される。GraphQLの検証エラーが発生してもCodexが自律的に修正を行い、最終的にワークスペース内に必要なディレクトリ構造とコードが生成される。このプロセスにより、人間は進捗を確認するだけで済む。

AIによる自己構築型のセットアップ手法

  • プロンプトを通じて2,000行以上のスペックファイルをエージェントに読み込ませ、ツール自体を構築させる。
  • 構築に使用する言語やモデルをユーザーが自由に選択できるため、Python版やGo版など多様な実装が可能である。
  • ワークプロフィール内のYAML設定により、エージェントに送信するプロンプトや使用するシェルコマンドを定義する。

従来のビルド方法に加え、AIエージェントにSymphonyそのものを作らせるという先進的な手法が提示されている。ユーザー自身がコードを生成させることで、メンテナンスや機能拡張の責任をユーザー側が持つモデルとなっている。LinearのAPIキーやワークスペースのルート設定もこの段階で行う。

高度なワークフローの自動化と将来のビジョン

  • フック機能を利用して、リポジトリのブランチ作成からプルリクエストのプッシュまでを自動実行する。
  • 共通のスキルやツールを持つ中央エージェントを置くことで、チーム開発の衝突を防止する。
  • 既製品のツールとは異なり、Symphonyは必要な機能だけを追加できる最小限のフレームワークとして機能する。

実プロジェクトへの適用例として、READMEの更新やワイルドカード指定によるファイル修正が紹介されている。複数の開発者が同じコードベースに干渉せず、エージェントを通じてタスクを調整する共同作業の形が示されている。Multicaのような既存ツールと比較して、よりカスタマイズ性の高い基盤としての立ち位置を強調している。

Community Posts

View all posts