Escolha um provedor, não uma porta
O painel mostra um seletor de backend — chips de Claude / ChatGPT / Gemini / Antigravity / Grok / Kimi / GLM / Ollama / LM Studio / llama.cpp / OpenRouter / Endpoint personalizado (provedores experimentais como o Copilot aparecem atrás do toggle experimental). Clicar num conecta aquele provedor no único orquestrador compartilhado (uma porta de ponte atende todos os provedores; cada aba do painel escolhe o seu provedor no handshake). A URL da Ponte fica em Avançado para orquestradores gerenciados pelo usuário. Trocar de provedor inicia um chat novo — as conversas não são compartilhadas entre provedores — e o painel posta uma nota de sistema dizendo isso. O placeholder do compositor segue o backend ativo (“Pergunte ao Claude…” / “Pergunte ao Ollama…”).Entre (uma vez por provedor — ou de jeito nenhum)
- Claude —
claude(ouclaude setup-token) — OAuth do claude.ai (assinatura). - ChatGPT (Codex) —
codex login— login do ChatGPT (assinatura); roda pelo app-server do Codex. - ChatGPT (OAuth direto) — nenhum passo extra se você já rodou
codex login: o backendchatgptreusa~/.codex/auth.jsone fala com o ChatGPT direto (sem processo do Codex). Se o ack diz que o arquivo de auth está faltando, rodecodex loginuma vez. - Gemini —
gemini— login do Google. Note que o login individual gratuito do Google foi aposentado em 2026-06-18: o backend da CLI do Gemini agora precisa de umaGEMINI_API_KEYou de uma conta enterprise/Code Assist. Assinantes individuais: usem Antigravity abaixo. - Antigravity (assinatura Google) — instale a CLI oficial do
Antigravity em antigravity.google, rode
agyuma vez e conclua o Google Sign-In (AI Pro/Ultra e faixas gratuitas). O backend conduzagy -ppor turno com continuidade de conversa--continue, lê o catálogo de modelos ao vivo deagy models, e liga as ferramentas MCP do ComfyUI + painel por um.agents/mcp_config.jsonde workspace seguro para merge. Capacidades reduzidas de propósito (sem stream de eventos documentado e legível por máquina): o texto da resposta final entra em stream, mas não há progresso por ferramenta nem entrada de imagem. A continuidade da conversa usaagy --continue(a conversa mais recente da conta), então rode UMA aba do antigravity por vez — uma segunda aba, ou uma sessão interativaagynum terminal, pode roubar o fio.COMFYUI_MCP_ANTIGRAVITY_MODELpina um modelo,COMFYUI_MCP_ANTIGRAVITY_PATHaponta para uma instalação não padrão. - Grok — instale a CLI do Grok (xAI / Grok Build) e rode
grokuma vez para entrar; o backend a conduz em modo ACP. O painel também oferece uma linha de login OAuth no painel quando o Grok não está pronto. - Kimi (recomendado) — instale a CLI do Kimi Code
e rode
kimi login(fluxo de device-code); o backend reusa esse login de~/.kimi-code/credentials/kimi-code.json(o caminho legado~/.kimiainda é lido como fallback). Isto usa a sua assinatura do Kimi Code e é o jeito preferido de rodar o Kimi — mais barato e com limite maior do que a chave Moonshot paga por token abaixo. DefinaKIMI_API_KEYsó para uso em CI / sem CLI, ouKIMI_CODE_HOMEpara apontar para um diretório de credenciais não padrão (KIMI_SHARE_DIRainda é honrado para quem definiu o nome mais antigo). Login OAuth no painel também é oferecido. - GLM — defina
ZAI_API_KEY(Z.AI Coding Plan;GLM_API_KEY/ZHIPUAI_API_KEYtambém aceitos). Sem CLI. - Kimi K3 (Moonshot) — a alternativa paga por token quando você
não tem uma assinatura do Kimi Code (prefira a rota Kimi acima se
tiver). Defina
MOONSHOT_API_KEYem platform.kimi.ai. Sem CLI. Esta é a chave da plataforma Moonshot (modelo padrãokimi-k3, basehttps://api.moonshot.ai/v1) — distinta do provedor Kimi acima, que é a assinatura de coding do Kimi Code. Sobrescreva o modelo comCOMFYUI_MCP_MOONSHOT_MODELe a base comCOMFYUI_MCP_MOONSHOT_BASE_URL. - MiniMax — defina
MINIMAX_API_KEYem platform.minimax.io. Sem CLI. O modelo padrão éMiniMax-M3e a base padrão é o endpoint globalhttps://api.minimax.io/v1(compatível com a OpenAI, Bearer simples). Para a região da China, definaCOMFYUI_MCP_MINIMAX_BASE_URL=https://api.minimaxi.com/v1. Sobrescreva o modelo comCOMFYUI_MCP_MINIMAX_MODEL. - Copilot (experimental) — entre a partir da linha experimental de provedor do painel. Desligado por padrão; ative backends experimentais em Configurações primeiro.
- Ollama (local) — sem login. Instale o Ollama e puxe um modelo com
chamada de ferramentas (
ollama pull gemma4:e4b). Para um modelo hospedado em vez disso, definaCOMFYUI_MCP_OLLAMA_API=openai,COMFYUI_MCP_OLLAMA_BASE_URL(por exemplohttps://openrouter.ai/api/v1), e uma chave de API (COMFYUI_MCP_OLLAMA_API_KEY/OPENROUTER_API_KEY). - Endpoint personalizado — sem fluxo de login. Aponte para qualquer
/v1compatível com a OpenAI (vLLM, DeepSeek, Together, Azure, um llama-server remoto) em Configurações → Endpoint personalizado; adicione uma chave de API lá se o servidor precisar (entrada mascarada, guardada 0600 pelo orquestrador). Veja LLMs locais → Endpoint personalizado.
Prontidão e onboarding no Conectar
Cada chip de provedor degrada COM HONESTIDADE quando não está pronto: o ack do Conectar te diz o passo exato que falta (“Defina ZAI_API_KEY…”, “rodecodex login…”, “Entre pela linha experimental…”) em vez de
falhar na sua primeira mensagem — e um provedor cujas credenciais
aparecem depois vira pronto no próximo Conectar sem reinício.
O painel detecta a prontidão de cada provedor na hora do Conectar —
uma CLI no PATH mais um login no disco para os provedores por
assinatura, um binário presente para o Ollama (um daemon parado degrada
com graça no conectar). Você não precisa chutar qual provedor está
configurado:
- Um cartão de onboarding aparece só quando nenhum provedor está pronto, com o passo único de configuração por provedor (para o Ollama isso é uma instalação + um pull de modelo, não um login).
- Se a sua escolha salva de provedor não estiver utilizável, o painel muda automaticamente para um provedor pronto (a sua preferência salva é restaurada quando você configurar).
- A linha de um provedor que não está pronto vira uma ação “configurar” que planta um prompt de setup no agente que está funcionando.
Como cada provedor é conduzido
O orquestrador depende de uma portaAgentBackend neutra em relação
ao provedor (injeção de dependência). Cada provedor é um adapter:
As definições de ferramenta
panel_* vivem numa lista compartilhada,
registrada em todo caminho, então a superfície de canvas ao vivo
(incluindo o gating de confirmação destrutiva para panel_clear /
panel_restart_comfyui) é idêntica entre provedores. A paridade é
automática — nenhum caminho reimplementa uma ferramenta. O backend
Ollama/qualquer-LLM adicionalmente envolve as duas superfícies de
ferramenta atrás de seis ferramentas de roteador para modelos pequenos
não afogarem em schemas — veja
LLMs locais e outros agentes.
Matriz de capacidades
Um descritor de capacidade por backend deixa o painel degradar com graça nos recursos que um provedor não consegue fazer:Entrada de áudio — quais backends, com honestidade
O agente consegue conduzir as ferramentas de áudio do ComfyUI em todo backend. Ouvir um arquivo de áudio é mais estreito, e a tabela acima é conservadora de propósito porque um anexo dropado em silêncio é pior do que um recusado:-
Ollama (o backend
ollama,/api/chatnativo) — suportado, checado por capacidade, e verificado de ponta a ponta. O áudio viaja no arrayimages[], que é o próprio carrier de áudio do Ollama em vez de um hack. Confirmado ao vivo contra um Ollama local comgemma4:e2b, que transcreveu um WAV de verdade.- Por modelo, não por provedor. Antes de enviar qualquer coisa, o
backend pergunta
POST /api/showse este modelo reporta a capacidadeaudio. Se não reporta, o anexo é recusado pelo nome, a lista de capacidades reportada é citada de volta para você, e você é informado de quais modelos conseguem ouvir (ollama pull gemma4:e2b/gemma4:e4b/nemotron3:33b). Note queGET /api/tagstambém devolve um arraycapabilitiese não é a mesma resposta — o mesmo modelo reportou nenhum áudio lá e áudio a partir de/api/show— então só/api/showé consultado. - A capacidade é rechecada em todo turno que carrega áudio, porque uma
tag do Ollama é mutável:
ollama pullpode substituir os pesos sob o mesmo nome, e um veredito em cache poderia sobreviver ao modelo que descrevia.
- Por modelo, não por provedor. Antes de enviar qualquer coisa, o
backend pergunta
-
LM Studio / llama.cpp / OpenRouter / GLM / Kimi / Moonshot / MiniMax
/ Copilot / endpoints personalizados compatíveis com a OpenAI —
tentado, NÃO checado por capacidade. Todos estes falam
/v1/chat/completions, que não tem um endpoint de capacidade para perguntar, então o áudio é enviado como uma parte de conteúdoinput_audioe você é informado, naquele turno, que a entrega está não confirmada: “Não consigo confirmar que o modelo de fato os recebe — se a resposta não refletir o que está no arquivo, ele não ouviu.” Recusar em vez disso negaria áudio a todo endpoint que simplesmente não tem uma API de capacidade; uma proteção que não consegue rodar não é um veredito. A formainput_audioem si foi verificada contra o endpoint compatível com a OpenAI do Ollama; se um host de terceiros dado a honra não é alguma coisa que a gente consiga checar, e não afirmamos. -
Claude, ChatGPT (Codex), Codex CLI, Gemini, Grok, Antigravity, pi —
nenhuma entrada de áudio neste build. Anexar áudio é recusado antes de
o turno ser montado, e tanto você quanto o modelo são informados,
nomeando o provedor e o que funcionaria no lugar.
No Gemini/Grok isto é uma omissão deliberada em vez de um buraco de
protocolo: o ACP define um ContentBlock
audio, mas exige que o agente anuncie primeiro uma capacidade de promptaudio, e nenhuma das duas CLIs foi observada fazendo isso. Um caminho de envio que nunca consegue ser exercido, cujo modo de falha é um anexo que o usuário nunca é informado de que não chegou, é pior do que uma recusa honesta — então não sai.
Read/WebFetch em conteúdo de
imagem (arquivos raster por extensão e magic bytes, PDFs, saídas de
notebook, e URLs /view do ComfyUI) sempre que o Cego está ligado — lido
ao vivo por chamada, então um toggle no meio da sessão vale na próxima
chamada de ferramenta. As faixas de API/local (família Ollama, GLM, Kimi,
endpoints personalizados) carregam só a nossa superfície de ferramentas,
então a limpeza MCP as cobre por completo. As faixas de CLI (Codex,
Gemini, Grok, Antigravity, pi, Copilot) rodam os próprios binários de
agente cujas ferramentas de arquivo embutidas a gente não consegue
enganchar — ligar o Cego lá posta um aviso visível dizendo exatamente
isso, em vez de implicar uma garantia que a gente não consegue manter.
Como um arquivo de áudio entra num turno
O orquestrador aceita áudio num framemessage do painel de dois jeitos:
images
senão entregaria um arquivo de áudio a uma parte de conteúdo de visão.
Qualquer coisa com uma extensão de áudio é movida para o caminho de
áudio automaticamente — inclusive formatos que a gente não consegue
codificar (.wma, .mid, .aiff), então você recebe “converta para um
de…” em vez de um erro de imagem.
Enviar o mesmo arquivo nos dois arrays (como o exemplo acima faz) é
seguro: uma ref é identificada por filename + subfolder + type, então é
entregue uma vez e conta uma vez contra o limite de dois anexos por
turno. Não é confundida com um segundo arquivo e depois recusada por não
caber.
Um controle do compositor para escolher um arquivo de áudio vive no
painel (
comfyui-mcp-panel), que é um repositório separado — essa parte
não está nesta release. Até chegar, o contrato de fio acima é o que um
cliente envia, e a rota é exercida de ponta a ponta do lado do
orquestrador./revert, Esc duplo,
snapshots por turno) funciona em todo backend porque vive no
orquestrador, não no provedor.
Esforço de raciocínio numa troca
O seletor de esforço/modelo é por provedor. Um esforço escolhido sobrevive a uma troca de provedor mapeando para o nível válido mais próximo do backend de destino (o painel e os backends do orquestrador fazem o mesmo mapeamento):- Claude:
low·medium·high·xhigh·max - ChatGPT (Codex):
none·minimal·low·medium·high·xhigh·max·ultra(max/ultraem modelos da classe GPT-5.6) - Gemini / Ollama: nenhuma escala de esforço visível ao usuário — o seletor fica escondido.
Paridade de conhecimento e custo
Como só o Claude consegue carregar skills nativas, a expertise inclusa é publicada como uma ferramenta MCP que qualquer backend pode chamar —list_packs, cujas ações cobrem as skills (skill_list, skill_read),
os pacotes de instalador (list, read_workflow) e os templates do
servidor (list_templates) — mais a proteção local-GPU-vs-API-paga
(action: "check_runtime") e o panel_load_workflow de uma vez. Veja
Skills, pacotes e custo de runtime.
Veja também
- Painel lateral — a UX completa do painel
- LLMs locais e outros agentes — o roteador de 6 ferramentas, requisitos do modelo, setup Hermes/OpenClaw/Copilot
- Arena de LLMs — pontue O SEU modelo em tarefas reais do ComfyUI
- Skills, pacotes e custo de runtime — as ferramentas de paridade + custo
- Design doc:
design/agent-backend-injection.md