Skip to main content
O ChatCLI suporta um sistema de plugins para estender suas funcionalidades. Um plugin é um executável que segue um contrato específico, permitindo que o ChatCLI o descubra, execute e interaja com ele de forma segura. Isso permite criar comandos customizados (como @kind, @deploy) que podem orquestrar ferramentas, interagir com APIs ou realizar qualquer lógica que você possa programar.

Para Usuários: Gerenciando Plugins

Listar plugins instalados

Mostra todos os comandos de plugin disponíveis, incluindo plugins [builtin] (como @coder) e [remote] (de servidores conectados).

Instalar um plugin

Instale diretamente de um repositório Git:
O ChatCLI irá clonar, compilar (se for Go) e instalar o executável em ~/.chatcli/plugins/.
Segurança: A instalação de um plugin envolve baixar e executar código de terceiros. Instale plugins apenas de fontes que você confia.

Ver detalhes de um plugin

Desinstalar um plugin

Recarregar plugins

O ChatCLI monitora automaticamente ~/.chatcli/plugins/ e recarrega quando detecta mudanças (criação, remoção, modificação). Um debounce de 500ms evita recarregamentos múltiplos. Para forçar um recarregamento manual:
Desenvolva plugins iterativamente: edite o código, recompile, envie ao diretório de plugins — o ChatCLI detectará a mudança automaticamente.

Para Desenvolvedores: Criando um Plugin

O contrato do plugin

  1. Executável — O plugin deve ser um arquivo executável (qualquer linguagem)
  2. Localização — Colocado em ~/.chatcli/plugins/
  3. Nome do comando — O nome do arquivo vira o comando. Ex: arquivo kind = comando @kind
  4. Metadados (--metadata) — Obrigatório. O executável deve responder a está flag com JSON:
  1. Schema (--schema) — Opcional. Descreve os parâmetros aceitos:
  1. Comunicação (stdout vs stderr):
    • stdout — Apenas o resultado final (retornado ao ChatCLI/IA)
    • stderr — Logs de progresso, status e avisos (exibidos em tempo real ao usuário)

Exemplo: Plugin “Hello World” em Go

Compilação e instalação


Capability Interfaces (Opt-in)

Plugins podem expor capabilities através de interfaces Go opcionais. Plugins legados que não implementam continuam funcionando — todas as interfaces são fail-closed (default conservador). Implementando, o plugin participa de otimizações do orquestrador: Exemplo — um plugin que quer auto-allow + paralelização + label customizado:
Os 4 plugins atômicos (@read, @search, @tree, @todo) — veja Tools Atômicos — usam todas as capabilities relevantes como exemplo de referência.

Verificação de Assinatura

A partir desta versão, plugins requerem assinatura digital Ed25519 por padrão. Isso garante que apenas plugins de fontes confiáveis sejam carregados e executados.

Como Funciona

Cada plugin deve ter um arquivo .sig correspondente no mesmo diretório:
O ChatCLI verifica a assinatura contra as chaves públicas registradas antes de carregar o plugin. Se a verificação falhar, o plugin é rejeitado.

Gerenciando Chaves Confiáveis

As chaves públicas Ed25519 ficam no diretório ~/.chatcli/trusted-keys/:
1

Gerar um par de chaves

2

Assinar um plugin

3

Distribuir a chave pública

Compartilhe o arquivo .pub com os usuários que devem confiar nos seus plugins. Eles devem colocá-lo em ~/.chatcli/trusted-keys/.

Permissões de Arquivo

O diretório de plugins usa permissões 0o700 (somente o dono pode ler, escrever e executar). O ChatCLI verifica as permissões na inicialização e emite um aviso se estiverem mais permissivas.

Modo de Desenvolvimento

Para desenvolvimento local, é possível desabilitar a verificação de assinatura:
Nunca habilite CHATCLI_ALLOW_UNSIGNED_PLUGINS em produção. Plugins não assinados podem executar código arbitrário com as permissões do processo ChatCLI.

Plugins Remotos

Ao conectar a um servidor via chatcli connect, plugins do servidor são descobertos automaticamente:
  • Aparecem em /plugin list com a tag [remote]
  • São executados no servidor (não baixados localmente por padrão)
  • Plugins locais e remotos coexistem sem conflito