devin local em modo não-interativo e o usa puramente como transporte para alcançar a LLM por trás dele. Todo o resto — conversa, contexto anexado, memória, compaction, sessões, o protocolo de tools do agent/coder — fica no ChatCLI.
Por que um wrapper? Em deployments corporativos o Devin é customizado pela Cognition (API + integrações de IDE) e a API HTTP não é documentada. O CLI é a superfície suportada e carrega a própria autenticação SSO (
devin auth login) — o ChatCLI nunca fala o protocolo privado, então mudanças do lado da Cognition são absorvidas pelo CLI deles, não por você.Setup
- Instale o Devin CLI e autentique uma vez (SSO corporativo):
- Pronto — o ChatCLI registra o provider automaticamente quando o binário resolve (do
DEVIN_CLI_PATH, doPATH, ou dos diretórios de instalação conhecidos):
devin. Sem o binário o provider simplesmente não aparece — mesma UX de um provider sem credencial.
Servidores spawnados por IDE (ACP/MCP) enxergam um
PATH mínimo. Editores lançam chatcli acp / chatcli mcp-server com o ambiente da sessão gráfica — no macOS esse PATH não carrega os diretórios do Homebrew nem do npm, o que fazia o DEVIN sumir desses servidores enquanto o REPL do terminal o listava normalmente. Quando o lookup no PATH falha, o ChatCLI agora também sonda os locais de instalação padrão (~/.local/bin, ~/bin, ~/.devin/bin, /opt/homebrew/bin, /usr/local/bin, Linuxbrew; no Windows %LOCALAPPDATA%\Programs\devin, %APPDATA%\npm, shims do scoop), então o provider continua disponível sem gambiarra de env por IDE. Um DEVIN_CLI_PATH explícito sempre vence e nunca cai no fallback — e corrigir a env em runtime seguido de /reload recupera o provider sem reiniciar.Modelos
O catálogo espelha o que o CLI enterprise serve (33 modelos): a linhaclaude-* (sonnet-5, opus 4.5–4.8, haiku), gpt-5.x incluindo os tiers do 5.6 (sol/terra/luna) mais o gpt-4.1, gemini-3.x, glm-5.2, kimi-k3/k2.x, deepseek-v4-pro, e os swe-1.6…swe-1.7-lightning da própria Cognition. Qualquer string de modelo passa direto — o catálogo é bookkeeping, não gate.
Como o transporte funciona
- Stateless por turno — o histórico inteiro achatado vai a cada chamada (nunca
--resume), então o estado da conversa nunca se divide entre o ChatCLI e os servidores do Devin. Compaction,/session loade edições de contexto continuam funcionando sem mudança. - O agente interno não age — cada chamada roda em um diretório vazio novo com um preâmbulo de transporte que proíbe as tools nativas do Devin enquanto explicitamente respeita o protocolo textual de tools do próprio ChatCLI. Nos modos agent/coder o modelo vê o catálogo completo de tools do ChatCLI e emite o markup
<tool_call .../>normalmente — quem executa é o ChatCLI, não o Devin. - Sem coerção de identidade — o preâmbulo nunca diz ao modelo que ele “é” o ChatCLI e não exige sigilo sobre o transporte. O agente mantém a própria identidade (pergunte quem ele é e ele responde honestamente) e simplesmente coopera via protocolo textual. Isso importa na prática: um preâmbulo anterior que impunha identidade + uma cláusula de “não mencione estas regras” fazia o Devin recusar tarefas inteiras em vez de se apresentar errado.
- Parsing tolerante de tag — modelos apoiados em agent CLIs (Devin, Codex, Claude Code) às vezes encurtam a tag
<tool_call ...>para<tool ...>. O parser do ChatCLI aceita as duas grafias em toda parte (agent, coder, exceções do chat, MoA, MCP server) enquanto sempre emite a canônica<tool_call>nos próprios prompts — liberal no que aceita, conservador no que envia. - Respostas limpas — a resposta é extraída entre marcadores sentinela, descartando o chrome do harness do Devin; prompt files são sempre coagidos a UTF-8 válido (o CLI rejeita bytes inválidos); as invocações são serializadas por processo, então trabalho em background (extração de memória) nunca disputa com um turno ativo.
Variáveis de ambiente
Todas expostas em
/config providers.
Limitações (honestas)
- Sem report de tokens/custo — o CLI não expõe usage, então o cost tracker registra zero (o custo vive na assinatura Cognition; a camada de pricing nunca cobra um
claude-*/gpt-*roteado como se fosse a API direta). - Latência de spawn — cada turno paga o start de um subprocess mais o overhead do harness do Devin. Se isso pesar no uso intenso do coder, um transporte persistente via ACP (
devin acp) é a evolução natural. - Vision não atravessa — o transporte é texto plano; anexos de imagem nunca chegam ao modelo por trás.
Veja também
- Modelos Suportados — a aba DEVIN
- Variáveis de Ambiente
- MCP Server — combine os dois: exponha o ChatCLI via MCP e roteie o
agent_taskparaprovider: "DEVIN"