/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 deprompt, 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 entradaupstream, 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
- Go (SDK)
- Qualquer linguagem
O SDK Go, O repositório traz um plugin de referência completo em modo
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: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
O stdout carrega só mensagens do protocolo
O stdout carrega só mensagens do protocolo
Qualquer outra coisa no stdout corrompe o fluxo. Escreva logs no stderr — o ChatCLI guarda o final dele — ou envie notificações
$/log.Nomes de provider são únicos e nunca usam o nome de um embutido
Nomes de provider são únicos e nunca usam o nome de um embutido
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.O shutdown respeita a ordem de chegada
O shutdown respeita a ordem de chegada
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.Os códigos de erro guiam a reação do ChatCLI
Os códigos de erro guiam a reação do ChatCLI
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.
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.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.