Pular para o conteúdo principal
Esta página lista todas as variáveis de ambiente que o ChatCLI reconhece. Configure-as no seu arquivo .env ou via export no shell.

Geral

VariávelDescriçãoPadrão
LLM_PROVIDERProvedor ativo: OPENAI, OPENAI_ASSISTANT, CLAUDEAI, BEDROCK, GOOGLEAI, XAI, ZAI, MINIMAX, MOONSHOT, OPENROUTER, STACKSPOT, OLLAMA, COPILOT, GITHUB_MODELSAuto-detectado
CHATCLI_DOTENVCaminho customizado para o arquivo .env.env
CHATCLI_LANGForçar idioma da interface (pt-BR, en)Auto-detectado
CHATCLI_IGNORECaminho para arquivo de regras .chatignoreAuto-detectado
CHATCLI_THEMETema de cores da interface (chat, cards, markdown, spinners). 11 temas: dark, light + 9 da comunidade (dracula, nord, tokyo-night, solarized-dark/light, gruvbox, catppuccin-mocha, monokai, one-dark). Troca em runtime via /config ui theme. Veja o Sistema de Tema.dark
LOG_LEVELNível de log: debug, info, warn, errorinfo
LOG_FILECaminho do arquivo de log~/.chatcli/app.log
LOG_MAX_SIZETamanho máximo do log antes da rotação100MB
CHATCLI_ENVModo de logging: dev (console colorido + arquivo), prod (só arquivo JSON). Compatível com legado ENV.prod
MAX_RETRIESTentativas máximas para chamadas de API5
INITIAL_BACKOFFTempo inicial entre tentativas (segundos)3
HISTORY_FILECaminho para o arquivo de histórico (suporta ~).chatcli_history
HISTORY_MAX_SIZETamanho máximo do histórico antes da rotação100MB

Provedores LLM

OpenAI

VariávelDescriçãoPadrão
OPENAI_API_KEYChave de API
OPENAI_MODELModelo a usargpt-5.4
OPENAI_ASSISTANT_MODELModelo para assistente (modo agente)gpt-4o
OPENAI_MAX_TOKENSLimite de tokens na resposta60000
OPENAI_USE_RESPONSESUsar Responses API (ex: para gpt-5)false

Anthropic (Claude)

VariávelDescriçãoPadrão
ANTHROPIC_API_KEYChave de API
ANTHROPIC_MODELModelo a usar (ex.: claude-opus-4-8, claude-opus-4-7, claude-sonnet-4-6)claude-sonnet-4-6
ANTHROPIC_MAX_TOKENSLimite de tokens na resposta20000
ANTHROPIC_API_VERSIONVersão da API2023-06-01
ANTHROPIC_SPEEDDefina fast para opt-in no fast mode do Opus 4.8 (research preview, ~2.5× output tokens/seg com pricing premium). Ignorado silenciosamente em modelos sem a capability fast_mode no catálogo — seguro deixar fixo ao trocar de modelo.
ANTHROPIC_1MTOKENS_SONNETAtiva o beta header de 1M de contexto em requisições OAuth para Sonnet 4.x. Opus 4.7/4.8 já têm 1M nativo e ignoram esta flag.false

AWS Bedrock (catálogo completo)

Provedor BEDROCK — invoca todo o catálogo Bedrock (Anthropic, OpenAI, Llama, Nova, Mistral, Cohere, AI21, DeepSeek, Moonshot Kimi (também disponível diretamente via MOONSHOT), MiniMax, Qwen, Z.AI/GLM, Gemma, Nemotron, TwelveLabs e qualquer provider que a AWS adicionar) usando a credentials chain do SDK (env vars, ~/.aws/credentials, SSO via ~/.aws/config, IAM role). A ativação exige credenciais reais — a mera existência de ~/.aws/config com apenas region/output não ativa o Bedrock.
VariávelDescriçãoPadrão
BEDROCK_PROVIDEROverride do schema: anthropic / claude, openai / gpt, converse / auto. Sobrepõe auto-detecção pelo prefixo do model id.auto-detect
BEDROCK_TEMPERATURETemperature (usada por OpenAI e Converse paths)
BEDROCK_TOP_PTop-p sampling (usado pelo Converse path)
BEDROCK_REGIONRegião AWS (precedência sobre AWS_REGION)
AWS_REGIONRegião AWS (fallback)
AWS_PROFILEProfile em ~/.aws/credentials ou ~/.aws/config (SSO, assume-role, credential_process). Pode ser definido no .env.
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKENCredenciais estáticas
AWS_CA_BUNDLEBundle PEM lido nativamente pelo SDK
AWS_ENDPOINT_URL_BEDROCK_RUNTIMEOverride do endpoint Bedrock Runtime (VPC endpoints)
AWS_ENDPOINT_URL_BEDROCKOverride do endpoint Bedrock (control plane)
AWS_EC2_METADATA_DISABLEDtrue desabilita IMDS (169.254.169.254) explicitamente
CHATCLI_BEDROCK_ENABLE_IMDS1/true força habilitar o probe IMDS em máquinas não-EC2false
BEDROCK_MAX_TOKENSLimite de tokens na respostaDo catálogo
CHATCLI_BEDROCK_CA_BUNDLEBundle PEM específico do Bedrock. Precede AWS_CA_BUNDLE e o global CHATCLI_CA_BUNDLE (que serve de fallback). Veja Confiança TLS Global.
CHATCLI_BEDROCK_INSECURE_SKIP_VERIFYtrue desabilita verificação TLS (inseguro, só troubleshooting). Precede o global CHATCLI_TLS_INSECURE_SKIP_VERIFY (que serve de fallback).false
Modelos modernos no Bedrock (Claude 3.7+/4.x/4.5/4.6/4.7 e equivalentes em outros providers) exigem inference profile IDs (com prefixo global., us., eu. ou apac.). O /switch --model filtra automaticamente IDs base que não suportam ON_DEMAND, então só aparecem os IDs invocáveis direto + os profiles. Veja AWS Bedrock para detalhes.

Google AI (Gemini)

VariávelDescriçãoPadrão
GOOGLEAI_API_KEYChave de API
GOOGLEAI_MODELModelo a usargemini-2.5-flash
GOOGLEAI_MAX_TOKENSLimite de tokens na resposta50000

xAI (Grok)

VariávelDescriçãoPadrão
XAI_API_KEYChave de API
XAI_MODELModelo a usargrok-4-1
XAI_MAX_TOKENSLimite de tokens na resposta50000

Ollama (Modelos Locais)

VariávelDescriçãoPadrão
OLLAMA_ENABLEDHabilitar API do Ollama (obrigatório)false
OLLAMA_BASE_URLURL do servidor Ollamahttp://localhost:11434
OLLAMA_MODELModelo a usar
OLLAMA_MAX_TOKENSLimite de tokens na resposta5000
OLLAMA_FILTER_THINKINGFiltra raciocínio intermediário de modelos como Qwen3true
Para o modo Agente funcionar bem com alguns modelos Ollama que “pensam em voz alta” (Qwen3, Llama3…), mantenha OLLAMA_FILTER_THINKING=true.

ZAI (Zhipu AI)

VariávelDescriçãoPadrão
ZAI_API_KEYChave de API (Bearer token ou id.secret para JWT)
ZAI_MODELModelo a usarglm-5
ZAI_MAX_TOKENSLimite de tokens na resposta50000
Chaves no formato id.secret ativam automaticamente a rotação de tokens JWT (HMAC-SHA256). Os tokens são cacheados por 30 minutos com margem de segurança de 5 minutos antes da regeneração. Chaves sem ”.” continuam funcionando como Bearer tokens tradicionais. Nenhuma configuração adicional é necessária.

MiniMax

