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ável | Descrição |
|---|---|
OPENROUTER_API_KEY | Chave de API do OpenRouter (recomendada pela flexibilidade) |
OPENROUTER_BASE_URL | Sobrescreve a URL base compatível com OpenRouter |
FIREWORKS_API_KEY | Chave de API da Fireworks AI (app.fireworks.ai). Configure sobrescritas de endpoint com model.base_url no config.yaml. |
HERMES_OPENROUTER_CACHE | Ativa o cache de respostas do OpenRouter (1/true/yes/on). Sobrescreve openrouter.response_cache no config.yaml. Veja Response Caching. |
HERMES_OPENROUTER_CACHE_TTL | TTL do cache em segundos (1-86400). Sobrescreve openrouter.response_cache_ttl no config.yaml. |
NOUS_BASE_URL | Sobrescreve a URL base do Nous Portal (raramente necessário; só para desenvolvimento/teste) |
NOUS_INFERENCE_BASE_URL | Sobrescreve diretamente o endpoint de inferência da Nous |
AI_GATEWAY_API_KEY | Chave de API do Vercel AI Gateway (ai-gateway.vercel.sh) |
AI_GATEWAY_BASE_URL | Sobrescreve a URL base do AI Gateway (padrão: https://ai-gateway.vercel.sh/v1) |
OPENAI_API_KEY | Chave de API para endpoints compatíveis com OpenAI (usada junto de OPENAI_BASE_URL) |
OPENAI_BASE_URL | URL base do endpoint personalizado (VLLM, SGLang etc.) |
LM_API_KEY | Chave de API do LM Studio (provedor lmstudio). Costuma ser um valor de preenchimento em servidores locais |
LM_BASE_URL | URL base do LM Studio (padrão: http://localhost:1234/v1) |
COPILOT_GITHUB_TOKEN | Token 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_TOKEN | Token do GitHub — segunda prioridade para o Copilot (também usado pela CLI gh) |
GITHUB_TOKEN | Token do GitHub — terceira prioridade para o Copilot |
HERMES_COPILOT_ACP_COMMAND | Sobrescreve o caminho do binário da CLI ACP do Copilot (padrão: copilot) |
COPILOT_CLI_PATH | Apelido de HERMES_COPILOT_ACP_COMMAND |
HERMES_COPILOT_ACP_ARGS | Sobrescreve os argumentos ACP do Copilot (padrão: --acp --stdio) |
COPILOT_ACP_BASE_URL | Sobrescreve a URL base do ACP do Copilot |
COPILOT_API_BASE_URL | Sobrescreve a URL base da API do Copilot (provedor copilot) |
GLM_API_KEY | Chave de API GLM da z.ai / ZhipuAI (z.ai) |
ZAI_API_KEY | Apelido de GLM_API_KEY |
Z_AI_API_KEY | Apelido de GLM_API_KEY |
GLM_BASE_URL | Sobrescreve a URL base da z.ai (padrão: https://api.z.ai/api/paas/v4) |
KIMI_API_KEY | Chave de API da Kimi / Moonshot AI (moonshot.ai) |
KIMI_CODING_API_KEY | Chave alternativa para o provedor kimi-coding (aceita junto de KIMI_API_KEY) |
KIMI_BASE_URL | Sobrescreve a URL base da Kimi (padrão: https://api.moonshot.ai/v1) |
KIMI_CN_API_KEY | Chave de API da Kimi / Moonshot na China (moonshot.cn) |
ARCEEAI_API_KEY | Chave de API da Arcee AI (chat.arcee.ai) |
ARCEE_BASE_URL | Sobrescreve a URL base da Arcee (padrão: https://api.arcee.ai/api/v1) |
GMI_API_KEY | Chave de API da GMI Cloud (gmicloud.ai) |
GMI_BASE_URL | Sobrescreve a URL base da GMI Cloud (padrão: https://api.gmi-serving.com/v1) |
ACTUAL_API_KEY | Chave de inferência da Actual Computer (ac_..., actual.inc/user/keys). Não é necessária para o daemon local. |
ACTUAL_BASE_URL | Sobrescreve 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_KEY | Chave de API da MiniMax — endpoint global (minimax.io). Não é usada pelo minimax-oauth (o caminho OAuth usa login pelo navegador). |
MINIMAX_BASE_URL | Sobrescreve 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_KEY | Chave 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_URL | Sobrescreve a URL base da MiniMax na China (padrão: https://api.minimaxi.com/anthropic). Não é usada pelo minimax-oauth. |
KILOCODE_API_KEY | Chave de API do Kilo Code (kilo.ai) |
KILOCODE_BASE_URL | Sobrescreve a URL base do Kilo Code (padrão: https://api.kilo.ai/api/gateway) |
XIAOMI_API_KEY | Chave de API do Xiaomi MiMo (platform.xiaomimimo.com) |
XIAOMI_BASE_URL | Sobrescreve a URL base do Xiaomi MiMo (padrão: https://api.xiaomimimo.com/v1) |
UPSTAGE_API_KEY | Chave de API da Upstage para os modelos Solar (console.upstage.ai) |
UPSTAGE_BASE_URL | Sobrescreve a URL base da Upstage (padrão: https://api.upstage.ai/v1) |
TOKENHUB_API_KEY | Chave de API do TokenHub da Tencent (tokenhub.tencentmaas.com) |
TOKENHUB_BASE_URL | Sobrescreve a URL base do TokenHub da Tencent (padrão: https://tokenhub.tencentmaas.com/v1) |
AZURE_FOUNDRY_API_KEY | Chave de API do Microsoft Foundry / Azure OpenAI (ai.azure.com). Dispensável quando model.auth_mode: entra_id |
AZURE_FOUNDRY_BASE_URL | URL 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_KEY | Chave 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_ID | ID do tenant no Entra ID (fluxos de service principal; respeitado pelo azure-identity quando model.auth_mode: entra_id) |
AZURE_CLIENT_ID | ID de cliente no Entra ID (service principal, workload identity ou identidade gerenciada atribuída pelo usuário) |
AZURE_CLIENT_SECRET | Segredo do service principal usado pelo EnvironmentCredential |
AZURE_CLIENT_CERTIFICATE_PATH | Certificado do service principal (alternativa a AZURE_CLIENT_SECRET) |
AZURE_FEDERATED_TOKEN_FILE | Caminho do arquivo de token federado para fluxos de AKS Workload Identity / OIDC |
AZURE_AUTHORITY_HOST | Sobrescrita de autoridade para nuvens soberanas (por exemplo https://login.microsoftonline.us no Azure Government). Veja o guia do Azure Foundry |
IDENTITY_ENDPOINT / MSI_ENDPOINT | Endpoint de Managed Identity para App Service, Functions e Container Apps; VMs normalmente usam o IMDS e não definem estas variáveis |
HF_TOKEN | Token do Hugging Face para os Inference Providers (huggingface.co/settings/tokens) |
HF_BASE_URL | Sobrescreve a URL base do Hugging Face (padrão: https://router.huggingface.co/v1) |
GOOGLE_API_KEY | Chave de API do Google AI Studio (aistudio.google.com/app/apikey) |
GEMINI_API_KEY | Apelido de GOOGLE_API_KEY |
GEMINI_BASE_URL | Sobrescreve a URL base do Google AI Studio |
VERTEX_CREDENTIALS_PATH | Caminho 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_KEY | Chave de API do Anthropic Console (console.anthropic.com) |
ANTHROPIC_BASE_URL | Sobrescreve a URL base da API da Anthropic |
ANTHROPIC_TOKEN | Sobrescrita manual ou legada de token OAuth/setup da Anthropic |
DASHSCOPE_API_KEY | Chave de API do Qwen Cloud (Alibaba DashScope) para os modelos Qwen (modelstudio.console.alibabacloud.com) |
DASHSCOPE_BASE_URL | URL 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_KEY | Chave de API do Qwen Coding Plan (provedor alibaba-coding-plan) |
ALIBABA_CODING_PLAN_BASE_URL | Sobrescreve a URL base do Qwen Coding Plan |
DEEPSEEK_API_KEY | Chave de API da DeepSeek para acesso direto (platform.deepseek.com) |
DEEPSEEK_BASE_URL | URL base personalizada da API da DeepSeek |
DEEPINFRA_API_KEY | Chave de API da DeepInfra (deepinfra.com) |
DEEPINFRA_BASE_URL | Sobrescreve a URL base da DeepInfra |
NOVITA_API_KEY | Chave de API da NovitaAI — nuvem nativa de IA para Model API, Agent Sandbox e GPU Cloud (novita.ai/settings/key-management) |
NOVITA_BASE_URL | Sobrescreve a URL base da NovitaAI (padrão: https://api.novita.ai/openai/v1) |
NVIDIA_API_KEY | Chave de API do NVIDIA NIM — Nemotron e modelos abertos (build.nvidia.com) |
NVIDIA_BASE_URL | Sobrescreve 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_KEY | Chave de API da StepFun — modelos da série Step (platform.stepfun.com) |
STEPFUN_BASE_URL | Sobrescreve a URL base da StepFun (padrão: https://api.stepfun.com/v1) |
OLLAMA_API_KEY | Chave de API do Ollama Cloud — catálogo gerenciado do Ollama sem GPU local (ollama.com/settings/keys) |
OLLAMA_BASE_URL | Sobrescreve a URL base do Ollama Cloud (padrão: https://ollama.com/v1) |
XAI_API_KEY | Chave de API da xAI (Grok) para chat + TTS + busca na web (console.x.ai) |
XAI_BASE_URL | Sobrescreve a URL base da xAI (padrão: https://api.x.ai/v1) |
MISTRAL_API_KEY | Chave de API da Mistral para Voxtral TTS e Voxtral STT (console.mistral.ai) |
AWS_REGION | Região AWS para inferência no Bedrock (por exemplo us-east-1, eu-central-1). Lida pelo boto3. |
AWS_PROFILE | Perfil 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_URL | Sobrescreve 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_URL | Sobrescreve a URL base do Qwen Portal (padrão: https://portal.qwen.ai/v1) |
OPENCODE_ZEN_API_KEY | Chave de API do OpenCode Zen — acesso pré-pago a modelos curados (opencode.ai) |
OPENCODE_ZEN_BASE_URL | Sobrescreve a URL base do OpenCode Zen |
OPENCODE_GO_API_KEY | Chave de API do OpenCode Go — assinatura de US$ 10/mês para modelos abertos (opencode.ai) |
OPENCODE_GO_BASE_URL | Sobrescreve a URL base do OpenCode Go |
CLAUDE_CODE_OAUTH_TOKEN | Sobrescrita explícita do token do Claude Code, se você exportar um manualmente |
HERMES_MODEL | Sobrescreve o nome do modelo no nível do processo (usado pelo agendador do cron; prefira o config.yaml no uso normal) |
VOICE_TOOLS_OPENAI_KEY | Chave OpenAI preferida para os provedores OpenAI de fala-para-texto e texto-para-fala |
HERMES_LOCAL_STT_COMMAND | Modelo de comando local opcional para fala-para-texto. Aceita os marcadores {input_path}, {output_dir}, {language} e {model} |
HERMES_LOCAL_STT_LANGUAGE | Idioma 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_HOME | Sobrescreve 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_PATH | Só 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_UTF8 | Só 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_HOME | Sobrescreve 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_BOARD | Fixa 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_DB | Fixa 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_ROOT | Fixa 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_GATEWAY | Sobrescrita 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ável | Descrição |
|---|---|
HERMES_PORTAL_BASE_URL | Sobrescreve a URL do Nous Portal (para desenvolvimento/teste) |
NOUS_INFERENCE_BASE_URL | Sobrescreve a URL da API de inferência da Nous |
HERMES_NOUS_MIN_KEY_TTL_SECONDS | TTL mínimo da chave do agente antes de emitir outra (padrão: 1800 = 30min) |
HERMES_NOUS_TIMEOUT_SECONDS | Tempo limite HTTP para os fluxos de credencial / token da Nous |
HERMES_DUMP_REQUESTS | Despeja os payloads de requisição da API em arquivos de log (true/false) |
HERMES_PREFILL_MESSAGES_FILE | Caminho para um arquivo JSON com mensagens efêmeras de preenchimento injetadas na hora da chamada de API |
HERMES_TIMEZONE | Sobrescreve o fuso horário IANA (por exemplo America/Sao_Paulo) |
APIs de ferramentas
| Variável | Descrição |
|---|---|
PARALLEL_API_KEY | Busca na web nativa de IA (parallel.ai) |
FIRECRAWL_API_KEY | Raspagem de web e navegador na nuvem (firecrawl.dev) |
FIRECRAWL_API_URL | Endpoint personalizado da API do Firecrawl para instâncias auto-hospedadas (opcional) |
TAVILY_API_KEY | Chave 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_URL | URL de uma instância SearXNG para busca na web auto-hospedada e gratuita — não exige chave de API (searxng.github.io) |
TAVILY_BASE_URL | Sobrescreve 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_KEY | Chave de API da Exa para busca na web e conteúdos nativos de IA (exa.ai) |
BRAVE_SEARCH_API_KEY | Token de assinatura da API do Brave Search para busca na web (há camada gratuita) (brave.com/search/api) |
BROWSERBASE_API_KEY | Automação de navegador (browserbase.com) |
BROWSERBASE_PROJECT_ID | ID do projeto no Browserbase |
BROWSER_USE_API_KEY | Chave de API do navegador na nuvem do Browser Use (browser-use.com) |
FIRECRAWL_BROWSER_TTL | TTL da sessão de navegador do Firecrawl em segundos (padrão: 300) |
BROWSER_CDP_URL | URL do Chrome DevTools Protocol para o navegador local (definida por /browser connect, por exemplo ws://localhost:9222) |
CAMOFOX_URL | Endereç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_KEY | Token bearer opcional enviado no cabeçalho Authorization para um servidor Camofox remoto/autenticado |
CAMOFOX_USER_ID | ID de usuário Camofox gerenciado externamente, opcional, para sessões visíveis compartilhadas |
CAMOFOX_SESSION_KEY | Chave de sessão opcional do Camofox usada ao criar abas para CAMOFOX_USER_ID |
CAMOFOX_ADOPT_EXISTING_TAB | Defina como true para reaproveitar uma aba existente do Camofox antes de criar outra |
BROWSER_INACTIVITY_TIMEOUT | Tempo limite de inatividade da sessão de navegador em segundos |
AGENT_BROWSER_ARGS | Flags 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_ENGINE | Motor de navegador no modo local: auto (padrão — família Chromium via CDP) ou uma sobrescrita de motor específica. |
FAL_KEY | Geração de imagem (fal.ai) |
KREA_API_KEY | Chave de API da Krea para geração de imagem com o Krea 2 (krea.ai) |
GROQ_API_KEY | Chave de API do Whisper STT da Groq (groq.com) |
ELEVENLABS_API_KEY | Vozes TTS premium da ElevenLabs (elevenlabs.io) |
PORCUPINE_ACCESS_KEY | Motor 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_MODEL | Sobrescreve o modelo de STT da Groq (padrão: whisper-large-v3-turbo) |
GROQ_BASE_URL | Sobrescreve o endpoint de STT compatível com OpenAI da Groq |
STT_OPENAI_MODEL | Sobrescreve o modelo de STT da OpenAI (padrão: whisper-1) |
STT_OPENAI_BASE_URL | Sobrescreve o endpoint de STT compatível com OpenAI |
GITHUB_TOKEN | Token do GitHub para o Skills Hub (limites de API maiores, publicação de skills) |
HONCHO_API_KEY | Modelagem de usuário entre sessões (honcho.dev) |
HONCHO_BASE_URL | URL base para instâncias auto-hospedadas do Honcho (padrão: nuvem do Honcho). Instâncias locais não exigem chave de API |
HINDSIGHT_API_KEY | Chave de API do Hindsight para memória persistente com grafo (hindsight.vectorize.io) |
HINDSIGHT_API_URL | URL base da API do Hindsight (padrão: https://api.hindsight.vectorize.io) |
HINDSIGHT_TIMEOUT | Tempo 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_KEY | Chave de API da plataforma Mem0 para memória persistente semântica (app.mem0.ai) |
MEM0_MODE | Modo de backend do Mem0: platform (padrão) ou oss — veja Provedores de memória |
MEM0_HOST | URL base de um servidor Mem0 auto-hospedado (tira o plugin da API da plataforma) |
MEM0_USER_ID | Sobrescreve o id de usuário sob o qual as memórias do Mem0 são guardadas |
MEM0_AGENT_ID | Sobrescreve o id de agente com que as memórias do Mem0 são marcadas |
RETAINDB_API_KEY | Chave de API do RetainDB para memória persistente (retaindb.com) |
RETAINDB_BASE_URL | URL base para instâncias auto-hospedadas do RetainDB (padrão: https://api.retaindb.com) |
OPENVIKING_API_KEY | Chave de API do OpenViking (deixe em branco no modo de desenvolvimento local) |
OPENVIKING_ENDPOINT | URL do servidor OpenViking (padrão: http://127.0.0.1:1933) |
BRV_API_KEY | Chave de API do ByteRover (opcional, para sincronização na nuvem — por padrão é local-first) (app.byterover.dev) |
SUPERMEMORY_API_KEY | Memória semântica de longo prazo com recuperação de perfil e ingestão de sessão (supermemory.ai) |
DAYTONA_API_KEY | Sandboxes na nuvem do Daytona (daytona.io) |
VERCEL_TOKEN | Token de acesso do Vercel Sandbox (vercel.com) |
VERCEL_PROJECT_ID | ID do projeto na Vercel (obrigatório junto de VERCEL_TOKEN) |
VERCEL_TEAM_ID | ID do time na Vercel (obrigatório junto de VERCEL_TOKEN) |
VERCEL_OIDC_TOKEN | Token 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ável | Usada pela skill | Descrição |
|---|---|---|
NOTION_API_KEY | notion | Token de integração do Notion. |
LINEAR_API_KEY | linear | Chave de API pessoal do Linear. |
AIRTABLE_API_KEY | airtable | Token de acesso pessoal do Airtable. |
TENOR_API_KEY | gif-search | Chave 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ável | Descrição |
|---|---|
HERMES_LANGFUSE_PUBLIC_KEY | Chave pública do projeto Langfuse (pk-lf-...). Obrigatória. |
HERMES_LANGFUSE_SECRET_KEY | Chave secreta do projeto Langfuse (sk-lf-...). Obrigatória. |
HERMES_LANGFUSE_BASE_URL | URL do servidor Langfuse (padrão: https://cloud.langfuse.com). Defina para instalações auto-hospedadas. |
HERMES_LANGFUSE_ENV | Etiqueta de ambiente nos traces (production, staging, …) |
HERMES_LANGFUSE_RELEASE | Etiqueta de release/versão nos traces |
HERMES_LANGFUSE_SAMPLE_RATE | Taxa de amostragem do SDK, de 0.0 a 1.0 (padrão: 1.0) |
HERMES_LANGFUSE_MAX_CHARS | Truncamento por campo dos payloads serializados (padrão: 12000) |
HERMES_LANGFUSE_DEBUG | true ativa o log detalhado do plugin em agent.log |
LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY / LANGFUSE_BASE_URL | Nomes 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ável | Descrição |
|---|---|
TOOL_GATEWAY_DOMAIN | Domínio base do roteamento do Tool Gateway (padrão: nousresearch.com) |
TOOL_GATEWAY_SCHEME | Esquema HTTP ou HTTPS das URLs do gateway (padrão: https) |
TOOL_GATEWAY_USER_TOKEN | Token de autenticação do Tool Gateway (normalmente preenchido automaticamente pela autenticação da Nous) |
FIRECRAWL_GATEWAY_URL | Sobrescreve especificamente a URL do endpoint do gateway do Firecrawl |
Backend de terminal
| Variável | Descrição |
|---|---|
TERMINAL_ENV | Backend: local, docker, ssh, singularity, modal, daytona, vercel_sandbox |
HERMES_DOCKER_BINARY | Sobrescreve 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_IMAGE | Imagem Docker (padrão: nikolaik/python-nodejs:python3.11-nodejs20) |
TERMINAL_DOCKER_FORWARD_ENV | Array 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_VOLUMES | Montagens de volume Docker adicionais (pares host:container separados por vírgula) |
TERMINAL_DOCKER_ENV | Objeto JSON com variáveis de ambiente extras a definir dentro das sessões de terminal no Docker (por exemplo {"FOO":"bar"}) |
TERMINAL_DOCKER_EXTRA_ARGS | Array JSON com argumentos extras de docker run (por exemplo ["--memory","4g"]) |
TERMINAL_DOCKER_MOUNT_CWD_TO_WORKSPACE | Opção avançada: monta o diretório de lançamento no /workspace do Docker (true/false, padrão: false) |
TERMINAL_SINGULARITY_IMAGE | Imagem Singularity ou caminho de um .sif |
TERMINAL_MODAL_IMAGE | Imagem de contêiner do Modal |
TERMINAL_DAYTONA_IMAGE | Imagem de sandbox do Daytona |
TERMINAL_VERCEL_RUNTIME | Runtime do Vercel Sandbox (node24, node22, python3.13) |
TERMINAL_TIMEOUT | Tempo limite de comando em segundos |
TERMINAL_LIFETIME_SECONDS | Tempo de vida máximo das sessões de terminal em segundos |
TERMINAL_CWD | Sobrescrita 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_PASSWORD | Permite 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ável | Descrição |
|---|---|
TERMINAL_SSH_HOST | Nome de host do servidor remoto |
TERMINAL_SSH_USER | Usuário SSH |
TERMINAL_SSH_PORT | Porta SSH (padrão: 22) |
TERMINAL_SSH_KEY | Caminho para a chave privada |
TERMINAL_SSH_PERSISTENT | Sobrescreve o shell persistente do SSH (padrão: segue TERMINAL_PERSISTENT_SHELL) |
Recursos de contêiner (Docker, Singularity, Modal, Daytona)
| Variável | Descrição |
|---|---|
TERMINAL_CONTAINER_CPU | Núcleos de CPU (padrão: 1) |
TERMINAL_CONTAINER_MEMORY | Memória em MB (padrão: 5120) |
TERMINAL_CONTAINER_DISK | Disco em MB (padrão: 51200) |
TERMINAL_CONTAINER_PERSISTENT | Mantém o sistema de arquivos do contêiner entre sessões (padrão: true) |
TERMINAL_SANDBOX_DIR | Diretório no host para espaços de trabalho e overlays (padrão: ~/.hermes/sandboxes/) |
Shell persistente
| Variável | Descrição |
|---|---|
TERMINAL_PERSISTENT_SHELL | Ativa o shell persistente em backends não locais (padrão: true). Também configurável por terminal.persistent_shell no config.yaml |
TERMINAL_LOCAL_PERSISTENT | Ativa o shell persistente no backend local (padrão: false) |
TERMINAL_SSH_PERSISTENT | Sobrescreve 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ável | Descrição |
|---|---|
HERMES_EGRESS_PROXY | Vale 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_PROXY | HTTPS_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_PROXY | 127.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_CERTS | Caminho 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_OPTIONS | Ganha --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_NONCE | Definida 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ável | Descrição |
|---|---|
TELEGRAM_BOT_TOKEN | Token do bot do Telegram (obtido com o @BotFather) |
TELEGRAM_ALLOWED_USERS | IDs de usuário separados por vírgula com permissão de usar o bot (vale em DMs, grupos e fóruns) |
TELEGRAM_ALLOW_ALL_USERS | Permite que qualquer usuário do Telegram acione o bot (só para desenvolvimento). |
TELEGRAM_GROUP_ALLOWED_USERS | IDs 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_CHATS | IDs de chat de grupo/fórum separados por vírgula; qualquer membro fica autorizado |
TELEGRAM_HOME_CHANNEL | Chat/canal padrão do Telegram para entrega do cron |
TELEGRAM_HOME_CHANNEL_NAME | Nome de exibição do canal principal do Telegram |
TELEGRAM_CRON_THREAD_ID | ID 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_URL | URL HTTPS pública para o modo webhook (ativa o webhook em vez do polling) |
TELEGRAM_WEBHOOK_PORT | Porta local de escuta do servidor de webhook (padrão: 8443) |
TELEGRAM_WEBHOOK_SECRET | Token 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_REACTIONS | Ativa reações em emoji nas mensagens durante o processamento (padrão: false) |
TELEGRAM_REQUIRE_MENTION | Exige um gatilho explícito antes de responder em grupos do Telegram. Equivale a telegram.require_mention no config.yaml. |
TELEGRAM_MENTION_PATTERNS | Array 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_MENTIONS | Quando 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_MODE | Comportamento da referência de resposta: off, first (padrão) ou all. Segue o mesmo padrão do Discord. |
TELEGRAM_IGNORED_THREADS | IDs de tópico/thread de fórum do Telegram, separados por vírgula, em que o bot nunca responde |
TELEGRAM_PROXY | URL de proxy para as conexões com o Telegram — sobrescreve HTTPS_PROXY. Aceita http://, https://, socks5:// |
DISCORD_BOT_TOKEN | Token do bot do Discord |
DISCORD_ALLOWED_USERS | IDs de usuário do Discord separados por vírgula com permissão de usar o bot |
DISCORD_ALLOW_ALL_USERS | Permite que qualquer usuário do Discord acione o bot (só para desenvolvimento). |
DISCORD_ALLOWED_ROLES | IDs 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_CHANNELS | IDs 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_PROXY | URL de proxy para as conexões com o Discord — sobrescreve HTTPS_PROXY. Aceita http://, https://, socks5:// |
DISCORD_HOME_CHANNEL | Canal padrão do Discord para entrega do cron |
DISCORD_HOME_CHANNEL_NAME | Nome de exibição do canal principal do Discord |
DISCORD_COMMAND_SYNC_POLICY | Polí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_MENTION | Exige uma @menção antes de responder nos canais do servidor |
DISCORD_FREE_RESPONSE_CHANNELS | IDs de canal separados por vírgula em que a menção não é exigida |
DISCORD_AUTO_THREAD | Cria threads automaticamente para respostas longas, quando houver suporte |
DISCORD_ALLOW_ANY_ATTACHMENT | Com 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_BYTES | Má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_REACTIONS | Ativa reações em emoji nas mensagens durante o processamento (padrão: true) |
DISCORD_IGNORED_CHANNELS | IDs de canal separados por vírgula em que o bot nunca responde |
DISCORD_NO_THREAD_CHANNELS | IDs de canal separados por vírgula em que o bot responde sem criar thread automaticamente |
DISCORD_REPLY_TO_MODE | Comportamento da referência de resposta: off, first (padrão) ou all |
DISCORD_ALLOW_MENTION_EVERYONE | Permite que o bot marque @everyone/@here (padrão: false). Veja Controle de menções. |
DISCORD_ALLOW_MENTION_ROLES | Permite que o bot marque @cargo (padrão: false). |
DISCORD_ALLOW_MENTION_USERS | Permite que o bot marque @usuário individualmente (padrão: true). |
DISCORD_ALLOW_MENTION_REPLIED_USER | Marca o autor ao responder à mensagem dele (padrão: true). |
SLACK_BOT_TOKEN | Token de bot do Slack (xoxb-...) |
SLACK_APP_TOKEN | Token de nível de app do Slack (xapp-..., obrigatório no Socket Mode) |
SLACK_ALLOWED_USERS | IDs de usuário do Slack separados por vírgula |
SLACK_ALLOW_ALL_USERS | Permite que qualquer usuário do Slack acione o bot (só para desenvolvimento). |
SLACK_ALLOW_BOTS | Aceita mensagens de outros bots do Slack: none (padrão), mentions ou all. O bot sempre ignora as próprias mensagens. |
SLACK_THREAD_REQUIRE_MENTION | Exige uma @menção explícita nas respostas em thread do Slack, preservando os canais de resposta livre no nível principal |
SLACK_HOME_CHANNEL | Canal padrão do Slack para entrega do cron |
SLACK_HOME_CHANNEL_NAME | Nome de exibição do canal principal do Slack |
GOOGLE_CHAT_PROJECT_ID | Projeto do GCP que hospeda o tópico do Pub/Sub (cai para GOOGLE_CLOUD_PROJECT) |
GOOGLE_CHAT_SUBSCRIPTION_NAME | Caminho completo da assinatura do Pub/Sub, projects/{proj}/subscriptions/{sub} (apelido legado: GOOGLE_CHAT_SUBSCRIPTION) |
GOOGLE_CHAT_SERVICE_ACCOUNT_JSON | Caminho para o JSON da conta de serviço, ou o próprio JSON inline (cai para GOOGLE_APPLICATION_CREDENTIALS) |
GOOGLE_CHAT_ALLOWED_USERS | E-mails de usuário separados por vírgula com permissão de conversar com o bot |
GOOGLE_CHAT_ALLOW_ALL_USERS | Permite que qualquer usuário do Google Chat acione o bot (só para desenvolvimento) |
GOOGLE_CHAT_HOME_CHANNEL | Espaço padrão (por exemplo spaces/AAAA...) para entrega do cron |
GOOGLE_CHAT_HOME_CHANNEL_NAME | Nome de exibição do espaço principal do Google Chat |
GOOGLE_CHAT_MAX_MESSAGES | Máximo de mensagens em voo no FlowControl do Pub/Sub (padrão: 1) |
GOOGLE_CHAT_MAX_BYTES | Máximo de bytes em voo no FlowControl do Pub/Sub (padrão: 16777216, 16 MiB) |
GOOGLE_CHAT_BOOTSTRAP_SPACES | IDs 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_RAW | Defina qualquer valor para registrar envelopes do Pub/Sub redigidos no nível DEBUG (só para depuração) |
GOOGLE_CHAT_HTTP_EVENTS_URL | Endpoint HTTP autenticado para os eventos de mensagem do Chat (alternativa ao Pub/Sub) |
GOOGLE_CHAT_HTTP_EVENTS_AUDIENCE | Audiê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_EMAIL | E-mail esperado da conta de serviço do Google nos tokens bearer de evento HTTP |
WHATSAPP_ENABLED | Ativa a ponte do WhatsApp (true/false) |
WHATSAPP_MODE | bot (número separado) ou self-chat (mandar mensagem para si mesmo) |
WHATSAPP_ALLOWED_USERS | Números de telefone separados por vírgula (com código do país, sem +), ou * para liberar todos os remetentes |
WHATSAPP_ALLOW_ALL_USERS | Libera todos os remetentes do WhatsApp sem lista de permissão (true/false) |
WHATSAPP_HOME_CHANNEL | ID de chat padrão para entrega de cron / notificações. |
WHATSAPP_HOME_CHANNEL_NAME | Nome de exibição do canal principal do WhatsApp. |
WHATSAPP_DEBUG | Registra os eventos brutos de mensagem na ponte, para diagnóstico (true/false) |
WHATSAPP_CLOUD_PHONE_NUMBER_ID | Phone Number ID da Meta na WhatsApp Business Cloud API (15 a 17 dígitos; não é o número de telefone) |
WHATSAPP_CLOUD_ACCESS_TOKEN | Token de acesso da Meta (começa com EAA); tokens temporários expiram em 24h, tokens de System User são permanentes |
WHATSAPP_CLOUD_APP_SECRET | Segredo do app em hexadecimal de 32 caracteres, usado para verificar as assinaturas dos webhooks de entrada |
WHATSAPP_CLOUD_VERIFY_TOKEN | Segredo compartilhado do handshake de verificação de webhook da Meta (gerado automaticamente pelo assistente de configuração) |
WHATSAPP_CLOUD_ALLOWED_USERS | wa_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_USERS | Libera todos os remetentes do WhatsApp Cloud sem lista de permissão (true/false) |
WHATSAPP_CLOUD_APP_ID | App ID opcional da Meta (para futura integração de analytics) |
WHATSAPP_CLOUD_WABA_ID | ID opcional da WhatsApp Business Account (para futura integração de analytics) |
WHATSAPP_CLOUD_WEBHOOK_HOST | Interface em que o servidor de webhook de entrada escuta (padrão 0.0.0.0) |
WHATSAPP_CLOUD_WEBHOOK_PORT | Porta em que o servidor de webhook de entrada escuta (padrão 8090) |
WHATSAPP_CLOUD_WEBHOOK_PATH | Caminho de URL em que a Meta posta as mensagens de entrada (padrão /whatsapp/webhook) |
WHATSAPP_CLOUD_API_VERSION | Versão da Graph API da Meta a chamar (padrão v20.0) |
WHATSAPP_CLOUD_HOME_CHANNEL | wa_id usado como canal principal do bot (para tarefas do cron etc.) |
WHATSAPP_CLOUD_DM_POLICY | Controle de DMs no adaptador Cloud (open/allowlist/disabled); cai para WHATSAPP_DM_POLICY quando não definido |
WHATSAPP_CLOUD_ALLOW_FROM | Remetentes separados por vírgula liberados quando dm_policy: allowlist (apenas wa_ids; JIDs no estilo Baileys são normalizados) |
WHATSAPP_CLOUD_GROUP_POLICY | Controle de grupos no adaptador Cloud (open/allowlist/disabled); cai para WHATSAPP_GROUP_POLICY quando não definido |
WHATSAPP_CLOUD_GROUP_ALLOW_FROM | IDs de chat de grupo separados por vírgula liberados quando group_policy: allowlist |
SIGNAL_HTTP_URL | Endpoint HTTP do daemon signal-cli (por exemplo http://127.0.0.1:8080) |
SIGNAL_ACCOUNT | Número de telefone do bot no formato E.164 |
SIGNAL_ALLOWED_USERS | Números E.164 ou UUIDs separados por vírgula |
SIGNAL_GROUP_ALLOWED_USERS | IDs de grupo separados por vírgula, ou * para todos os grupos |
SIGNAL_HOME_CHANNEL_NAME | Nome de exibição do canal principal do Signal |
SIGNAL_IGNORE_STORIES | Ignora stories/status do Signal |
SIGNAL_ALLOW_ALL_USERS | Libera todos os usuários do Signal sem lista de permissão |
TWILIO_ACCOUNT_SID | Account SID da Twilio (compartilhado com a skill de telefonia) |
TWILIO_AUTH_TOKEN | Auth Token da Twilio (compartilhado com a skill de telefonia; também usado na validação de assinatura dos webhooks) |
TWILIO_PHONE_NUMBER | Número de telefone da Twilio no formato E.164 (compartilhado com a skill de telefonia) |
SMS_WEBHOOK_URL | URL pública para validação de assinatura da Twilio — precisa bater com a URL de webhook no Console da Twilio (obrigatória) |
SMS_WEBHOOK_PORT | Porta de escuta do webhook para SMS de entrada (padrão: 8080) |
SMS_WEBHOOK_HOST | Endereço de escuta do webhook (padrão: 127.0.0.1) |
SMS_INSECURE_NO_SIGNATURE | Defina como true para desativar a validação de assinatura da Twilio (só em desenvolvimento local — nunca em produção) |
SMS_ALLOWED_USERS | Números E.164 separados por vírgula com permissão de conversar |
SMS_ALLOW_ALL_USERS | Libera todos os remetentes de SMS sem lista de permissão |
SMS_HOME_CHANNEL | Número de telefone para entrega de tarefas do cron / notificações |
SMS_HOME_CHANNEL_NAME | Nome de exibição do canal principal de SMS |
EMAIL_ADDRESS | Endereço de e-mail do adaptador de gateway de e-mail |
EMAIL_PASSWORD | Senha ou senha de app da conta de e-mail |
EMAIL_IMAP_HOST | Nome de host IMAP do adaptador de e-mail |
EMAIL_IMAP_PORT | Porta IMAP |
EMAIL_SMTP_HOST | Nome de host SMTP do adaptador de e-mail |
EMAIL_SMTP_PORT | Porta SMTP |
EMAIL_ALLOWED_USERS | Endereços de e-mail separados por vírgula com permissão de escrever para o bot |
EMAIL_HOME_ADDRESS | Destinatário padrão da entrega proativa de e-mail |
EMAIL_HOME_ADDRESS_NAME | Nome de exibição do destino principal de e-mail |
EMAIL_POLL_INTERVAL | Intervalo de verificação de e-mail em segundos |
EMAIL_ALLOW_ALL_USERS | Libera todos os remetentes de e-mail de entrada |
DINGTALK_CLIENT_ID | AppKey do bot do DingTalk, no portal do desenvolvedor (open.dingtalk.com) |
DINGTALK_CLIENT_SECRET | AppSecret do bot do DingTalk, no portal do desenvolvedor |
DINGTALK_ALLOWED_USERS | IDs de usuário do DingTalk separados por vírgula com permissão de escrever para o bot |
DINGTALK_WEBHOOK_URL | URL de webhook do robô estático para entrega entre plataformas / do cron. |
DINGTALK_HOME_CHANNEL | ID de conversa padrão para entrega de cron / notificações. |
DINGTALK_HOME_CHANNEL_NAME | Nome de exibição do canal principal do DingTalk. |
FEISHU_APP_ID | App ID do bot do Feishu/Lark, em open.feishu.cn |
FEISHU_APP_SECRET | App Secret do bot do Feishu/Lark |
FEISHU_DOMAIN | feishu (China) ou lark (internacional). Padrão: feishu |
FEISHU_CONNECTION_MODE | websocket (recomendado) ou webhook. Padrão: websocket |
FEISHU_ENCRYPT_KEY | Chave de criptografia opcional para o modo webhook |
FEISHU_VERIFICATION_TOKEN | Token de verificação opcional para o modo webhook |
FEISHU_ALLOWED_USERS | IDs de usuário do Feishu separados por vírgula com permissão de escrever para o bot |
FEISHU_ALLOW_BOTS | none (padrão) / mentions / all — aceita mensagens de entrada de outros bots. Veja mensagens entre bots |
FEISHU_REQUIRE_MENTION | true (padrão) / false — se as mensagens de grupo precisam @mencionar o bot. Sobrescreva por chat com group_rules.<chat_id>.require_mention. |
FEISHU_HOME_CHANNEL | ID de chat do Feishu para entrega do cron e notificações |
FEISHU_HOME_CHANNEL_NAME | Nome de exibição do canal principal do Feishu. |
FEISHU_ALLOW_ALL_USERS | Permite que qualquer usuário do Feishu acione o bot (só para desenvolvimento). |
WECOM_BOT_ID | ID do AI Bot do WeCom, no console de administração |
WECOM_SECRET | Segredo do AI Bot do WeCom |
WECOM_WEBSOCKET_URL | URL de WebSocket personalizada (padrão: wss://openws.work.weixin.qq.com) |
WECOM_ALLOWED_USERS | IDs de usuário do WeCom separados por vírgula com permissão de escrever para o bot |
WECOM_HOME_CHANNEL | ID de chat do WeCom para entrega do cron e notificações |
WECOM_CALLBACK_CORP_ID | Corp ID corporativo do WeCom para o app próprio de callback |
WECOM_CALLBACK_CORP_SECRET | Segredo corporativo do app próprio |
WECOM_CALLBACK_AGENT_ID | Agent ID do app próprio |
WECOM_CALLBACK_TOKEN | Token de verificação do callback |
WECOM_CALLBACK_ENCODING_AES_KEY | Chave AES da criptografia do callback |
WECOM_CALLBACK_HOST | Endereço de escuta do servidor de callback (padrão: 0.0.0.0) |
WECOM_CALLBACK_PORT | Porta do servidor de callback (padrão: 8645) |
WECOM_CALLBACK_ALLOWED_USERS | IDs de usuário separados por vírgula para a lista de permissão |
WECOM_CALLBACK_ALLOW_ALL_USERS | Use true para liberar todos os usuários sem lista de permissão |
WEIXIN_ACCOUNT_ID | ID da conta Weixin obtido no login por QR pela iLink Bot API |
WEIXIN_TOKEN | Token de autenticação Weixin obtido no login por QR pela iLink Bot API |
WEIXIN_BASE_URL | Sobrescreve a URL base da iLink Bot API do Weixin (padrão: https://ilinkai.weixin.qq.com) |
WEIXIN_CDN_BASE_URL | Sobrescreve a URL base do CDN do Weixin para mídia (padrão: https://novac2c.cdn.weixin.qq.com/c2c) |
WEIXIN_DM_POLICY | Política de mensagem direta: open, allowlist, pairing, disabled (padrão: open) |
WEIXIN_GROUP_POLICY | Política de mensagem em grupo: open, allowlist, disabled (padrão: disabled) |
WEIXIN_ALLOWED_USERS | IDs de usuário do Weixin separados por vírgula com permissão de mandar DM para o bot |
WEIXIN_GROUP_ALLOWED_USERS | IDs 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_CHANNEL | ID de chat do Weixin para entrega do cron e notificações |
WEIXIN_HOME_CHANNEL_NAME | Nome de exibição do canal principal do Weixin |
WEIXIN_ALLOW_ALL_USERS | Libera todos os usuários do Weixin sem lista de permissão (true/false) |
BLUEBUBBLES_SERVER_URL | URL do servidor BlueBubbles (por exemplo http://192.168.1.10:1234) |
BLUEBUBBLES_PASSWORD | Senha do servidor BlueBubbles |
BLUEBUBBLES_WEBHOOK_HOST | Endereço de escuta do webhook (padrão: 127.0.0.1) |
BLUEBUBBLES_WEBHOOK_PORT | Porta de escuta do webhook (padrão: 8645) |
BLUEBUBBLES_HOME_CHANNEL | Telefone/e-mail para entrega de cron/notificações |
BLUEBUBBLES_ALLOWED_USERS | Usuários autorizados separados por vírgula |
BLUEBUBBLES_ALLOW_ALL_USERS | Libera todos os usuários (true/false) |
QQ_APP_ID | App ID do QQ Bot, em q.qq.com |
QQ_CLIENT_SECRET | App Secret do QQ Bot, em q.qq.com |
QQ_STT_API_KEY | Chave de API do provedor externo de STT de reserva (opcional, usada quando o ASR embutido do QQ não devolve texto) |
QQ_STT_BASE_URL | URL base do provedor externo de STT (opcional) |
QQ_STT_MODEL | Nome do modelo do provedor externo de STT (opcional) |
QQ_ALLOWED_USERS | openIDs de usuário do QQ separados por vírgula com permissão de escrever para o bot |
QQ_GROUP_ALLOWED_USERS | IDs de grupo do QQ separados por vírgula para acesso a mensagens de grupo com @ |
QQ_ALLOW_ALL_USERS | Libera todos os usuários (true/false, sobrescreve QQ_ALLOWED_USERS) |
QQBOT_HOME_CHANNEL | openID de usuário/grupo do QQ para entrega do cron e notificações |
QQBOT_HOME_CHANNEL_NAME | Nome de exibição do canal principal do QQ |
QQ_PORTAL_HOST | Sobrescreve o host do portal do QQ (use sandbox.q.qq.com para passar pelo gateway de sandbox; padrão: q.qq.com). |
QQ_SANDBOX | Ativa o modo sandbox do QQ para testes de desenvolvimento (true/false) |
MATTERMOST_URL | URL do servidor Mattermost (por exemplo https://mm.example.com) |
MATTERMOST_TOKEN | Token de bot ou token de acesso pessoal do Mattermost |
MATTERMOST_ALLOWED_USERS | IDs de usuário do Mattermost separados por vírgula com permissão de escrever para o bot |
MATTERMOST_ALLOW_ALL_USERS | Permite que qualquer usuário do Mattermost acione o bot (só para desenvolvimento). |
MATTERMOST_ALLOWED_CHANNELS | Quando definido, o bot só responde nesses canais (lista de permissão). |
MATTERMOST_HOME_CHANNEL | ID do canal para entrega proativa de mensagens (cron, notificações) |
MATTERMOST_REQUIRE_MENTION | Exige @menção nos canais (padrão: true). Use false para responder a todas as mensagens. |
MATTERMOST_FREE_RESPONSE_CHANNELS | IDs de canal separados por vírgula em que o bot responde sem @menção |
MATTERMOST_REPLY_MODE | Estilo de resposta: thread (respostas em thread) ou off (mensagens soltas, padrão) |
MATRIX_HOMESERVER | URL do homeserver Matrix (por exemplo https://matrix.org) |
MATRIX_ACCESS_TOKEN | Token de acesso Matrix para autenticar o bot |
MATRIX_USER_ID | ID de usuário Matrix (por exemplo @hermes:matrix.org) — obrigatório no login por senha, opcional com token de acesso |
MATRIX_PASSWORD | Senha do Matrix (alternativa ao token de acesso) |
MATRIX_ALLOWED_USERS | IDs de usuário Matrix separados por vírgula com permissão de escrever para o bot (por exemplo @alice:matrix.org) |
MATRIX_ALLOW_ALL_USERS | Permite que qualquer usuário do Matrix acione o bot (só para desenvolvimento). |
MATRIX_HOME_CHANNEL | ID de sala padrão para entrega de cron / notificações. |
MATRIX_HOME_CHANNEL_NAME | Nome de exibição da sala principal do Matrix. |
MATRIX_ALLOWED_ROOMS | IDs de sala Matrix separados por vírgula com permissão de acionar respostas do bot |
MATRIX_HOME_ROOM | ID de sala para entrega proativa de mensagens (por exemplo !abc123:matrix.org) |
MATRIX_ENCRYPTION | Ativa a criptografia ponta a ponta (true/false, padrão: false) |
MATRIX_E2EE_MODE | Comportamento do E2EE no Matrix: off, optional ou required. Sobrescreve MATRIX_ENCRYPTION quando definida. |
MATRIX_DEVICE_ID | ID 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_REACTIONS | Ativa as reações em emoji de ciclo de processamento nas mensagens de entrada (padrão: true). Use false para desligar. |
MATRIX_REQUIRE_MENTION | Exige @menção nas salas (padrão: true). Use false para responder a todas as mensagens. |
MATRIX_FREE_RESPONSE_ROOMS | IDs de sala separados por vírgula em que o bot responde sem @menção |
MATRIX_IGNORE_USER_PATTERNS | Expressões regulares separadas por vírgula para IDs de usuário fantasma de ponte/appservice do Matrix que devem ser ignorados |
MATRIX_PROCESS_NOTICES | Processa eventos m.notice de entrada do Matrix (padrão: false) |
MATRIX_SESSION_SCOPE | Escopo de sessão do Matrix em salas de projeto: auto, room ou thread (padrão: auto) |
MATRIX_TOOLS_ALLOW_REDACTION | Permite executar a ferramenta de redação de mensagens do Matrix (padrão: false) |
MATRIX_TOOLS_ALLOW_INVITES | Permite executar a ferramenta de convite do Matrix (padrão: false) |
MATRIX_TOOLS_ALLOW_ROOM_CREATE | Permite executar a ferramenta de criação de sala do Matrix (padrão: false) |
MATRIX_ALLOW_ROOM_MENTIONS | Permite menções @room de saída, que notificam todos os membros da sala (padrão: false) |
MATRIX_AUTO_THREAD | Cria threads automaticamente para mensagens de sala (padrão: true) |
MATRIX_DM_AUTO_THREAD | Cria threads automaticamente para mensagens de DM no Matrix (padrão: false) |
MATRIX_DM_MENTION_THREADS | Cria uma thread quando o bot é @mencionado em uma DM (padrão: false) |
MATRIX_APPROVAL_REQUIRE_SENDER | Exige 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_SECONDS | Tempo limite dos prompts de aprovação/seleção de modelo por reação no Matrix (padrão: 300) |
MATRIX_ALLOW_PUBLIC_ROOMS | Permite que as ferramentas de criação de sala do Matrix criem salas públicas (padrão: false) |
MATRIX_MAX_MEDIA_BYTES | Tamanho máximo em bytes de envio/download de mídia no Matrix (padrão: 104857600) |
MATRIX_RECOVERY_KEY | Chave 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_FILE | Caminho opcional, de uso único, para gravar uma chave de recuperação do Matrix gerada. Criado com modo 0600 e nunca sobrescrito. |
HASS_TOKEN | Token de acesso de longa duração do Home Assistant (ativa a plataforma HA + as ferramentas) |
HASS_URL | URL do Home Assistant (padrão: http://homeassistant.local:8123) |
WEBHOOK_ENABLED | Ativa o adaptador de plataforma de webhook (true/false) |
WEBHOOK_PORT | Porta do servidor HTTP que recebe os webhooks (padrão: 8644) |
WEBHOOK_SECRET | Segredo HMAC global para validar assinaturas de webhook (usado como reserva quando as rotas não definem o próprio) |
API_SERVER_ENABLED | Ativa o servidor de API compatível com OpenAI (true/false). Roda junto com as outras plataformas. |
API_SERVER_KEY | Token bearer de autenticação do servidor de API. Obrigatório sempre que o servidor de API estiver ativo. |
API_SERVER_CORS_ORIGINS | Origens 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_PORT | Porta do servidor de API (padrão: 8642) |
API_SERVER_HOST | Host/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_NAME | Nome 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_URL | URL 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_KEY | Token bearer para autenticar com o servidor de API remoto no modo proxy. Precisa bater com API_SERVER_KEY no host remoto. |
MESSAGING_CWD | Reserva de compatibilidade obsoleta para o diretório de trabalho do gateway. Prefira terminal.cwd no config.yaml. |
GATEWAY_ALLOWED_USERS | IDs de usuário separados por vírgula com permissão em todas as plataformas |
GATEWAY_ALLOW_ALL_USERS | Libera 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ável | Descrição |
|---|---|
HERMES_DASHBOARD_BASIC_AUTH_USERNAME | Usuá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_PASSWORD | Senha 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_HASH | Hash 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_SECRET | Chave 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_SECONDS | Tempo de vida do token de acesso do provedor básico (padrão 12h). Sobrescreve dashboard.basic_auth.session_ttl_seconds. |
HERMES_DASHBOARD_OAUTH_CLIENT_ID | Client 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_URL | URL 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_ISSUER | URL 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_ID | Client 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_SCOPES | Escopos 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_HERMES | Sobrescreve 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_ROOT | Sobrescreve 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_EXISTING | Defina 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_CWD | Diretório de projeto inicial das sessões de chat do Desktop. Definida por hermes desktop --cwd. |
HERMES_DESKTOP_PYTHON | Caminho 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_SERVER | URL 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_PORT | Sobrescreve 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ável | Descrição |
|---|---|
MSGRAPH_TENANT_ID | ID do tenant do Azure AD (GUID de diretório) do registro do app no Graph. |
MSGRAPH_CLIENT_ID | ID de aplicativo (cliente) do registro no Azure. |
MSGRAPH_CLIENT_SECRET | Valor do segredo de cliente do registro do app. Guarde em ~/.hermes/.env com chmod 600; rotacione periodicamente pelo portal do Azure. |
MSGRAPH_SCOPE | Escopo OAuth2 da requisição de token por credenciais de cliente (padrão: https://graph.microsoft.com/.default). |
MSGRAPH_AUTHORITY_URL | Autoridade 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ável | Descrição |
|---|---|
MSGRAPH_WEBHOOK_ENABLED | Ativa a plataforma de gateway msgraph_webhook (true/1/yes). |
MSGRAPH_WEBHOOK_PORT | Porta em que o ouvinte escuta (padrão: 8646). |
MSGRAPH_WEBHOOK_CLIENT_STATE | Segredo compartilhado que o Graph devolve em toda notificação; comparado com hmac.compare_digest. Gere com openssl rand -hex 32. |
MSGRAPH_WEBHOOK_ACCEPTED_RESOURCES | Lista 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_CIDRS | Faixas 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ável | Descrição |
|---|---|
TEAMS_DELIVERY_MODE | graph ou incoming_webhook. |
TEAMS_INCOMING_WEBHOOK_URL | URL de webhook gerada pelo Teams; obrigatória quando TEAMS_DELIVERY_MODE=incoming_webhook. |
TEAMS_GRAPH_ACCESS_TOKEN | Token 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_ID | ID do Team de destino na entrega por canal (modo graph). |
TEAMS_CHANNEL_ID | ID do canal de destino (usado em par com TEAMS_TEAM_ID). |
TEAMS_CHAT_ID | ID 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ável | Descrição |
|---|---|
LINE_CHANNEL_ACCESS_TOKEN | Token de acesso de canal de longa duração, no LINE Developers Console (aba Messaging API). Obrigatório. |
LINE_CHANNEL_SECRET | Segredo do canal (aba Basic settings); usado na verificação de assinatura HMAC-SHA256 do webhook. Obrigatório. |
LINE_HOST | Host de escuta do webhook (padrão: 0.0.0.0). |
LINE_PORT | Porta de escuta do webhook (padrão: 8646). |
LINE_PUBLIC_URL | URL 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_USERS | IDs de usuário separados por vírgula com permissão de mandar DM para o bot (prefixados com U). |
LINE_ALLOWED_GROUPS | IDs de grupo separados por vírgula em que o bot responde (prefixados com C). |
LINE_ALLOWED_ROOMS | IDs de sala separados por vírgula em que o bot responde (prefixados com R). |
LINE_ALLOW_ALL_USERS | Válvula de escape só para desenvolvimento — aceita qualquer origem. Padrão: false. |
LINE_HOME_CHANNEL | Destino padrão de entrega das tarefas de cron com deliver: line. |
LINE_SLOW_RESPONSE_THRESHOLD | Segundos 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_TEXT | Texto do balão exibido junto do botão de postback. |
LINE_BUTTON_LABEL | Rótulo do botão de postback (padrão: Get answer). |
LINE_DELIVERED_TEXT | Resposta quando um postback já entregue é tocado de novo (padrão: Already replied ✅). |
LINE_INTERRUPTED_TEXT | Resposta 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ável | Descrição |
|---|---|
NTFY_TOPIC | Tópico a assinar (mensagens de entrada). Obrigatório. |
NTFY_SERVER_URL | URL do servidor (padrão: https://ntfy.sh). Aponte para um ntfy auto-hospedado por privacidade. |
NTFY_TOKEN | Token de autenticação opcional. Token bearer (por exemplo tk_xyz) ou user:pass para autenticação Basic. |
NTFY_PUBLISH_TOPIC | Tópico das respostas de saída (o padrão é NTFY_TOPIC). |
NTFY_MARKDOWN | Use true para enviar respostas com o cabeçalho X-Markdown: true. Padrão: false. |
NTFY_ALLOWED_USERS | Lista 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_USERS | Válvula de escape só para desenvolvimento — só é segura em tópicos privados com controle de acesso. Padrão: false. |
NTFY_HOME_CHANNEL | Destino padrão de entrega das tarefas de cron com deliver: ntfy. |
NTFY_HOME_CHANNEL_NAME | Ró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ável | Descrição |
|---|---|
IRC_SERVER | Nome de host do servidor IRC (por exemplo irc.libera.chat). Obrigatório. |
IRC_CHANNEL | Canal ou canais a entrar (por exemplo #hermes); separe por vírgula para vários. Obrigatório. |
IRC_NICKNAME | Apelido do bot (padrão: hermes-bot). Obrigatório. |
IRC_PORT | Porta do servidor (padrão: 6697 com TLS, 6667 sem). |
IRC_USE_TLS | Usa TLS (true/false; padrão true na porta 6697). |
IRC_SERVER_PASSWORD | Senha de servidor para o comando PASS (opcional). |
IRC_NICKSERV_PASSWORD | Senha do NickServ para IDENTIFY automático na conexão (opcional). |
IRC_ALLOWED_USERS | Apelidos separados por vírgula com permissão de falar com o bot. |
IRC_ALLOW_ALL_USERS | Permite que qualquer pessoa no canal fale com o bot (só para desenvolvimento). |
IRC_HOME_CHANNEL | Canal 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ável | Descrição |
|---|---|
SIMPLEX_WS_URL | URL de WebSocket do daemon simplex-chat (por exemplo ws://127.0.0.1:5225). |
SIMPLEX_ALLOWED_USERS | IDs de contato do SimpleX separados por vírgula com permissão de falar com o bot. |
SIMPLEX_ALLOW_ALL_USERS | Permite que qualquer contato fale com o bot (só para desenvolvimento — desliga a lista de permissão). |
SIMPLEX_AUTO_ACCEPT | Aceita automaticamente as solicitações de contato de entrada (padrão: true). |
SIMPLEX_GROUP_ALLOWED | IDs 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_CHANNEL | ID padrão de contato/grupo para entrega de cron / notificações. |
SIMPLEX_HOME_CHANNEL_NAME | Ró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ável | Descrição |
|---|---|
PHOTON_PROJECT_ID | Id do projeto no Spectrum (o spectrumProjectId do projeto; definido por hermes photon setup). |
PHOTON_PROJECT_SECRET | Segredo do projeto, pareado com o id do projeto no Spectrum (definido por hermes photon setup). |
PHOTON_ALLOWED_USERS | Números E.164 separados por vírgula com permissão de falar com o bot. |
PHOTON_ALLOW_ALL_USERS | Permite que qualquer remetente acione o bot (só para desenvolvimento — desliga a lista de permissão). |
PHOTON_REQUIRE_MENTION | Ignora 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_PATTERNS | Regexes 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_CHANNEL | Destino 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_NAME | Rótulo legível do canal principal. |
PHOTON_MARKDOWN | Envia as respostas do agente em markdown — o iMessage renderiza nativamente, outras plataformas do Spectrum caem para texto puro (true/false, padrão true). |
PHOTON_REACTIONS | Usa tapbacks 👀/👍/👎 nas mensagens como status de processamento e encaminha para o agente os tapbacks nas mensagens do bot (true/false, padrão false). |
PHOTON_TELEMETRY | Ativa a telemetria do SDK do Spectrum no sidecar (true/false, padrão false; alterne com `hermes photon telemetry on |
PHOTON_SIDECAR_PORT | Porta de loopback do canal de controle + entrada do sidecar em Node (padrão 8789). |
PHOTON_SIDECAR_AUTOSTART | Sobe o sidecar em Node ao conectar (true/false, padrão true). |
PHOTON_NODE_BIN | Caminho para o binário do node (padrão: shutil.which('node')). |
PHOTON_DASHBOARD_HOST | Host da API do Photon Dashboard (padrão https://app.photon.codes). |
PHOTON_SPECTRUM_HOST | Host da API do Photon Spectrum (padrão https://spectrum.photon.codes). |
Buzz (comunidades Nostr)
| Variável | Descrição |
|---|---|
BUZZ_RELAY_URL | URL base do relay da comunidade Buzz (por exemplo https://mycommunity.communities.buzz.xyz) |
BUZZ_PRIVATE_KEY | Chave privada Nostr da identidade Buzz do agente (nsec ou hex) — o único segredo do Buzz |
BUZZ_CREDENTIALS_FILE | Arquivo JSON de credenciais que guarda a nsec (reserva quando BUZZ_PRIVATE_KEY não está definida) |
BUZZ_CHANNELS | UUIDs de canal separados por vírgula a observar (padrão: todos os canais em que entrou) |
BUZZ_HOME_CHANNEL | UUID de canal para entrega de cron / notificações (o padrão é o primeiro canal observado) |
BUZZ_ALLOWED_USERS | npubs ou chaves públicas em hex, separadas por vírgula, com permissão de falar com o agente |
BUZZ_ALLOW_ALL_USERS | Permite que qualquer membro da comunidade fale com o agente (true/false) |
BUZZ_TRANSPORT | Transporte de entrada: auto (WebSocket com polling de reserva, padrão), websocket ou poll |
BUZZ_POLL_INTERVAL | Segundos entre as varreduras de polling de entrada (padrão: 4) |
BUZZ_AUTH_TAG | JSON opcional de tag de autenticação de atestação de dono NIP-OA para autenticação NIP-42 no WebSocket |
BUZZ_CLI_PATH | Caminho 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ável | Descrição |
|---|---|
TEAMS_CLIENT_ID | ID de cliente do aplicativo no Azure AD (Bot Framework). |
TEAMS_CLIENT_SECRET | Segredo de cliente do aplicativo no Azure AD. |
TEAMS_TENANT_ID | ID do tenant do Azure AD que hospeda o aplicativo do bot. |
TEAMS_HOST | Host de escuta do webhook (padrão: sem valor → dual-stack, todas as interfaces IPv4+IPv6). |
TEAMS_PORT | Porta de escuta do webhook (padrão do Bot Framework: 3978). |
TEAMS_ALLOWED_USERS | IDs de usuário / UPNs do Teams separados por vírgula com permissão de falar com o bot. |
TEAMS_ALLOW_ALL_USERS | Permite que qualquer usuário do Teams acione o bot (só para desenvolvimento). |
TEAMS_HOME_CHANNEL | ID de chat/canal padrão para entrega de cron / notificações. |
TEAMS_HOME_CHANNEL_NAME | Nome de exibição do canal principal do Teams. |
Raft
| Variável | Descrição |
|---|---|
RAFT_PROFILE | Slug 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ável | Descrição |
|---|---|
HERMES_TELEGRAM_TEXT_BATCH_DELAY_SECONDS | Janela de espera antes de despachar um trecho de texto do Telegram na fila (padrão: 0.6). |
HERMES_TELEGRAM_TEXT_BATCH_SPLIT_DELAY_SECONDS | Atraso entre os pedaços quando uma única mensagem do Telegram passa do limite de tamanho (padrão: 2.0). |
HERMES_SIMPLEX_TEXT_BATCH_DELAY | Segundos 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_SECONDS | Janela de espera antes de despachar a mídia do Telegram na fila (padrão: 0.6). |
HERMES_TELEGRAM_FOLLOWUP_GRACE_SECONDS | Atraso 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_TIMEOUT | Sobrescrevem os tempos limite HTTP do python-telegram-bot (em segundos). |
HERMES_TELEGRAM_INIT_TIMEOUT | Teto 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_SIZE | Máximo de conexões HTTP simultâneas com a API do Telegram. |
HERMES_TELEGRAM_DISABLE_FALLBACK_IPS | Desativa os IPs de reserva da Cloudflare embutidos no código, usados quando o DNS falha (true/false). |
HERMES_DISCORD_TEXT_BATCH_DELAY_SECONDS | Janela de espera antes de despachar um trecho de texto do Discord na fila (padrão: 0.6). |
HERMES_DISCORD_TEXT_BATCH_SPLIT_DELAY_SECONDS | Atraso entre os pedaços quando uma mensagem do Discord passa do limite de tamanho (padrão: 2.0). |
HERMES_DISCORD_LIVENESS_INTERVAL_SECONDS | Sobrescrita 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_THRESHOLD | Sobrescrita 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_SECONDS | Equivalentes no Matrix dos controles de agrupamento do Telegram. |
HERMES_FEISHU_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDS / _MAX_CHARS / _MAX_MESSAGES | Ajuste 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_SECONDS | Atraso de despacho de mídia no Feishu. |
HERMES_FEISHU_DEDUP_CACHE_SIZE | Tamanho do cache de deduplicação dos webhooks do Feishu (padrão: 1024). |
HERMES_WECOM_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDS | Ajuste do agrupador do WeCom. |
HERMES_VISION_DOWNLOAD_TIMEOUT | Tempo limite em segundos para baixar uma imagem antes de entregá-la aos modelos de visão (padrão: 30). |
HERMES_VISION_MAX_CONCURRENCY | Má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_TIMEOUT | Gateway: 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_TIMEOUT | Tempo 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_MODE | Comportamento padrão do gateway para entrada durante ocupação: queue, steer ou interrupt. Pode ser sobrescrito por chat com /busy. |
HERMES_GATEWAY_BUSY_ACK_ENABLED | Se 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_SUPERVISE | Dentro 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_STATE | Dentro 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_URL | URL 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_ID | Identificador de gateway de relay atribuído por hermes gateway enroll ou pelo autoprovisionamento gerenciado. Espelha gateway.relay_id. |
GATEWAY_RELAY_SECRET | Segredo 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_KEY | Chave 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_TOKEN | Token de inscrição consumido por hermes gateway enroll quando --token não é passado explicitamente. |
GATEWAY_RELAY_PLATFORM | Nome de plataforma opcional anunciado no descritor de capacidade do relay. |
GATEWAY_RELAY_BOT_ID | Identificador de bot opcional anunciado no descritor de capacidade do relay. |
GATEWAY_RELAY_ENDPOINT | Endpoint 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_KEYS | Chaves de rota de relay separadas por vírgula anunciadas ao conector. Espelha gateway.relay_route_keys. |
HERMES_FILE_MUTATION_VERIFIER | Ativa 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_TIMEOUT | Tempo 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_TIMEOUT | Tempo 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_TIMEOUT | Tempo 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_PARALLEL | Máximo de tarefas de cron executadas em paralelo por tique (padrão: 4). |
NeMo Relay
| Variável | Descrição |
|---|---|
HERMES_NEMO_RELAY_PLUGINS_TOML | Caminho 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ável | Descrição |
|---|---|
HERMES_MAX_ITERATIONS | Máximo de iterações de chamada de ferramenta por conversa (padrão: 500) |
HERMES_INFERENCE_MODEL | Sobrescreve 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_MODE | Defina como 1 para pular os prompts de aprovação de comandos perigosos. Equivale a --yolo. |
HERMES_ACCEPT_HOOKS | Aprova 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_CONFIG | Ignora o ~/.hermes/config.yaml e usa os padrões embutidos (as credenciais do .env continuam sendo carregadas). Equivale a --ignore-user-config. |
HERMES_IGNORE_RULES | Pula a injeção automática de AGENTS.md, SOUL.md, .cursorrules, memória e skills pré-carregadas. Equivale a --ignore-rules. |
HERMES_SAFE_MODE | Modo 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_PROGRESS | Sem suporte desde o piso de compatibilidade do config-v12 — a variável é ignorada. Use display.tool_progress no config.yaml. |
HERMES_TOOL_PROGRESS_MODE | Variá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_MODE | Ritmo das respostas: off/natural/custom |
HERMES_HUMAN_DELAY_MIN_MS | Mínimo da faixa de atraso personalizada (ms) |
HERMES_HUMAN_DELAY_MAX_MS | Máximo da faixa de atraso personalizada (ms) |
HERMES_QUIET | Suprime a saída não essencial (true/false) |
CODEX_HOME | Quando 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_TASK | Definida 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_MCP | Definida 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_TIMEOUT | Tempo limite das chamadas à API da LLM em segundos (padrão: 1800) |
HERMES_API_CALL_STALE_TIMEOUT | Tempo 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_TIMEOUT | Tempo 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_TIMEOUT | Tempo 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_TIMEOUT | Teto 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_RETRIES | Número de tentativas de reconexão no meio do stream em erros transitórios de rede (padrão: 3). |
HERMES_STREAM_STALE_GIVEUP | Disjuntor 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_TIMEOUT | Tempo 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_STARTS | Disjuntor 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_S | Janela 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_WARNING | Gateway: envia uma mensagem de aviso após esta quantidade de segundos de inatividade (padrão: 75% de HERMES_AGENT_TIMEOUT). |
HERMES_AGENT_NOTIFY_INTERVAL | Gateway: intervalo em segundos entre as notificações de progresso em turnos longos do agente. |
HERMES_CHECKPOINT_TIMEOUT | Tempo limite para criar um checkpoint de sistema de arquivos, em segundos (padrão: 30). |
HERMES_EXEC_ASK | Ativa os prompts de aprovação de execução no modo gateway (true/false) |
HERMES_ENABLE_PROJECT_PLUGINS | Ativa 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_DEBUG | 1/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_NOTIFICATIONS | Modo de notificação de processos em segundo plano no gateway: concise (padrão), all, result, error, off |
HERMES_EPHEMERAL_SYSTEM_PROMPT | Prompt de sistema efêmero injetado na hora da chamada de API (nunca persistido nas sessões) |
HERMES_PREFILL_MESSAGES_FILE | Caminho para um arquivo JSON com mensagens efêmeras de preenchimento injetadas na hora da chamada de API. |
HERMES_ALLOW_PRIVATE_URLS | true/false — permite que as ferramentas busquem URLs de localhost/rede privada. Desligado por padrão no modo gateway. |
HERMES_REDACT_SECRETS | true/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_ROOT | Prefixo 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_INSTALLS | Variá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_GUARD | Defina como 1 para desligar a proteção de "o arquivo mudou desde que você leu" em patch/write_file. |
HERMES_BUNDLED_SKILLS | Sobrescrita separada por vírgula da lista de skills embutidas carregadas na inicialização. |
HERMES_OPTIONAL_SKILLS | Lista separada por vírgula de nomes de skills opcionais a instalar automaticamente na primeira execução. |
HERMES_DEBUG_INTERRUPT | Defina como 1 para registrar rastreamento detalhado de interrupção/cancelamento no agent.log. |
HERMES_DUMP_REQUESTS | Despeja os payloads de requisição da API em arquivos de log (true/false) |
HERMES_DUMP_REQUEST_STDOUT | Despeja os payloads de requisição da API no stdout em vez de em arquivos de log. |
HERMES_OAUTH_TRACE | Defina como 1 para registrar as trocas e renovações de token OAuth. Inclui informação de tempo redigida. |
HERMES_AGENT_HELP_GUIDANCE | Acrescenta texto de orientação extra ao prompt de sistema, para implantações personalizadas. |
HERMES_AGENT_LOGO | Sobrescreve o logo ASCII exibido na inicialização da CLI. |
DELEGATION_MAX_CONCURRENT_CHILDREN | Má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ável | Descrição |
|---|---|
HERMES_TUI | Abre a TUI em vez da CLI clássica quando vale 1. Equivale a passar --tui. |
HERMES_TUI_DIR | Caminho 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_RESUME | Retoma 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_THEME | Forç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_MODEL | Forç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ável | Descrição |
|---|---|
SESSION_IDLE_MINUTES | Reinicia as sessões depois de N minutos de inatividade (padrão: 1440) |
SESSION_RESET_HOUR | Hora do reinício diário no formato de 24h (padrão: 4 = 4h da manhã) |
HERMES_SESSION_ID | Exportada 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_AGENT | Definida 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_AGENT | Definida 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
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ável | Descrição |
|---|---|
AUXILIARY_VISION_PROVIDER | Sobrescreve o provedor das tarefas de visão |
AUXILIARY_VISION_MODEL | Sobrescreve o modelo das tarefas de visão |
AUXILIARY_VISION_BASE_URL | Endpoint direto compatível com OpenAI para as tarefas de visão |
AUXILIARY_VISION_API_KEY | Chave de API pareada com AUXILIARY_VISION_BASE_URL |
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:
| Chave | Descrição |
|---|---|
sort | Ordena os provedores: "price" (padrão), "throughput" ou "latency" |
only | Lista de slugs de provedor a permitir (por exemplo ["anthropic", "google"]) |
ignore | Lista de slugs de provedor a pular |
order | Lista de slugs de provedor a tentar em ordem |
require_parameters | Só 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 |
Use hermes config set para definir variáveis de ambiente — ele salva automaticamente no arquivo certo (.env para segredos, config.yaml para o resto).