Pular para o conteúdo principal

Documentação oficial desta página · v0.20.6

Referência de Variáveis de Ambiente

O Hermes lê variáveis de ambiente do ambiente do processo e, no caso dos segredos gerenciados por você, de ~/.hermes/.env. Guarde chaves de API, tokens de bot, segredos de OAuth e outras credenciais no .env; prefira o config.yaml para ajustes de comportamento que não são segredos, sempre que existir uma chave de configuração equivalente. Algumas variáveis abaixo são sobrescritas só de processo ou variáveis internas de ponte, e não devem ir para o .env só porque estão documentadas aqui.

Provedores de LLM​

VariávelDescrição
OPENROUTER_API_KEYChave de API do OpenRouter (recomendada pela flexibilidade)
OPENROUTER_BASE_URLSobrescreve a URL base compatível com OpenRouter
FIREWORKS_API_KEYChave de API da Fireworks AI (app.fireworks.ai). Configure sobrescritas de endpoint com model.base_url no config.yaml.
HERMES_OPENROUTER_CACHEAtiva o cache de respostas do OpenRouter (1/true/yes/on). Sobrescreve openrouter.response_cache no config.yaml. Veja Response Caching.
HERMES_OPENROUTER_CACHE_TTLTTL do cache em segundos (1-86400). Sobrescreve openrouter.response_cache_ttl no config.yaml.
NOUS_BASE_URLSobrescreve a URL base do Nous Portal (raramente necessário; só para desenvolvimento/teste)
NOUS_INFERENCE_BASE_URLSobrescreve diretamente o endpoint de inferência da Nous
AI_GATEWAY_API_KEYChave de API do Vercel AI Gateway (ai-gateway.vercel.sh)
AI_GATEWAY_BASE_URLSobrescreve a URL base do AI Gateway (padrão: https://ai-gateway.vercel.sh/v1)
OPENAI_API_KEYChave de API para endpoints compatíveis com OpenAI (usada junto de OPENAI_BASE_URL)
OPENAI_BASE_URLURL base do endpoint personalizado (VLLM, SGLang etc.)
LM_API_KEYChave de API do LM Studio (provedor lmstudio). Costuma ser um valor de preenchimento em servidores locais
LM_BASE_URLURL base do LM Studio (padrão: http://localhost:1234/v1)
COPILOT_GITHUB_TOKENToken do GitHub para a API do Copilot — prioridade máxima (OAuth gho_* ou PAT de escopo fino github_pat_*; PATs clássicos ghp_* não são suportados)
GH_TOKENToken do GitHub — segunda prioridade para o Copilot (também usado pela CLI gh)
GITHUB_TOKENToken do GitHub — terceira prioridade para o Copilot
HERMES_COPILOT_ACP_COMMANDSobrescreve o caminho do binário da CLI ACP do Copilot (padrão: copilot)
COPILOT_CLI_PATHApelido de HERMES_COPILOT_ACP_COMMAND
HERMES_COPILOT_ACP_ARGSSobrescreve os argumentos ACP do Copilot (padrão: --acp --stdio)
COPILOT_ACP_BASE_URLSobrescreve a URL base do ACP do Copilot
COPILOT_API_BASE_URLSobrescreve a URL base da API do Copilot (provedor copilot)
GLM_API_KEYChave de API GLM da z.ai / ZhipuAI (z.ai)
ZAI_API_KEYApelido de GLM_API_KEY
Z_AI_API_KEYApelido de GLM_API_KEY
GLM_BASE_URLSobrescreve a URL base da z.ai (padrão: https://api.z.ai/api/paas/v4)
KIMI_API_KEYChave de API da Kimi / Moonshot AI (moonshot.ai)
KIMI_CODING_API_KEYChave alternativa para o provedor kimi-coding (aceita junto de KIMI_API_KEY)
KIMI_BASE_URLSobrescreve a URL base da Kimi (padrão: https://api.moonshot.ai/v1)
KIMI_CN_API_KEYChave de API da Kimi / Moonshot na China (moonshot.cn)
ARCEEAI_API_KEYChave de API da Arcee AI (chat.arcee.ai)
ARCEE_BASE_URLSobrescreve a URL base da Arcee (padrão: https://api.arcee.ai/api/v1)
GMI_API_KEYChave de API da GMI Cloud (gmicloud.ai)
GMI_BASE_URLSobrescreve a URL base da GMI Cloud (padrão: https://api.gmi-serving.com/v1)
ACTUAL_API_KEYChave de inferência da Actual Computer (ac_..., actual.inc/user/keys). Não é necessária para o daemon local.
ACTUAL_BASE_URLSobrescreve a URL base da Actual Computer (padrão: https://api.actual.inc/v1). Aponte para http://127.0.0.1:8080 no daemon local offline — hosts de loopback dispensam chave de API.
MINIMAX_API_KEYChave de API da MiniMax — endpoint global (minimax.io). Não é usada pelo minimax-oauth (o caminho OAuth usa login pelo navegador).
MINIMAX_BASE_URLSobrescreve a URL base da MiniMax (padrão: https://api.minimax.io/anthropic — o Hermes usa o endpoint da MiniMax compatível com o Anthropic Messages). Não é usada pelo minimax-oauth.
MINIMAX_CN_API_KEYChave de API da MiniMax — endpoint da China (minimaxi.com). Não é usada pelo minimax-oauth (o caminho OAuth usa login pelo navegador).
MINIMAX_CN_BASE_URLSobrescreve a URL base da MiniMax na China (padrão: https://api.minimaxi.com/anthropic). Não é usada pelo minimax-oauth.
KILOCODE_API_KEYChave de API do Kilo Code (kilo.ai)
KILOCODE_BASE_URLSobrescreve a URL base do Kilo Code (padrão: https://api.kilo.ai/api/gateway)
XIAOMI_API_KEYChave de API do Xiaomi MiMo (platform.xiaomimimo.com)
XIAOMI_BASE_URLSobrescreve a URL base do Xiaomi MiMo (padrão: https://api.xiaomimimo.com/v1)
UPSTAGE_API_KEYChave de API da Upstage para os modelos Solar (console.upstage.ai)
UPSTAGE_BASE_URLSobrescreve a URL base da Upstage (padrão: https://api.upstage.ai/v1)
TOKENHUB_API_KEYChave de API do TokenHub da Tencent (tokenhub.tencentmaas.com)
TOKENHUB_BASE_URLSobrescreve a URL base do TokenHub da Tencent (padrão: https://tokenhub.tencentmaas.com/v1)
AZURE_FOUNDRY_API_KEYChave de API do Microsoft Foundry / Azure OpenAI (ai.azure.com). Dispensável quando model.auth_mode: entra_id
AZURE_FOUNDRY_BASE_URLURL do endpoint do Microsoft Foundry (por exemplo https://<resource>.openai.azure.com/openai/v1 no estilo OpenAI, ou https://<resource>.services.ai.azure.com/anthropic no estilo Anthropic)
AZURE_ANTHROPIC_KEYChave de API Anthropic no Azure para provider: anthropic + base_url apontando para uma implantação Claude no Microsoft Foundry (alternativa a ANTHROPIC_API_KEY quando Anthropic e Azure Anthropic estão configurados ao mesmo tempo)
AZURE_TENANT_IDID do tenant no Entra ID (fluxos de service principal; respeitado pelo azure-identity quando model.auth_mode: entra_id)
AZURE_CLIENT_IDID de cliente no Entra ID (service principal, workload identity ou identidade gerenciada atribuída pelo usuário)
AZURE_CLIENT_SECRETSegredo do service principal usado pelo EnvironmentCredential
AZURE_CLIENT_CERTIFICATE_PATHCertificado do service principal (alternativa a AZURE_CLIENT_SECRET)
AZURE_FEDERATED_TOKEN_FILECaminho do arquivo de token federado para fluxos de AKS Workload Identity / OIDC
AZURE_AUTHORITY_HOSTSobrescrita de autoridade para nuvens soberanas (por exemplo https://login.microsoftonline.us no Azure Government). Veja o guia do Azure Foundry
IDENTITY_ENDPOINT / MSI_ENDPOINTEndpoint de Managed Identity para App Service, Functions e Container Apps; VMs normalmente usam o IMDS e não definem estas variáveis
HF_TOKENToken do Hugging Face para os Inference Providers (huggingface.co/settings/tokens)
HF_BASE_URLSobrescreve a URL base do Hugging Face (padrão: https://router.huggingface.co/v1)
GOOGLE_API_KEYChave de API do Google AI Studio (aistudio.google.com/app/apikey)
GEMINI_API_KEYApelido de GOOGLE_API_KEY
GEMINI_BASE_URLSobrescreve a URL base do Google AI Studio
VERTEX_CREDENTIALS_PATHCaminho para um JSON de conta de serviço do Google Cloud para o Vertex AI (Gemini). O Vertex usa OAuth2, não uma chave de API estática. Cai para GOOGLE_APPLICATION_CREDENTIALS e depois para o ADC (gcloud auth application-default login). Defina projeto/região sob vertex: no config.yaml
ANTHROPIC_API_KEYChave de API do Anthropic Console (console.anthropic.com)
ANTHROPIC_BASE_URLSobrescreve a URL base da API da Anthropic
ANTHROPIC_TOKENSobrescrita manual ou legada de token OAuth/setup da Anthropic
DASHSCOPE_API_KEYChave de API do Qwen Cloud (Alibaba DashScope) para os modelos Qwen (modelstudio.console.alibabacloud.com)
DASHSCOPE_BASE_URLURL base personalizada do DashScope (padrão: https://dashscope-intl.aliyuncs.com/compatible-mode/v1; use https://dashscope.aliyuncs.com/compatible-mode/v1 para a região da China continental)
ALIBABA_CODING_PLAN_API_KEYChave de API do Qwen Coding Plan (provedor alibaba-coding-plan)
ALIBABA_CODING_PLAN_BASE_URLSobrescreve a URL base do Qwen Coding Plan
DEEPSEEK_API_KEYChave de API da DeepSeek para acesso direto (platform.deepseek.com)
DEEPSEEK_BASE_URLURL base personalizada da API da DeepSeek
DEEPINFRA_API_KEYChave de API da DeepInfra (deepinfra.com)
DEEPINFRA_BASE_URLSobrescreve a URL base da DeepInfra
NOVITA_API_KEYChave de API da NovitaAI — nuvem nativa de IA para Model API, Agent Sandbox e GPU Cloud (novita.ai/settings/key-management)
NOVITA_BASE_URLSobrescreve a URL base da NovitaAI (padrão: https://api.novita.ai/openai/v1)
NVIDIA_API_KEYChave de API do NVIDIA NIM — Nemotron e modelos abertos (build.nvidia.com)
NVIDIA_BASE_URLSobrescreve a URL base da NVIDIA (padrão: https://integrate.api.nvidia.com/v1; aponte para http://localhost:8000/v1 em um endpoint NIM local)
STEPFUN_API_KEYChave de API da StepFun — modelos da série Step (platform.stepfun.com)
STEPFUN_BASE_URLSobrescreve a URL base da StepFun (padrão: https://api.stepfun.com/v1)
OLLAMA_API_KEYChave de API do Ollama Cloud — catálogo gerenciado do Ollama sem GPU local (ollama.com/settings/keys)
OLLAMA_BASE_URLSobrescreve a URL base do Ollama Cloud (padrão: https://ollama.com/v1)
XAI_API_KEYChave de API da xAI (Grok) para chat + TTS + busca na web (console.x.ai)
XAI_BASE_URLSobrescreve a URL base da xAI (padrão: https://api.x.ai/v1)
MISTRAL_API_KEYChave de API da Mistral para Voxtral TTS e Voxtral STT (console.mistral.ai)
AWS_REGIONRegião AWS para inferência no Bedrock (por exemplo us-east-1, eu-central-1). Lida pelo boto3.
AWS_PROFILEPerfil nomeado da AWS para autenticação no Bedrock (lê ~/.aws/credentials). Deixe em branco para usar a cadeia de credenciais padrão do boto3.
BEDROCK_BASE_URLSobrescreve a URL base do runtime do Bedrock (padrão: https://bedrock-runtime.us-east-1.amazonaws.com; em geral deixe em branco e use AWS_REGION)
HERMES_QWEN_BASE_URLSobrescreve a URL base do Qwen Portal (padrão: https://portal.qwen.ai/v1)
OPENCODE_ZEN_API_KEYChave de API do OpenCode Zen — acesso pré-pago a modelos curados (opencode.ai)
OPENCODE_ZEN_BASE_URLSobrescreve a URL base do OpenCode Zen
OPENCODE_GO_API_KEYChave de API do OpenCode Go — assinatura de US$ 10/mês para modelos abertos (opencode.ai)
OPENCODE_GO_BASE_URLSobrescreve a URL base do OpenCode Go
CLAUDE_CODE_OAUTH_TOKENSobrescrita explícita do token do Claude Code, se você exportar um manualmente
HERMES_MODELSobrescreve o nome do modelo no nível do processo (usado pelo agendador do cron; prefira o config.yaml no uso normal)
VOICE_TOOLS_OPENAI_KEYChave OpenAI preferida para os provedores OpenAI de fala-para-texto e texto-para-fala
HERMES_LOCAL_STT_COMMANDModelo de comando local opcional para fala-para-texto. Aceita os marcadores {input_path}, {output_dir}, {language} e {model}
HERMES_LOCAL_STT_LANGUAGEIdioma padrão sugerido para o STT. Usado pelo provedor local (faster-whisper), por HERMES_LOCAL_STT_COMMAND, pela CLI whisper local de reserva (padrão: en), pela Groq e pela xAI quando nenhum language por provedor está definido no config.yaml
HERMES_HOMESobrescreve o diretório de configuração do Hermes (padrão: ~/.hermes). Também dá escopo ao arquivo de PID do gateway e ao nome do serviço systemd, então várias instalações podem rodar ao mesmo tempo
HERMES_GIT_BASH_PATHSó no Windows. Sobrescreve a descoberta do bash.exe para a ferramenta de terminal. Aponta para qualquer bash — instalação completa do Git para Windows, bash do WSL via link simbólico, MSYS2, Cygwin. O instalador define isso automaticamente para o PortableGit que ele provisionou. Veja o guia do Windows (nativo)
HERMES_DISABLE_WINDOWS_UTF8Só no Windows. Defina como 1 para desativar o shim de stdio em UTF-8 (configure_windows_stdio()) e voltar à página de código do locale do console. Útil para isolar bugs de codificação; raramente é o ajuste certo na operação normal
HERMES_KANBAN_HOMESobrescreve a raiz compartilhada do Hermes que ancora o quadro kanban (banco + espaços de trabalho + logs dos workers). Cai para get_default_hermes_root() (o diretório-pai de qualquer perfil ativo). Útil em testes e implantações fora do comum
HERMES_KANBAN_BOARDFixa o quadro kanban ativo para este processo. Tem precedência sobre ~/.hermes/kanban/current; o dispatcher injeta isso no ambiente dos subprocessos worker, então os workers fisicamente não conseguem ver tarefas de outros quadros. O padrão é default. Validação do slug: minúsculas alfanuméricas + hifens + sublinhados, de 1 a 64 caracteres
HERMES_KANBAN_DBFixa diretamente o caminho do arquivo de banco do kanban (precedência máxima; ganha de HERMES_KANBAN_BOARD e HERMES_KANBAN_HOME). O dispatcher injeta isso no ambiente dos subprocessos worker, para que os workers de perfil convirjam no quadro do dispatcher
HERMES_KANBAN_WORKSPACES_ROOTFixa diretamente a raiz dos espaços de trabalho do kanban (precedência máxima para espaços de trabalho; ganha de HERMES_KANBAN_HOME). O dispatcher injeta isso no ambiente dos subprocessos worker
HERMES_KANBAN_DISPATCH_IN_GATEWAYSobrescrita em tempo de execução de kanban.dispatch_in_gateway. Use 0, false, no ou off para impedir que o gateway inicie o dispatcher embutido do Kanban; qualquer outro valor não vazio ativa. Útil quando um processo dispatcher separado é dono do quadro.

Autenticação de provedor (OAuth)​

Na autenticação nativa da Anthropic, o Hermes prefere os próprios arquivos de credencial do Claude Code quando eles existem, porque essas credenciais se renovam sozinhas. O OAuth com a Anthropic exige um plano Claude Max com créditos extras de uso comprados — o Hermes roteia como Claude Code, que só consome os créditos extras/excedentes do plano Max, não a cota base do Max, e não funciona no Claude Pro. Sem o Max + créditos extras, use uma chave de API. Variáveis de ambiente como ANTHROPIC_TOKEN continuam úteis como sobrescritas manuais, mas já não são o caminho preferido para o login do Claude Max.

VariávelDescrição
HERMES_PORTAL_BASE_URLSobrescreve a URL do Nous Portal (para desenvolvimento/teste)
NOUS_INFERENCE_BASE_URLSobrescreve a URL da API de inferência da Nous
HERMES_NOUS_MIN_KEY_TTL_SECONDSTTL mínimo da chave do agente antes de emitir outra (padrão: 1800 = 30min)
HERMES_NOUS_TIMEOUT_SECONDSTempo limite HTTP para os fluxos de credencial / token da Nous
HERMES_DUMP_REQUESTSDespeja os payloads de requisição da API em arquivos de log (true/false)
HERMES_PREFILL_MESSAGES_FILECaminho para um arquivo JSON com mensagens efêmeras de preenchimento injetadas na hora da chamada de API
HERMES_TIMEZONESobrescreve o fuso horário IANA (por exemplo America/Sao_Paulo)

APIs de ferramentas​

VariávelDescrição
PARALLEL_API_KEYBusca na web nativa de IA (parallel.ai)
FIRECRAWL_API_KEYRaspagem de web e navegador na nuvem (firecrawl.dev)
FIRECRAWL_API_URLEndpoint personalizado da API do Firecrawl para instâncias auto-hospedadas (opcional)
TAVILY_API_KEYChave de API opcional do Tavily para limites maiores de busca/extração. Depois de escolher o Tavily como backend de web, o acesso sem chave funciona sem ela (app.tavily.com, documentação sem chave)
SEARXNG_URLURL de uma instância SearXNG para busca na web auto-hospedada e gratuita — não exige chave de API (searxng.github.io)
TAVILY_BASE_URLSobrescreve o endpoint da API do Tavily. Útil em proxies corporativos e em backends de busca auto-hospedados compatíveis com o Tavily. Mesmo padrão de GROQ_BASE_URL.
EXA_API_KEYChave de API da Exa para busca na web e conteúdos nativos de IA (exa.ai)
BRAVE_SEARCH_API_KEYToken de assinatura da API do Brave Search para busca na web (há camada gratuita) (brave.com/search/api)
BROWSERBASE_API_KEYAutomação de navegador (browserbase.com)
BROWSERBASE_PROJECT_IDID do projeto no Browserbase
BROWSER_USE_API_KEYChave de API do navegador na nuvem do Browser Use (browser-use.com)
FIRECRAWL_BROWSER_TTLTTL da sessão de navegador do Firecrawl em segundos (padrão: 300)
BROWSER_CDP_URLURL do Chrome DevTools Protocol para o navegador local (definida por /browser connect, por exemplo ws://localhost:9222)
CAMOFOX_URLEndereço do servidor local do navegador anti-detecção Camofox (padrão: http://localhost:9377). Só o endereço — não seleciona o Camofox como backend; escolha o Camofox em hermes tools (browser.cloud_provider: camofox)
CAMOFOX_API_KEYToken bearer opcional enviado no cabeçalho Authorization para um servidor Camofox remoto/autenticado
CAMOFOX_USER_IDID de usuário Camofox gerenciado externamente, opcional, para sessões visíveis compartilhadas
CAMOFOX_SESSION_KEYChave de sessão opcional do Camofox usada ao criar abas para CAMOFOX_USER_ID
CAMOFOX_ADOPT_EXISTING_TABDefina como true para reaproveitar uma aba existente do Camofox antes de criar outra
BROWSER_INACTIVITY_TIMEOUTTempo limite de inatividade da sessão de navegador em segundos
AGENT_BROWSER_ARGSFlags extras de inicialização do Chromium (separadas por vírgula ou quebra de linha). O Hermes injeta --no-sandbox,--disable-dev-shm-usage automaticamente ao rodar como root ou em namespaces de usuário sem privilégio restritos pelo AppArmor (Ubuntu 23.10+, DGX Spark, muitas imagens de contêiner); defina isto manualmente só para sobrescrever ou acrescentar outras flags.
AGENT_BROWSER_ENGINEMotor de navegador no modo local: auto (padrão — família Chromium via CDP) ou uma sobrescrita de motor específica.
FAL_KEYGeração de imagem (fal.ai)
KREA_API_KEYChave de API da Krea para geração de imagem com o Krea 2 (krea.ai)
GROQ_API_KEYChave de API do Whisper STT da Groq (groq.com)
ELEVENLABS_API_KEYVozes TTS premium da ElevenLabs (elevenlabs.io)
PORCUPINE_ACCESS_KEYMotor de palavra de ativação Porcupine da Picovoice (console.picovoice.ai) — só para wake_word.provider: porcupine; os motores padrão openWakeWord e sherpa não precisam de chave
STT_GROQ_MODELSobrescreve o modelo de STT da Groq (padrão: whisper-large-v3-turbo)
GROQ_BASE_URLSobrescreve o endpoint de STT compatível com OpenAI da Groq
STT_OPENAI_MODELSobrescreve o modelo de STT da OpenAI (padrão: whisper-1)
STT_OPENAI_BASE_URLSobrescreve o endpoint de STT compatível com OpenAI
GITHUB_TOKENToken do GitHub para o Skills Hub (limites de API maiores, publicação de skills)
HONCHO_API_KEYModelagem de usuário entre sessões (honcho.dev)
HONCHO_BASE_URLURL base para instâncias auto-hospedadas do Honcho (padrão: nuvem do Honcho). Instâncias locais não exigem chave de API
HINDSIGHT_API_KEYChave de API do Hindsight para memória persistente com grafo (hindsight.vectorize.io)
HINDSIGHT_API_URLURL base da API do Hindsight (padrão: https://api.hindsight.vectorize.io)
HINDSIGHT_TIMEOUTTempo limite em segundos das chamadas de API do provedor de memória Hindsight (padrão: 60). Aumente se a sua instância do Hindsight demorar a responder durante /sync ou on_session_switch e você estiver vendo tempos esgotados no errors.log.
MEM0_API_KEYChave de API da plataforma Mem0 para memória persistente semântica (app.mem0.ai)
MEM0_MODEModo de backend do Mem0: platform (padrão) ou oss — veja Provedores de memória
MEM0_HOSTURL base de um servidor Mem0 auto-hospedado (tira o plugin da API da plataforma)
MEM0_USER_IDSobrescreve o id de usuário sob o qual as memórias do Mem0 são guardadas
MEM0_AGENT_IDSobrescreve o id de agente com que as memórias do Mem0 são marcadas
RETAINDB_API_KEYChave de API do RetainDB para memória persistente (retaindb.com)
RETAINDB_BASE_URLURL base para instâncias auto-hospedadas do RetainDB (padrão: https://api.retaindb.com)
OPENVIKING_API_KEYChave de API do OpenViking (deixe em branco no modo de desenvolvimento local)
OPENVIKING_ENDPOINTURL do servidor OpenViking (padrão: http://127.0.0.1:1933)
BRV_API_KEYChave de API do ByteRover (opcional, para sincronização na nuvem — por padrão é local-first) (app.byterover.dev)
SUPERMEMORY_API_KEYMemória semântica de longo prazo com recuperação de perfil e ingestão de sessão (supermemory.ai)
DAYTONA_API_KEYSandboxes na nuvem do Daytona (daytona.io)
VERCEL_TOKENToken de acesso do Vercel Sandbox (vercel.com)
VERCEL_PROJECT_IDID do projeto na Vercel (obrigatório junto de VERCEL_TOKEN)
VERCEL_TEAM_IDID do time na Vercel (obrigatório junto de VERCEL_TOKEN)
VERCEL_OIDC_TOKENToken OIDC de curta duração da Vercel (alternativa só para desenvolvimento)

Chaves de API de skills​

Segredos consumidos por skills específicas, embutidas ou opcionais. Cada um só é necessário se você usar a skill correspondente.

VariávelUsada pela skillDescrição
NOTION_API_KEYnotionToken de integração do Notion.
LINEAR_API_KEYlinearChave de API pessoal do Linear.
AIRTABLE_API_KEYairtableToken de acesso pessoal do Airtable.
TENOR_API_KEYgif-searchChave de API do Tenor para busca de GIFs.

Observabilidade com Langfuse​

Variáveis de ambiente do plugin embutido observability/langfuse. Defina-as em ~/.hermes/.env. O plugin também precisa estar ativado (hermes plugins enable observability/langfuse, ou marque a caixa em hermes plugins) para que qualquer uma delas tenha efeito.

VariávelDescrição
HERMES_LANGFUSE_PUBLIC_KEYChave pública do projeto Langfuse (pk-lf-...). Obrigatória.
HERMES_LANGFUSE_SECRET_KEYChave secreta do projeto Langfuse (sk-lf-...). Obrigatória.
HERMES_LANGFUSE_BASE_URLURL do servidor Langfuse (padrão: https://cloud.langfuse.com). Defina para instalações auto-hospedadas.
HERMES_LANGFUSE_ENVEtiqueta de ambiente nos traces (production, staging, …)
HERMES_LANGFUSE_RELEASEEtiqueta de release/versão nos traces
HERMES_LANGFUSE_SAMPLE_RATETaxa de amostragem do SDK, de 0.0 a 1.0 (padrão: 1.0)
HERMES_LANGFUSE_MAX_CHARSTruncamento por campo dos payloads serializados (padrão: 12000)
HERMES_LANGFUSE_DEBUGtrue ativa o log detalhado do plugin em agent.log
LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY / LANGFUSE_BASE_URLNomes padrão do SDK do Langfuse. Aceitos como reserva quando os equivalentes HERMES_LANGFUSE_* não estão definidos.

Nous Tool Gateway​

Estas variáveis configuram o Tool Gateway para assinantes pagos da Nous ou para implantações auto-hospedadas do gateway. A maioria das pessoas não precisa mexer nelas — o gateway é configurado automaticamente por hermes model ou hermes tools.

VariávelDescrição
TOOL_GATEWAY_DOMAINDomínio base do roteamento do Tool Gateway (padrão: nousresearch.com)
TOOL_GATEWAY_SCHEMEEsquema HTTP ou HTTPS das URLs do gateway (padrão: https)
TOOL_GATEWAY_USER_TOKENToken de autenticação do Tool Gateway (normalmente preenchido automaticamente pela autenticação da Nous)
FIRECRAWL_GATEWAY_URLSobrescreve especificamente a URL do endpoint do gateway do Firecrawl

Backend de terminal​

VariávelDescrição
TERMINAL_ENVBackend: local, docker, ssh, singularity, modal, daytona, vercel_sandbox
HERMES_DOCKER_BINARYSobrescreve o binário de contêiner que o Hermes invoca (por exemplo podman, /usr/local/bin/docker). Sem valor, o Hermes descobre sozinho docker ou podman no PATH. Necessário quando os dois estão instalados e você quer o que não é o padrão, ou quando o binário fica fora do PATH.
TERMINAL_DOCKER_IMAGEImagem Docker (padrão: nikolaik/python-nodejs:python3.11-nodejs20)
TERMINAL_DOCKER_FORWARD_ENVArray JSON com nomes de variáveis de ambiente a encaminhar explicitamente para as sessões de terminal no Docker. Atenção: as required_environment_variables declaradas por skills são encaminhadas automaticamente — você só precisa disto para variáveis que nenhuma skill declara.
TERMINAL_DOCKER_VOLUMESMontagens de volume Docker adicionais (pares host:container separados por vírgula)
TERMINAL_DOCKER_ENVObjeto JSON com variáveis de ambiente extras a definir dentro das sessões de terminal no Docker (por exemplo {"FOO":"bar"})
TERMINAL_DOCKER_EXTRA_ARGSArray JSON com argumentos extras de docker run (por exemplo ["--memory","4g"])
TERMINAL_DOCKER_MOUNT_CWD_TO_WORKSPACEOpção avançada: monta o diretório de lançamento no /workspace do Docker (true/false, padrão: false)
TERMINAL_SINGULARITY_IMAGEImagem Singularity ou caminho de um .sif
TERMINAL_MODAL_IMAGEImagem de contêiner do Modal
TERMINAL_DAYTONA_IMAGEImagem de sandbox do Daytona
TERMINAL_VERCEL_RUNTIMERuntime do Vercel Sandbox (node24, node22, python3.13)
TERMINAL_TIMEOUTTempo limite de comando em segundos
TERMINAL_LIFETIME_SECONDSTempo de vida máximo das sessões de terminal em segundos
TERMINAL_CWDSobrescrita direta obsoleta para as sessões de terminal do gateway/cron. Prefira terminal.cwd no config.yaml; a CLI continua usando o diretório de lançamento.
SUDO_PASSWORDPermite usar sudo sem prompt interativo

Nos backends de sandbox na nuvem, a persistência é orientada a sistema de arquivos. TERMINAL_LIFETIME_SECONDS controla quando o Hermes limpa uma sessão de terminal ociosa, e retomadas posteriores podem recriar a sandbox em vez de manter vivos os mesmos processos.

Backend SSH​

VariávelDescrição
TERMINAL_SSH_HOSTNome de host do servidor remoto
TERMINAL_SSH_USERUsuário SSH
TERMINAL_SSH_PORTPorta SSH (padrão: 22)
TERMINAL_SSH_KEYCaminho para a chave privada
TERMINAL_SSH_PERSISTENTSobrescreve o shell persistente do SSH (padrão: segue TERMINAL_PERSISTENT_SHELL)

Recursos de contêiner (Docker, Singularity, Modal, Daytona)​

VariávelDescrição
TERMINAL_CONTAINER_CPUNúcleos de CPU (padrão: 1)
TERMINAL_CONTAINER_MEMORYMemória em MB (padrão: 5120)
TERMINAL_CONTAINER_DISKDisco em MB (padrão: 51200)
TERMINAL_CONTAINER_PERSISTENTMantém o sistema de arquivos do contêiner entre sessões (padrão: true)
TERMINAL_SANDBOX_DIRDiretório no host para espaços de trabalho e overlays (padrão: ~/.hermes/sandboxes/)

Shell persistente​

VariávelDescrição
TERMINAL_PERSISTENT_SHELLAtiva o shell persistente em backends não locais (padrão: true). Também configurável por terminal.persistent_shell no config.yaml
TERMINAL_LOCAL_PERSISTENTAtiva o shell persistente no backend local (padrão: false)
TERMINAL_SSH_PERSISTENTSobrescreve o shell persistente no backend SSH (padrão: segue TERMINAL_PERSISTENT_SHELL)

Proxy de saída (injetado na sandbox)​

Estas variáveis NÃO são definidas no host — elas são injetadas nas sandboxes Docker pela integração do proxy de saída quando proxy.enabled: true. O Docker é o único backend ligado nesta versão.

VariávelDescrição
HERMES_EGRESS_PROXYVale 1 dentro de uma sandbox quando o proxy de saída está ativo. O código do agente pode consultar isso para saber que está rodando atrás de um proxy que intercepta TLS.
Variáveis de provedor (OPENROUTER_API_KEY, OPENAI_API_KEY, …)Recebem tokens opacos de proxy, não os segredos reais do provedor, para que os SDKs existentes continuem lendo os nomes padrão de ambiente. O iron-proxy troca esses tokens pelo segredo real na fronteira de rede.
HERMES_PROXY_TOKEN_<ENV_NAME>Apelido de diagnóstico para cada mapeamento de provedor emitido. Por exemplo HERMES_PROXY_TOKEN_OPENROUTER_API_KEY=hermes-proxy-openrouter-…. Mesmo valor de token da variável padrão do provedor.
HTTPS_PROXY / HTTP_PROXYHTTPS_PROXY aponta para http://host.docker.internal:<tunnel_port> no caminho CONNECT/MITM. HTTP_PROXY aponta para <tunnel_port + 1> no encaminhamento HTTP puro.
NO_PROXY127.0.0.1,localhost,::1, para que servidores de desenvolvimento em loopback dentro da sandbox passem por fora do proxy.
REQUESTS_CA_BUNDLE / SSL_CERT_FILE / CURL_CA_BUNDLE / NODE_EXTRA_CA_CERTSCaminho do certificado da CA de saída do Hermes montado dentro da sandbox (/etc/ssl/certs/hermes-egress-ca.crt). Permite que os runtimes das linguagens confiem nos certificados folha emitidos pelo MITM do iron-proxy.
NODE_OPTIONSGanha --use-openssl-ca no fim (suas flags existentes são preservadas), para que o Node.js passe pelo armazenamento OpenSSL que as outras variáveis de CA controlam. Reduz a ressalva de CA assimétrica do Node.js.
HERMES_IRON_PROXY_NONCEDefinida no próprio processo do daemon iron-proxy (NÃO dentro da sandbox). Usada por _pid_alive para confirmar que um PID candidato ainda se refere ao nosso binário gerenciado, mesmo com reciclagem de PIDs.

Elas são definidas automaticamente pelo backend de terminal Docker quando proxy.enabled: true E o daemon está rodando. Você não as define à mão; os controles relevantes para quem opera ficam em ~/.hermes/config.yaml, na seção proxy: — veja Proxy de saída → Configuração.

Mensagens​

VariávelDescrição
TELEGRAM_BOT_TOKENToken do bot do Telegram (obtido com o @BotFather)
TELEGRAM_ALLOWED_USERSIDs de usuário separados por vírgula com permissão de usar o bot (vale em DMs, grupos e fóruns)
TELEGRAM_ALLOW_ALL_USERSPermite que qualquer usuário do Telegram acione o bot (só para desenvolvimento).
TELEGRAM_GROUP_ALLOWED_USERSIDs de remetente separados por vírgula autorizados apenas em grupos/fóruns (NÃO dá acesso a DMs). Valores com formato de ID de chat (começando com -) ainda são aceitos como IDs de chat por compatibilidade com configurações anteriores à #17686, com aviso de descontinuação.
TELEGRAM_GROUP_ALLOWED_CHATSIDs de chat de grupo/fórum separados por vírgula; qualquer membro fica autorizado
TELEGRAM_HOME_CHANNELChat/canal padrão do Telegram para entrega do cron
TELEGRAM_HOME_CHANNEL_NAMENome de exibição do canal principal do Telegram
TELEGRAM_CRON_THREAD_IDID do tópico de fórum que recebe as entregas do cron; sobrescreve TELEGRAM_HOME_CHANNEL_THREAD_ID só para o cron. Use no modo de tópicos, para que respostas a mensagens do cron abram uma sessão nova em vez de cair no lobby do sistema (#24409).
TELEGRAM_WEBHOOK_URLURL HTTPS pública para o modo webhook (ativa o webhook em vez do polling)
TELEGRAM_WEBHOOK_PORTPorta local de escuta do servidor de webhook (padrão: 8443)
TELEGRAM_WEBHOOK_SECRETToken secreto que o Telegram devolve em cada atualização, para verificação. Obrigatório sempre que TELEGRAM_WEBHOOK_URL estiver definida — o gateway se recusa a iniciar sem ele (GHSA-3vpc-7q5r-276h). Gere com openssl rand -hex 32.
TELEGRAM_REACTIONSAtiva reações em emoji nas mensagens durante o processamento (padrão: false)
TELEGRAM_REQUIRE_MENTIONExige um gatilho explícito antes de responder em grupos do Telegram. Equivale a telegram.require_mention no config.yaml.
TELEGRAM_MENTION_PATTERNSArray JSON, lista separada por quebras de linha ou lista separada por vírgulas com os padrões de regex de palavra de ativação aceitos quando a exigência de menção em grupos do Telegram está ligada. Equivale a telegram.mention_patterns.
TELEGRAM_EXCLUSIVE_BOT_MENTIONSQuando ligado, menções explícitas @...bot em grupos do Telegram vão só para os bots mencionados, antes das reservas de resposta ou de palavra de ativação. Padrão: true. Equivale a telegram.exclusive_bot_mentions.
TELEGRAM_REPLY_TO_MODEComportamento da referência de resposta: off, first (padrão) ou all. Segue o mesmo padrão do Discord.
TELEGRAM_IGNORED_THREADSIDs de tópico/thread de fórum do Telegram, separados por vírgula, em que o bot nunca responde
TELEGRAM_PROXYURL de proxy para as conexões com o Telegram — sobrescreve HTTPS_PROXY. Aceita http://, https://, socks5://
DISCORD_BOT_TOKENToken do bot do Discord
DISCORD_ALLOWED_USERSIDs de usuário do Discord separados por vírgula com permissão de usar o bot
DISCORD_ALLOW_ALL_USERSPermite que qualquer usuário do Discord acione o bot (só para desenvolvimento).
DISCORD_ALLOWED_ROLESIDs de cargo do Discord separados por vírgula com permissão de usar o bot (em OU com DISCORD_ALLOWED_USERS). Ativa automaticamente a intent de Membros. Útil quando o time de moderação muda muito — a concessão por cargo se propaga sozinha.
DISCORD_ALLOWED_CHANNELSIDs de canal do Discord separados por vírgula. Quando definido, o bot só responde nesses canais (mais as DMs, se permitidas). Sobrescreve discord.allowed_channels do config.yaml.
DISCORD_PROXYURL de proxy para as conexões com o Discord — sobrescreve HTTPS_PROXY. Aceita http://, https://, socks5://
DISCORD_HOME_CHANNELCanal padrão do Discord para entrega do cron
DISCORD_HOME_CHANNEL_NAMENome de exibição do canal principal do Discord
DISCORD_COMMAND_SYNC_POLICYPolítica de sincronização dos comandos de barra do Discord na inicialização: safe (compara e reconcilia), bulk (o antigo tree.sync()) ou off
DISCORD_REQUIRE_MENTIONExige uma @menção antes de responder nos canais do servidor
DISCORD_FREE_RESPONSE_CHANNELSIDs de canal separados por vírgula em que a menção não é exigida
DISCORD_AUTO_THREADCria threads automaticamente para respostas longas, quando houver suporte
DISCORD_ALLOW_ANY_ATTACHMENTCom true, aceita anexos de qualquer tipo de arquivo (não só a lista embutida de PDF/texto/zip/office). Tipos desconhecidos são armazenados em cache e apresentados ao agente como caminho local, para que ele inspecione com terminal / read_file / ffprobe. Padrão false.
DISCORD_MAX_ATTACHMENT_BYTESMáximo de bytes por anexo que o gateway armazena em cache. Padrão 33554432 (32 MiB). Use 0 para não ter limite (os anexos ficam em memória enquanto são gravados).
DISCORD_REACTIONSAtiva reações em emoji nas mensagens durante o processamento (padrão: true)
DISCORD_IGNORED_CHANNELSIDs de canal separados por vírgula em que o bot nunca responde
DISCORD_NO_THREAD_CHANNELSIDs de canal separados por vírgula em que o bot responde sem criar thread automaticamente
DISCORD_REPLY_TO_MODEComportamento da referência de resposta: off, first (padrão) ou all
DISCORD_ALLOW_MENTION_EVERYONEPermite que o bot marque @everyone/@here (padrão: false). Veja Controle de menções.
DISCORD_ALLOW_MENTION_ROLESPermite que o bot marque @cargo (padrão: false).
DISCORD_ALLOW_MENTION_USERSPermite que o bot marque @usuário individualmente (padrão: true).
DISCORD_ALLOW_MENTION_REPLIED_USERMarca o autor ao responder à mensagem dele (padrão: true).
SLACK_BOT_TOKENToken de bot do Slack (xoxb-...)
SLACK_APP_TOKENToken de nível de app do Slack (xapp-..., obrigatório no Socket Mode)
SLACK_ALLOWED_USERSIDs de usuário do Slack separados por vírgula
SLACK_ALLOW_ALL_USERSPermite que qualquer usuário do Slack acione o bot (só para desenvolvimento).
SLACK_ALLOW_BOTSAceita mensagens de outros bots do Slack: none (padrão), mentions ou all. O bot sempre ignora as próprias mensagens.
SLACK_THREAD_REQUIRE_MENTIONExige uma @menção explícita nas respostas em thread do Slack, preservando os canais de resposta livre no nível principal
SLACK_HOME_CHANNELCanal padrão do Slack para entrega do cron
SLACK_HOME_CHANNEL_NAMENome de exibição do canal principal do Slack
GOOGLE_CHAT_PROJECT_IDProjeto do GCP que hospeda o tópico do Pub/Sub (cai para GOOGLE_CLOUD_PROJECT)
GOOGLE_CHAT_SUBSCRIPTION_NAMECaminho completo da assinatura do Pub/Sub, projects/{proj}/subscriptions/{sub} (apelido legado: GOOGLE_CHAT_SUBSCRIPTION)
GOOGLE_CHAT_SERVICE_ACCOUNT_JSONCaminho para o JSON da conta de serviço, ou o próprio JSON inline (cai para GOOGLE_APPLICATION_CREDENTIALS)
GOOGLE_CHAT_ALLOWED_USERSE-mails de usuário separados por vírgula com permissão de conversar com o bot
GOOGLE_CHAT_ALLOW_ALL_USERSPermite que qualquer usuário do Google Chat acione o bot (só para desenvolvimento)
GOOGLE_CHAT_HOME_CHANNELEspaço padrão (por exemplo spaces/AAAA...) para entrega do cron
GOOGLE_CHAT_HOME_CHANNEL_NAMENome de exibição do espaço principal do Google Chat
GOOGLE_CHAT_MAX_MESSAGESMáximo de mensagens em voo no FlowControl do Pub/Sub (padrão: 1)
GOOGLE_CHAT_MAX_BYTESMáximo de bytes em voo no FlowControl do Pub/Sub (padrão: 16777216, 16 MiB)
GOOGLE_CHAT_BOOTSTRAP_SPACESIDs de espaço extras, separados por vírgula, a sondar na inicialização ao resolver o próprio users/{id} do bot
GOOGLE_CHAT_DEBUG_RAWDefina qualquer valor para registrar envelopes do Pub/Sub redigidos no nível DEBUG (só para depuração)
GOOGLE_CHAT_HTTP_EVENTS_URLEndpoint HTTP autenticado para os eventos de mensagem do Chat (alternativa ao Pub/Sub)
GOOGLE_CHAT_HTTP_EVENTS_AUDIENCEAudiência esperada nos tokens bearer de evento HTTP assinados pelo Google (o padrão é GOOGLE_CHAT_HTTP_EVENTS_URL)
GOOGLE_CHAT_HTTP_EVENTS_SERVICE_ACCOUNT_EMAILE-mail esperado da conta de serviço do Google nos tokens bearer de evento HTTP
WHATSAPP_ENABLEDAtiva a ponte do WhatsApp (true/false)
WHATSAPP_MODEbot (número separado) ou self-chat (mandar mensagem para si mesmo)
WHATSAPP_ALLOWED_USERSNúmeros de telefone separados por vírgula (com código do país, sem +), ou * para liberar todos os remetentes
WHATSAPP_ALLOW_ALL_USERSLibera todos os remetentes do WhatsApp sem lista de permissão (true/false)
WHATSAPP_HOME_CHANNELID de chat padrão para entrega de cron / notificações.
WHATSAPP_HOME_CHANNEL_NAMENome de exibição do canal principal do WhatsApp.
WHATSAPP_DEBUGRegistra os eventos brutos de mensagem na ponte, para diagnóstico (true/false)
WHATSAPP_CLOUD_PHONE_NUMBER_IDPhone Number ID da Meta na WhatsApp Business Cloud API (15 a 17 dígitos; não é o número de telefone)
WHATSAPP_CLOUD_ACCESS_TOKENToken de acesso da Meta (começa com EAA); tokens temporários expiram em 24h, tokens de System User são permanentes
WHATSAPP_CLOUD_APP_SECRETSegredo do app em hexadecimal de 32 caracteres, usado para verificar as assinaturas dos webhooks de entrada
WHATSAPP_CLOUD_VERIFY_TOKENSegredo compartilhado do handshake de verificação de webhook da Meta (gerado automaticamente pelo assistente de configuração)
WHATSAPP_CLOUD_ALLOWED_USERSwa_ids separados por vírgula (números com código do país, sem +) com permissão de escrever para o bot
WHATSAPP_CLOUD_ALLOW_ALL_USERSLibera todos os remetentes do WhatsApp Cloud sem lista de permissão (true/false)
WHATSAPP_CLOUD_APP_IDApp ID opcional da Meta (para futura integração de analytics)
WHATSAPP_CLOUD_WABA_IDID opcional da WhatsApp Business Account (para futura integração de analytics)
WHATSAPP_CLOUD_WEBHOOK_HOSTInterface em que o servidor de webhook de entrada escuta (padrão 0.0.0.0)
WHATSAPP_CLOUD_WEBHOOK_PORTPorta em que o servidor de webhook de entrada escuta (padrão 8090)
WHATSAPP_CLOUD_WEBHOOK_PATHCaminho de URL em que a Meta posta as mensagens de entrada (padrão /whatsapp/webhook)
WHATSAPP_CLOUD_API_VERSIONVersão da Graph API da Meta a chamar (padrão v20.0)
WHATSAPP_CLOUD_HOME_CHANNELwa_id usado como canal principal do bot (para tarefas do cron etc.)
WHATSAPP_CLOUD_DM_POLICYControle de DMs no adaptador Cloud (open/allowlist/disabled); cai para WHATSAPP_DM_POLICY quando não definido
WHATSAPP_CLOUD_ALLOW_FROMRemetentes separados por vírgula liberados quando dm_policy: allowlist (apenas wa_ids; JIDs no estilo Baileys são normalizados)
WHATSAPP_CLOUD_GROUP_POLICYControle de grupos no adaptador Cloud (open/allowlist/disabled); cai para WHATSAPP_GROUP_POLICY quando não definido
WHATSAPP_CLOUD_GROUP_ALLOW_FROMIDs de chat de grupo separados por vírgula liberados quando group_policy: allowlist
SIGNAL_HTTP_URLEndpoint HTTP do daemon signal-cli (por exemplo http://127.0.0.1:8080)
SIGNAL_ACCOUNTNúmero de telefone do bot no formato E.164
SIGNAL_ALLOWED_USERSNúmeros E.164 ou UUIDs separados por vírgula
SIGNAL_GROUP_ALLOWED_USERSIDs de grupo separados por vírgula, ou * para todos os grupos
SIGNAL_HOME_CHANNEL_NAMENome de exibição do canal principal do Signal
SIGNAL_IGNORE_STORIESIgnora stories/status do Signal
SIGNAL_ALLOW_ALL_USERSLibera todos os usuários do Signal sem lista de permissão
TWILIO_ACCOUNT_SIDAccount SID da Twilio (compartilhado com a skill de telefonia)
TWILIO_AUTH_TOKENAuth Token da Twilio (compartilhado com a skill de telefonia; também usado na validação de assinatura dos webhooks)
TWILIO_PHONE_NUMBERNúmero de telefone da Twilio no formato E.164 (compartilhado com a skill de telefonia)
SMS_WEBHOOK_URLURL pública para validação de assinatura da Twilio — precisa bater com a URL de webhook no Console da Twilio (obrigatória)
SMS_WEBHOOK_PORTPorta de escuta do webhook para SMS de entrada (padrão: 8080)
SMS_WEBHOOK_HOSTEndereço de escuta do webhook (padrão: 127.0.0.1)
SMS_INSECURE_NO_SIGNATUREDefina como true para desativar a validação de assinatura da Twilio (só em desenvolvimento local — nunca em produção)
SMS_ALLOWED_USERSNúmeros E.164 separados por vírgula com permissão de conversar
SMS_ALLOW_ALL_USERSLibera todos os remetentes de SMS sem lista de permissão
SMS_HOME_CHANNELNúmero de telefone para entrega de tarefas do cron / notificações
SMS_HOME_CHANNEL_NAMENome de exibição do canal principal de SMS
EMAIL_ADDRESSEndereço de e-mail do adaptador de gateway de e-mail
EMAIL_PASSWORDSenha ou senha de app da conta de e-mail
EMAIL_IMAP_HOSTNome de host IMAP do adaptador de e-mail
EMAIL_IMAP_PORTPorta IMAP
EMAIL_SMTP_HOSTNome de host SMTP do adaptador de e-mail
EMAIL_SMTP_PORTPorta SMTP
EMAIL_ALLOWED_USERSEndereços de e-mail separados por vírgula com permissão de escrever para o bot
EMAIL_HOME_ADDRESSDestinatário padrão da entrega proativa de e-mail
EMAIL_HOME_ADDRESS_NAMENome de exibição do destino principal de e-mail
EMAIL_POLL_INTERVALIntervalo de verificação de e-mail em segundos
EMAIL_ALLOW_ALL_USERSLibera todos os remetentes de e-mail de entrada
DINGTALK_CLIENT_IDAppKey do bot do DingTalk, no portal do desenvolvedor (open.dingtalk.com)
DINGTALK_CLIENT_SECRETAppSecret do bot do DingTalk, no portal do desenvolvedor
DINGTALK_ALLOWED_USERSIDs de usuário do DingTalk separados por vírgula com permissão de escrever para o bot
DINGTALK_WEBHOOK_URLURL de webhook do robô estático para entrega entre plataformas / do cron.
DINGTALK_HOME_CHANNELID de conversa padrão para entrega de cron / notificações.
DINGTALK_HOME_CHANNEL_NAMENome de exibição do canal principal do DingTalk.
FEISHU_APP_IDApp ID do bot do Feishu/Lark, em open.feishu.cn
FEISHU_APP_SECRETApp Secret do bot do Feishu/Lark
FEISHU_DOMAINfeishu (China) ou lark (internacional). Padrão: feishu
FEISHU_CONNECTION_MODEwebsocket (recomendado) ou webhook. Padrão: websocket
FEISHU_ENCRYPT_KEYChave de criptografia opcional para o modo webhook
FEISHU_VERIFICATION_TOKENToken de verificação opcional para o modo webhook
FEISHU_ALLOWED_USERSIDs de usuário do Feishu separados por vírgula com permissão de escrever para o bot
FEISHU_ALLOW_BOTSnone (padrão) / mentions / all — aceita mensagens de entrada de outros bots. Veja mensagens entre bots
FEISHU_REQUIRE_MENTIONtrue (padrão) / false — se as mensagens de grupo precisam @mencionar o bot. Sobrescreva por chat com group_rules.<chat_id>.require_mention.
FEISHU_HOME_CHANNELID de chat do Feishu para entrega do cron e notificações
FEISHU_HOME_CHANNEL_NAMENome de exibição do canal principal do Feishu.
FEISHU_ALLOW_ALL_USERSPermite que qualquer usuário do Feishu acione o bot (só para desenvolvimento).
WECOM_BOT_IDID do AI Bot do WeCom, no console de administração
WECOM_SECRETSegredo do AI Bot do WeCom
WECOM_WEBSOCKET_URLURL de WebSocket personalizada (padrão: wss://openws.work.weixin.qq.com)
WECOM_ALLOWED_USERSIDs de usuário do WeCom separados por vírgula com permissão de escrever para o bot
WECOM_HOME_CHANNELID de chat do WeCom para entrega do cron e notificações
WECOM_CALLBACK_CORP_IDCorp ID corporativo do WeCom para o app próprio de callback
WECOM_CALLBACK_CORP_SECRETSegredo corporativo do app próprio
WECOM_CALLBACK_AGENT_IDAgent ID do app próprio
WECOM_CALLBACK_TOKENToken de verificação do callback
WECOM_CALLBACK_ENCODING_AES_KEYChave AES da criptografia do callback
WECOM_CALLBACK_HOSTEndereço de escuta do servidor de callback (padrão: 0.0.0.0)
WECOM_CALLBACK_PORTPorta do servidor de callback (padrão: 8645)
WECOM_CALLBACK_ALLOWED_USERSIDs de usuário separados por vírgula para a lista de permissão
WECOM_CALLBACK_ALLOW_ALL_USERSUse true para liberar todos os usuários sem lista de permissão
WEIXIN_ACCOUNT_IDID da conta Weixin obtido no login por QR pela iLink Bot API
WEIXIN_TOKENToken de autenticação Weixin obtido no login por QR pela iLink Bot API
WEIXIN_BASE_URLSobrescreve a URL base da iLink Bot API do Weixin (padrão: https://ilinkai.weixin.qq.com)
WEIXIN_CDN_BASE_URLSobrescreve a URL base do CDN do Weixin para mídia (padrão: https://novac2c.cdn.weixin.qq.com/c2c)
WEIXIN_DM_POLICYPolítica de mensagem direta: open, allowlist, pairing, disabled (padrão: open)
WEIXIN_GROUP_POLICYPolítica de mensagem em grupo: open, allowlist, disabled (padrão: disabled)
WEIXIN_ALLOWED_USERSIDs de usuário do Weixin separados por vírgula com permissão de mandar DM para o bot
WEIXIN_GROUP_ALLOWED_USERSIDs de chat de grupo do Weixin separados por vírgula (não IDs de membros) com permissão de interagir com o bot. O nome da variável é legado — ela espera IDs de grupo. Só tem efeito quando o iLink de fato entrega eventos de grupo; identidades de bot iLink com login por QR (...@im.bot) normalmente não recebem mensagens comuns de grupo do WeChat.
WEIXIN_HOME_CHANNELID de chat do Weixin para entrega do cron e notificações
WEIXIN_HOME_CHANNEL_NAMENome de exibição do canal principal do Weixin
WEIXIN_ALLOW_ALL_USERSLibera todos os usuários do Weixin sem lista de permissão (true/false)
BLUEBUBBLES_SERVER_URLURL do servidor BlueBubbles (por exemplo http://192.168.1.10:1234)
BLUEBUBBLES_PASSWORDSenha do servidor BlueBubbles
BLUEBUBBLES_WEBHOOK_HOSTEndereço de escuta do webhook (padrão: 127.0.0.1)
BLUEBUBBLES_WEBHOOK_PORTPorta de escuta do webhook (padrão: 8645)
BLUEBUBBLES_HOME_CHANNELTelefone/e-mail para entrega de cron/notificações
BLUEBUBBLES_ALLOWED_USERSUsuários autorizados separados por vírgula
BLUEBUBBLES_ALLOW_ALL_USERSLibera todos os usuários (true/false)
QQ_APP_IDApp ID do QQ Bot, em q.qq.com
QQ_CLIENT_SECRETApp Secret do QQ Bot, em q.qq.com
QQ_STT_API_KEYChave de API do provedor externo de STT de reserva (opcional, usada quando o ASR embutido do QQ não devolve texto)
QQ_STT_BASE_URLURL base do provedor externo de STT (opcional)
QQ_STT_MODELNome do modelo do provedor externo de STT (opcional)
QQ_ALLOWED_USERSopenIDs de usuário do QQ separados por vírgula com permissão de escrever para o bot
QQ_GROUP_ALLOWED_USERSIDs de grupo do QQ separados por vírgula para acesso a mensagens de grupo com @
QQ_ALLOW_ALL_USERSLibera todos os usuários (true/false, sobrescreve QQ_ALLOWED_USERS)
QQBOT_HOME_CHANNELopenID de usuário/grupo do QQ para entrega do cron e notificações
QQBOT_HOME_CHANNEL_NAMENome de exibição do canal principal do QQ
QQ_PORTAL_HOSTSobrescreve o host do portal do QQ (use sandbox.q.qq.com para passar pelo gateway de sandbox; padrão: q.qq.com).
QQ_SANDBOXAtiva o modo sandbox do QQ para testes de desenvolvimento (true/false)
MATTERMOST_URLURL do servidor Mattermost (por exemplo https://mm.example.com)
MATTERMOST_TOKENToken de bot ou token de acesso pessoal do Mattermost
MATTERMOST_ALLOWED_USERSIDs de usuário do Mattermost separados por vírgula com permissão de escrever para o bot
MATTERMOST_ALLOW_ALL_USERSPermite que qualquer usuário do Mattermost acione o bot (só para desenvolvimento).
MATTERMOST_ALLOWED_CHANNELSQuando definido, o bot só responde nesses canais (lista de permissão).
MATTERMOST_HOME_CHANNELID do canal para entrega proativa de mensagens (cron, notificações)
MATTERMOST_REQUIRE_MENTIONExige @menção nos canais (padrão: true). Use false para responder a todas as mensagens.
MATTERMOST_FREE_RESPONSE_CHANNELSIDs de canal separados por vírgula em que o bot responde sem @menção
MATTERMOST_REPLY_MODEEstilo de resposta: thread (respostas em thread) ou off (mensagens soltas, padrão)
MATRIX_HOMESERVERURL do homeserver Matrix (por exemplo https://matrix.org)
MATRIX_ACCESS_TOKENToken de acesso Matrix para autenticar o bot
MATRIX_USER_IDID de usuário Matrix (por exemplo @hermes:matrix.org) — obrigatório no login por senha, opcional com token de acesso
MATRIX_PASSWORDSenha do Matrix (alternativa ao token de acesso)
MATRIX_ALLOWED_USERSIDs de usuário Matrix separados por vírgula com permissão de escrever para o bot (por exemplo @alice:matrix.org)
MATRIX_ALLOW_ALL_USERSPermite que qualquer usuário do Matrix acione o bot (só para desenvolvimento).
MATRIX_HOME_CHANNELID de sala padrão para entrega de cron / notificações.
MATRIX_HOME_CHANNEL_NAMENome de exibição da sala principal do Matrix.
MATRIX_ALLOWED_ROOMSIDs de sala Matrix separados por vírgula com permissão de acionar respostas do bot
MATRIX_HOME_ROOMID de sala para entrega proativa de mensagens (por exemplo !abc123:matrix.org)
MATRIX_ENCRYPTIONAtiva a criptografia ponta a ponta (true/false, padrão: false)
MATRIX_E2EE_MODEComportamento do E2EE no Matrix: off, optional ou required. Sobrescreve MATRIX_ENCRYPTION quando definida.
MATRIX_DEVICE_IDID de dispositivo Matrix estável para persistir o E2EE entre reinícios (por exemplo HERMES_BOT). Sem isso, as chaves de E2EE giram a cada inicialização e a descriptografia do histórico da sala quebra.
MATRIX_REACTIONSAtiva as reações em emoji de ciclo de processamento nas mensagens de entrada (padrão: true). Use false para desligar.
MATRIX_REQUIRE_MENTIONExige @menção nas salas (padrão: true). Use false para responder a todas as mensagens.
MATRIX_FREE_RESPONSE_ROOMSIDs de sala separados por vírgula em que o bot responde sem @menção
MATRIX_IGNORE_USER_PATTERNSExpressões regulares separadas por vírgula para IDs de usuário fantasma de ponte/appservice do Matrix que devem ser ignorados
MATRIX_PROCESS_NOTICESProcessa eventos m.notice de entrada do Matrix (padrão: false)
MATRIX_SESSION_SCOPEEscopo de sessão do Matrix em salas de projeto: auto, room ou thread (padrão: auto)
MATRIX_TOOLS_ALLOW_REDACTIONPermite executar a ferramenta de redação de mensagens do Matrix (padrão: false)
MATRIX_TOOLS_ALLOW_INVITESPermite executar a ferramenta de convite do Matrix (padrão: false)
MATRIX_TOOLS_ALLOW_ROOM_CREATEPermite executar a ferramenta de criação de sala do Matrix (padrão: false)
MATRIX_ALLOW_ROOM_MENTIONSPermite menções @room de saída, que notificam todos os membros da sala (padrão: false)
MATRIX_AUTO_THREADCria threads automaticamente para mensagens de sala (padrão: true)
MATRIX_DM_AUTO_THREADCria threads automaticamente para mensagens de DM no Matrix (padrão: false)
MATRIX_DM_MENTION_THREADSCria uma thread quando o bot é @mencionado em uma DM (padrão: false)
MATRIX_APPROVAL_REQUIRE_SENDERExige que as reações de aprovação/seleção de modelo venham de quem fez o pedido, quando isso é conhecido (padrão: true)
MATRIX_APPROVAL_TIMEOUT_SECONDSTempo limite dos prompts de aprovação/seleção de modelo por reação no Matrix (padrão: 300)
MATRIX_ALLOW_PUBLIC_ROOMSPermite que as ferramentas de criação de sala do Matrix criem salas públicas (padrão: false)
MATRIX_MAX_MEDIA_BYTESTamanho máximo em bytes de envio/download de mídia no Matrix (padrão: 104857600)
MATRIX_RECOVERY_KEYChave de recuperação para verificação de assinatura cruzada depois da rotação de chaves do dispositivo. Recomendada em instalações com E2EE e assinatura cruzada ativa.
MATRIX_RECOVERY_KEY_OUTPUT_FILECaminho opcional, de uso único, para gravar uma chave de recuperação do Matrix gerada. Criado com modo 0600 e nunca sobrescrito.
HASS_TOKENToken de acesso de longa duração do Home Assistant (ativa a plataforma HA + as ferramentas)
HASS_URLURL do Home Assistant (padrão: http://homeassistant.local:8123)
WEBHOOK_ENABLEDAtiva o adaptador de plataforma de webhook (true/false)
WEBHOOK_PORTPorta do servidor HTTP que recebe os webhooks (padrão: 8644)
WEBHOOK_SECRETSegredo HMAC global para validar assinaturas de webhook (usado como reserva quando as rotas não definem o próprio)
API_SERVER_ENABLEDAtiva o servidor de API compatível com OpenAI (true/false). Roda junto com as outras plataformas.
API_SERVER_KEYToken bearer de autenticação do servidor de API. Obrigatório sempre que o servidor de API estiver ativo.
API_SERVER_CORS_ORIGINSOrigens de navegador separadas por vírgula com permissão de chamar o servidor de API diretamente (por exemplo http://localhost:3000,http://127.0.0.1:3000). Padrão: desativado.
API_SERVER_PORTPorta do servidor de API (padrão: 8642)
API_SERVER_HOSTHost/endereço de escuta do servidor de API (padrão: 127.0.0.1). API_SERVER_KEY continua obrigatória mesmo em loopback; use uma lista curta em API_SERVER_CORS_ORIGINS para acesso pelo navegador.
API_SERVER_MODEL_NAMENome de modelo anunciado em /v1/models. O padrão é o nome do perfil (ou hermes-agent no perfil padrão). Útil em instalações multiusuário, em que frontends como o Open WebUI precisam de nomes de modelo distintos por conexão.
GATEWAY_PROXY_URLURL de um servidor de API remoto do Hermes para onde encaminhar as mensagens (modo proxy). Quando definida, o gateway cuida só da E/S de plataforma — todo o trabalho do agente é delegado ao servidor remoto. Também configurável por gateway.proxy_url no config.yaml.
GATEWAY_PROXY_KEYToken bearer para autenticar com o servidor de API remoto no modo proxy. Precisa bater com API_SERVER_KEY no host remoto.
MESSAGING_CWDReserva de compatibilidade obsoleta para o diretório de trabalho do gateway. Prefira terminal.cwd no config.yaml.
GATEWAY_ALLOWED_USERSIDs de usuário separados por vírgula com permissão em todas as plataformas
GATEWAY_ALLOW_ALL_USERSLibera todos os usuários sem listas de permissão (true/false, padrão: false)

Painel web e Hermes Desktop​

Autenticação do painel web e da conexão do Hermes Desktop com um backend remoto. Pela convenção de "só segredos", as credenciais ficam em ~/.hermes/.env; o client_id do OAuth é melhor definido sob dashboard.oauth no config.yaml (o ambiente ganha quando definido).

Três provedores de autenticação de painel já vêm prontos. Para uma conexão remota do Hermes Desktop ou qualquer painel exposto à internet, o provedor recomendado é o OAuth (Nous Portal) — defina HERMES_DASHBOARD_OAUTH_CLIENT_ID (provisione com hermes dashboard register). O provedor embutido de usuário/senha (HERMES_DASHBOARD_BASIC_AUTH_*) é a opção mais rápida para um backend em uma LAN confiável ou atrás de uma VPN, mas não serve para exposição direta na internet pública. Para autenticar contra o seu próprio provedor de identidade, use o provedor de OIDC auto-hospedado (HERMES_DASHBOARD_OIDC_*). De todo jeito, um bind fora de loopback (hermes dashboard --host 0.0.0.0) aciona o portão de autenticação. Veja Painel web → Autenticação para o quadro completo.

VariávelDescrição
HERMES_DASHBOARD_BASIC_AUTH_USERNAMEUsuário do provedor embutido de autenticação por usuário/senha do painel (plugins/dashboard_auth/basic). Ativa o provedor quando definido junto de uma senha. Sobrescreve dashboard.basic_auth.username.
HERMES_DASHBOARD_BASIC_AUTH_PASSWORDSenha em texto puro do provedor básico (hasheada em memória no carregamento). Ganha de um password_hash no config, para você poder rotacionar pelo ambiente. Sobrescreve dashboard.basic_auth.password.
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD_HASHHash scrypt da senha do provedor básico (preferido — nada em texto puro em repouso). Calcule com python -c "from plugins.dashboard_auth.basic import hash_password; print(hash_password('PW'))". Sobrescreve dashboard.basic_auth.password_hash.
HERMES_DASHBOARD_BASIC_AUTH_SECRETChave HMAC (32+ bytes, base64/hex/bruta) que assina os tokens de sessão sem estado do provedor básico. Defina explicitamente para que as sessões sobrevivam a reinícios e sirvam vários workers; em branco → uma chave aleatória por processo (você é deslogado a cada reinício). Sobrescreve dashboard.basic_auth.secret.
HERMES_DASHBOARD_BASIC_AUTH_TTL_SECONDSTempo de vida do token de acesso do provedor básico (padrão 12h). Sobrescreve dashboard.basic_auth.session_ttl_seconds.
HERMES_DASHBOARD_OAUTH_CLIENT_IDClient id do OAuth (agent:{instance_id}) para o painel protegido/público, ativando o provedor Nous (plugins/dashboard_auth/nous). Sobrescreve dashboard.oauth.client_id. Provisione com hermes dashboard register.
HERMES_DASHBOARD_PUBLIC_URLURL pública completa em que o painel é acessado atrás de um proxy reverso. Ela controla a construção do callback de OAuth, acrescenta o hostname exato à proteção de Host HTTP/Origin de WebSocket e exige o portão de autenticação em hosts públicos fora de loopback, mesmo quando o backend escuta em loopback. Sobrescreve dashboard.public_url.
HERMES_DASHBOARD_OIDC_ISSUERURL do emissor OIDC do provedor embutido de OIDC auto-hospedado (plugins/dashboard_auth/self_hosted). Obrigatória para ativá-lo. Sobrescreve dashboard.oauth.self_hosted.issuer.
HERMES_DASHBOARD_OIDC_CLIENT_IDClient id OIDC público (authorization code + PKCE) do provedor de OIDC auto-hospedado. Obrigatório para ativá-lo. Sobrescreve dashboard.oauth.self_hosted.client_id.
HERMES_DASHBOARD_OIDC_SCOPESEscopos OIDC solicitados pelo provedor de OIDC auto-hospedado (padrão openid profile email). Sobrescreve dashboard.oauth.self_hosted.scopes.
HERMES_DESKTOP_REMOTE_URL(Lado do Desktop) URL base do backend remoto, por exemplo http://host:9119. Quando definida, sobrescreve a URL de Gateway do app; você ainda faz login pelo painel de configurações do Gateway (redirecionamento OAuth ou usuário/senha, conforme o que o backend anunciar).
HERMES_DESKTOP_HERMESSobrescreve o comando de backend do Desktop. Usada por empacotadores/Nix ou em diagnósticos, para apontar o Electron a um executável hermes específico depois da sondagem de backend.
HERMES_DESKTOP_HERMES_ROOTSobrescreve o checkout de código do Desktop, usada por hermes desktop --hermes-root; consultada antes da instalação empacotada de primeira execução ou de um hermes já existente no PATH.
HERMES_DESKTOP_IGNORE_EXISTINGDefina como 1 para o Desktop ignorar um hermes já existente no PATH durante a resolução de backend. Equivale a hermes desktop --ignore-existing.
HERMES_DESKTOP_CWDDiretório de projeto inicial das sessões de chat do Desktop. Definida por hermes desktop --cwd.
HERMES_DESKTOP_PYTHONCaminho absoluto de um interpretador Python para o backend, consultado antes de o Electron resolver um sozinho para o checkout de código. Usada pelos utilitários de desenvolvimento em worktree (veja TUI e Desktop a partir de worktrees) para reaproveitar um venv compartilhado.
HERMES_DESKTOP_DEV_SERVERURL do servidor de desenvolvimento Vite que o shell Electron carrega no lugar do bundle empacotado (por exemplo http://127.0.0.1:5174). Definida automaticamente por npm run dev; só interessa a quem está mexendo no app.
HERMES_DESKTOP_CDP_PORTSobrescreve a porta do Chrome DevTools Protocol que o renderer expõe em 127.0.0.1 para ferramentas de inspeção de DOM/CSS (padrão 9222). Execuções com servidor de desenvolvimento (npm run dev, hgui) abrem a porta automaticamente; um app empacotado nunca abre, e nenhum valor aqui muda isso. Use off para desativar em uma execução de desenvolvimento. Qualquer coisa que alcance essa porta pode executar código no renderer.

Microsoft Graph (reuniões do Teams)​

Credenciais só de aplicativo para o cliente REST do Microsoft Graph usado pelo futuro pipeline de resumo de reuniões do Teams. Veja Registrar um aplicativo do Microsoft Graph para o passo a passo no portal do Azure e as permissões de API exatas.

VariávelDescrição
MSGRAPH_TENANT_IDID do tenant do Azure AD (GUID de diretório) do registro do app no Graph.
MSGRAPH_CLIENT_IDID de aplicativo (cliente) do registro no Azure.
MSGRAPH_CLIENT_SECRETValor do segredo de cliente do registro do app. Guarde em ~/.hermes/.env com chmod 600; rotacione periodicamente pelo portal do Azure.
MSGRAPH_SCOPEEscopo OAuth2 da requisição de token por credenciais de cliente (padrão: https://graph.microsoft.com/.default).
MSGRAPH_AUTHORITY_URLAutoridade da plataforma de identidade da Microsoft (padrão: https://login.microsoftonline.com). Sobrescreva só em nuvens nacionais/soberanas (por exemplo https://login.microsoftonline.us no GCC High).

Ouvinte de webhook do Microsoft Graph​

Ouvinte de notificações de mudança de entrada para eventos do Graph (reuniões do Teams, calendário, chat etc.). Veja Ouvinte de webhook do Microsoft Graph para configuração e endurecimento de segurança.

VariávelDescrição
MSGRAPH_WEBHOOK_ENABLEDAtiva a plataforma de gateway msgraph_webhook (true/1/yes).
MSGRAPH_WEBHOOK_PORTPorta em que o ouvinte escuta (padrão: 8646).
MSGRAPH_WEBHOOK_CLIENT_STATESegredo compartilhado que o Graph devolve em toda notificação; comparado com hmac.compare_digest. Gere com openssl rand -hex 32.
MSGRAPH_WEBHOOK_ACCEPTED_RESOURCESLista de permissão, separada por vírgula, de caminhos/padrões de recurso do Graph (por exemplo communications/onlineMeetings,chats/*/messages). Um * no fim casa por prefixo. Vazio = aceita tudo.
MSGRAPH_WEBHOOK_ALLOWED_SOURCE_CIDRSFaixas CIDR separadas por vírgula com permissão de fazer POST no ouvinte (por exemplo 52.96.0.0/14,52.104.0.0/14). Vazio = libera todas (padrão). Em produção, restrinja às faixas de saída publicadas pelo Microsoft Graph.

Entrega do resumo de reunião do Teams​

Só é usado quando o plugin teams_pipeline está ativo. As configurações também ficam disponíveis sob platforms.teams.extra no config.yaml — as variáveis de ambiente têm prioridade quando as duas estão definidas. Veja Microsoft Teams → Entrega do resumo de reunião.

VariávelDescrição
TEAMS_DELIVERY_MODEgraph ou incoming_webhook.
TEAMS_INCOMING_WEBHOOK_URLURL de webhook gerada pelo Teams; obrigatória quando TEAMS_DELIVERY_MODE=incoming_webhook.
TEAMS_GRAPH_ACCESS_TOKENToken de acesso delegado já obtido para a entrega pelo Graph. Raramente necessário — o escritor cai para as credenciais de app MSGRAPH_* quando não está definido.
TEAMS_TEAM_IDID do Team de destino na entrega por canal (modo graph).
TEAMS_CHANNEL_IDID do canal de destino (usado em par com TEAMS_TEAM_ID).
TEAMS_CHAT_IDID do chat individual ou em grupo de destino (alternativa a team+canal no modo graph).

API de mensagens do LINE​

Usada pelo plugin embutido da plataforma LINE (plugins/platforms/line/). Veja Gateway de mensagens → LINE para a configuração completa.

VariávelDescrição
LINE_CHANNEL_ACCESS_TOKENToken de acesso de canal de longa duração, no LINE Developers Console (aba Messaging API). Obrigatório.
LINE_CHANNEL_SECRETSegredo do canal (aba Basic settings); usado na verificação de assinatura HMAC-SHA256 do webhook. Obrigatório.
LINE_HOSTHost de escuta do webhook (padrão: 0.0.0.0).
LINE_PORTPorta de escuta do webhook (padrão: 8646).
LINE_PUBLIC_URLURL base HTTPS pública (por exemplo https://meu-tunel.exemplo.com). Obrigatória para enviar imagem / áudio / vídeo — o LINE só aceita URLs acessíveis por HTTPS.
LINE_ALLOWED_USERSIDs de usuário separados por vírgula com permissão de mandar DM para o bot (prefixados com U).
LINE_ALLOWED_GROUPSIDs de grupo separados por vírgula em que o bot responde (prefixados com C).
LINE_ALLOWED_ROOMSIDs de sala separados por vírgula em que o bot responde (prefixados com R).
LINE_ALLOW_ALL_USERSVálvula de escape só para desenvolvimento — aceita qualquer origem. Padrão: false.
LINE_HOME_CHANNELDestino padrão de entrega das tarefas de cron com deliver: line.
LINE_SLOW_RESPONSE_THRESHOLDSegundos até disparar o postback de Template Buttons de LLM lenta (padrão: 45). Use 0 para desativar e sempre usar o Push de reserva.
LINE_PENDING_TEXTTexto do balão exibido junto do botão de postback.
LINE_BUTTON_LABELRótulo do botão de postback (padrão: Get answer).
LINE_DELIVERED_TEXTResposta quando um postback já entregue é tocado de novo (padrão: Already replied ✅).
LINE_INTERRUPTED_TEXTResposta quando um botão de postback órfão por /stop é tocado (padrão: Run was interrupted before completion.).

ntfy (notificações push)​

O ntfy é um serviço leve de notificação push por HTTP. Assine um tópico pelo app móvel do ntfy e publique nesse tópico para falar com o agente.

VariávelDescrição
NTFY_TOPICTópico a assinar (mensagens de entrada). Obrigatório.
NTFY_SERVER_URLURL do servidor (padrão: https://ntfy.sh). Aponte para um ntfy auto-hospedado por privacidade.
NTFY_TOKENToken de autenticação opcional. Token bearer (por exemplo tk_xyz) ou user:pass para autenticação Basic.
NTFY_PUBLISH_TOPICTópico das respostas de saída (o padrão é NTFY_TOPIC).
NTFY_MARKDOWNUse true para enviar respostas com o cabeçalho X-Markdown: true. Padrão: false.
NTFY_ALLOWED_USERSLista de permissão (tratada como IDs de usuário; no ntfy são nomes de tópico). Normalmente recebe o mesmo valor de NTFY_TOPIC.
NTFY_ALLOW_ALL_USERSVálvula de escape só para desenvolvimento — só é segura em tópicos privados com controle de acesso. Padrão: false.
NTFY_HOME_CHANNELDestino padrão de entrega das tarefas de cron com deliver: ntfy.
NTFY_HOME_CHANNEL_NAMERótulo legível do canal principal (o padrão é o nome do tópico).

Leia o guia de mensagens do ntfy — em especial a seção sobre o modelo de identidade — antes de usar tópicos não confiáveis.

IRC​

Conecte o Hermes a um servidor IRC. Sem dependências externas. Veja o guia de mensagens do IRC.

VariávelDescrição
IRC_SERVERNome de host do servidor IRC (por exemplo irc.libera.chat). Obrigatório.
IRC_CHANNELCanal ou canais a entrar (por exemplo #hermes); separe por vírgula para vários. Obrigatório.
IRC_NICKNAMEApelido do bot (padrão: hermes-bot). Obrigatório.
IRC_PORTPorta do servidor (padrão: 6697 com TLS, 6667 sem).
IRC_USE_TLSUsa TLS (true/false; padrão true na porta 6697).
IRC_SERVER_PASSWORDSenha de servidor para o comando PASS (opcional).
IRC_NICKSERV_PASSWORDSenha do NickServ para IDENTIFY automático na conexão (opcional).
IRC_ALLOWED_USERSApelidos separados por vírgula com permissão de falar com o bot.
IRC_ALLOW_ALL_USERSPermite que qualquer pessoa no canal fale com o bot (só para desenvolvimento).
IRC_HOME_CHANNELCanal para entrega de cron / notificações (o padrão é IRC_CHANNEL).

SimpleX​

Conecte o Hermes a uma rede SimpleX Chat por um daemon simplex-chat local. Veja o guia de mensagens do SimpleX.

VariávelDescrição
SIMPLEX_WS_URLURL de WebSocket do daemon simplex-chat (por exemplo ws://127.0.0.1:5225).
SIMPLEX_ALLOWED_USERSIDs de contato do SimpleX separados por vírgula com permissão de falar com o bot.
SIMPLEX_ALLOW_ALL_USERSPermite que qualquer contato fale com o bot (só para desenvolvimento — desliga a lista de permissão).
SIMPLEX_AUTO_ACCEPTAceita automaticamente as solicitações de contato de entrada (padrão: true).
SIMPLEX_GROUP_ALLOWEDIDs de grupo do SimpleX separados por vírgula de que o bot deve participar, ou * para liberar qualquer grupo. Omita para ignorar as mensagens de grupo por completo (padrão mais seguro — um bot em um grupo processa o tráfego de todos os membros).
SIMPLEX_HOME_CHANNELID padrão de contato/grupo para entrega de cron / notificações.
SIMPLEX_HOME_CHANNEL_NAMERótulo legível do canal principal (o padrão é o ID).

Photon​

Conecte o Hermes ao Photon / Spectrum (iMessage e outras plataformas do Spectrum) pelo sidecar em Node. Veja o guia de mensagens do Photon.

VariávelDescrição
PHOTON_PROJECT_IDId do projeto no Spectrum (o spectrumProjectId do projeto; definido por hermes photon setup).
PHOTON_PROJECT_SECRETSegredo do projeto, pareado com o id do projeto no Spectrum (definido por hermes photon setup).
PHOTON_ALLOWED_USERSNúmeros E.164 separados por vírgula com permissão de falar com o bot.
PHOTON_ALLOW_ALL_USERSPermite que qualquer remetente acione o bot (só para desenvolvimento — desliga a lista de permissão).
PHOTON_REQUIRE_MENTIONIgnora mensagens de chat em grupo, a não ser que casem com uma palavra de ativação de menção (true/false, padrão false).
PHOTON_MENTION_PATTERNSRegexes de palavra de ativação de menção em chats de grupo (lista JSON ou separada por vírgula/quebra de linha; o padrão são as palavras de ativação do Hermes).
PHOTON_HOME_CHANNELDestino Photon padrão para entrega de cron / notificações: id de espaço do Spectrum, GUID de DM ou número E.164 puro.
PHOTON_HOME_CHANNEL_NAMERótulo legível do canal principal.
PHOTON_MARKDOWNEnvia as respostas do agente em markdown — o iMessage renderiza nativamente, outras plataformas do Spectrum caem para texto puro (true/false, padrão true).
PHOTON_REACTIONSUsa tapbacks 👀/👍/👎 nas mensagens como status de processamento e encaminha para o agente os tapbacks nas mensagens do bot (true/false, padrão false).
PHOTON_TELEMETRYAtiva a telemetria do SDK do Spectrum no sidecar (true/false, padrão false; alterne com `hermes photon telemetry on
PHOTON_SIDECAR_PORTPorta de loopback do canal de controle + entrada do sidecar em Node (padrão 8789).
PHOTON_SIDECAR_AUTOSTARTSobe o sidecar em Node ao conectar (true/false, padrão true).
PHOTON_NODE_BINCaminho para o binário do node (padrão: shutil.which('node')).
PHOTON_DASHBOARD_HOSTHost da API do Photon Dashboard (padrão https://app.photon.codes).
PHOTON_SPECTRUM_HOSTHost da API do Photon Spectrum (padrão https://spectrum.photon.codes).

Buzz (comunidades Nostr)​

VariávelDescrição
BUZZ_RELAY_URLURL base do relay da comunidade Buzz (por exemplo https://mycommunity.communities.buzz.xyz)
BUZZ_PRIVATE_KEYChave privada Nostr da identidade Buzz do agente (nsec ou hex) — o único segredo do Buzz
BUZZ_CREDENTIALS_FILEArquivo JSON de credenciais que guarda a nsec (reserva quando BUZZ_PRIVATE_KEY não está definida)
BUZZ_CHANNELSUUIDs de canal separados por vírgula a observar (padrão: todos os canais em que entrou)
BUZZ_HOME_CHANNELUUID de canal para entrega de cron / notificações (o padrão é o primeiro canal observado)
BUZZ_ALLOWED_USERSnpubs ou chaves públicas em hex, separadas por vírgula, com permissão de falar com o agente
BUZZ_ALLOW_ALL_USERSPermite que qualquer membro da comunidade fale com o agente (true/false)
BUZZ_TRANSPORTTransporte de entrada: auto (WebSocket com polling de reserva, padrão), websocket ou poll
BUZZ_POLL_INTERVALSegundos entre as varreduras de polling de entrada (padrão: 4)
BUZZ_AUTH_TAGJSON opcional de tag de autenticação de atestação de dono NIP-OA para autenticação NIP-42 no WebSocket
BUZZ_CLI_PATHCaminho para o binário da CLI do buzz (padrão: buzz no PATH, depois ~/bin/buzz)

Microsoft Teams (adaptador)​

O adaptador de plataforma do Microsoft Teams (Bot Framework / Azure AD), distinto da integração Microsoft Graph (reuniões do Teams) acima. Veja o guia de mensagens do Teams.

VariávelDescrição
TEAMS_CLIENT_IDID de cliente do aplicativo no Azure AD (Bot Framework).
TEAMS_CLIENT_SECRETSegredo de cliente do aplicativo no Azure AD.
TEAMS_TENANT_IDID do tenant do Azure AD que hospeda o aplicativo do bot.
TEAMS_HOSTHost de escuta do webhook (padrão: sem valor → dual-stack, todas as interfaces IPv4+IPv6).
TEAMS_PORTPorta de escuta do webhook (padrão do Bot Framework: 3978).
TEAMS_ALLOWED_USERSIDs de usuário / UPNs do Teams separados por vírgula com permissão de falar com o bot.
TEAMS_ALLOW_ALL_USERSPermite que qualquer usuário do Teams acione o bot (só para desenvolvimento).
TEAMS_HOME_CHANNELID de chat/canal padrão para entrega de cron / notificações.
TEAMS_HOME_CHANNEL_NAMENome de exibição do canal principal do Teams.

Raft​

VariávelDescrição
RAFT_PROFILESlug do perfil do agente Raft — ativa o adaptador automaticamente quando definido.

Ajuste fino de mensagens​

Controles avançados por plataforma para limitar o agrupador de mensagens de saída. Quase ninguém precisa mexer neles; os padrões respeitam os limites de taxa de cada plataforma sem deixar o bot lento.

VariávelDescrição
HERMES_TELEGRAM_TEXT_BATCH_DELAY_SECONDSJanela de espera antes de despachar um trecho de texto do Telegram na fila (padrão: 0.6).
HERMES_TELEGRAM_TEXT_BATCH_SPLIT_DELAY_SECONDSAtraso entre os pedaços quando uma única mensagem do Telegram passa do limite de tamanho (padrão: 2.0).
HERMES_SIMPLEX_TEXT_BATCH_DELAYSegundos de silêncio (padrão: 0.8) usados para juntar mensagens de texto de entrada em rajada em um único MessageEvent — o mesmo padrão do agrupamento de texto do Telegram.
HERMES_TELEGRAM_MEDIA_BATCH_DELAY_SECONDSJanela de espera antes de despachar a mídia do Telegram na fila (padrão: 0.6).
HERMES_TELEGRAM_FOLLOWUP_GRACE_SECONDSAtraso antes de enviar um acompanhamento depois que o agente termina, para não correr com o último trecho do stream.
HERMES_TELEGRAM_HTTP_CONNECT_TIMEOUT / _READ_TIMEOUT / _WRITE_TIMEOUT / _POOL_TIMEOUTSobrescrevem os tempos limite HTTP do python-telegram-bot (em segundos).
HERMES_TELEGRAM_INIT_TIMEOUTTeto por tentativa (em segundos) da cadeia de conexão do initialize() do Telegram durante a inicialização do gateway, para que uma cadeia de IPs de reserva inacessível não trave a subida (padrão: 30).
HERMES_TELEGRAM_HTTP_POOL_SIZEMáximo de conexões HTTP simultâneas com a API do Telegram.
HERMES_TELEGRAM_DISABLE_FALLBACK_IPSDesativa os IPs de reserva da Cloudflare embutidos no código, usados quando o DNS falha (true/false).
HERMES_DISCORD_TEXT_BATCH_DELAY_SECONDSJanela de espera antes de despachar um trecho de texto do Discord na fila (padrão: 0.6).
HERMES_DISCORD_TEXT_BATCH_SPLIT_DELAY_SECONDSAtraso entre os pedaços quando uma mensagem do Discord passa do limite de tamanho (padrão: 2.0).
HERMES_DISCORD_LIVENESS_INTERVAL_SECONDSSobrescrita manual/de compatibilidade de discord.websocket_liveness_interval_seconds. Intervalo de amostragem do WebSocket ativo do Discord Gateway (padrão: 15; use 0 para desativar). Prefira a chave do config.yaml.
HERMES_DISCORD_LIVENESS_FAILURE_THRESHOLDSobrescrita manual/de compatibilidade de discord.websocket_liveness_failure_threshold. Amostras consecutivas de WebSocket não saudável antes de forçar a reconexão (padrão: 2). Prefira a chave do config.yaml.
HERMES_MATRIX_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDSEquivalentes no Matrix dos controles de agrupamento do Telegram.
HERMES_FEISHU_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDS / _MAX_CHARS / _MAX_MESSAGESAjuste do agrupador do Feishu — atraso, atraso de divisão, máximo de caracteres por mensagem, máximo de mensagens por lote.
HERMES_FEISHU_MEDIA_BATCH_DELAY_SECONDSAtraso de despacho de mídia no Feishu.
HERMES_FEISHU_DEDUP_CACHE_SIZETamanho do cache de deduplicação dos webhooks do Feishu (padrão: 1024).
HERMES_WECOM_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDSAjuste do agrupador do WeCom.
HERMES_VISION_DOWNLOAD_TIMEOUTTempo limite em segundos para baixar uma imagem antes de entregá-la aos modelos de visão (padrão: 30).
HERMES_VISION_MAX_CONCURRENCYMáximo de rajadas simultâneas de codificação/redimensionamento de imagem em todo o processo (sobrescreve auxiliary.vision.max_concurrency; padrão: número de núcleos de CPU do host, sem teto). Limita só a etapa de codificação, ligada a CPU, para que um leque de quadros de vídeo não sature todos os núcleos e mate o laço de eventos — as chamadas de LLM continuam totalmente concorrentes. Valores < 1 são ignorados.
HERMES_RESTART_DRAIN_TIMEOUTGateway: segundos de espera para as execuções ativas terminarem no /restart antes de forçar o reinício (padrão: 900).
HERMES_GATEWAY_PLATFORM_CONNECT_TIMEOUTTempo limite de conexão por plataforma na inicialização e na reconexão do gateway (em segundos; 0/negativo espera indefinidamente). Vale para a tentativa de conexão e para a espera de "pronto" do adaptador do Discord, para que contas com muitos comandos de barra a sincronizar não sejam mortas no meio da subida. Ligada a gateway.platform_connect_timeout no config.yaml (padrão 30); esta variável é a sobrescrita manual e ganha quando definida explicitamente.
HERMES_GATEWAY_BUSY_INPUT_MODEComportamento padrão do gateway para entrada durante ocupação: queue, steer ou interrupt. Pode ser sobrescrito por chat com /busy.
HERMES_GATEWAY_BUSY_ACK_ENABLEDSe o gateway envia uma mensagem de confirmação (⚡/⏳/⏩) quando alguém escreve enquanto o agente está ocupado (padrão: true). Use false para suprimir essas mensagens por completo — a entrada continua sendo enfileirada/direcionada/interrompendo normalmente, só a resposta no chat é silenciada. Ligada a display.busy_ack_enabled no config.yaml.
HERMES_GATEWAY_NO_SUPERVISEDentro da imagem Docker com s6-overlay, abre mão da supervisão automática ao rodar hermes gateway run e usa a semântica de primeiro plano anterior ao s6 (sem reinício automático, o gateway é o processo principal do contêiner). Valores verdadeiros: 1, true, yes. Equivale à flag --no-supervise da CLI. Sem efeito fora da imagem s6.
HERMES_GATEWAY_BOOTSTRAP_STATEDentro da imagem Docker com s6-overlay, declara o estado supervisionado inicial do gateway em um volume novo. Em um volume em branco não existe gateway_state.json persistido, então o reconciliador de boot registra o slot gateway-default mas o deixa desligado (ele só sobe sozinho quando o último estado registrado era running). Defina como running e o hook de configuração de primeiro boot semeia o gateway_state.json antes de o reconciliador rodar, para que o gateway suba já no primeiro boot. Só o valor literal running é aceito. Vale só no primeiro boot: um gateway_state.json existente nunca é sobrescrito, então um gateway parado de propósito continua parado entre reinícios. Sem efeito fora da imagem s6.
GATEWAY_RELAY_URLURL base de WebSocket do conector de relay experimental. Quando definida, o gateway registra o adaptador genérico relay e disca para o conector. Espelha gateway.relay_url no config.yaml.
GATEWAY_RELAY_IDIdentificador de gateway de relay atribuído por hermes gateway enroll ou pelo autoprovisionamento gerenciado. Espelha gateway.relay_id.
GATEWAY_RELAY_SECRETSegredo de relay por gateway usado para autenticar o WebSocket. Se ele já estiver configurado, o autoprovisionamento gerenciado é pulado. Espelha gateway.relay_secret.
GATEWAY_RELAY_DELIVERY_KEYChave de entrega emitida pelo conector, mantida por compatibilidade de autenticação de relay/passthrough. Hoje as mensagens de entrada do relay chegam pelo WebSocket de saída, e não por um receptor HTTP do lado do gateway.
GATEWAY_RELAY_ENROLL_TOKENToken de inscrição consumido por hermes gateway enroll quando --token não é passado explicitamente.
GATEWAY_RELAY_PLATFORMNome de plataforma opcional anunciado no descritor de capacidade do relay.
GATEWAY_RELAY_BOT_IDIdentificador de bot opcional anunciado no descritor de capacidade do relay.
GATEWAY_RELAY_ENDPOINTEndpoint de gateway opcional anunciado para modos de conector que precisam de uma URL de callback/passthrough; não é necessário no caminho padrão de entrada só por WS. Espelha gateway.relay_endpoint.
GATEWAY_RELAY_ROUTE_KEYSChaves de rota de relay separadas por vírgula anunciadas ao conector. Espelha gateway.relay_route_keys.
HERMES_FILE_MUTATION_VERIFIERAtiva o rodapé por turno do verificador de mutação de arquivos (padrão: true). Com ele ligado, o Hermes acrescenta um aviso listando as chamadas de write_file / patch que falharam no turno e não foram substituídas por uma gravação bem-sucedida. Use 0, false, no ou off para suprimir. Espelha display.file_mutation_verifier no config.yaml; a variável de ambiente ganha quando definida.
HERMES_CRON_TIMEOUTTempo limite de inatividade das execuções de agente das tarefas do cron, em segundos (padrão: 600). O agente pode rodar indefinidamente enquanto chama ferramentas ou recebe tokens do stream — isto só dispara quando ele fica ocioso. Use 0 para ilimitado.
HERMES_CRON_SCRIPT_TIMEOUTTempo limite dos scripts de pré-execução anexados a tarefas do cron, em segundos (padrão: 3600). Limita só o script — tarefas de skill/agente usam o orçamento de inatividade separado HERMES_CRON_TIMEOUT. Também configurável por cron.script_timeout_seconds no config.yaml.
HERMES_CRON_MEDIA_SEND_TIMEOUTTempo limite de cada envio de anexo de mídia durante a entrega do cron por um adaptador de gateway ativo, em segundos (padrão: 300). Aumente se anexos grandes (áudio TTS longo, exportações grandes) estourarem o tempo no upload. Também configurável por cron.media_send_timeout_seconds no config.yaml.
HERMES_CRON_MAX_PARALLELMáximo de tarefas de cron executadas em paralelo por tique (padrão: 4).

NeMo Relay​

VariávelDescrição
HERMES_NEMO_RELAY_PLUGINS_TOMLCaminho explícito para o plugins.toml padrão do NeMo Relay, carregado no processo inteiro pelo núcleo do Hermes. Sem valor, o Hermes não inicializa middleware, plugins dinâmicos nem exportadores do Relay. As variáveis removidas HERMES_NEMO_RELAY_ATOF_* e HERMES_NEMO_RELAY_ATIF_* são ignoradas; configure essas saídas no arquivo escolhido. Veja a configuração de observabilidade do NeMo Relay.

Comportamento do agente​

VariávelDescrição
HERMES_MAX_ITERATIONSMáximo de iterações de chamada de ferramenta por conversa (padrão: 500)
HERMES_INFERENCE_MODELSobrescreve o nome do modelo no nível do processo (tem prioridade sobre o config.yaml na sessão). Também definível pela flag -m/--model.
HERMES_YOLO_MODEDefina como 1 para pular os prompts de aprovação de comandos perigosos. Equivale a --yolo.
HERMES_ACCEPT_HOOKSAprova automaticamente quaisquer hooks de shell inéditos declarados no config.yaml, sem prompt no TTY. Equivale a --accept-hooks ou a hooks_auto_accept: true.
HERMES_IGNORE_USER_CONFIGIgnora o ~/.hermes/config.yaml e usa os padrões embutidos (as credenciais do .env continuam sendo carregadas). Equivale a --ignore-user-config.
HERMES_IGNORE_RULESPula a injeção automática de AGENTS.md, SOUL.md, .cursorrules, memória e skills pré-carregadas. Equivale a --ignore-rules.
HERMES_SAFE_MODEModo de diagnóstico: desativa TODAS as personalizações — pula a descoberta de plugins, o carregamento de servidores MCP e o registro de hooks de shell. Definida automaticamente por --safe-mode (que também liga as duas flags acima).
HERMES_TOOL_PROGRESSSem suporte desde o piso de compatibilidade do config-v12 — a variável é ignorada. Use display.tool_progress no config.yaml.
HERMES_TOOL_PROGRESS_MODEVariável de compatibilidade obsoleta para o modo de progresso de ferramenta (ainda lida pelo gateway como reserva). Prefira display.tool_progress no config.yaml.
HERMES_HUMAN_DELAY_MODERitmo das respostas: off/natural/custom
HERMES_HUMAN_DELAY_MIN_MSMínimo da faixa de atraso personalizada (ms)
HERMES_HUMAN_DELAY_MAX_MSMáximo da faixa de atraso personalizada (ms)
HERMES_QUIETSuprime a saída não essencial (true/false)
CODEX_HOMEQuando o runtime do Codex app-server está ativo, sobrescreve o diretório de onde a CLI do Codex lê configuração e autenticação (padrão: ~/.codex). A migração do Hermes grava o bloco gerenciado em <CODEX_HOME>/config.toml.
HERMES_KANBAN_TASKDefinida pelo dispatcher do kanban ao subir um worker (UUID da tarefa). Os workers e o subprocesso MCP hermes-tools gerado herdam a variável, para que as ferramentas do kanban se restrinjam corretamente. Não defina à mão.
HERMES_ACP_SKIP_CONFIGURED_MCPDefinida por um host ACP no subprocesso Hermes que ele sobe. 1 pula a inicialização dos servidores MCP configurados globalmente no config.yaml antes do laço JSON-RPC do ACP, para hosts que passam os servidores MCP da sessão por session/new. Os servidores fornecidos pela sessão ACP continuam sendo registrados; qualquer outro valor mantém o comportamento padrão. Não defina à mão.
HERMES_API_TIMEOUTTempo limite das chamadas à API da LLM em segundos (padrão: 1800)
HERMES_API_CALL_STALE_TIMEOUTTempo limite de chamada parada sem streaming, em segundos (padrão: 90). Desligado automaticamente em provedores locais quando não definido, e pode aumentar em contextos muito grandes. Também configurável por providers.<id>.stale_timeout_seconds ou providers.<id>.models.<model>.stale_timeout_seconds no config.yaml.
HERMES_STREAM_READ_TIMEOUTTempo limite de leitura do socket de streaming em segundos (padrão: 120). Aumentado automaticamente para HERMES_API_TIMEOUT em provedores locais. Aumente se LLMs locais estouram o tempo em gerações longas de código.
HERMES_STREAM_STALE_TIMEOUTTempo limite de detecção de stream parado em segundos (padrão: 180). Desligado automaticamente em provedores locais. Mata a conexão se nenhum trecho chegar nessa janela.
HERMES_LOCAL_STREAM_STALE_TIMEOUTTeto de stream parado em provedores locais (Ollama, oMLX, llama-cpp), em segundos (padrão: 900). Quando o tempo limite base de parada está no padrão e um endpoint local é detectado, este teto finito substitui a antiga desativação infinita, para que um servidor local travado acabe disparando o detector em vez de ficar pendurado para sempre. Também configurável por agent.local_stream_stale_timeout no config.yaml.
HERMES_STREAM_RETRIESNúmero de tentativas de reconexão no meio do stream em erros transitórios de rede (padrão: 3).
HERMES_STREAM_STALE_GIVEUPDisjuntor entre turnos: depois desta quantidade de mortes consecutivas por parada (com ou sem streaming) sem nenhuma resposta completa, aborta cada chamada na hora com um erro acionável em vez de esperar de novo o tempo limite de parada (padrão: 5, 0 desativa). Zera em qualquer resposta completa, troca de /model, ativação de reserva ou restauração do primário no começo do turno.
HERMES_AGENT_TIMEOUTTempo limite de inatividade do gateway para um agente em execução, em segundos (padrão: 1800, 30 minutos). Zera a cada chamada de ferramenta e a cada token transmitido. Use 0 para desativar.
HERMES_GATEWAY_MAX_STARTSDisjuntor de tempestade de reinício: máximo de (re)inícios do gateway permitidos dentro da janela antes de um recuo exponencial ser aplicado para quebrar a tempestade (padrão: 5, 0 desativa). Também configurável por gateway.respawn_storm.max_starts no config.yaml.
HERMES_GATEWAY_START_WINDOW_SJanela do disjuntor de tempestade de reinício, em segundos (padrão: 120). Também configurável por gateway.respawn_storm.window_seconds no config.yaml.
HERMES_AGENT_TIMEOUT_WARNINGGateway: envia uma mensagem de aviso após esta quantidade de segundos de inatividade (padrão: 75% de HERMES_AGENT_TIMEOUT).
HERMES_AGENT_NOTIFY_INTERVALGateway: intervalo em segundos entre as notificações de progresso em turnos longos do agente.
HERMES_CHECKPOINT_TIMEOUTTempo limite para criar um checkpoint de sistema de arquivos, em segundos (padrão: 30).
HERMES_EXEC_ASKAtiva os prompts de aprovação de execução no modo gateway (true/false)
HERMES_ENABLE_PROJECT_PLUGINSAtiva a descoberta automática de plugins locais do repositório em ./.hermes/plugins/, tanto para o carregador do agente quanto para o servidor web do painel. Aceita o conjunto verdadeiro padrão: 1 / true / yes / on (sem diferenciar maiúsculas). Todo o resto — incluindo 0, false, no, off e a string vazia — é tratado como desativado (padrão). Atenção: desde a GHSA-5qr3-c538-wm9j (#29156) o servidor web do painel se recusa a importar automaticamente o arquivo Python api de um plugin de projeto, mesmo com esta variável ligada — plugins de projeto podem estender a interface com JS/CSS estáticos, mas as rotas de backend só são carregadas quando movidas para ~/.hermes/plugins/.
HERMES_PLUGINS_DEBUG1/true para mostrar logs detalhados de descoberta de plugins no stderr — diretórios varridos, manifestos lidos, motivos de descarte e tracebacks completos em falhas de parse ou de register(). Voltada a quem escreve plugins.
HERMES_BACKGROUND_NOTIFICATIONSModo de notificação de processos em segundo plano no gateway: concise (padrão), all, result, error, off
HERMES_EPHEMERAL_SYSTEM_PROMPTPrompt de sistema efêmero injetado na hora da chamada de API (nunca persistido nas sessões)
HERMES_PREFILL_MESSAGES_FILECaminho para um arquivo JSON com mensagens efêmeras de preenchimento injetadas na hora da chamada de API.
HERMES_ALLOW_PRIVATE_URLStrue/false — permite que as ferramentas busquem URLs de localhost/rede privada. Desligado por padrão no modo gateway.
HERMES_REDACT_SECRETStrue/false — controla a redação de segredos na saída das ferramentas, nos logs e nas respostas do chat (padrão: true).
HERMES_WRITE_SAFE_ROOTPrefixo de diretório opcional que bloqueia de vez gravações de write_file/patch fora das raízes listadas (sem prompt de aprovação). Aceita vários diretórios separados por os.pathsep (: no Unix, ; no Windows). Veja HERMES_WRITE_SAFE_ROOT abaixo.
HERMES_DISABLE_LAZY_INSTALLSVariável interna de ponte, definida automaticamente na imagem Docker oficial para impedir instalações de dependência em tempo de execução dentro da árvore imutável /opt/hermes. O equivalente voltado ao usuário é security.allow_lazy_installs: false no config.yaml; não coloque esta variável no .env.
HERMES_DISABLE_FILE_STATE_GUARDDefina como 1 para desligar a proteção de "o arquivo mudou desde que você leu" em patch/write_file.
HERMES_BUNDLED_SKILLSSobrescrita separada por vírgula da lista de skills embutidas carregadas na inicialização.
HERMES_OPTIONAL_SKILLSLista separada por vírgula de nomes de skills opcionais a instalar automaticamente na primeira execução.
HERMES_DEBUG_INTERRUPTDefina como 1 para registrar rastreamento detalhado de interrupção/cancelamento no agent.log.
HERMES_DUMP_REQUESTSDespeja os payloads de requisição da API em arquivos de log (true/false)
HERMES_DUMP_REQUEST_STDOUTDespeja os payloads de requisição da API no stdout em vez de em arquivos de log.
HERMES_OAUTH_TRACEDefina como 1 para registrar as trocas e renovações de token OAuth. Inclui informação de tempo redigida.
HERMES_AGENT_HELP_GUIDANCEAcrescenta texto de orientação extra ao prompt de sistema, para implantações personalizadas.
HERMES_AGENT_LOGOSobrescreve o logo ASCII exibido na inicialização da CLI.
DELEGATION_MAX_CONCURRENT_CHILDRENMáximo de subagentes em paralelo por lote de delegate_task (padrão: 3, piso de 1, sem teto). Também configurável por delegation.max_concurrent_children no config.yaml — o valor do config tem prioridade.

HERMES_WRITE_SAFE_ROOT​

Com esta variável definida, write_file e patch só podem escrever em caminhos dentro do prefixo (ou dos prefixos) de diretório listados. Qualquer caminho fora dessas raízes é rejeitado na hora — a gravação não passa pelo sistema de aprovação de comandos perigosos e não há prompt para liberar.

A imagem Docker oficial define HERMES_WRITE_SAFE_ROOT=/opt/data junto de HERMES_HOME=/opt/data, para que o agente não escape do volume de dados montado.

Não acrescente isto ao ~/.hermes/.env a menos que você queira mesmo isolar as gravações. Um erro comum é apontar a variável para um diretório de projeto esperando que o agente edite ~/.hermes/cron/jobs.json, ~/.hermes/skills/ ou scripts sob um perfil — esses caminhos ficam fora do isolamento e todo write_file/patch neles falha com um erro outside HERMES_WRITE_SAFE_ROOT.

Para liberar tanto um espaço de trabalho quanto o estado do Hermes, liste os dois prefixos (a ordem não importa):

export HERMES_WRITE_SAFE_ROOT=/caminho/do/projeto:/home/voce/.hermes

Remova a variável ou tire-a do .env para voltar às gravações normais (ainda sujeitas à lista de bloqueio de caminhos de credencial — veja Segurança na gravação de arquivos).

Interface​

VariávelDescrição
HERMES_TUIAbre a TUI em vez da CLI clássica quando vale 1. Equivale a passar --tui.
HERMES_TUI_DIRCaminho para um diretório ui-tui/ já compilado (precisa conter dist/entry.js e um node_modules preenchido). Usado por distribuições e pelo Nix para pular o npm install da primeira execução.
HERMES_TUI_RESUMERetoma uma sessão específica da TUI por ID na abertura. Quando definida, hermes --tui deixa de forjar uma sessão nova e assume a sessão indicada — útil para reconectar depois de uma queda de conexão ou do terminal.
HERMES_TUI_THEMEForça o tema de cores da TUI: light, dark ou um hex de fundo puro de 6 caracteres (por exemplo ffffff ou 1a1a2e). Sem valor, o Hermes detecta sozinho usando COLORFGBG e consultas de fundo do terminal; esta variável sobrescreve a detecção em terminais (Ghostty, Warp, iTerm2 etc.) que não definem COLORFGBG.
HERMES_INFERENCE_MODELForça o modelo de hermes -z / hermes chat sem mexer no config.yaml. Combina com a flag --provider. Útil para chamadores em script (varredores, CI, executores em lote) que precisam sobrescrever o modelo padrão a cada execução.

Configurações de sessão​

VariávelDescrição
SESSION_IDLE_MINUTESReinicia as sessões depois de N minutos de inatividade (padrão: 1440)
SESSION_RESET_HOURHora do reinício diário no formato de 24h (padrão: 4 = 4h da manhã)
HERMES_SESSION_IDExportada automaticamente para todo subprocesso de ferramenta que o Hermes sobe (terminal, execute_code, shell persistente, backends Docker/Singularity, execuções de subagente delegadas). Definida pelo agente com o ID da sessão atual; scripts seus chamados a partir das ferramentas podem lê-la para correlacionar saída, telemetria ou efeitos colaterais com a sessão do Hermes de origem. Você não deve definir isto à mão — sobrescrever a partir de um shell pai só tem efeito fora de uma execução de agente, e é apagado no instante em que o agente inicia uma sessão.
AI_AGENTDefinida como hermes-agent pelos pontos de entrada da CLI e do gateway (só quando um harness externo ainda não a definiu), e exportada para todo shell da ferramenta de terminal — inclusive backends remotos (Docker, SSH, Modal, Daytona, Singularity, Vercel). É o padrão emergente entre agentes para atribuição de processo filho — ferramentas genéricas (por exemplo a detecção de agente do huggingface_hub) a leem para saber que estão rodando sob um agente de IA. O valor corresponde ao id do Hermes no registro público de harnesses de agente. Não defina à mão.
HERMES_AGENTDefinida como true pelos pontos de entrada da CLI e do gateway e exportada para todo shell da ferramenta de terminal, para que os processos filhos detectem que rodam dentro do Hermes especificamente. Não defina à mão.

Compressão de contexto (só no config.yaml)​

A compressão de contexto é configurada exclusivamente pelo config.yaml — não existem variáveis de ambiente para ela. Os ajustes de limiar ficam no bloco compression:, enquanto o modelo/provedor de sumarização fica sob auxiliary.compression:.

compression:
enabled: true
threshold: 0.50
target_ratio: 0.20 # fração do limiar a preservar como cauda recente
protect_last_n: 20 # mínimo de mensagens recentes a manter sem compressão
Migração de configurações antigas

Configurações antigas com compression.summary_model, compression.summary_provider e compression.summary_base_url são migradas automaticamente para auxiliary.compression.* no primeiro carregamento.

Sobrescritas de tarefas auxiliares​

VariávelDescrição
AUXILIARY_VISION_PROVIDERSobrescreve o provedor das tarefas de visão
AUXILIARY_VISION_MODELSobrescreve o modelo das tarefas de visão
AUXILIARY_VISION_BASE_URLEndpoint direto compatível com OpenAI para as tarefas de visão
AUXILIARY_VISION_API_KEYChave de API pareada com AUXILIARY_VISION_BASE_URL
observação

As variáveis AUXILIARY_WEB_EXTRACT_* estão obsoletas: web_extract e os snapshots de navegador não usam mais uma LLM auxiliar. Páginas longas e snapshots são truncados de forma determinística, com o texto completo guardado em disco para paginação com read_file.

Para endpoints diretos específicos de uma tarefa, o Hermes usa a chave de API configurada para a tarefa ou OPENAI_API_KEY. Ele não reaproveita OPENROUTER_API_KEY nesses endpoints personalizados.

Provedores de reserva (só no config.yaml)​

A cadeia de reserva do modelo principal é configurada exclusivamente pelo config.yaml — não existem variáveis de ambiente para ela. Acrescente uma lista fallback_providers no nível raiz, com as chaves provider e model, para ativar o failover automático quando o seu modelo principal encontrar erros. Tarefas auxiliares cujo provedor é auto também consultam essa cadeia antes da cadeia embutida de descoberta auxiliar do Hermes.

fallback_providers:
- provider: openrouter
model: anthropic/claude-sonnet-4

O formato antigo de provedor único fallback_model no nível raiz ainda é lido por compatibilidade, mas as configurações novas devem usar fallback_providers. Para política auxiliar específica de tarefa, use auxiliary.<task>.fallback_chain no config.yaml; não existe variável de ambiente equivalente.

Veja Provedores de reserva para todos os detalhes.

Roteamento de provedores (só no config.yaml)​

Estas vão no ~/.hermes/config.yaml, na seção provider_routing:

ChaveDescrição
sortOrdena os provedores: "price" (padrão), "throughput" ou "latency"
onlyLista de slugs de provedor a permitir (por exemplo ["anthropic", "google"])
ignoreLista de slugs de provedor a pular
orderLista de slugs de provedor a tentar em ordem
require_parametersSó usa provedores que suportam todos os parâmetros da requisição (true/false)
data_collection"allow" (padrão) ou "deny" para excluir provedores que guardam dados
dica

Use hermes config set para definir variáveis de ambiente — ele salva automaticamente no arquivo certo (.env para segredos, config.yaml para o resto).