Skip to main content
Le panneau agent, l’appli mobile, et tout outil qui s’appaire à une session en cours parlent un petit protocole WebSocket vers l’écouteur d’appairage de l’orchestrateur. Un hôte tiers est n’importe quel client que vous construisez sur ce protocole — un panneau Blender, une extension navigateur, un CLI, un autre éditeur — qui s’attache à un onglet bureau en direct et pilote sa session d’agent. Même agent, même contexte, pas de second processus Claude Code, rien de plus à installer pour l’utilisateur.
C’est exactement la surface sur laquelle l’appli mobile est construite. Si vous pouvez ouvrir un WebSocket et envoyer du JSON, vous pouvez construire un hôte.

Comment ça marche

1

Le bureau écoute déjà

Quand le panneau agent est ouvert, l’orchestrateur fait tourner un écouteur d’appairage filtré par jeton sur le LAN (voir Endpoints). Chaque onglet de panneau ouvert est un onglet bureau avec un tab_id stable et une session d’agent en direct.
2

Votre hôte se connecte avec le jeton d'appairage

Ouvrez un WebSocket vers l’URL d’appairage avec le jeton dans la query string. Sans jeton valide la connexion est refusée — l’appairage est toute la frontière de sécurité.
3

Lister et s'attacher à un onglet

Envoyez list_tabs pour découvrir les onglets bureau ouverts, puis attach_tab pour en mirorer un. Votre hôte reçoit maintenant l’activité de cet onglet (en flux) et peut le piloter.
4

Piloter la session partagée

Envoyez des trames user_message. Tant que vous êtes attaché, le serveur les route vers l’onglet miroré — donc votre message entre dans la même conversation que l’agent de bureau. C’est ce qui en fait « un agent, un contexte partagé » plutôt qu’une seconde session.

Endpoints

L’écouteur d’appairage est dérivé du port du pont (COMFYUI_MCP_BRIDGE_PORT, défaut 9180) : URL d’appairage :
  • Le jeton est soit épinglé par l’utilisateur via COMFYUI_MCP_PAIR_TOKEN (appairage toujours actif) soit frappé par session et remis via le flux QR / appairage du panneau. Votre hôte l’obtient de la même façon que l’appli mobile : l’utilisateur l’appaire une fois.
  • Lié au LAN par défaut, mais l’exposition publique est intégrée quand l’utilisateur la demande : la fenêtre d’appairage du panneau propose un mode Internet qui ouvre un quick tunnel cloudflared chiffré, et les entreprises peuvent le router via un relais auto-hébergé (COMFYUI_MCP_TUNNEL_BACKEND=relay). Le jeton le filtre dans les deux cas.

Formes de messages

Toutes les trames sont des objets JSON avec un type. Les trames requête/réponse portent un cid (id de corrélation) que vous choisissez, répété sur la réponse correspondante.

Entrant — hôte → orchestrateur

Tout autre événement de panneau que vous envoyez tant que vous êtes attaché est de même routé vers l’onglet miroré.

Sortant — orchestrateur → hôte

Plus l’activité agent en direct de l’onglet miroré (réponses en flux, statut, cartes), que votre hôte rend.
attach_tab est autoritaire — vous ne pouvez pas forger la cible. Le serveur écrase tout tab_id que vous mettez sur une trame sortante avec l’onglet auquel vous vous êtes réellement attaché. Un hôte ne peut jamais piloter qu’un onglet auquel il s’est explicitement attaché. C’est volontaire ; voir ci-dessous.

Invariants de sécurité — un hôte DOIT les préserver

Ce sont les garanties qui rendent l’appairage sûr. Construire un hôte qui les respecte est tout le contrat ; un hôte qui essaie de les contourner est exactement ce que l’écouteur est conçu pour rejeter.
Préserver ces invariants n’est pas une contrainte sur votre hôte — c’est la fonctionnalité. Ils empêchent un client de détourner une session à laquelle il ne s’est jamais appairé.
  1. Barrière de jeton. L’écouteur refuse toute connexion sans un jeton d’appairage valide (verifyClient). Ne construisez jamais un flux qui livre ou embarque le jeton automatiquement — l’utilisateur appairé, une fois, délibérément.
  2. Tamponnage autoritaire de attach_tab. Le serveur, pas le client, décide quel onglet vos trames ciblent. Ne vous fiez pas au tab_id fourni par le client pour le routage ; attachez d’abord, puis envoyez.
  3. Cibles non-headless seulement. Vous pouvez vous attacher à un vrai onglet bureau, jamais à un autre client headless (vous ne pouvez pas mirorer un autre téléphone/hôte).
  4. Un onglet à la fois. S’attacher à B abandonne votre abonnement à A. Modélisez un seul miroir actif par connexion.
  5. Genre de socket épinglé. Le genre d’une connexion (headless vs bureau) est fixé à son premier hello ; n’essayez pas de le basculer pour échapper aux gardes de prise de contrôle.

Client de référence minimal

Apprendre à un LLM à construire votre adaptateur

Collez le prompt ci-dessous dans Claude, ChatGPT, ou votre agent de code pour qu’il échafaude un adaptateur d’hôte pour votre plateforme. Il porte le contrat de protocole complet, donc le modèle n’a pas à deviner.
Copy this into your LLM

Enregistrer votre intégration

Vous avez construit quelque chose ? Enregistrez-le pour qu’il puisse être listé et pour que nous puissions vous signaler les changements de protocole avant qu’ils se livrent :

Enregistrer un hôte tiers

Ouvrez le modèle d’enregistrement sur GitHub — nom, plateforme, dépôt, et contre quelle version de protocole vous avez construit.
Stabilité : les trames ci-dessus sont celles sur lesquelles l’appli mobile se livre, mais ce n’est pas encore un contrat figé et versionné — lisez le source (src/services/ui-bridge.ts) comme autorité, et enregistrez votre hôte pour être prévenu quand les formes bougent.