Fusion — le panneau multi-modèles
Les modèles de pointe échouent différemment. L'un rate un cas limite qu'un autre attrape ; l'un hallucine une API que les trois autres refusent d'inventer. Fusion fait de cette diversité une fonctionnalité : quand elle est engagée, chaque question que pose votre session Claude Code reçoit la réponse de plusieurs modèles à la fois, un modèle juge cartographie là où les brouillons s'accordent, se contredisent et brillent chacun, et une réponse unique synthétisée — fondée sur cette analyse — est remise à Claude Code comme si un seul modèle l'avait écrite. L'agent ne sait jamais qu'un panel a été réuni.
Fusion tourne entièrement dans le proxy côté hôte (voir Concepts), rien ne change donc à l'intérieur de la VM : pas d'options d'agent, pas de scripts d'enveloppe, aucune source de latence visible à laquelle l'agent pourrait réagir. Elle se configure par machine (un espace de travail, dans l'éditeur de réglages) dans le volet de réglages Fusion, et s'engage avec le bouton éclair (⚡) de la barre d'outils quand l'un des onglets de terminal de la machine est à l'écran.
Note : Fusion est étiquetée BETA dans l'interface. C'est un prototype qui fonctionne : le mécanisme est stable, mais les prompts du juge, les backends de fournisseurs et la gestion des échecs évoluent encore. Voir Limites de la bêta avant de vous y fier.
Comment Fusion fonctionne
Fusion intercepte le trafic de la session Claude Code vers le point d'accès /v1/messages d'Anthropic. Chaque requête est traitée par étapes :
- Branche A — Claude répond d'abord. La requête d'origine de l'invité est envoyée à Anthropic sans changement (forcée en non-streaming pour que la réponse complète puisse être inspectée). Votre session Claude Code est toujours l'une des branches du fusible.
- Les tours d'outils passent au travers. Si la réponse de Claude est un appel d'outil — le cas courant en codage agentique, où la plupart des tours sont « lis ce fichier », « exécute cette commande » — elle est transmise mot pour mot à l'agent et la fusion est sautée pour ce tour. La boucle agentique n'est jamais rompue par un appel d'outil synthétisé.
- Les tours de texte s'éventent. Ce n'est que quand Claude renvoie une réponse en texte simple que Fusion s'engage. Chaque autre branche sélectionnée — Codex (OpenAI), Grok (xAI), Kimi Code (Moonshot AI), Oh My Pi, et éventuellement un modèle local — reçoit la même question sur la même transcription aplatie.
- Le juge cartographie le terrain. Le modèle juge compare tous les brouillons et émet une analyse JSON structurée — consensus, conflits, aperçus uniques, angles morts, et un verdict — plutôt qu'un commentaire en prose.
- Le juge synthétise. Le même modèle juge écrit ensuite la réponse définitive, fondée sur l'analyse qu'il vient de produire.
- Remise. La réponse fusionnée est renvoyée en flux à l'agent dans la VM, exactement dans la forme qu'il a demandée (SSE Anthropic ou JSON). Du point de vue de Claude Code, un seul modèle a répondu.
Un échec à n'importe quelle étape se dégrade en douceur plutôt que de casser la session : une branche dont l'identifiant ne peut pas être résolu, ou qui échoue ou dépasse le délai, est silencieusement écartée du fusible. S'il reste moins de deux réponses, celle de Claude est renvoyée sans changement.
Tours d'outils et tours de texte
La distinction entre tour d'outil et tour de texte est ce qui rend Fusion sûre pour le travail agentique. Les actions (appels d'outils) sont exécutées exactement comme Claude les a émises ; seules les réponses — explications, conceptions, revues, plans — sont fusionnées. Dans une session de code typique, la plupart des tours sont des actions, si bien que l'influence de Fusion se concentre là où la diversité des modèles compte le plus : le raisonnement et les conclusions, pas les modifications mécaniques de fichiers.
D'où vient l'identité de chaque branche
Fusion n'a aucune interface d'identifiants à elle. Chaque branche utilise la connexion ou la clé d'API déjà configurée pour cet agent dans les réglages de modèles effectifs de la machine — Préférences › Modèles plus la surcharge Modèles propre à la machine (voir Modèles et fournisseurs). Quand vous changez ces réglages, la configuration Fusion d'une machine en cours d'exécution est rafraîchie sur le champ ; si le changement laisse moins de deux modèles utilisables, Fusion est désengagée.
- Abonnement — la branche utilise un jeton vivant issu du magasin d'abonnements de l'hôte (Claude, ChatGPT, Grok ou Kimi) ; l'hôte le renouvelle au besoin. Les jetons d'abonnement Claude reçoivent automatiquement le bloc système d'identité Claude Code et l'en-tête bêta OAuth qu'Anthropic exige.
- Clé d'API — la branche utilise la vraie clé d'API issue de la table d'échange de jetons côté hôte (l'invité n'a jamais vu qu'un leurre ; voir Identifiants).
- Oh My Pi — omp fonctionne uniquement avec une clé d'API et parle le fournisseur sur lequel il est basculé ; sa branche utilise donc la clé d'API de ce fournisseur, avec le modèle que les réglages Modèles choisissent pour omp là-bas (sinon le modèle de branche par défaut de ce fournisseur). Seuls Anthropic, OpenAI et xAI peuvent être fusionnés ; omp sur z.ai ou un point d'accès personnalisé n'est pas proposé comme branche.
- Modèle local — la branche vise le moteur local de la machine : votre serveur personnalisé quand il en est configuré un, sinon le moteur sur l'appareil du Mac (voir Modèles et fournisseurs).
- Amazon Bedrock — une session Claude Code sur Bedrock ne contribue qu'à travers la requête de l'invité elle-même ; il n'y a pas de branche de fusion Bedrock distincte.
Une branche dont l'identifiant ne peut pas être résolu est écartée avec une ligne de journal, jamais avec une erreur remontée à l'agent.
Prérequis
Fusion a besoin d'au moins deux modèles utilisables :
- Votre session Claude Code compte toujours pour une branche, à condition que l'agent Claude Code ait un identifiant utilisable.
- Chaque branche cloud supplémentaire — Codex (OpenAI), Grok (xAI), Kimi Code (Moonshot AI) — a besoin d'un identifiant pour cet agent, configuré dans Préférences › Modèles ou dans la surcharge Modèles de la machine. Jusque-là, la ligne est grisée avec l'indication — aucun identifiant cloud (configurez-en un dans Préférences › Modèles).
- La branche Oh My Pi a besoin d'omp basculé sur Anthropic, OpenAI ou xAI, avec une clé d'API pour ce fournisseur. Sinon sa ligne indique — nécessite une clé d'API Anthropic, OpenAI ou xAI pour Oh My Pi (posez-la dans Préférences › Modèles).
- La branche Modèle local a besoin d'un modèle local : un modèle sur l'appareil téléchargé sous Sur l'appareil dans Modèles, ou un Serveur personnalisé. Jusque-là, sa ligne indique — téléchargez-en un dans Préférences › Modèles.
Avec moins de deux modèles utilisables sélectionnés, le volet affiche le texte d'aide « Choisissez au moins deux modèles à fusionner — votre session Claude Code en compte pour un, ajoutez-en donc un de plus (un agent cloud ou un modèle local). » et le bouton éclair reste désactivé.
Configurer Fusion pour une machine
Fusion se configure dans le volet Fusion, sous Modèles dans les réglages de la machine (l'icône éclair jaune ; le volet est marqué BETA). La référence champ par champ vit dans Réglages Fusion ; cette section parcourt le déroulé.
Sur la capture ci-dessus, aucun fournisseur n'est configuré pour l'espace de travail, si bien que chaque ligne sous Modèles à fusionner est grisée et que le texte d'aide orange explique ce qui manque.
- Ouvrez les réglages de la machine (Réglages… dans le menu des machines) et sélectionnez le volet Fusion.
- Sous Modèles à fusionner, cochez les agents dont vous voulez les réponses dans le panneau. Claude Code (Anthropic) — votre session est toujours une branche ; ajoutez Codex (OpenAI), Grok (xAI), Kimi Code (Moonshot AI), Oh My Pi et/ou Modèle local. La ligne Modèle local comprend un sélecteur des modèles locaux disponibles.
- Sous Juge, choisissez le Fournisseur et le Modèle qui pèseront les brouillons et écriront la réponse finale. La liste des fournisseurs propose chaque agent avec un identifiant utilisable (le même test que pour les branches), plus Local quand un modèle local est disponible. Les listes de modèles cloud sont récupérées en direct auprès du point d'accès
/v1/modelsdu fournisseur et comprennent une entrée (défaut) ; si la récupération échoue, une petite liste intégrée est proposée à la place. Un juge local choisit parmi les modèles du catalogue installé. - Cliquez Enregistrer.
| Réglage | Défaut | Notes |
|---|---|---|
| Modèles à fusionner | Aucun sélectionné | Claude Code est toujours une branche ; les autres ont besoin d'un identifiant (cloud) ou d'un modèle local. |
| Juge → Fournisseur | Le premier fournisseur utilisable | Local apparaît dès qu'un modèle local est disponible. |
| Juge → Modèle | (défaut) → claude-opus-4-8 | Listes cloud récupérées en direct depuis /v1/models. |
Quand le modèle d'une branche n'est pas épinglé explicitement, les défauts sont : Claude → claude-opus-4-8 ; Codex → gpt-5.5 sur un abonnement ou gpt-5.5-2026-04-23 avec une clé d'API ; Grok → grok-build ; Kimi Code → kimi-k2.5 ; Oh My Pi → le défaut du fournisseur auquel il parle (celui de Claude, le défaut par clé d'API de Codex, ou celui de Grok). Un juge Oh My Pi retombe sur le modèle de branche d'omp.
Astuce : un modèle local fait une branche supplémentaire capable et sans coût marginal — et le juge lui-même peut tourner localement, gardant toute l'étape d'analyse et de synthèse sur votre Mac. Voir Modèles et fournisseurs.
Engager Fusion sur une machine
Configurer le volet ne rend Fusion que disponible. Vous l'engagez par machine, avec le bouton éclair (⚡) de la barre d'outils de la fenêtre principale. L'éclair n'apparaît que quand l'un des onglets de terminal de la machine est à l'écran — sous Machines virtuelles dans la barre latérale, ou après avoir appuyé sur la pastille Linux (⌥⌘U) dans une session pour sauter à son terminal. Il n'apparaît jamais dans un chat.
| Aspect de l'éclair | État | Info-bulle |
|---|---|---|
| Creux, désactivé | Indisponible — moins de deux modèles utilisables | « Activez au moins deux modèles pour utiliser Fusion » |
| Plein, gris foncé | Disponible, désengagée | « Fusion disponible — cliquez pour l'engager » |
| Plein, jaune | Engagée | « Fusion engagée — cliquez pour la désengager » |
Cliquez sur l'éclair pour basculer. L'engager s'applique à toute la machine : chaque session Claude Code qui y tourne est fusionnée jusqu'à ce que vous la désengagiez. Une machine démarre avec Fusion désengagée — c'est un choix explicite, jamais un défaut silencieux.
Depuis la ligne de commande
Avec l'app en cours d'exécution, vous pouvez basculer Fusion sur une VM en marche sans toucher à la fenêtre :
bromure-cli vm fusion enable <vm>
bromure-cli vm fusion disable <vm>
<vm> est un identifiant de VM ou un nom d'espace de travail, et on/off/engage/disengage sont acceptés comme alias. La sortie d'état de bromure-cli vm comprend une ligne fusion indiquant engaged ou available (off). Ces commandes parlent à l'API de contrôle de l'app, elles exigent donc que l'app (ou son agent) tourne ; voir CLI, API et MCP.
Ce que Fusion coûte
Fusion multiplie la consommation de modèles, et vous devriez l'engager en connaissant l'arithmétique. Pour chaque tour où Claude renvoie une réponse en texte simple :
- Chaque branche sélectionnée supplémentaire fait un appel de modèle complet, en recevant la même transcription aplatie comme contexte — les longues conversations coûtent donc proportionnellement sur chaque branche, à chaque tour fusionné.
- Le juge fait deux appels de plus : un pour produire l'analyse JSON, un pour écrire la synthèse. Les deux sont plafonnés à 4 096 jetons de sortie.
Avec Codex, Grok et un modèle local sélectionnés à côté de Claude, une seule réponse fusionnée coûte donc jusqu'à cinq appels de modèle au-delà de l'appel à Claude que vous faisiez déjà ; chaque branche de plus en ajoute un. Les tours d'appel d'outil s'éventent en zéro appel supplémentaire, ce qui en pratique garde les sessions agentiques bien moins chères que le pire cas — la plupart des tours d'une boucle de code sont des appels d'outils.
La façon dont chaque branche est facturée suit son identifiant : les branches à clé d'API facturent au jeton, les branches d'abonnement tirent sur le quota de l'abonnement, et une branche locale ne coûte que du calcul sur l'appareil (et de la batterie, sur un portable). Chaque branche a un délai d'attente amont de 600 secondes par défaut.
Fusion dans la trace
Fusion est délibérément invisible pour l'agent, mais entièrement visible pour vous. Chaque appel latéral en amont — chaque branche, l'analyse du juge et la synthèse — est capturé par le pipeline de traçage comme n'importe quel autre échange IA, selon le niveau de trace de la machine (voir Traçage).
Conséquences pratiques :
- L'Inspecteur de traces (menu Fenêtre → Inspecteur de traces…) liste les échanges supplémentaires à côté du trafic normal de la session, et affiche les requêtes et réponses capturées comme des conversations analysées — vous pouvez lire exactement ce que chaque branche a répondu et ce que le juge a conclu.
bromure-cli trace hostnamesmontre que des hôtes commeapi.openai.comont été contactés depuis une session que vous croyiez peut-être réservée à Anthropic. Si votre organisation audite le trafic sortant, attendez-vous à ce que les sessions fusionnées montrent les points d'accès de chaque fournisseur sélectionné.- Fusion journalise aussi abondamment dans le journal de l'app (
~/Library/Logs/BromureAC/bromure-ac.log) avec un préfixe[fusion]— utile pour diagnostiquer pourquoi une branche a été écartée.
Note : si vos règles de traitement des données restreignent quels fournisseurs peuvent voir votre code, souvenez-vous que chaque branche sélectionnée reçoit la transcription aplatie complète de la conversation. Sélectionnez les branches en conséquence. Quand la Protection des données personnelles est activée pour la machine, les données personnelles sont échangées contre des remplaçants avant l'éventail, si bien que chaque branche reçoit les remplaçants.
Surcharges par variables d'environnement
Quelques valeurs par défaut peuvent être surchargées par des variables d'environnement au lancement de l'app — utile pour expérimenter, pas destiné à la configuration quotidienne :
| Variable | Défaut | Effet |
|---|---|---|
BROMURE_FUSION_TIMEOUT | 600 | Délai d'attente amont par branche, en secondes. |
BROMURE_FUSION_OPENAI_MAX_TOKENS | 128000 (GPT-5/série o), 16384 (gpt-4o et antérieurs) | Plafond de jetons de complétion de la branche OpenAI. |
Limites de la bêta
Fusion est une fonction en bêta, avec des arêtes vives qui valent d'être connues :
- Sessions Claude Code seulement. Fusion intercepte les requêtes POST
/v1/messagesd'Anthropic. Les sessions qui font tourner Codex, Grok, Kimi ou omp ne sont pas fusionnées — le trafic de ces agents passe normalement. - Les branches non-Claude répondent sans outils. Les définitions d'outils sont retirées pour les branches Codex, Grok, Kimi Code, Oh My Pi et locale ; elles répondent en prose sur une transcription aplatie. Leurs brouillons nourrissent la synthèse mais ne peuvent pas eux-mêmes agir.
- Backends d'abonnement au mieux. La branche d'abonnement Codex passe par le backend ChatGPT en WebSocket, et celle d'abonnement Grok utilise
cli-chat-proxy.grok.com— deux interfaces non documentées. À la moindre erreur, la branche est écartée plutôt que de faire échouer le fusible. - Oh My Pi sur trois fournisseurs seulement. Une branche ou un juge Oh My Pi ne fonctionne que tant qu'omp est basculé sur Anthropic, OpenAI ou xAI avec une clé d'API ; sur z.ai ou un point d'accès personnalisé, il n'est pas proposé.
- Dégradation silencieuse. Les branches écartées et les échecs du juge retombent sur la réponse de Claude (ou sur un brouillon brut) sans alerter l'agent. La trace et les lignes
[fusion]du journal de l'app sont les seuls endroits où vous verrez que cela s'est produit. - Latence. Un tour de texte fusionné attend la branche survivante la plus lente, puis deux appels au juge. Attendez-vous à des tours de réponse nettement plus lents qu'en session ordinaire ; les tours d'outils ne sont pas touchés.