Fusion — マルチモデルパネル
最前線のモデルは、それぞれ違ったしかたで間違えます。ある 1 つが取りこぼす境界事例を別の 1 つが捕らえ、ある 1 つが幻視する API を残りの 3 つは作り出すことを拒みます。Fusion はその多様さを機能に変えます。作動させると、あなたの Claude Code セッションが投げる問いはどれも複数のモデルによって同時に答えられ、ジャッジのモデルが下書きたちのどこが一致し、どこで食い違い、どこでそれぞれが光るのかを描き出し、その分析に基づく合成された 1 つの答えが、あたかも 1 つのモデルが書いたかのように Claude Code へ返されます。エージェントは、パネルが招集されたことを決して知りません。
Fusion はすべてホスト側のプロキシで動くので(コンセプトを参照)、VM の中は何も変わりません。エージェントのフラグもラッパースクリプトもなく、エージェントが反応できるような目に見える遅延源もありません。設定はマシンごと(設定エディタでは「ワークスペース」)にFusion の設定ペインで行い、マシンのターミナルタブのどれかが画面に出ている間にツールバーの雷ボタン(⚡)で作動させます。
注: Fusion は UI で BETA と表示されています。動く試作品です。仕組みは安定していますが、ジャッジのプロンプト、プロバイダーのバックエンド、失敗時の扱いはまだ変わりつつあります。頼りにする前にベータの限界を読んでください。
Fusion のしくみ
Fusion は、Claude Code セッションが Anthropic の /v1/messages エンドポイントへ送る通信を横取りします。各リクエストは段を追って処理されます:
- 脚 A — まず Claude が答える。 ゲストの元のリクエストがそのまま Anthropic へ送られます(返答全体を調べられるよう、強制的に非ストリーミングにされます)。あなたの Claude Code セッションは、常に融合の脚の 1 つです。
- ツールのターンは素通り。 Claude の返答がツール呼び出しだった場合 — エージェント的コーディングではよくあることで、たいていのターンは「このファイルを読め」「このコマンドを実行せよ」です — それは一字一句そのままエージェントへ渡され、そのターンでは融合が飛ばされます。エージェントのループが、合成されたツール呼び出しで断たれることはありません。
- テキストのターンは扇状に広がる。 Claude がただのテキストの答えを返したときにだけ Fusion が働きます。選ばれた他のすべての脚 — Codex (OpenAI)、Grok (xAI)、Kimi Code (Moonshot AI)、Oh My Pi、そして任意でローカルモデル — が、同じ平らにされた記録の上で同じ問いを受けます。
- ジャッジが地形を描く。 ジャッジのモデルがすべての下書きを比べ、散文の講評ではなく、構造化された JSON の分析 — 合意、食い違い、独自の洞察、盲点、そして判定 — を出します。
- ジャッジが合成する。 同じジャッジのモデルが次に、いま作った分析に基づいて決定版の答えを書きます。
- 引き渡し。 融合された答えは、VM の中のエージェントが求めたのと正確に同じワイヤ形式(Anthropic の SSE か JSON)で返されます。Claude Code から見れば、1 つのモデルが答えたのです。
どの段で失敗しても、セッションを壊すのではなく穏やかに劣化します。認証情報を解決できない脚、エラーを返した脚、時間切れになった脚は、黙って融合から外されます。生き残った答えが 2 つに届かなければ、Claude 自身の答えがそのまま返されます。
ツールのターンとテキストのターン
ツールのターンとテキストのターンを分けることが、Fusion をエージェント的な作業にとって安全にしています。行為(ツール呼び出し)は Claude が出したそのままに実行され、融合されるのは答え — 説明、設計、レビュー、計画 — だけです。ふつうのコーディングセッションではほとんどのターンが行為なので、Fusion の影響はモデルの多様さが最も効くところ、つまり推論と結論に集まり、機械的なファイル編集には及びません。
各脚の身元がどこから来るか
Fusion には自前の認証情報の UI がありません。各脚は、マシンの実効的なモデル設定 — 環境設定 › モデルとマシン自身のモデルの上書き(モデルとプロバイダーを参照) — でそのエージェントについて既に設定されているサインインか API キーを使います。それらの設定を変えると、実行中のマシンの Fusion の構成はその場で更新されます。変更の結果、使えるモデルが 2 つに届かなくなれば、Fusion は解除されます。
- サブスクリプション — 脚はホストのサブスクリプション保管庫にある生きたトークン(Claude、ChatGPT、Grok、Kimi)を使い、ホストが必要に応じて更新します。Claude のサブスクリプショントークンには、Anthropic が要求する Claude Code の身元システムブロックと OAuth のベータヘッダーが自動で付きます。
- API キー — 脚は、ホスト側のトークン差し替え表にある本物の API キーを使います(ゲストが見たのは常に代替だけです。認証情報を参照)。
- Oh My Pi — omp は API キーのみで動き、切り替えられた先のプロバイダーを話すので、その脚はそのプロバイダーの API キーを使い、モデル設定がそこで omp に選んだモデル(なければそのプロバイダーの既定の脚モデル)を使います。融合できるのは Anthropic、OpenAI、xAI だけで、z.ai やカスタムエンドポイント上の omp は脚として提供されません。
- ローカルモデル — 脚はそのマシンのローカルエンジンを狙います。カスタムサーバーが設定されていればそれ、なければ Mac のオンデバイスエンジンです(モデルとプロバイダーを参照)。
- Amazon Bedrock — Bedrock 上の Claude Code セッションは、ゲスト自身のリクエストを通してしか寄与しません。Bedrock の融合脚は別に立ちません。
認証情報を解決できない脚は、ログの 1 行を残して外されます。エージェントにエラーが上がることは決してありません。
必要なもの
Fusion には使えるモデルが少なくとも 2 つ必要です:
- あなたの Claude Code セッションは、Claude Code エージェントに使える認証情報がある限り、常に 1 脚として数えられます。
- 追加のクラウドの脚 — Codex (OpenAI)、Grok (xAI)、Kimi Code (Moonshot AI) — にはそれぞれ、環境設定 › モデルかマシンのモデルの上書きで設定された、そのエージェントの認証情報が必要です。それまで、その行はグレー表示で、*— クラウド認証情報がありません(環境設定 › モデルで設定してください)*という注記が付きます。
- Oh My Pi の脚には、omp が Anthropic、OpenAI、xAI のいずれかに切り替えられていて、そのプロバイダーの API キーがあることが必要です。そうでなければ、その行は*— Oh My Pi には Anthropic、OpenAI、xAI いずれかの API キーが必要です(環境設定 › モデルで設定してください)*と出ます。
- ローカルモデルの脚にはローカルモデルが必要です。モデルのオンデバイスでダウンロードしたオンデバイスモデル、またはカスタムサーバーです。それまで、その行は*— 環境設定 › モデルでダウンロードしてください*と出ます。
使えるモデルの選択が 2 つに届かないとき、ペインは*「統合するモデルを 2 つ以上選んでください — あなたの Claude Code セッションが 1 つ分なので、もう 1 つ(クラウドのエージェントかローカルモデル)を足してください。」*という補助テキストを出し、雷ボタンは無効のままです。
マシンごとに Fusion を設定する
Fusion は、マシンの設定のモデルの下にあるFusion ペイン(黄色い雷のアイコン。ペインには BETA と付いています)で設定します。項目ごとのリファレンスはFusion の設定にあり、この節では流れを辿ります。
上のスクリーンショットでは、このワークスペースにプロバイダーが 1 つも設定されていないので、統合するモデルの下の行はすべてグレー表示で、オレンジ色の補助テキストが何が足りないのかを説明しています。
- マシンの設定を開き(マシンメニューの設定…)、Fusion ペインを選びます。
- 統合するモデルの下で、パネルに答えを出してほしいエージェントにチェックを入れます。Claude Code (Anthropic) — あなたのセッションは常に 1 脚です。Codex (OpenAI)、Grok (xAI)、Kimi Code (Moonshot AI)、Oh My Pi、ローカルモデルを足してください。ローカルモデルの行には、使えるローカルモデルの選択肢が付いています。
- ジャッジの下で、下書きを秤にかけ最終の答えを書くプロバイダーとモデルを選びます。プロバイダーの一覧には、使える認証情報を持つすべてのエージェント(脚と同じ判定)と、ローカルモデルがあるときはローカルが並びます。クラウドのモデル一覧はプロバイダーの
/v1/modelsエンドポイントから直接取得され、(既定) の項目を含みます。取得に失敗した場合は、代わりに小さな組み込みの一覧が示されます。ローカルのジャッジは、インストール済みのカタログモデルから選びます。 - 保存をクリックします。
| 設定 | 既定 | 備考 |
|---|---|---|
| 統合するモデル | 未選択 | Claude Code は常に脚です。他は認証情報(クラウド)かローカルモデルが必要です。 |
| ジャッジ → プロバイダー | 最初に使えるプロバイダー | ローカルモデルが使えるようになるとローカルが現れます。 |
| ジャッジ → モデル | (既定) → claude-opus-4-8 | クラウドの一覧は /v1/models から直接取得。 |
脚のモデルを明示的に指定していないときの既定は次のとおりです:Claude → claude-opus-4-8、Codex → サブスクリプションなら gpt-5.5、API キーなら gpt-5.5-2026-04-23、Grok → grok-build、Kimi Code → kimi-k2.5、Oh My Pi → 話す相手のプロバイダーの既定(Claude のもの、Codex の API キーでの既定、あるいは Grok のもの)。Oh My Pi のジャッジは omp の脚モデルに落ちます。
ヒント: ローカルモデルは、力量があって追加費用のかからない脚になります — そしてジャッジそのものもローカルで動かせるので、分析と合成の段をまるごとあなたの Mac に留められます。モデルとプロバイダーを参照してください。
マシンで Fusion を作動させる
ペインを設定しても、Fusion は使えるようになるだけです。作動させるのはマシンごとで、メインウインドウのツールバーの雷ボタン(⚡)で行います。雷が現れるのは、そのマシンのターミナルタブのどれかが画面に出ているときだけです — サイドバーの仮想マシンの下から、あるいはセッションで Linux のピル(⌥⌘U)を押してそのターミナルへ飛んだあとです。チャットの中には決して現れません。
| 雷の見た目 | 状態 | ツールチップ |
|---|---|---|
| 中抜き、無効 | 使えません — 使えるモデルが 2 つに届きません | 「Fusion を使うにはモデルを 2 つ以上有効にしてください」 |
| 塗りつぶし、濃いグレー | 使えるが、作動していない | 「Fusion は利用可能 — クリックで作動」 |
| 塗りつぶし、黄色 | 作動中 | 「Fusion 作動中 — クリックで停止」 |
雷をクリックすると切り替わります。作動させるとマシン全体に効きます。その上で走っているすべての Claude Code セッションが、あなたが止めるまで融合されます。マシンは Fusion が止まった状態で始まります — これは明示的な選択であり、黙って有効になる既定ではありません。
コマンドラインから
アプリが動いていれば、ウインドウに触れずに実行中の VM で Fusion を切り替えられます:
bromure-cli vm fusion enable <vm>
bromure-cli vm fusion disable <vm>
<vm> は VM の ID かワークスペース名で、on/off/engage/disengage も別名として受け付けられます。bromure-cli vm の状態出力には、engaged か available (off) と読める fusion の行が含まれます。これらのコマンドはアプリの制御 API と話すので、アプリ(またはそのエージェント)が動いている必要があります。CLI、API、MCPを参照してください。
Fusion にかかる費用
Fusion はモデルの使用量を何倍にもします。算術を知ってから作動させるべきです。Claude がただのテキストの答えを返すターンごとに:
- 選ばれた追加の脚は 1 つにつき完全なモデル呼び出しを 1 回行い、同じ平らにされた記録を文脈として受け取ります — つまり長い会話は、融合されるターンごとに、どの脚でも比例して費用がかかります。
- ジャッジはさらに 2 回呼び出します。1 回は JSON の分析を作るため、もう 1 回は合成を書くためです。どちらも出力 4,096 トークンが上限です。
Claude のほかに Codex、Grok、ローカルモデルを選んでいれば、融合された 1 つの答えには、あなたが元々していた Claude の呼び出しに加えて最大 5 回のモデル呼び出しがかかります。脚をさらに足せば 1 回ずつ増えます。ツール呼び出しのターンはゼロ回の追加呼び出しで扇状に広がるので、実際にはエージェントのセッションは最悪の場合よりずっと安く済みます — コーディングのループではほとんどのターンがツール呼び出しなのです。
各脚の請求のされ方は、その認証情報に従います。API キーの脚はトークン単位で請求され、サブスクリプションの脚はそのサブスクリプションの枠を使い、ローカルの脚はデバイス上の計算(ノートならバッテリー)だけを費やします。各脚には既定で 600 秒の上流タイムアウトがあります。
トレースの中の Fusion
Fusion はエージェントに対しては意図的に見えませんが、あなたには全部見えます。上流への側の呼び出しはすべて — 各脚、ジャッジの分析、そして合成 — 他の AI のやり取りと同じようにトレースのパイプラインに捕らえられ、マシンのトレース段階に従います(トレースを参照)。
実際に起きること:
- トレースインスペクタ(ウインドウメニュー → トレースインスペクタ…)は、追加のやり取りをセッションのふだんの通信と並べて示し、捕らえたリクエストとレスポンスを解析された会話として描きます — 各脚が何と答え、ジャッジが何と結論したかをそのまま読めます。
bromure-cli trace hostnamesは、Anthropic だけだと思っていたかもしれないセッションからapi.openai.comのようなホストに接続したことを示します。あなたの組織が外向き通信を監査しているなら、融合されたセッションでは選んだすべてのプロバイダーのエンドポイントが現れると見込んでください。- Fusion はアプリのログ(
~/Library/Logs/BromureAC/bromure-ac.log)にも[fusion]の接頭辞で細かく記録します — ある脚が外された理由を診断するときに役立ちます。
注: あなたのデータ取り扱い規則が、どのプロバイダーならコードを見てよいかを制限している場合は、選んだ脚のどれもが会話の平らにされた記録の全文を受け取ることを忘れないでください。脚はそれに応じて選んでください。そのマシンで個人データ保護がオンなら、扇状に広げる前に個人データが代替と差し替えられるので、どの脚も代替を受け取ります。
環境変数による上書き
いくつかの既定は、アプリの起動時に環境変数で上書きできます — 実験には便利ですが、日々の設定として意図したものではありません:
| 変数 | 既定 | 効果 |
|---|---|---|
BROMURE_FUSION_TIMEOUT | 600 | 脚ごとの上流タイムアウト(秒)。 |
BROMURE_FUSION_OPENAI_MAX_TOKENS | 128000(GPT-5/o シリーズ)、16384(gpt-4o 以前) | OpenAI の脚の完了トークン上限。 |
ベータの限界
Fusion はベータの機能で、知っておくとよい鋭い角があります:
- Claude Code のセッションだけ。 Fusion が横取りするのは Anthropic の
/v1/messagesへの POST リクエストです。Codex、Grok、Kimi、omp を走らせているセッションは融合されません — それらのエージェントの通信はふつうに通ります。 - Claude 以外の脚はツールなしで答える。 Codex、Grok、Kimi Code、Oh My Pi、ローカルの脚については、ツールの定義が落とされます。平らにされた記録の上で散文として答えます。その下書きは合成に生かされますが、それら自身は行動できません。
- サブスクリプションのバックエンドは最善努力。 Codex のサブスクリプションの脚は WebSocket 越しに ChatGPT のバックエンドに乗り、Grok のサブスクリプションの脚は
cli-chat-proxy.grok.comを使います — どちらも文書化されていないインターフェイスです。何かエラーがあれば、融合を失敗させるのではなくその脚を外します。 - Oh My Pi は 3 つのプロバイダーだけ。 Oh My Pi の脚やジャッジは、omp が API キー付きで Anthropic、OpenAI、xAI のいずれかに切り替えられている間だけ働きます。z.ai やカスタムエンドポイントでは提供されません。
- 静かな劣化。 外された脚とジャッジの失敗は、エージェントに知らせずに Claude 自身の答え(あるいは生の下書き)へ落ちます。それが起きたと分かるのは、トレースとアプリログの
[fusion]の行だけです。 - 遅延。 融合されたテキストのターンは、生き残った最も遅い脚を待ち、それからジャッジを 2 回呼びます。ふつうのセッションよりはっきり遅い答えのターンを見込んでください。ツールのターンは影響を受けません。