OpenCode 2.0、共有セッションを標準化しCode Modeとバックグラウンド実行を拡充
出典: dev.opencode.ai

OpenCode 2.0は、ターミナル、Web、デスクトップアプリで同じ会話セッションを扱う仕組みを標準化しました。MCPツールの実行をまとめるCode Modeや、レビュー・テストをバックグラウンドで進める機能も加わり、作業中に画面を移って同じ会話を続けたり、別の処理を進めたりできます。

3つの画面で同じセッションを利用

2.0では、利用者のコンピューター上でユーザーアカウントごとに共有バックグラウンドサービスを起動します。ターミナルの対話型画面、ブラウザーのWeb UI、デスクトップアプリはこのサービスに接続し、会話セッションや設定、外部連携、権限、ツール実行を共有します。

1.xでも起動済みサーバーへ接続すれば同じセッションを使えましたが、2.0では共有サービスを各UIが利用する構成がデフォルトになりました。たとえば、ターミナルで進めていた会話をWeb UIへ移って続けられます。

共有サービスを使わず専用サーバーで起動する場合は --standalone、特定のサーバーへ接続する場合は --server を指定できます。共有サービスを無効にした状態でも、明示した接続先への接続やサービスの手動起動が可能です。

MCPツールをスクリプトで組み合わせる

MCP(Model Context Protocol)は、言語モデルが利用するツールをサーバーから公開するための仕組みです。各ツールには名前と入力仕様があり、クライアントは tools/list で利用可能なツールを取得し、tools/call で実行を依頼します。

OpenCode 2.0では、MCPサーバーのツール呼び出しにCode Modeを使う設定がデフォルトです。エージェントはJavaScriptで処理を書き、execute ツールを通じてMCPツールを呼び出します。たとえばGitHubのバグ報告を取得してLinearへ課題として登録する一連の処理を、ひとつのスクリプトにまとめられます。

直接呼び出す方式では、モデルがツールの結果を受け取って次の呼び出しを判断します。Code Modeでは、依存しない呼び出しを並列に進めたり、途中のデータをスクリプト内で加工して必要な結果だけを返したりできます。OpenCodeは、こうした処理をまとめることでモデルとの往復を減らせるとしています。

ツール数に応じて変わる処理の流れ

OpenCodeでは、登録したMCPツールが組み込みツールとともにモデルから利用可能になります。一方、MCPサーバーを追加すると利用可能なツールの情報がモデルのコンテキストに加わり、数が増えるとその情報量も大きくなります。

Code Modeでは、MCPサーバーやOpenAPIで定義されたAPIを、スクリプトから呼べる関数として扱います。多数のツールがある場合も、ツールの説明をすべてモデルへ渡す量を抑えられます。

スクリプトはファイルの読み書きやネットワーク通信を直接行わず、登録されたツールを通じて操作します。実行には execute 自体の権限に加え、スクリプトが呼び出す個々のツールの権限設定も適用されます。

待ち時間を使って別の作業を進行

主エージェントはサブエージェントに作業を依頼し、結果を待たずに別の編集を続けられます。2.0では、コードレビューなどをバックグラウンドで実行する機能が実験用設定なしで使えるようになりました。サブエージェントには主エージェントと異なるモデルを指定することもできます。

シェルコマンドもバックグラウンド実行に対応し、テストやビルドの完了を待ちながらほかの作業を進められます。実行中のサブエージェントやコマンドは、ショートカットキーでバックグラウンドへ移せます。

処理が終わると、依頼元のセッションに通知が届きます。Anomalyは、CLIに加えてJavaScriptやTypeScriptからセッションを作成してプロンプトを送るクライアントパッケージも提供し、Node.jsアプリ向けには共有サービスを見つけて起動するAPIを用意しています。

移行前に確認したい互換性

CLIを1.xから更新する場合は、先に最新の1.xへ更新してから opencode upgrade --major を実行します。V2向けのデスクトップアプリはダウンロードページから入手できます。

V1のプラグインはV2では動作せず、新しいプラグインAPIへの移植が必要です。サーバーAPIとクライアントの契約も変わるため、それらを呼び出す外部プログラムも書き換えが必要です。

ターミナルUIの設定は複数の tui.json 系ファイルからグローバルな cli.json へ移ります。初回起動時に移行されるのはV2で使えるグローバル設定で、プロジェクトごとのUI設定は引き継がれません。また、V2は現時点でLSP(開発ツールと言語サーバーを連携させる規格)に対応しておらず、移行ガイドはlintや型チェック、コンパイラーのコマンドへの置き換えを案内しています。