Skip to main content
Um plugin de provider é um executável que adiciona um provider de LLM ao ChatCLI. Use um quando o backend de que você precisa não é embutido — um gateway corporativo que reúne vários fornecedores de modelos atrás de uma autenticação própria, ou um SDK interno que é o único caminho autorizado até um modelo. Um plugin de provider foi desenhado para se comportar como um provider embutido: ele aparece no /switch, no /provider e na paleta de comandos, e controle de custo, cadeias de failover, roteamento de modelos, compactação e memória funcionam sobre ele.
Preview. O protocolo, o SDK Go e o kit de conformidade chatcli provider test já estão disponíveis, então plugins podem ser construídos e verificados hoje. O carregamento de plugins de provider num ChatCLI em execução — supervisão do processo, /switch, login e o cofre cifrado de credenciais — é a próxima etapa desta funcionalidade e ainda não está disponível.

Como se encaixa

O ChatCLI mantém tudo o que fica acima da rede: o loop do coder, a execução de tools, o histórico, a memória, a compactação, o planejamento do cache de prompt, o custo e o failover. O plugin cuida só de como chegar ao backend.

Dois modos

dialect

O plugin implementa a autenticação (login, token, renovação) e a lista de modelos. O ChatCLI fala com o backend usando o seu client embutido para o formato da API — openai-chat, openai-responses, anthropic-messages ou gemini — enviando os headers do plugin.Tools nativas, streaming, cache de prompt e usage exato vêm de graça. Prefira este modo sempre que o backend falar um desses formatos.

full

O plugin também implementa o chat sobre um esquema normalizado de mensagens: mensagens, chamadas de tools, imagens, blocos de raciocínio, deltas de streaming e usage.Use quando o backend — ou o SDK que você é obrigado a usar — tem um formato de requisição próprio.

As credenciais ficam com o ChatCLI

O plugin nunca guarda segredos. O login termina com uma credencial — um objeto chave/valor simples — que o ChatCLI cifra, armazena e devolve em cada chamada que precisa dela. O login em si é uma sequência de passos que o plugin descreve e o ChatCLI desenha: campos de prompt, open_url e device_code. O plugin nunca mexe no terminal, então o mesmo fluxo funciona na CLI, na interface web, em clientes de IDE e em canais de mensagem.

Modelos de gateway mantêm limites e preços reais

Cada modelo listado pode indicar o modelo embutido que ele representa com uma entrada upstream, por exemplo {"provider": "CLAUDEAI", "model": "claude-sonnet-4-6"}. O ChatCLI então reaproveita o que já sabe sobre esse modelo — janela de contexto, limite de saída, preço e capacidades — a menos que o plugin os informe explicitamente. O custo por chamada informado pelo gateway (costUSD) é tratado como definitivo.

Construir um plugin

O SDK Go, github.com/diillson/chatcli/pkg/providersdk, implementa o protocolo. Implemente Provider e as interfaces que correspondem ao seu backend; as capacidades anunciadas ao ChatCLI são derivadas delas, então um plugin nunca anuncia algo que não atende.Um plugin dialect mínimo para um gateway compatível com OpenAI:
Enquanto providersdk.Serve roda, os.Stdout aponta para o stderr, então um fmt.Println perdido no código do plugin vai para o log em vez de corromper o protocolo. Use providersdk.Log(ctx, "info", "…") para linhas de log estruturadas.
O repositório traz um plugin de referência completo em modo full — login, lista de modelos, streaming com cancelamento, contagem de tokens e logout — em pkg/providersdk/examples/echo. Ele passa em todas as checagens de conformidade e é o melhor ponto de partida.

Regras que todo plugin precisa seguir

Qualquer outra coisa no stdout corrompe o fluxo. Escreva logs no stderr — o ChatCLI guarda o final dele — ou envie notificações $/log.
O nome precisa casar com ^[A-Z][A-Z0-9_]{1,31}$ e nunca pode ser o nome de um provider embutido (OPENAI, CLAUDEAI, BEDROCK, …). É o valor que o usuário passa em LLM_PROVIDER e no /switch.
Requisições que chegaram antes do shutdown ainda são atendidas; as posteriores falham com -32600. Depois do exit, o processo encerra com status 0.

Verificar um plugin com chatcli provider test

O chatcli provider test roda o kit de conformidade contra o binário de um plugin, conversando com ele pelo stdin e pelo stdout exatamente como o ChatCLI faz — o veredito é o mesmo para um plugin em Go, Python ou Java.
As checagens cobrem a ordem do ciclo de vida, a negociação de versão, as regras de nome, a máquina de estados do login, os headers e a validade do token, a sanidade da lista de modelos (ids únicos, upstream válido, limites e preços não negativos), os resultados de chat, o streaming (os deltas precisam formar o texto final), a continuidade do serviço depois de uma requisição cancelada, a contagem de tokens, o encerramento limpo e a higiene do stdout.
Uma checagem que precisa de algo que a execução não tem é pulada com uma dica, nunca reprovada: auth.login pede --input quando um campo do prompt não tem valor, e um login por navegador ou por device code pede --credential-file.
O comando sai com 0 quando nada falhou, 1 quando alguma checagem falhou e 2 em erro de uso, então o repositório de um plugin pode usá-lo como gate no CI:

Modelo de segurança

Binários assinados

Assine plugins de provider com as mesmas ferramentas de chave confiável dos plugins de tool — chatcli plugin keygen | sign | verify | trust —, e o ChatCLI os verifica com esse mecanismo ao carregá-los. Veja Verificação de Assinatura.

Ambiente mínimo

O plugin declara as variáveis de ambiente que lê (authEnv). São as únicas credenciais que ele deve receber, e o redator de segredos sempre as trata como segredo.

Nenhum segredo no plugin

As credenciais ficam no cofre cifrado do ChatCLI e são passadas a cada chamada. Um plugin que escreve um segredo no stdout ou no stderr está com defeito.

As conversas chegam ao plugin

Um plugin de provider vê todo prompt enviado por ele, exatamente como o fornecedor que ele representa. Instale só plugins em que você confia.

Veja também

Sistema de Plugins

Plugins de tool (@comando) que o modelo pode chamar.

Modelos Suportados

Os providers embutidos e seus modelos.

Fallback de Provedores

Cadeias de failover entre providers.

Cost Tracking

Como usage e preços viram o /cost.