VariávelDescriçãoPadrão
MINIMAX_API_KEYChave de API (Bearer token)
MINIMAX_MODELModelo a usar (case-sensitive!)MiniMax-M2.7
MINIMAX_MAX_TOKENSLimite de tokens na resposta50000
MINIMAX_API_COMPATModo de compatibilidade da API: anthropic para usar o endpoint Anthropic Messages
Defina MINIMAX_API_COMPAT=anthropic para usar o endpoint compatível com a API Anthropic Messages (https://api.minimax.io/anthropic/v1/messages). O header anthropic-version: 2023-06-01 é adicionado automaticamente. A autenticação Bearer token permanece a mesma. O tool use nativo é desabilitado neste modo (fallback para XML).

Moonshot (Kimi)

VariávelDescriçãoPadrão
MOONSHOT_API_KEYChave de API (Bearer token)
MOONSHOT_MODELModelo a usar (kimi-k2.6, kimi-k2.5, kimi-latest, moonshot-v1-*)kimi-k2.6
MOONSHOT_MAX_TOKENSLimite de tokens na respostacatálogo (131072 para K2.6)
MOONSHOT_THINKINGModo de raciocínio: enabled, disabled, autoauto
MOONSHOT_API_URLEndpoint customizadohttps://api.moonshot.ai/v1/chat/completions
MOONSHOT_THINKING=disabled força o modo Instant (resposta direta, mais barata) mesmo em modelos com capability thinking. enabled força o reasoning explícito. auto (padrão) deixa o modelo escolher. Modelos sem capability thinking ignoram a flag — não há cobrança extra acidental.

OpenRouter

VariávelDescriçãoPadrão
OPENROUTER_API_KEYChave de API do OpenRouter (obrigatória)
OPENROUTER_API_URLURL customizada da APIhttps://openrouter.ai/api/v1/chat/completions
OPENROUTER_MAX_TOKENSLimite de tokens na resposta
OPENROUTER_FALLBACK_MODELSLista de modelos de fallback separados por vírgula (roteamento nativo do OpenRouter)
OPENROUTER_PROVIDER_ORDEROrdem de preferência de provedores separados por vírgula (ex: Anthropic,Google)
OPENROUTER_TRANSFORMSTransformações de mensagem (ex: middle-out para overflow de contexto)
OPENROUTER_HTTP_REFERERHeader de atribuição HTTP Referer
OPENROUTER_APP_TITLEHeader de atribuição com o título da aplicação
OPENROUTER_TOOLSArray JSON de ferramentas para injeção
O OpenRouter é um gateway multi-provedor que dá acesso a 200+ modelos com uma única API key. Os modelos usam o formato provedor/nome-do-modelo (ex: openai/gpt-4o, anthropic/claude-sonnet-4). Configure OPENROUTER_FALLBACK_MODELS para aproveitar o roteamento de fallback nativo do OpenRouter, complementar ao sistema de fallback do ChatCLI.

GitHub Copilot

VariávelDescriçãoPadrão
GITHUB_COPILOT_TOKENToken de autenticação
COPILOT_MODELModelo a usar
COPILOT_MAX_TOKENSLimite de tokens na resposta
COPILOT_API_BASE_URLURL base da API
CHATCLI_COPILOT_CLIENT_IDClient ID customizado

StackSpot

VariávelDescriçãoPadrão
CLIENT_IDClient ID
CLIENT_KEYClient Key
STACKSPOT_REALMRealm/Tenant
STACKSPOT_AGENT_IDAgent ID
A API de agente da StackSpot decide o limite de output server-side (ignora max_tokens no payload). O catálogo do ChatCLI assume 128K de janela de contexto para agentes StackSpot — antes, o fallback genérico de 50K fazia o auto-compact disparar em quase todo turno. Se o modelo de fundação do seu agente tiver janela diferente, ajuste com CHATCLI_CONTEXT_WINDOW.

Modo Agente

VariávelDescriçãoPadrão
CHATCLI_AGENT_CMD_TIMEOUTTimeout por comando executado (duração Go: 30s, 2m, 10m)10m
CHATCLI_AGENT_DENYLISTRegex extras para bloquear comandos (separados por ;)
CHATCLI_AGENT_ALLOW_SUDOPermitir sudo sem bloqueio automáticofalse
CHATCLI_AGENT_INLINE_CODE_STRICTEm chamadas python -c / node -e / perl -e / ruby -e / php -r / lua -e, eleva qualquer código inline não comprovadamente seguro a perigoso (modo conservador). Default: classifier deixa passar one-liners read-only (print(1), import sys; print(sys.version)) e bloqueia apenas padrões com os.system, subprocess, socket, eval, exec, file writes, network.false
CHATCLI_AGENT_PLUGIN_MAX_TURNSMáximo de turnos do agente50
CHATCLI_AGENT_PLUGIN_TIMEOUTTimeout total do plugin do agente15m

Multi-Agent (Orquestração Paralela)

VariávelDescriçãoPadrão
CHATCLI_AGENT_PARALLEL_MODEAtivar orquestração paralela multi-agenttrue
CHATCLI_AGENT_MAX_WORKERSMáximo de workers (goroutines) simultâneos4
CHATCLI_AGENT_WORKER_MAX_TURNSMáximo de turnos por worker10
CHATCLI_AGENT_WORKER_TIMEOUTTimeout por worker individual5m
CHATCLI_AGENT_PARALLEL_TOOLSAtiva execução paralela de tools concurrency-safe dentro de um único agente (read-only operations como @websearch, @webfetch, @coder read/search/tree em um mesmo turn). Distinto de CHATCLI_AGENT_PARALLEL_MODE, que controla múltiplos agentes em paralelo. Off por default enquanto o feature está em rollout.false
CHATCLI_AGENT_MAX_TOOL_CONCURRENCYCap de fan-out simultâneo para o batch paralelo de tools dentro de um agente. Operadores que processam muitos @webfetch em paralelo podem subir; conservadores podem reduzir.10

Mixture-of-Agents (MoA)

Ensemble onde vários modelos propõem uma resposta em paralelo e um agregador sintetiza a melhor. É distinto da orquestração paralela acima (que despacha agents especialistas): aqui o eixo é a diversidade de modelos/provedores. Acionado pelo comando /moa. Ver Mixture-of-Agents.
VariávelDescriçãoPadrão
CHATCLI_MOA_MODELSPropositores do ensemble, em CSV provider:model (ex.: openai:gpt-5,claudeai:claude-opus-4-8,googleai:gemini-2.5-pro). Opcional: sem isto, /moa e @moa usam os provedores configurados (cap 4).
CHATCLI_MOA_AGGREGATORModelo que sintetiza as propostas, no formato provider:model. Se omitido, usa o provedor/modelo ativo da sessão.Provedor ativo

Eficiência de Tokens

Controles para as otimizações de consumo de tokens (prompt caching estruturado, detector de estagnação, smart routing, auto-save de webfetch, microcompactação). Ver Eficiência de Tokens para detalhes.

Detector de estagnação (early-exit)

VariávelDescriçãoPadrão
CHATCLI_AGENT_EARLY_EXITLiga/desliga o detector de tool_calls repetidas no loop ReAct. Aceita 0/false/off/no para desativar.1 (on)
CHATCLI_AGENT_EARLY_EXIT_TURNSQuantos turnos consecutivos com a mesma batch de tool_calls acionam o break. Clamp [2, 10].3

Guarda de falhas de tool (toolguard)

Guarda advisory (não aborta) que detecta uma mesma ferramenta falhando repetidamente dentro do loop do agente e injeta um aviso para o modelo mudar de abordagem em vez de insistir no mesmo erro.
VariávelDescriçãoPadrão
CHATCLI_AGENT_TOOLGUARDLiga/desliga o guarda de falhas repetidas de tool. Aceita 0/false para desativar.1 (on)

Smart routing chat ↔ agent

VariávelDescriçãoPadrão
CHATCLI_AGENT_SMART_ROUTEModo do classificador de queries triviais. off (desliga), hint (só avisa — default), auto (auto-redireciona trivial → chat mode). Sinônimos aceitos: 0/false, 1/on/true, redirect/2.hint

WebFetch auto-save

VariávelDescriçãoPadrão
CHATCLI_WEBFETCH_AUTOSAVE_BYTESThreshold em bytes. Bodies de @webfetch maiores que isso SEM filtro/range são auto-salvos no scratch dir e retornam apenas um preview.10000
CHATCLI_WEBFETCH_RENDERRenderização headless de páginas JS no @webfetch: auto (heurística detecta shell de SPA), always, never. Ver Web Tools.auto
CHATCLI_WEBFETCH_RENDER_TIMEOUTTimeout do render headless, em segundos.25
CHATCLI_WEBFETCH_RENDER_BROWSERCaminho absoluto para um binário Chromium-based específico (Chrome/Chromium/Edge/Brave são auto-detectados sem isso).(auto-detect)
CHATCLI_WEBFETCH_RENDER_AUTOPROVISIONPermite o download único de um Chromium pinado (~150 MB) quando nenhum browser é encontrado.false

Microcompactação de tool results

Aplicada ao histórico da sessão para comprimir resultados antigos de ferramentas. Ver também Tool Result Management.
VariávelDescriçãoPadrão
CHATCLI_MICROCOMPACT_TRUNCATE_TURNSApós quantos turnos os tool results antigos viram head+tail preview.2
CHATCLI_MICROCOMPACT_SUMMARIZE_TURNSApós quantos turnos os tool results viram uma linha de resumo.4
CHATCLI_MICROCOMPACT_HEAD_CHARSTamanho do head mantido na truncagem.2000
CHATCLI_MICROCOMPACT_TAIL_CHARSTamanho da cauda mantida na truncagem.500
CHATCLI_MICROCOMPACT_MIN_CONTENTTamanho mínimo de tool result para virar candidato à compactação.3000
Para sessões de chat/lookup onde economia de tokens importa mais que recall de longo prazo, aperte os knobs:
export CHATCLI_MICROCOMPACT_TRUNCATE_TURNS=1
export CHATCLI_MICROCOMPACT_SUMMARIZE_TURNS=3
export CHATCLI_MICROCOMPACT_HEAD_CHARS=1200
export CHATCLI_MICROCOMPACT_TAIL_CHARS=300
export CHATCLI_MICROCOMPACT_MIN_CONTENT=2000

Harness/Pipeline de Qualidade (7 Padrões)

Variáveis do harness/pipeline de qualidade que implementa os sete padrões de agente LLM. Ver overview completo e configuração detalhada.

Master switch

VariávelDescriçãoPadrão
CHATCLI_QUALITY_ENABLEDMaster switch do pipeline. false desativa tudo (fall-back para agent.Execute direto)true

Self-Refine (#5)

VariávelDescriçãoPadrão
CHATCLI_QUALITY_REFINE_ENABLEDAtivar RefineHook após cada workerfalse
CHATCLI_QUALITY_REFINE_MAX_PASSESMáximo de passes de critique-rewrite1
CHATCLI_QUALITY_REFINE_MIN_BYTESNão refina outputs menores que N bytes200
CHATCLI_QUALITY_REFINE_EPSILONThreshold de convergência do fallback char em caracteres50
CHATCLI_QUALITY_REFINE_EXCLUDECSV de agents que não são refinadosformatter,deps,refiner,verifier

Cascade de convergência semântica (char → Jaccard → embedding)

VariávelDescriçãoPadrão
CHATCLI_QUALITY_REFINE_CONVERGENCE_ENABLEDLiga o cascade; false = só heurístico char-leveltrue
CHATCLI_QUALITY_REFINE_CONVERGENCE_EMBEDDINGInclui embedding scorer (exige CHATCLI_EMBED_PROVIDER)false
CHATCLI_QUALITY_REFINE_CONVERGENCE_STRICTStrict mode: recusa convergência sem embeddingfalse
CHATCLI_QUALITY_REFINE_CONVERGENCE_CHAR_HIGHSim char ≥ X → short-circuit CONVERGIU0.99
CHATCLI_QUALITY_REFINE_CONVERGENCE_CHAR_LOWSim char < X → short-circuit DIVERGIU0.3
CHATCLI_QUALITY_REFINE_CONVERGENCE_JACCARD_HIGHSim Jaccard ≥ X + alta confiança → CONVERGIU0.95
CHATCLI_QUALITY_REFINE_CONVERGENCE_EMBEDDING_SIMThreshold final do embedding cosine0.92
CHATCLI_QUALITY_REFINE_CONVERGENCE_CACHE_SIZEEntries do LRU cache de embeddings256
CHATCLI_QUALITY_REFINE_CONVERGENCE_CACHE_TTL_MINTTL do cache (minutos)5
CHATCLI_QUALITY_REFINE_CONVERGENCE_BREAKER_THRESHOLDFalhas consecutivas do embedder antes do breaker abrir3

Chain-of-Verification (#6)

VariávelDescriçãoPadrão
CHATCLI_QUALITY_VERIFY_ENABLEDAtivar VerifyHook após cada workerfalse
CHATCLI_QUALITY_VERIFY_NUM_QUESTIONSNúmero de perguntas de verificação3
CHATCLI_QUALITY_VERIFY_REWRITEReescrever output quando houver discrepânciatrue
CHATCLI_QUALITY_VERIFY_EXCLUDECSV de agents que não são verificadosformatter,deps,shell,refiner,verifier

Reflexion (#3)

VariávelDescriçãoPadrão
CHATCLI_QUALITY_REFLEXION_ENABLEDMaster switch do ReflexionHooktrue
CHATCLI_QUALITY_REFLEXION_ON_ERRORDisparar em erro de workertrue
CHATCLI_QUALITY_REFLEXION_ON_HALLUCINATIONDisparar quando CoVe flagga discrepânciatrue
CHATCLI_QUALITY_REFLEXION_ON_LOW_QUALITYDisparar quando refine dá nota baixafalse
CHATCLI_QUALITY_REFLEXION_PERSISTPersistir lessons em memory.Facttrue

Fila durável (WAL + worker pool + DLQ)

Quando ligada, triggers de reflexion passam por uma fila persistente — lições sobrevivem a crash via WAL replay no próximo boot.
VariávelDescriçãoPadrão
CHATCLI_QUALITY_REFLEXION_QUEUE_ENABLEDMaster switch da fila; false volta ao modo legado (detached goroutine)true
CHATCLI_QUALITY_REFLEXION_QUEUE_WORKERSTamanho do worker pool2
CHATCLI_QUALITY_REFLEXION_QUEUE_CAPACITYProfundidade máxima in-memory antes de overflow1000
CHATCLI_QUALITY_REFLEXION_QUEUE_DROP_OLDESTOverflow: true drop oldest; false blockfalse
CHATCLI_QUALITY_REFLEXION_QUEUE_BLOCK_TIMEOUTQuanto Enqueue espera com fila cheia (duração Go)5s
CHATCLI_QUALITY_REFLEXION_QUEUE_MAX_ATTEMPTSRetries totais antes de mover pra DLQ5
CHATCLI_QUALITY_REFLEXION_QUEUE_INITIAL_DELAYPrimeiro delay de retry1s
CHATCLI_QUALITY_REFLEXION_QUEUE_MAX_DELAYCap no retry exponencial5m
CHATCLI_QUALITY_REFLEXION_QUEUE_JITTERJitter fracionário ([0, 0.5])0.2
CHATCLI_QUALITY_REFLEXION_QUEUE_JOB_TIMEOUTTimeout por chamada ao processor (LLM + persist)2m
CHATCLI_QUALITY_REFLEXION_QUEUE_STALE_AFTERRecords mais velhos são descartados no replay168h
CHATCLI_QUALITY_REFLEXION_QUEUE_BASE_DIRRaiz de wal/ e dlq/ (override do default em .chatcli/reflexion)

Plan-and-Solve / ReWOO (#2)

VariávelDescriçãoPadrão
CHATCLI_QUALITY_PLAN_FIRST_MODEoff|auto|always — quando disparar Plan-Firstauto
CHATCLI_QUALITY_PLAN_FIRST_THRESHOLDScore mínimo (0-10) para auto disparar6

RAG + HyDE (#4)

VariávelDescriçãoPadrão
CHATCLI_QUALITY_HYDE_ENABLEDAtivar phase 3a (hypothesis-based keyword expansion)false
CHATCLI_QUALITY_HYDE_USE_VECTORSAtivar phase 3b (busca vetorial por cosseno)false
CHATCLI_QUALITY_HYDE_NUM_KEYWORDSCap de keywords extraídas da hipótese5

Embedding Providers (usado por HyDE 3b)

VariávelDescriçãoPadrão
CHATCLI_EMBED_PROVIDERvoyage / openai / bedrock / nullnull
CHATCLI_EMBED_MODELModelo de embedding. Defaults por provider: Voyage voyage-3; OpenAI text-embedding-3-small; Bedrock amazon.titan-embed-text-v2:0.provider default
CHATCLI_EMBED_DIMENSIONSOpenAI: trunca via Matryoshka. Bedrock Titan v2: aceita 256 / 512 / 1024 (rejeita outros). Bedrock Titan v1 / Cohere v3: dimensão fixa, ignorada.nativa do modelo
VOYAGE_API_KEYNecessária para provider=voyage
OPENAI_API_KEYNecessária para provider=openai (compartilhada com o chat)
BEDROCK_REGION / AWS_REGION / AWS_PROFILE / credenciais AWSNecessárias para provider=bedrock — reusa a mesma cadeia do chat.conforme chat Bedrock
Bedrock embeddings suportam amazon.titan-embed-text-v2:0 (default), amazon.titan-embed-text-v1, cohere.embed-english-v3 e cohere.embed-multilingual-v3. Titan paraleliza batches com pool de 8 workers (a API só aceita 1 texto por chamada); Cohere v3 envia o batch inteiro numa só call. A dispatch é auto pelo prefixo do model id. Veja RAG + HyDE e AWS Bedrock.

Reasoning Backbone (#7)

VariávelDescriçãoPadrão
CHATCLI_QUALITY_REASONING_MODEoff|auto|on — política de auto-attach de thinking/reasoningauto
CHATCLI_QUALITY_REASONING_BUDGETTokens de thinking (Anthropic); mapeado para tier na OpenAI8000
CHATCLI_QUALITY_REASONING_AUTO_AGENTSCSV de agents que recebem effort hint automaticamente em mode=autoplanner,refiner,verifier,reflexion

Per-Agent Overrides (inclui refiner / verifier)

VariávelDescrição
CHATCLI_AGENT_REFINER_MODELModelo específico para o RefinerAgent
CHATCLI_AGENT_REFINER_EFFORTEffort tier (low|medium|high|max)
CHATCLI_AGENT_VERIFIER_MODELModelo específico para o VerifierAgent
CHATCLI_AGENT_VERIFIER_EFFORTEffort tier
Presets recomendados (cheap dev, rigorous review, docs, incident, autopilot) em Configuração do Pipeline.

Workspace de Sessão e Subagent

Variáveis que controlam o Workspace de Sessão (scratch dir + overflow de tool results) e a Delegação para Subagent.
VariávelDescriçãoPadrão
CHATCLI_AGENT_TMPDIRApenas leitura — exportada automaticamente pelo ChatCLI no startup com o caminho do scratch dir da sessão. Disponível em todo subprocesso lançado pelo exec do agente.(definido no startup)
CHATCLI_AGENT_KEEP_TMPDIRSe true, pula o cleanup do scratch dir no encerramento da sessão. Útil para inspecionar scripts temporários e arquivos de overflow após o exit.false
CHATCLI_BLOCK_TMP_WRITESSe true, bloqueia a extensão automática do allowlist para os.TempDir() e /tmp. Só o scratch dir isolado da sessão fica acessível. Use em multi-user / CI estrito. Veja Session Workspace.false (permite)
CHATCLI_AGENT_SUBAGENT_MAX_DEPTHProfundidade máxima de delegações aninhadas via delegate_subagent. Protege contra recursão patológica.2
CHATCLI_AGENT_SUBAGENT_MAX_TURNSIterações máximas do loop ReAct interno de cada subagente.15
CHATCLI_TOOL_RESULT_BUDGET_CHARSOrçamento agregado de tool results por turno. Acima disso, os maiores resultados são salvos em tool-results/ da sessão e substituídos por preview.200000
CHATCLI_TOOL_RESULT_MAX_CHARSTamanho máximo de um único tool result inline.20000

Confiança TLS Global (Proxy Corporativo)

Para ambientes atrás de proxy/gateway corporativo com inspeção TLS via CA privada (Zscaler, Netskope, CrowdStrike Falcon etc.). As duas variáveis valem para todas as conexões HTTPS de saída do processo: todos os providers LLM, TTS/STT, embeddings, web tools (@webfetch/@websearch/@osv), canais do gateway, transports MCP, registries de skills e o version check. É o equivalente process-wide do NODE_EXTRA_CA_CERTS / NODE_TLS_REJECT_UNAUTHORIZED em ferramentas Node.js como o Claude Code.
VariávelDescriçãoPadrão
CHATCLI_CA_BUNDLECaminho para um bundle PEM com a CA corporativa. Mesclado no pool de certificados do sistema e usado como RootCAs em todas as conexões de saída (equivalente ao NODE_EXTRA_CA_CERTS). Bundle ilegível ou sem certificados válidos falha aberto para a verificação default, com warning no log — nunca enfraquece a verificação silenciosamente.(trust store do sistema)
CHATCLI_TLS_INSECURE_SKIP_VERIFYtrue desabilita a verificação TLS por completo, em todas as conexões (equivalente ao NODE_TLS_REJECT_UNAUTHORIZED=0). Emite warning alto no log. Inseguro — use somente para confirmar que o problema é de confiança TLS; depois configure o CHATCLI_CA_BUNDLE.false
O Go — e portanto o ChatCLI — já confia no trust store do sistema operacional por default (Keychain no macOS, cert store no Windows, /etc/ssl no Linux). Se a CA corporativa já está instalada na máquina, nenhuma configuração é necessária. O CHATCLI_CA_BUNDLE cobre o caso em que a CA não pode ser instalada system-wide.
Com CHATCLI_TLS_INSECURE_SKIP_VERIFY=true o ChatCLI aceita qualquer certificado — inválido, expirado, forjado — e fica exposto a man-in-the-middle (captura de API keys, código e credenciais). Nunca use em produção.
As variáveis específicas do Bedrock (CHATCLI_BEDROCK_CA_BUNDLE / CHATCLI_BEDROCK_INSECURE_SKIP_VERIFY, na seção AWS Bedrock) têm precedência sobre as globais; na ausência delas, o Bedrock herda as globais como fallback, já que o AWS SDK monta o próprio HTTP client.
Diagnóstico rápido: inspeção TLS mal-resolvida gera erro x509 (certificate signed by unknown authority) — isso o CHATCLI_CA_BUNDLE resolve. Um 403 vem de camada acima (WAF/política do proxy: User-Agent, fingerprint, autenticação) e não se resolve com trust TLS — para isso veja as variáveis de proxy web (HTTPS_PROXY, CHATCLI_PROXY_AUTH) em /config resilience.

Compactação de Histórico e Recuperação de Payload

Controla o comportamento do HistoryCompactor (pipeline de 3 níveis: trim → summarize → emergency) e a detecção reativa de limites de proxy/gateway corporativo. Veja Recuperação de Contexto.
VariávelDescriçãoPadrão
CHATCLI_CONTEXT_WINDOWOverride global da janela de contexto (em tokens), válido para qualquer provider/modelo. Tem precedência sobre o catálogo de modelos e os fallbacks por provider. É o escape hatch para gateways/agentes cuja janela real difere do catálogo — ex.: um agente StackSpot apoiado num modelo de fundação maior ou menor. Como o orçamento de compactação deriva da janela de contexto, esta env controla diretamente quando o auto-compact dispara. Aceita apenas inteiro positivo; valores inválidos são ignorados silenciosamente.(auto via catálogo)
CHATCLI_MAX_PAYLOADTeto human-friendly de body size para o POST HTTP. Aceita 5MB, 512KB, 2.5MB, 5 (= 5 MB). Quando setado, o compactor respeita esse limite como adicional à janela de contexto do modelo, e o pre-flight força compactação agressiva ao cruzar 85% do cap. Essencial em ambientes atrás de proxy corporativo (Cloudflare, Akamai, WAF) que capa body size em 1-5 MB independentemente do contexto do modelo.(não setado — sem cap)
CHATCLI_MAX_RECOVERY_ATTEMPTSTentativas máximas de recuperação de context overflow por sessão.3
CHATCLI_MAX_TOKEN_ESCALATIONSEscalações máximas de max_tokens por sessão.2
CHATCLI_EMERGENCY_KEEP_MESSAGESMensagens mantidas no truncamento de emergência (Level 2 recovery).10
CHATCLI_MICROCOMPACT_TRUNCATE_TURNSIdade (em turnos) em que tool results antigos começam a ser truncados para head+tail preview, sem chamada LLM. Essa é a primeira linha de defesa, antes do NeedsCompaction disparar.2
CHATCLI_MICROCOMPACT_SUMMARIZE_TURNSIdade (em turnos) em que tool results antigos são substituídos por uma linha-summary ([Old tool result cleared — N lines, N chars, type]).4
Se você está atrás de proxy corporativo e não sabe o limite exato, comece com CHATCLI_MAX_PAYLOAD=4MB. Se tomar 413 mesmo assim, reduza para 3MB. Se funcionar fluido, pode subir para 5MB ou 10MB (dependendo do proxy). O ChatCLI já deixa 30% de headroom para JSON overhead + system prompt + tool definitions.
Se um 413/WAF/EOF acontecer sem CHATCLI_MAX_PAYLOAD setado, o ChatCLI assume automaticamente 4 MB para o resto da sessão (auto-cap reativo) e injeta um hint no histórico para a IA preferir leituras line-ranged. Isso evita loop de falha quando o usuário ainda não descobriu o limite do próprio proxy.

UI dos modos /coder e /agent

VariávelDescriçãoPadrão
CHATCLI_CODER_UIEstilo da timeline: full · compact · minimal. Afeta /coder E /agent (cross-mode desde v1.119).full
CHATCLI_CODER_BANNERMostrar cheat sheet de comandos na entrada do /codertrue
Estilos disponíveis:
  • full (padrão) — cards completos com borda fechada ╭── ICON TITLE ─────╮ ... ╰─╯. Cada chamada de ferramenta é uma “ação” destacada. Ideal para /agent (fluxo plan-and-execute supervisionado).
  • compact — linhas inline ↻ Read(main.go) / ✓ Read(main.go) 0.3s. Sessões longas com dezenas de tools ficam scannáveis. Ideal para /coder.
  • minimal — meio termo: cards menores com conteúdo truncado.
A variável mantém o nome legado CHATCLI_CODER_UI por compatibilidade, mas a partir da v1.119 ela controla os DOIS modos. Se você tinha CHATCLI_CODER_UI=compact setado, o /agent também passa a renderizar em compacto.
Mudança visual também em v1.119: falhas de ferramenta (, ❌ FALHA NA EXECUÇÃO) agora renderizam em vermelho real em vez de roxo. Antes ficavam na mesma cor do header (ColorPurple), o que confundia. Se o seu terminal mapeia ANSI 31 (red) para uma cor não-vermelha via theme, ajuste a paleta do terminal.

Efeito de Escrita (Typewriter Adaptativo)

A resposta final da IA é pintada com um efeito de “máquina de escrever” — runa por runa, com um pequeno delay entre cada caractere — para dar a sensação de uma conversa viva em vez de um paste único. A partir da v1.120 o ChatCLI usa pacing adaptativo: respostas curtas mantêm a cadência original (a animação se percebe como animação), respostas longas têm o delay automaticamente escalonado para caber em um orçamento total (~800ms por padrão), e respostas muito longas (acima de 8 000 runas visíveis, ex.: blocos de código gigantes) pulam a animação inteiramente. O comportamento se aplica de forma consistente nos modos /chat, /coder e /agent — todas as superfícies que tipam saída do modelo convergem no mesmo helper interno (agent.PaceText).
VariávelDescriçãoPadrão
CHATCLI_NO_TYPEWRITERDesliga o efeito de máquina de escrever inteiramente. A resposta é pintada de uma vez só (instantâneo). Aceita 1, true, yes, on (case-insensitive). Útil em terminais lentos, sessões tmux espelhadas, ou se você simplesmente não curte o efeito e quer a resposta na tela imediatamente.— (efeito ativo)
CHATCLI_TYPEWRITER_BUDGET_MSOrçamento total da animação em milissegundos. Para respostas longas, o delay por runa é dividido por (runas visíveis), de modo que o efeito inteiro complete dentro deste orçamento. Setar 0 desliga o orçamento (cada runa usa o delay solicitado integralmente — o comportamento antigo da v1.119, em que respostas longas levavam vários segundos). Valores típicos: 400 (rápido), 800 (default), 1500 (animação mais perceptível).800
CHATCLI_TYPEWRITER_DELAY_MSDelay por runa em milissegundos, sobrescrevendo o que o call site interno solicitou. Útil para casar com sua percepção visual: 0 força o mínimo possível (~200μs por runa = animação quase imperceptível mas presente), 5 ou 10 dá uma cadência mais “datilografada”. A variável tem precedência sobre o delay programático, mas ainda passa pelo orçamento (CHATCLI_TYPEWRITER_BUDGET_MS), então respostas longas continuam respeitando o teto.2
Como as três variáveis interagem:
  1. Se CHATCLI_NO_TYPEWRITER está ligado, nada mais importa — a resposta é instantânea.
  2. Senão, o ChatCLI lê o delay solicitado (do call site) ou CHATCLI_TYPEWRITER_DELAY_MS se setado.
  3. Conta as runas visíveis (sequências ANSI de cor não contam — elas são emitidas instantaneamente para que transições de cor não pausem o olho).
  4. Se runas visíveis ≥ 8 000, pula a animação (limite “hardSkip” embutido para evitar dumps de código congelarem o terminal por 16+ segundos).
  5. Senão, calcula delay_efetivo = min(delay_solicitado, CHATCLI_TYPEWRITER_BUDGET_MS / runas_visíveis), com piso de 200μs.
Resumo: o orçamento puxa o delay para baixo quando a resposta é longa, mas nunca o aumenta. Respostas curtas continuam usando o delay solicitado original.
Granularidade do sistema: time.Sleep em Linux/macOS tem granularidade mínima ~1ms, então valores muito pequenos de CHATCLI_TYPEWRITER_DELAY_MS (ex.: 0) na prática rodam em ~200μs–1ms efetivos. Não é precisão de microcontrolador — é “rápido o suficiente para parecer instantâneo num shell humano”.
Exemplos práticos:
# Desabilita totalmente o efeito (paste único)
export CHATCLI_NO_TYPEWRITER=1

# Animação mais rápida: orçamento 300ms, qualquer resposta completa em ≤300ms
export CHATCLI_TYPEWRITER_BUDGET_MS=300

# Datilografia mais lenta (4ms por runa) MAS ainda respeitando o budget
export CHATCLI_TYPEWRITER_DELAY_MS=4

# Volta ao comportamento pré-v1.120 (sem orçamento, sempre 2ms por runa)
export CHATCLI_TYPEWRITER_BUDGET_MS=0
export CHATCLI_TYPEWRITER_DELAY_MS=2

Fallback de Provedores

VariávelDescriçãoPadrão
CHATCLI_FALLBACK_PROVIDERSLista de provedores separados por vírgula
CHATCLI_FALLBACK_MODEL_<PROVIDER>Modelo específico por provedor na cadeia
CHATCLI_FALLBACK_MAX_RETRIESTentativas por provedor antes de avançar2
CHATCLI_FALLBACK_COOLDOWN_BASECooldown base após falha30s
CHATCLI_FALLBACK_COOLDOWN_MAXCooldown máximo (backoff exponencial)5m

MCP (Model Context Protocol)

VariávelDescriçãoPadrão
CHATCLI_MCP_ENABLEDAtivar o gerenciador MCPfalse
CHATCLI_MCP_CONFIGCaminho para o JSON de configuração MCP~/.chatcli/mcp_servers.json
O subsistema MCP gerencia automaticamente o diretório ~/.chatcli/mcp/ para state durável: channels.jsonl (ring persistente de push notifications, com rotação) e triggers.json (rules opt-in do trigger engine). Não há variáveis de ambiente para esses paths — eles são fixos. Detalhes: MCP Channels e MCP Config.

Bootstrap e Memória

VariávelDescriçãoPadrão
CHATCLI_BOOTSTRAP_ENABLEDAtivar carregamento de arquivos bootstraptrue
CHATCLI_BOOTSTRAP_DIRDiretório dos arquivos bootstrap
CHATCLI_MEMORY_ENABLEDAtivar sistema de memória persistentetrue
CHATCLI_MEMORY_MAX_SIZETamanho máximo do MEMORY.md renderizado (bytes)32768
CHATCLI_MEMORY_RETENTION_DAYSDias para reter notas diárias antes da limpeza30
CHATCLI_MEMORY_MAX_FACTSNúmero máximo de fatos no índice de memória500
CHATCLI_MEMORY_RETRIEVAL_BUDGETCaracteres máximos de memória no system prompt4000
CHATCLI_MEMORY_FALLBACK_PROVIDERSCadeia de providers de fallback para a extração de memória (ex.: OPENAI,GOOGLEAI). Vazio → usa CHATCLI_FALLBACK_PROVIDERS. Segmentos que falham em todos vão para a fila em disco e são reprocessados.

Scheduler

Veja Scheduler (Chronos) para o design completo. Todas as variáveis aceitam sufixo enabled / disabled / true / false / 1 / 0 quando aplicável.

Núcleo

VariávelDescriçãoPadrão
CHATCLI_SCHEDULER_ENABLEDMaster switch do schedulertrue
CHATCLI_SCHEDULER_DATA_DIRDiretório com WAL + snapshot + audit log~/.chatcli/scheduler
CHATCLI_SCHEDULER_MAX_JOBSNúmero máximo de jobs não-terminais simultâneos256
CHATCLI_SCHEDULER_WORKER_COUNTGoroutines do worker pool que executam handleJob4
CHATCLI_SCHEDULER_WAIT_WORKER_COUNTGoroutines dedicadas ao loop de wait (reservado, mesmo pool por enquanto)8
CHATCLI_SCHEDULER_ALLOW_AGENTSPermitir que agents criem jobs via @schedulertrue
CHATCLI_SCHEDULER_ACTION_ALLOWLISTCSV de action types permitidosslash_cmd,llm_prompt,agent_task,worker_dispatch,hook,noop,webhook,shell,agent_resume,park_poll
CHATCLI_SCHEDULER_HISTORY_LIMITMáximo de ExecutionResults mantidos por job (ring buffer)16
CHATCLI_PARK_DIROverride do diretório de snapshots do @park — útil para testes e ambientes isolados. Veja Agent Park & Resume$XDG_CONFIG_HOME/chatcli/parked

Budget padrão (por-job se não sobrescrito)

VariávelDescriçãoPadrão
CHATCLI_SCHEDULER_DEFAULT_ACTION_TIMEOUTTimeout da ação em cada fire5m
CHATCLI_SCHEDULER_DEFAULT_POLL_INTERVALIntervalo entre polls de wait-condition5s
CHATCLI_SCHEDULER_DEFAULT_WAIT_TIMEOUTTimeout máximo do loop de wait30m
CHATCLI_SCHEDULER_DEFAULT_MAX_POLLSMáximo de polls antes de desistir (0 = ilimitado)0
CHATCLI_SCHEDULER_DEFAULT_BACKOFF_INITIALBackoff inicial entre retries1s
CHATCLI_SCHEDULER_DEFAULT_BACKOFF_MAXCap do exponential backoff5m
CHATCLI_SCHEDULER_DEFAULT_BACKOFF_MULTFator multiplicativo do backoff2.0
CHATCLI_SCHEDULER_DEFAULT_BACKOFF_JITTERFração de jitter (0.00.5)0.2
CHATCLI_SCHEDULER_DEFAULT_MAX_RETRIESRetries após falha transiente3
CHATCLI_SCHEDULER_DEFAULT_TTLTTL de registros terminais em disco24h

Segurança

VariávelDescriçãoPadrão
CHATCLI_SCHEDULER_RATE_LIMIT_GLOBAL_RPSToken bucket global (req/s)5.0
CHATCLI_SCHEDULER_RATE_LIMIT_GLOBAL_BURSTBurst do bucket global20
CHATCLI_SCHEDULER_RATE_LIMIT_OWNER_RPSToken bucket por-owner1.0
CHATCLI_SCHEDULER_RATE_LIMIT_OWNER_BURSTBurst do bucket por-owner10
CHATCLI_SCHEDULER_BREAKER_FAILURE_THRESHOLDFalhas consecutivas para abrir breaker5
CHATCLI_SCHEDULER_BREAKER_WINDOWJanela de contagem do breaker60s
CHATCLI_SCHEDULER_BREAKER_COOLDOWNCooldown antes da probe half-open30s
CHATCLI_SCHEDULER_SHELL_ALLOW_BYPASSQuando true, jobs podem setar bypass_safety=true no payload da action para pular o preflight e o re-check no fire. Sem esta variável, bypass_safety=true é rejeitado. Shell actions normalmente passam pelo preflight CoderMode (ClassifyShellCommand) no enqueue e re-check no RunShell no fire — esta env é o escape hatch para trusted CI.false

Audit log

VariávelDescriçãoPadrão
CHATCLI_SCHEDULER_AUDIT_ENABLEDEscrever <data_dir>/audit.log em JSONLtrue
CHATCLI_SCHEDULER_AUDIT_MAX_SIZE_MBRotação por tamanho (lumberjack)10
CHATCLI_SCHEDULER_AUDIT_MAX_BACKUPSBackups retidos7
CHATCLI_SCHEDULER_AUDIT_MAX_AGE_DAYSIdade máxima em dias30

Daemon

VariávelDescriçãoPadrão
CHATCLI_SCHEDULER_DAEMON_SOCKETPath do UNIX socket do daemon/tmp/chatcli-scheduler.sock
CHATCLI_SCHEDULER_DAEMON_AUTO_CONNECTCLI auto-detecta daemon e vira thin clienttrue
CHATCLI_SCHEDULER_SNAPSHOT_INTERVALPeriodicidade do snapshot5m
CHATCLI_SCHEDULER_WAL_GC_INTERVALPeriodicidade do GC de terminais expirados1h

Métricas e Observabilidade

VariávelDescriçãoPadrão
CHATCLI_METRICS_PORTPorta HTTP para exportar métricas Prometheus (0 = desabilitado)9090
PROMETHEUS_URLURL do Prometheus para coleta de métricas durante análise de incidentes AIOps. Quando definido, o operator consulta CPU/memória/latência/error rate trends correlacionados ao incidente. Exemplo: http://prometheus-server.monitoring.svc:9090(vazio = desabilitado)

Segurança

VariávelDescriçãoPadrão
CHATCLI_SAFETY_ENABLEDAtivar regras de segurança configuráveisfalse
CHATCLI_GRPC_REFLECTIONHabilitar gRPC reflection no servidor (usar apenas em dev)false
CHATCLI_DISABLE_VERSION_CHECKDesabilitar verificação automática de versãofalse
CHATCLI_LATEST_VERSION_URLURL customizada para verificação de versãoGitHub API

Threat scan de contexto e memória

Sanitiza conteúdo injetado no prompt — contextos anexados via /context attach e a memória de longo prazo — contra prompt-injection antes de enviá-lo ao modelo.
VariávelDescriçãoPadrão
CHATCLI_THREATSCANLiga/desliga o threat scan de contexto e memória. Ligado por padrão; aceita false/0/off/no para desativar.true (on)

Segurança do Servidor

VariávelDescriçãoPadrão
CHATCLI_JWT_SECRETSegredo JWT para assinatura (HS256) ou caminho da chave RSA (RS256)""
CHATCLI_JWT_ISSUERClaim issuer esperado no JWT""
CHATCLI_JWT_AUDIENCEClaim audience esperado no JWT""
CHATCLI_RATE_LIMIT_RPSRate limit: requisições por segundo (sustentado)10
CHATCLI_RATE_LIMIT_BURSTRate limit: capacidade de burst20
CHATCLI_MAX_RECV_MSG_SIZETamanho máximo de mensagem gRPC recebida (bytes)4194304
CHATCLI_MAX_SEND_MSG_SIZETamanho máximo de mensagem gRPC enviada (bytes)4194304
CHATCLI_MAX_CONCURRENT_STREAMSMáximo de streams gRPC simultâneos por conexão100
CHATCLI_BIND_ADDRESSInterface de rede para bind do servidor. Padrão 127.0.0.1 (local); auto-detecta 0.0.0.0 em Kubernetes via KUBERNETES_SERVICE_HOST.127.0.0.1 / 0.0.0.0 (K8s)
CHATCLI_AUDIT_LOG_PATHCaminho do arquivo de audit log estruturado. Deve ser absoluto — valores relativos são rejeitados com erro no log.""
CHATCLI_LOG_FILECaminho do arquivo de log da aplicação~/.chatcli/app.log
CHATCLI_LOG_MAX_SIZE_MBTamanho máximo do log antes da rotação (MB)100
CHATCLI_LOG_MAX_BACKUPSNúmero de arquivos de log rotacionados a manter3
CHATCLI_LOG_MAX_AGE_DAYSIdade máxima dos arquivos de log rotacionados (dias)30
CHATCLI_DEBUGHabilitar modo debug com logging verbosofalse
CHATCLI_ALLOW_HTTP_PROVIDERSPermitir conexões HTTP (sem TLS) para provedores LLMfalse

Segurança do Agente

VariávelDescriçãoPadrão
CHATCLI_AGENT_SECURITY_MODEModo de segurança: strict (allowlist) ou permissive (denylist)permissive
CHATCLI_AGENT_ALLOWLISTComandos extras permitidos no modo strict (separados por ;)""
CHATCLI_AGENT_WORKSPACE_STRICTRestringir acesso a arquivos apenas ao diretório do workspacefalse
CHATCLI_AGENT_ALLOW_KUBECONFIGPermitir acesso ao kubeconfig em comandos do agentefalse
CHATCLI_AGENT_EXTRA_READ_PATHSCaminhos de leitura adicionais permitidos (separados por ;)""
CHATCLI_AGENT_SOURCE_SHELL_CONFIGCarregar config do shell (~/.bashrc, etc.) em comandos do agentefalse
CHATCLI_MAX_COMMAND_OUTPUTTamanho máximo da saída de comandos (bytes)65536

Segurança de Plugins e Autenticação

VariávelDescriçãoPadrão
CHATCLI_ALLOW_UNSIGNED_PLUGINSPermitir execução de plugins não assinadosfalse
CHATCLI_ALLOW_INSECUREPermitir conexões inseguras (sem TLS)false
CHATCLI_TLS_CLIENT_CERTCertificado TLS do cliente para mTLS""
CHATCLI_TLS_CLIENT_KEYChave TLS do cliente para mTLS""
CHATCLI_ENCRYPTION_KEYChave de criptografia customizada para dados de sessãoAuto-gerado
CHATCLI_KEYCHAIN_BACKENDBackend do keychain: auto, file, keychainauto
CHATCLI_DISABLE_HISTORYDesabilitar gravação do histórico de conversasfalse
CHATCLI_SESSION_TTLTempo de vida da sessão antes da expiração24h
CHATCLI_ENV_REDACT_MODERedação de variáveis de ambiente: full, partial, nonefull
CHATCLI_REDACT_PATTERNSPadrões customizados de redação (regex separados por ;)""

Segurança do Operator

A autenticação da REST API do operator carrega API keys com hot-reload a cada 30s na seguinte ordem de prioridade: Secret chatcli-operator-secretsConfigMap chatcli-operator-config → rejeitar (ou aceitar em dev-mode se CHATCLI_OPERATOR_DEV_MODE=true).
VariávelDescriçãoPadrão
CHATCLI_OPERATOR_DEV_MODEHabilitar modo dev do operator (segurança relaxada)false
CHATCLI_AIOPS_TLS_CERTCertificado TLS da REST API AIOps""
CHATCLI_AIOPS_TLS_KEYChave TLS da REST API AIOps""
CHATCLI_GRPC_TLS_CERTCertificado TLS do gRPC""
CHATCLI_GRPC_TLS_KEYChave TLS do gRPC""
CHATCLI_GRPC_TLS_CACertificado CA do gRPC para verificação mTLS. Deve ser caminho absoluto (valores relativos retornam erro). No operator é apenas fallback — quando se usa Instance CR, o WatcherBridge lê ca.crt do Secret referenciado por spec.server.tls.secretName automaticamente (ver cookbook §2.1).""
CHATCLI_ALLOWED_RESOURCE_TYPESTipos de recursos Kubernetes permitidos pelo ApplyManifest (comma-separated)Deployment,StatefulSet,DaemonSet,…
CHATCLI_ALLOWED_DIAGNOSTIC_COMMANDSComandos adicionais aceitos por ExecDiagnostic (comma-separated, estende o allowlist default de ~90 entradas — ver k8s-operator#execdiagnostic-allowlist)"" (só defaults)
CHATCLI_OPERATOR_APP_VERSIONInjetado pelo Helm chart a partir de .Chart.AppVersion. O operator usa para resolver a tag da imagem do servidor quando Instance.spec.image.tag é omitido — permite que helm upgrade do operator role também as Instances. Não definir manualmente.Setado pelo chart
CHATCLI_LOG_SCRUB_PATTERNSPadrões para limpar dos logs (regex separados por ;)Padrões internos

OAuth

VariávelDescriçãoPadrão
CHATCLI_OPENAI_CLIENT_IDSobrescrever client ID do OAuth da OpenAI

Servidor Remoto

VariávelDescriçãoPadrão
CHATCLI_SERVER_PORTPorta do servidor gRPC50051
CHATCLI_SERVER_TOKENToken de autenticação
CHATCLI_SERVER_TLS_CERTCaminho do certificado TLS
CHATCLI_SERVER_TLS_KEYCaminho da chave TLS

Cliente Remoto

VariávelDescriçãoPadrão
CHATCLI_REMOTE_ADDREndereço do servidor remoto
CHATCLI_REMOTE_TOKENToken de autenticação
CHATCLI_CLIENT_API_KEYSua API key (enviada ao servidor)

Chat Gateway (Telegram / Slack / Discord / WhatsApp / Webhook)

Ponte que expõe o ChatCLI como bot/serviço em plataformas de mensagem. Acionada por /gateway start. Cada adaptador só liga quando suas variáveis obrigatórias estão presentes — defina apenas os canais que quiser. Ver Chat Gateway.

Telegram

VariávelDescriçãoPadrão
CHATCLI_TELEGRAM_BOT_TOKENToken do bot (BotFather). Obrigatório para ativar o adaptador Telegram (long-polling via getUpdates).
CHATCLI_TELEGRAM_ALLOWED_USERSLista de user IDs autorizados, separados por vírgula/espaço/;. Vazio = qualquer usuário.— (todos)

Slack

VariávelDescriçãoPadrão
CHATCLI_SLACK_BOT_TOKENBot token (xoxb-…) usado para responder. Obrigatório.
CHATCLI_SLACK_ADDREndereço de bind do servidor HTTP de eventos (ex.: :8081). Obrigatório — o adaptador só liga quando definido.
CHATCLI_SLACK_SIGNING_SECRETSigning secret para verificar a assinatura HMAC dos eventos (Events API).
CHATCLI_SLACK_PATHPath do endpoint de eventos./slack/events

Discord

VariávelDescriçãoPadrão
CHATCLI_DISCORD_BOT_TOKENBot token. Obrigatório para ativar o adaptador Discord (Gateway WebSocket v10).

WhatsApp (Cloud API)

VariávelDescriçãoPadrão
CHATCLI_WHATSAPP_ACCESS_TOKENAccess token da WhatsApp Cloud API. Obrigatório.
CHATCLI_WHATSAPP_PHONE_IDPhone number ID usado para enviar respostas. Obrigatório.
CHATCLI_WHATSAPP_ADDREndereço de bind do servidor de webhook (ex.: :8082). Obrigatório.
CHATCLI_WHATSAPP_VERIFY_TOKENToken de verificação do webhook (handshake GET da Meta).
CHATCLI_WHATSAPP_PATHPath do webhook./whatsapp/webhook

Webhook genérico

VariávelDescriçãoPadrão
CHATCLI_WEBHOOK_ADDREndereço de bind do servidor de webhook genérico (ex.: :8083). Obrigatório — o adaptador só liga quando definido.
CHATCLI_WEBHOOK_PATHPath que recebe os POSTs de entrada./inbound
CHATCLI_WEBHOOK_SECRETSegredo compartilhado, validado em tempo constante. Vazio = sem verificação.
CHATCLI_WEBHOOK_CALLBACK_URLURL para onde a resposta é enviada de volta via POST. Vazio = resposta síncrona na própria requisição.

Voz / transcrição (áudio nos canais)

Transcreve notas de voz para texto antes do pipeline. Seleção local-first: comando → URL self-hosted → whisper CLI no PATH (auto, baixa o modelo) → Groq → OpenAI → desabilitado. Ver Chat Gateway → Mensagens de voz.
VariávelDescriçãoPadrão
CHATCLI_TRANSCRIPTION_PROVIDERFixa o backend STT: embedded, command, url, groq, openai (ou auto). No auto, sem nada configurado, cai no Whisper embarcado (download único no startup do daemon).auto
CHATCLI_TRANSCRIPTION_CMDComando STT local (placeholders {input}/{output_dir}/{lang}); lê o transcript do stdout ou do .txt gerado.
CHATCLI_TRANSCRIPTION_URLEndpoint OpenAI-compatível self-hosted (/v1). Keyless.
CHATCLI_TRANSCRIPTION_KEYChave opcional para o endpoint self-hosted.
CHATCLI_TRANSCRIPTION_MODELModelo (embarcado: tiny/base/small/medium/large-v3; cloud: ex. whisper-1; whisper local: base/small).whisper-1 (cloud) / base (embarcado)
CHATCLI_TRANSCRIPTION_LANGIdioma forçado; vazio = auto-detecta o idioma falado.(auto)
CHATCLI_TRANSCRIPTION_CACHE_DIRRealoca o cache do motor embarcado (path absoluto; default ~/.cache/chatcli/stt/).(os cache dir)
CHATCLI_GATEWAY_MAX_AUDIO_BYTESTamanho máximo do áudio baixado.20971520 (20MB)
Notas de voz são OGG/Opus; o whisper.cpp local e o motor embarcado precisam de ffmpeg para decodificá-las (backends cloud/self-hosted decodificam no servidor). Sem nada configurado, o gateway usa o Whisper embarcado automaticamente — só plataformas sem engine prebuilt recebem a dica de configuração.

Mensagens proativas (@send)

Canais padrão para o tool @send quando o destino é só a plataforma.
VariávelDescriçãoPadrão
CHATCLI_TELEGRAM_HOME_CHANNELCanal padrão do Telegram.
CHATCLI_WHATSAPP_HOME_CHANNELCanal padrão do WhatsApp.
CHATCLI_DISCORD_HOME_CHANNELCanal padrão do Discord.
CHATCLI_SLACK_HOME_CHANNELCanal padrão do Slack.
CHATCLI_WEBHOOK_HOME_CHANNELAlvo padrão do webhook.

Resposta em voz / TTS

Sintetiza a resposta em áudio. Seleção local-first: comando → URL self-hosted → embarcado (se provisionado)say/espeak no PATH → OpenAI → Groq → Gemini → desabilitado. Ver Text-to-Speech e Respostas em Voz.
VariávelDescriçãoPadrão
CHATCLI_GATEWAY_VOICE_REPLYModo de resposta em voz do gateway: auto (voz responde voz), always, never. Booleanos legados valem (true→always, false→never).auto
CHATCLI_TTS_PROVIDERFixa o backend: embedded (ou kokoro)/command/url/openai/groq/google (ou auto).auto
CHATCLI_TTS_CMDComando TTS local (placeholders {text}/{output}). Keyless.
CHATCLI_TTS_CMD_EXTExtensão de saída do CHATCLI_TTS_CMD.wav
CHATCLI_TTS_URLEndpoint OpenAI-compatível (/audio/speech).
CHATCLI_TTS_KEYChave opcional do endpoint self-hosted.
CHATCLI_TTS_MODELModelo TTS.tts-1
CHATCLI_TTS_VOICEVoz (depende do backend). No embarcado: voz para inglês.alloy (embarcado: bm_george)
CHATCLI_TTS_VOICE_PTVoz do motor embarcado para respostas em português.pm_alex
CHATCLI_TTS_CACHE_DIRRealoca o cache do motor embarcado (engine + modelo). Caminho absoluto.cache do SO
CHATCLI_TTS_VOICE_FORMATFormato pedido na resposta do gateway (ogg = voice note no Telegram).ogg

Geração de imagem (@image)

Gera imagens a partir de texto. Local-first: SD WebUI → URL OpenAI-compatível → OpenAI → Google Imagen → xAI grok-image → Bedrock. Ver Geração de Imagem.
VariávelDescriçãoPadrão
CHATCLI_IMAGE_PROVIDERFixa o backend: sdwebui/url/openai/responses/google/xai/bedrock (ou auto).auto
CHATCLI_IMAGE_APINo OpenAI: images (gpt-image-*) ou responses (modelo de chat como gpt-5.5 gera via tool image_generation).images
CHATCLI_IMAGE_URLSD WebUI (http://localhost:7860) ou endpoint OpenAI-compatível.
CHATCLI_IMAGE_KEYChave opcional do endpoint self-hosted.
CHATCLI_IMAGE_MODELModelo (ex.: gpt-image-1, gpt-5.5, grok-2-image, imagen-3.0-generate-002, amazon.nova-canvas-v1:0).gpt-image-1
CHATCLI_IMAGE_STEPSPassos de sampling (SD WebUI).25
xAI (imagem) e Groq (voz) usam suas chaves padrão (XAI_API_KEY, GROQ_API_KEY); Google usa GOOGLEAI_API_KEY/GEMINI_API_KEY; Bedrock usa a mesma cadeia AWS do provider de chat (BEDROCK_REGION/AWS_REGION, BEDROCK_PROFILE/AWS_PROFILE). Os tools @osv, @session e @skill não exigem variáveis. Use @image models ou /config image para ver/trocar backend e modelo em runtime.

Conversation Hub (Continuidade Cross-Channel)

Faz a conversa atravessar canais: um assunto começado no Telegram/Slack/WhatsApp continua no chatcli do notebook (e vice-versa), até /newsession. É uma ponte do momento com banco limitado — não é memória de longo prazo (isso fica em /memory e /session). Ver Conversation Hub. Todas as opções abaixo também podem ser ajustadas em runtime por comando (/config hub set <chave> <valor>), com precedência: setting (no hub.db) > variável de ambiente > default. O valor definido por comando persiste no banco e é lido ao vivo pelo daemon do gateway.
VariávelDescriçãoPadrão
CHATCLI_HUB_PRINCIPALIdentidade compartilhada da conversa (modo single-user). Sem ela, usa default — o CLI local e os remetentes não-vinculados do gateway colapsam nesse principal, então tudo funciona sem configurar nada.default
CHATCLI_HUB_ENABLEDLiga o hub. false desativa (CLI local “começa limpo” e gateway sem continuidade).true
CHATCLI_HUB_ISOLATEBot multi-usuário/público: true mantém cada identidade de canal em sua própria conversa (um usuário não vê o thread de outro). Off no padrão single-user.false
CHATCLI_HUB_TTL_HOURSHoras até uma conversa ociosa ser podada (PurgeIdle roda ao abrir CLI/gateway). 0 desativa a purga.24
CHATCLI_HUB_BINDINGSVínculos explícitos plataforma:user_id=principal, separados por ;/, (ex.: telegram:123=alice;slack:U1=alice). Tem precedência sobre o colapso single-user.
CHATCLI_HUB_DBCaminho do banco SQLite (WAL) do hub.~/.chatcli/hub.db
CHATCLI_HUB_TAIL_BUFFERTamanho do buffer de fan-out (live tail) por subscriber no servidor gRPC.256
CHATCLI_GATEWAY_IN_SERVERtrue roda o gateway dentro do processo do servidor (chatcli server), compartilhando o mesmo broker em memória — habilita push em tempo real para um CLI conectado (cross-process só sincroniza ao conectar/no próximo turno).false
Para “rodar o chatcli + o gateway na mesma máquina e compartilharem contexto”: basta o CHATCLI_HUB_PRINCIPAL (ou o default) — nenhum binding é necessário. Para bot multi-usuário, ligue CHATCLI_HUB_ISOLATE=true e use CHATCLI_HUB_BINDINGS para mapear quem é quem.

LSP (Language Server Protocol — diagnósticos)

Diagnósticos de código (erros/avisos do compilador/linter) para um arquivo, via servidores LSP. Acionado manualmente pelo comando /lsp <arquivo>. Cada variável sobrescreve o comando usado para iniciar o language server da linguagem; quando omitida, o ChatCLI usa o preset padrão (se o binário estiver no PATH). Ver Diagnósticos LSP.
VariávelDescriçãoPadrão (preset)
CHATCLI_LSP_GO_CMDComando do language server de Go.gopls
CHATCLI_LSP_PYTHON_CMDComando do language server de Python.pyright-langserver --stdio
CHATCLI_LSP_TS_CMDComando do language server de TypeScript/JavaScript.typescript-language-server --stdio
CHATCLI_LSP_RUST_CMDComando do language server de Rust.rust-analyzer
CHATCLI_LSP_C_CMDComando do language server de C.clangd
CHATCLI_LSP_CPP_CMDComando do language server de C++.clangd
CHATCLI_LSP_JAVA_CMDComando do language server de Java.jdtls
CHATCLI_LSP_RUBY_CMDComando do language server de Ruby.solargraph stdio

Busca Web (WebSearch)

VariávelDescriçãoPadrão
CHATCLI_WEBSEARCH_PROVIDERForça o backend preferido para @websearch / /websearch: searxng, duckduckgo, brave, mojeek ou auto.auto
SEARXNG_URLURL raiz da instância SearxNG self-hosted (ex.: https://searx.internal.corp). Quando setada, SearxNG entra na cadeia de fallback.
Os backends são keyless por design: DuckDuckGo (scraping HTML, default) + SearxNG (self-hosted via SEARXNG_URL). Veja Web Tools para a cadeia de fallback.

K8s Watcher

VariávelDescriçãoPadrão
CHATCLI_WATCH_DEPLOYMENTDeployment único (legado)
CHATCLI_WATCH_NAMESPACENamespace do deploymentdefault
CHATCLI_WATCH_INTERVALIntervalo de coleta30s
CHATCLI_WATCH_WINDOWJanela de observação2h
CHATCLI_WATCH_MAX_LOG_LINESMáximo de linhas de log por pod100
CHATCLI_WATCH_CONFIGCaminho para config YAML multi-target
CHATCLI_KUBECONFIGCaminho do kubeconfigAuto-detectado

Exemplo completo de .env

# Geral
LOG_LEVEL=info
CHATCLI_LANG=pt-BR
ENV=prod
LLM_PROVIDER=CLAUDEAI

# Provedor principal
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxxxxxx
ANTHROPIC_MODEL=claude-sonnet-4-6
ANTHROPIC_MAX_TOKENS=20000

# Fallback
CHATCLI_FALLBACK_PROVIDERS=CLAUDEAI,OPENAI,GOOGLEAI
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
GOOGLEAI_API_KEY=AIzaxxxxxxxxxxxxxxxxxxxxxxxx

# ZAI (Zhipu AI) — opcional
# ZAI_API_KEY=xxx
# ZAI_MODEL=glm-5

# MiniMax — opcional
# MINIMAX_API_KEY=xxx
# MINIMAX_MODEL=MiniMax-M2.7
# MINIMAX_API_COMPAT=anthropic  # usar endpoint Anthropic-compatível

# Moonshot (Kimi) — opcional
# MOONSHOT_API_KEY=sk-xxx
# MOONSHOT_MODEL=kimi-k2.6
# MOONSHOT_THINKING=auto  # auto | enabled | disabled

# OpenRouter — opcional (gateway multi-provedor, 200+ modelos)
# OPENROUTER_API_KEY=sk-or-xxx
# OPENROUTER_FALLBACK_MODELS=anthropic/claude-sonnet-4,google/gemini-2.5-flash

# Agente
CHATCLI_AGENT_CMD_TIMEOUT=2m
CHATCLI_AGENT_ALLOW_SUDO=false

# Multi-Agent
CHATCLI_AGENT_PARALLEL_MODE=true
CHATCLI_AGENT_MAX_WORKERS=4

# Bootstrap e Memória
CHATCLI_BOOTSTRAP_ENABLED=true
CHATCLI_MEMORY_ENABLED=true

# Efeito de escrita (typewriter adaptativo) — descomente para ajustar
# CHATCLI_NO_TYPEWRITER=1               # desliga inteiramente (resposta instantânea)
# CHATCLI_TYPEWRITER_BUDGET_MS=400      # orçamento total da animação em ms (default 800)
# CHATCLI_TYPEWRITER_DELAY_MS=4         # delay por runa em ms (default 2)

# Proxy corporativo — descomente e ajuste se seu ambiente capa body size
# CHATCLI_MAX_PAYLOAD=5MB
# CHATCLI_BLOCK_TMP_WRITES=true   # sandbox estrito, bloqueia /tmp no allowlist

# Inspeção TLS corporativa (CA privada) — global, vale pra todos os providers e tools
# CHATCLI_CA_BUNDLE=/etc/ssl/corp-ca-bundle.pem
# CHATCLI_TLS_INSECURE_SKIP_VERIFY=true   # INSEGURO — só pra diagnóstico, nunca produção

# Janela de contexto — descomente se a janela real do seu gateway/agente difere do catálogo
# CHATCLI_CONTEXT_WINDOW=128000

# Busca web — descomente se quiser SearxNG self-hosted como preferido
# SEARXNG_URL=https://searx.internal.corp
# CHATCLI_WEBSEARCH_PROVIDER=searxng   # opcional, default é "auto" (DDG primeiro)

# Mixture-of-Agents (/moa) — descomente para habilitar o ensemble
# CHATCLI_MOA_MODELS=openai:gpt-5,claudeai:claude-opus-4-8,googleai:gemini-2.5-pro
# CHATCLI_MOA_AGGREGATOR=claudeai:claude-opus-4-8

# Chat Gateway (/gateway start) — descomente apenas os canais que usar
# CHATCLI_TELEGRAM_BOT_TOKEN=123:abc
# CHATCLI_TELEGRAM_ALLOWED_USERS=111111111,222222222
# CHATCLI_SLACK_BOT_TOKEN=xoxb-xxx
# CHATCLI_SLACK_ADDR=:8081
# CHATCLI_SLACK_SIGNING_SECRET=xxxx
# CHATCLI_DISCORD_BOT_TOKEN=xxxx
# CHATCLI_WHATSAPP_ACCESS_TOKEN=xxxx
# CHATCLI_WHATSAPP_PHONE_ID=123456
# CHATCLI_WHATSAPP_ADDR=:8082
# CHATCLI_WHATSAPP_VERIFY_TOKEN=meu-verify
# CHATCLI_WEBHOOK_ADDR=:8083
# CHATCLI_WEBHOOK_SECRET=supersegredo
# CHATCLI_WEBHOOK_CALLBACK_URL=https://meuapp.example/callback

# Conversation Hub (continuidade cross-channel) — ligado por padrão
# CHATCLI_HUB_PRINCIPAL=edilson      # identidade compartilhada (default: "default")
# CHATCLI_HUB_ISOLATE=true           # bot multi-usuário: isola cada canal
# CHATCLI_HUB_TTL_HOURS=24           # poda conversas ociosas (0 desativa)
# CHATCLI_HUB_BINDINGS=telegram:123=edilson;slack:U1=edilson
# CHATCLI_GATEWAY_IN_SERVER=true     # gateway no processo do server (push tempo real)
# CHATCLI_HUB_ENABLED=false          # desliga o hub por completo

# LSP (/lsp) — descomente só se precisar sobrescrever o comando default
# CHATCLI_LSP_GO_CMD=gopls -rpc.trace
# CHATCLI_LSP_PYTHON_CMD=pyright-langserver --stdio

# Segurança de contexto/memória e guarda de tool — on por default
# CHATCLI_THREATSCAN=false           # desliga o scan de prompt-injection em contexto/memória
# CHATCLI_AGENT_TOOLGUARD=false      # desliga o aviso de falhas repetidas de tool