Skip to main content
O Painel do Agente, o app de celular, e qualquer ferramenta que se pareia com uma sessão em execução falam um protocolo WebSocket pequeno com o listener de pareamento do orquestrador. Um host de terceiros é qualquer cliente que você constrói nesse protocolo — um painel do Blender, uma extensão de navegador, uma CLI, outro editor — que se liga a uma aba viva do desktop e conduz a sessão do agente dela. O mesmo agente, o mesmo contexto, nenhum segundo processo do Claude Code, nada extra para o usuário instalar.
Esta é exatamente a superfície em que o app de celular é construído. Se você consegue abrir um WebSocket e enviar JSON, você consegue construir um host.

Como funciona

1

O desktop já está escutando

Quando o Painel do Agente está aberto, o orquestrador roda um listener de pareamento protegido por token na LAN (veja Endpoints). Cada aba aberta do painel é uma aba de desktop com um tab_id estável e uma sessão de agente ao vivo.
2

O seu host se conecta com o token de pareamento

Abra um WebSocket para a URL de pareamento com o token na query string. Sem um token válido a conexão é recusada — o pareamento é a fronteira de segurança inteira.
3

Liste e ligue-se a uma aba

Envie list_tabs para descobrir as abas de desktop abertas, depois attach_tab para espelhar uma. O seu host agora recebe a atividade dessa aba (em stream) e pode conduzi-la.
4

Conduza a sessão compartilhada

Envie frames user_message. Enquanto ligado, o servidor os roteia para a aba espelhada — então a sua mensagem entra na mesma conversa em que o agente do desktop está. É isso que faz ser “um agente, contexto compartilhado” em vez de uma segunda sessão.

Endpoints

O listener de pareamento é derivado da porta da ponte (COMFYUI_MCP_BRIDGE_PORT, padrão 9180): URL de pareamento:
  • O token é ou pinado pelo usuário via COMFYUI_MCP_PAIR_TOKEN (pareamento sempre ligado) ou cunhado por sessão e entregue pelo fluxo de QR / pareamento do painel. O seu host o obtém do mesmo jeito que o app de celular: o usuário pareia uma vez.
  • Restrito à LAN por padrão, mas a exposição pública está embutida quando o usuário pede: o modal de pareamento do painel oferece um modo Internet que abre um túnel rápido criptografado do cloudflared, e empresas podem roteá-lo por um relay auto-hospedado (COMFYUI_MCP_TUNNEL_BACKEND=relay). O token protege de qualquer jeito.

Formas das mensagens

Todos os frames são objetos JSON com um type. Frames de requisição/resposta carregam um cid (id de correlação) que você escolhe, ecoado de volta na resposta correspondente.

Entrada — host → orquestrador

Qualquer outro evento de painel que você envie enquanto ligado é igualmente roteado para a aba espelhada.

Saída — orquestrador → host

Mais a atividade ao vivo do agente da aba espelhada (respostas em stream, status, cartões), que o seu host renderiza.
attach_tab é autoritativo — você não consegue forjar o alvo. O servidor sobrescreve qualquer tab_id que você coloque num frame de saída com a aba à qual você de fato se ligou. Um host só consegue conduzir uma aba à qual se ligou explicitamente. Isto é de propósito; veja abaixo.

Invariantes de segurança — um host DEVE preservar estes

Estas são as garantias que tornam o pareamento seguro. Construir um host que as respeita é o contrato inteiro; um host que tenta desviá-las é exatamente o que o listener foi desenhado para rejeitar.
Preservar isto não é uma restrição sobre o seu host — é o recurso. Elas impedem um cliente de sequestrar uma sessão com a qual nunca se pareou.
  1. Portão de token. O listener recusa qualquer conexão sem um token de pareamento válido (verifyClient). Nunca construa um fluxo que envie ou embuta o token automaticamente — o usuário pareia, uma vez, de propósito.
  2. Carimbo autoritativo de attach_tab. O servidor, não o cliente, decide qual aba os seus frames miram. Não se apoie num tab_id fornecido pelo cliente para o roteamento; ligue primeiro, depois envie.
  3. Só alvos não headless. Você pode se ligar a uma aba real de desktop, nunca a outro cliente headless (você não consegue espelhar outro celular/host).
  4. Uma aba por vez. Ligar-se a B derruba a sua inscrição em A. Modele um único espelho ativo por conexão.
  5. Tipo de socket pinado. O tipo de uma conexão (headless vs desktop) é fixado no primeiro hello; não tente virá-lo para escapar das proteções de takeover.

Cliente de referência mínimo

Ensine um LLM a construir o seu adapter

Cole o prompt abaixo no Claude, no ChatGPT, ou no seu agente de código para ele escorar um adapter de host para a sua plataforma. Ele carrega o contrato completo do protocolo, então o modelo não precisa chutar.
Copy this into your LLM

Registre a sua integração

Construiu alguma coisa? Registre para poder ser listada e para podermos avisar você de mudanças de protocolo antes de saírem:

Registrar um host de terceiros

Abra o template de registro no GitHub — nome, plataforma, repo, e contra qual versão do protocolo você construiu.
Estabilidade: os frames acima são o que o app de celular sai usando, mas isto ainda não é um contrato congelado e versionado — leia o código (src/services/ui-bridge.ts) como a autoridade, e registre o seu host para ser avisado quando as formas se moverem.