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
PATH, ouDEVIN_CLI_PATH):
devin. Sem o binário o provider simplesmente não aparece — mesma UX de um provider sem credencial.
Modelos
O catálogo espelha o que o CLI enterprise serve (29 modelos): a linhaclaude-* (sonnet-5, opus 4.5–4.8, haiku), gpt-5.x incluindo os tiers do 5.6 (sol/terra/luna), gemini-3.x, glm-5.2, kimi-k2.x, deepseek-v4-pro, e os swe-1.5…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. - 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
| Variável | Propósito | Default |
|---|---|---|
DEVIN_MODEL | Modelo default | claude-sonnet-4.6 |
DEVIN_CLI_PATH | Caminho explícito do binário | devin do PATH |
DEVIN_CLI_PERMISSION_MODE | --permission-mode passado ao CLI | auto |
DEVIN_CLI_AGENT_CONFIG | Arquivo agent-config declarativo (lockdown reforçado de tools) | — |
DEVIN_CLI_TIMEOUT | Teto por turno | 10m |
DEVIN_CLI_SANDBOX | Passa --sandbox (research preview) | false |
DEVIN_CLI_EXTRA_ARGS | Escape hatch de args extras | — |
/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"