Перейти к содержимому

Переменные окружения

Все переменные помещаются в ~/.hermes/.env. Их также можно задать с помощью hermes config set VAR value.

|----------|-------------| | OPENROUTER_API_KEY | Ключ OpenRouter API (рекомендуется для гибкости) | | OPENROUTER_BASE_URL | Переопределяет базовый URL, совместимый с OpenRouter | | HERMES_OPENROUTER_CACHE | Включает кэширование ответов OpenRouter (1/true/yes/on). Переопределяет openrouter.response_cache в config.yaml. См. Кэширование ответов. | | HERMES_OPENROUTER_CACHE_TTL | TTL кэша в секундах (1-86400). Переопределяет openrouter.response_cache_ttl в config.yaml. | | NOUS_BASE_URL | Переопределяет базовый URL Nous Portal (требуется редко; только development/testing) | | NOUS_INFERENCE_BASE_URL | Переопределяет endpoint инференса Nous напрямую | | AI_GATEWAY_API_KEY | Ключ Vercel AI Gateway API (ai-gateway.vercel.sh) | | AI_GATEWAY_BASE_URL | Переопределяет базовый URL AI Gateway (по умолчанию: https://ai-gateway.vercel.sh/v1) | | OPENAI_API_KEY | Ключ API для пользовательских endpoint, совместимых с OpenAI (используется с OPENAI_BASE_URL) | | OPENAI_BASE_URL | Базовый URL для пользовательского endpoint (VLLM, SGLang и т. д.) | | COPILOT_GITHUB_TOKEN | Токен GitHub для Copilot API — первый приоритет (OAuth gho_* или fine-grained PAT github_pat_*; классические PAT ghp_* не поддерживаются) | | GH_TOKEN | Токен GitHub — второй приоритет для Copilot (также используется для gh CLI) | | GITHUB_TOKEN | Токен GitHub — третий приоритет для Copilot | | HERMES_COPILOT_ACP_COMMAND | Переопределяет путь к бинарному файлу Copilot ACP CLI (по умолчанию: copilot) | | COPILOT_CLI_PATH | Алиас для HERMES_COPILOT_ACP_COMMAND | | HERMES_COPILOT_ACP_ARGS | Переопределяет аргументы Copilot ACP (по умолчанию: --acp --stdio) | | COPILOT_ACP_BASE_URL | Переопределяет базовый URL Copilot ACP | | GLM_API_KEY | Ключ z.ai / ZhipuAI GLM API (z.ai) | | ZAI_API_KEY | Алиас для GLM_API_KEY | | Z_AI_API_KEY | Алиас для GLM_API_KEY | | GLM_BASE_URL | Переопределяет базовый URL z.ai (по умолчанию: https://api.z.ai/api/paas/v4) | | KIMI_API_KEY | Ключ Kimi / Moonshot AI API (moonshot.ai) | | KIMI_BASE_URL | Переопределяет базовый URL Kimi (по умолчанию: https://api.moonshot.ai/v1) || KIMI_CN_API_KEY | Ключ Kimi / Moonshot China API (moonshot.cn) | | ARCEEAI_API_KEY | Ключ Arcee AI API (chat.arcee.ai) | | ARCEE_BASE_URL | Переопределить базовый URL Arcee (по умолчанию: https://api.arcee.ai/api/v1) | | GMI_API_KEY | Ключ GMI Cloud API (gmicloud.ai) | | GMI_BASE_URL | Переопределить базовый GMI URL Cloud (по умолчанию: https://api.gmi-serving.com/v1) | | MINIMAX_API_KEY | Ключ MiniMax API — глобальная endpoint (minimax.io). Не используется minimax-oauth (вместо этого путь OAuth использует вход через браузер). | | MINIMAX_BASE_URL | Переопределить базовый URL MiniMax (по умолчанию: https://api.minimax.io/anthropic — Hermes использует endpoint MiniMax, совместимую с Anthropic Messages). Не используется minimax-oauth. | | MINIMAX_CN_API_KEY | Ключ MiniMax API — endpoint для Китая (minimaxi.com). Не используется minimax-oauth (вместо этого путь OAuth использует вход через браузер). | | MINIMAX_CN_BASE_URL | Переопределить базовый URL MiniMax China (по умолчанию: https://api.minimaxi.com/anthropic). Не используется minimax-oauth. | | KILOCODE_API_KEY | Ключ Kilo Code API (kilo.ai) | | KILOCODE_BASE_URL | Переопределить базовый URL Kilo Code (по умолчанию: https://api.kilo.ai/api/gateway) | | XIAOMI_API_KEY | Ключ Xiaomi MiMo API (platform.xiaomimimo.com) | | XIAOMI_BASE_URL | Переопределить базовый URL Xiaomi MiMo (по умолчанию: https://api.xiaomimimo.com/v1) | | TOKENHUB_API_KEY | Ключ Tencent TokenHub API (tokenhub.tencentmaas.com) | | TOKENHUB_BASE_URL | Переопределить базовый URL Tencent TokenHub (по умолчанию: https://tokenhub.tencentmaas.com/v1) | | AZURE_FOUNDRY_API_KEY | Ключ Azure AI Foundry / Azure OpenAI API (ai.azure.com) | | AZURE_FOUNDRY_BASE_URL | Endpoint Azure AI Foundry URL (например, https://<resource>.openai.azure.com/openai/v1 для стиля OpenAI или https://<resource>.services.ai.azure.com/anthropic для стиля Anthropic) || AZURE_ANTHROPIC_KEY | Ключ Azure Anthropic API для provider: anthropic + base_url, указывающий на развертывание Azure Foundry Claude (альтернатива ANTHROPIC_API_KEY, когда настроены и Anthropic, и Azure Anthropic) | | HF_TOKEN | Токен Hugging Face для Inference Providers (huggingface.co/settings/tokens) | | HF_BASE_URL | Переопределить базовый URL Hugging Face (по умолчанию: https://router.huggingface.co/v1) | | GOOGLE_API_KEY | Ключ Google AI Studio API (aistudio.google.com/app/apikey) | | GEMINI_API_KEY | Алиас для GOOGLE_API_KEY | | GEMINI_BASE_URL | Переопределить базовый URL Google AI Studio | | HERMES_GEMINI_CLIENT_ID | ID OAuth-клиента для входа google-gemini-cli PKCE (необязательно; по умолчанию используется публичный клиент gemini-cli от Google) | | HERMES_GEMINI_CLIENT_SECRET | Секрет OAuth-клиента для google-gemini-cli (необязательно) | | HERMES_GEMINI_PROJECT_ID | ID проекта GCP для платных уровней Gemini (для бесплатного уровня выделяется автоматически) | | ANTHROPIC_API_KEY | Ключ Anthropic Console API (console.anthropic.com) | | ANTHROPIC_TOKEN | Переопределение вручную или для устаревших Anthropic OAuth/setup-token | | DASHSCOPE_API_KEY | Ключ Alibaba Cloud DashScope API для моделей Qwen (modelstudio.console.alibabacloud.com) | | DASHSCOPE_BASE_URL | Пользовательский базовый URL DashScope (по умолчанию: https://dashscope-intl.aliyuncs.com/compatible-mode/v1; используйте https://dashscope.aliyuncs.com/compatible-mode/v1 для региона mainland-China) | | DEEPSEEK_API_KEY | Ключ DeepSeek API для прямого доступа к DeepSeek (platform.deepseek.com) | | DEEPSEEK_BASE_URL | Пользовательский базовый API URL DeepSeek | | NVIDIA_API_KEY | Ключ NVIDIA NIM API — Nemotron и открытые модели (build.nvidia.com) | | NVIDIA_BASE_URL | Переопределить базовый NVIDIA URL (по умолчанию: https://integrate.api.nvidia.com/v1; установите http://localhost:8000/v1 для локальной конечной точки NIM) | | STEPFUN_API_KEY | Ключ StepFun API — модели серии Step (platform.stepfun.com) || STEPFUN_BASE_URL | Переопределить базовый URL StepFun (по умолчанию: https://api.stepfun.com/v1) | | OLLAMA_API_KEY | Ключ Ollama Cloud API — управляемый каталог Ollama без локального GPU (ollama.com/settings/keys) | | OLLAMA_BASE_URL | Переопределить базовый URL Ollama Cloud (по умолчанию: https://ollama.com/v1) | | XAI_API_KEY | Ключ xAI (Grok) API для чата + TTS (console.x.ai) | | XAI_BASE_URL | Переопределить базовый URL xAI (по умолчанию: https://api.x.ai/v1) | | MISTRAL_API_KEY | Ключ Mistral API для Voxtral TTS и Voxtral STT (console.mistral.ai) | | AWS_REGION | Регион AWS для инференса Bedrock (например, us-east-1, eu-central-1). Считывается через boto3. | | AWS_PROFILE | Именованный профиль AWS для аутентификации Bedrock (считывает ~/.aws/credentials). Оставьте неустановленным, чтобы использовать стандартную цепочку учетных данных boto3. | | BEDROCK_BASE_URL | Переопределить базовый URL runtime Bedrock (по умолчанию: https://bedrock-runtime.us-east-1.amazonaws.com; обычно лучше не задавать и использовать вместо этого AWS_REGION) | | HERMES_QWEN_BASE_URL | Переопределение базового URL Qwen Portal (по умолчанию: https://portal.qwen.ai/v1) | | OPENCODE_ZEN_API_KEY | Ключ OpenCode Zen API — доступ по pay-as-you-go к отобранным моделям (opencode.ai) | | OPENCODE_ZEN_BASE_URL | Переопределить базовый URL OpenCode Zen | | OPENCODE_GO_API_KEY | Ключ OpenCode Go API — подписка за $10/month на открытые модели (opencode.ai) | | OPENCODE_GO_BASE_URL | Переопределить базовый URL OpenCode Go | | CLAUDE_CODE_OAUTH_TOKEN | Явное переопределение токена Claude Code, если вы экспортируете его вручную | | HERMES_MODEL | Переопределить имя модели на уровне процесса (используется cron scheduler; для обычного использования предпочитайте config.yaml) | | VOICE_TOOLS_OPENAI_KEY | Предпочтительный ключ OpenAI для провайдеров OpenAI speech-to-text и text-to-speech | | HERMES_LOCAL_STT_COMMAND | Необязательный шаблон команды локального speech-to-text. Поддерживает заполнители {input_path}, {output_dir}, {language} и {model} | | HERMES_LOCAL_STT_LANGUAGE | Язык по умолчанию, передаваемый в HERMES_LOCAL_STT_COMMAND, или резервный вариант CLI для автоматически определяемого локального whisper (по умолчанию: en) || HERMES_HOME | Переопределяет каталог конфигурации Hermes (по умолчанию: ~/.hermes). Также задает область действия для файла gateway PID и имени сервиса systemd, чтобы несколько установок могли работать одновременно | | HERMES_GIT_BASH_PATH | Только Windows. Переопределяет обнаружение bash.exe для инструмента терминала. Указывает на любой bash — полную установку Git-for-Windows, WSL bash через symlink, MSYS2, Cygwin. Установщик автоматически задает это значение для PortableGit, который он подготовил. См. руководство по Windows (Native) | | HERMES_DISABLE_WINDOWS_UTF8 | Только Windows. Установите значение 1, чтобы отключить shim stdio для UTF-8 (configure_windows_stdio()) и вернуться к кодовой странице локали консоли. Полезно для поиска encoding-багов; в обычной работе редко является правильной настройкой | | HERMES_KANBAN_HOME | Переопределяет общий корень Hermes, который служит базой для kanban-доски (db + workspaces + логи worker). Если не задано, используется get_default_hermes_root() (родительский каталог любого активного профиля). Полезно для тестов и нестандартных развертываний | | HERMES_KANBAN_BOARD | Жестко задает активную kanban-доску для этого процесса. Имеет приоритет над ~/.hermes/kanban/current; диспетчер внедряет это в env подпроцесса worker, чтобы worker физически не могли видеть задачи на других досках. По умолчанию: default. Проверка slug: строчные буквы и цифры + дефисы + подчеркивания, 1-64 символов | | HERMES_KANBAN_DB | Жестко задает путь к файлу базы данных kanban напрямую (наивысший приоритет; выше, чем HERMES_KANBAN_BOARD и HERMES_KANBAN_HOME). Диспетчер внедряет это в env подпроцесса worker, чтобы worker профиля сходились на доске диспетчера | | HERMES_KANBAN_WORKSPACES_ROOT | Жестко задает корень workspaces kanban напрямую (наивысший приоритет для workspaces; выше, чем HERMES_KANBAN_HOME). Диспетчер внедряет это в env подпроцесса worker |

Для нативной аутентификации Anthropic Hermes предпочитает собственные файлы учетных данных Claude Code, если они существуют, потому что эти учетные данные могут автоматически обновляться. OAuth через Anthropic требует план Claude Max с приобретенными дополнительными кредитами использования — Hermes маршрутизирует как Claude Code, который использует только кредиты extra/overage плана Max, а не базовый лимит Max, и не работает на Claude Pro. Без Max + дополнительных кредитов вместо этого используйте ключ API. Переменные окружения, такие как ANTHROPIC_TOKEN, по-прежнему полезны как ручные переопределения, но они больше не являются предпочтительным способом входа в Claude Max.

VariableDescription
HERMES_INFERENCE_PROVIDERПереопределить выбор провайдера: auto, custom, openrouter, nous, openai-codex, copilot, copilot-acp, anthropic, huggingface, gemini, zai, kimi-coding, kimi-coding-cn, minimax, minimax-cn, minimax-oauth (вход OAuth через браузер — ключ API не требуется; см. руководство по MiniMax OAuth), kilocode, xiaomi, arcee, gmi, stepfun, alibaba, alibaba-coding-plan (алиас alibaba_coding), deepseek, nvidia, ollama-cloud, xai (алиас grok), google-gemini-cli, qwen-oauth, bedrock, opencode-zen, opencode-go, ai-gateway, tencent-tokenhub (по умолчанию: auto)
HERMES_PORTAL_BASE_URLПереопределить Nous Portal URL (для development/testing)
NOUS_INFERENCE_BASE_URLПереопределить Nous inference API URL
HERMES_NOUS_MIN_KEY_TTL_SECONDSМинимальный агентский ключ TTL перед повторным выпуском (по умолчанию: 1800 = 30 мин)
HERMES_NOUS_TIMEOUT_SECONDSТайм-аут HTTP для потоков учетных данных / токенов Nous
HERMES_DUMP_REQUESTSВыгружать полезные нагрузки запросов API в файлы журналов (true/false)
HERMES_PREFILL_MESSAGES_FILEПуть к файлу JSON с эфемерными сообщениями prefill, внедряемыми во время вызова API
HERMES_TIMEZONEПереопределение часового пояса IANA (например, America/New_York)

|----------|-------------| | PARALLEL_API_KEY | AI-нативный веб-поиск (parallel.ai) | | FIRECRAWL_API_KEY | Веб-скрапинг и облачный браузер (firecrawl.dev) | | FIRECRAWL_API_URL | Пользовательский endpoint Firecrawl API для self-hosted инстансов (необязательно) | | TAVILY_API_KEY | Ключ Tavily API для AI-нативного веб-поиска, извлечения и crawl (app.tavily.com) | | SEARXNG_URL | URL инстанса SearXNG для бесплатного self-hosted веб-поиска — ключ API не требуется (searxng.github.io) | | TAVILY_BASE_URL | Переопределить endpoint Tavily API. Полезно для корпоративных прокси и self-hosted поисковых бэкендов, совместимых с Tavily. Тот же шаблон, что и у GROQ_BASE_URL. | | EXA_API_KEY | Ключ Exa API для AI-нативного веб-поиска и содержимого (exa.ai) | | BROWSERBASE_API_KEY | Автоматизация браузера (browserbase.com) | | BROWSERBASE_PROJECT_ID | ID проекта Browserbase | | BROWSER_USE_API_KEY | Ключ Browser Use cloud browser API (browser-use.com) | | FIRECRAWL_BROWSER_TTL | TTL сессии браузера Firecrawl в секундах (по умолчанию: 300) | | BROWSER_CDP_URL | URL Chrome DevTools Protocol для локального браузера (задается через /browser connect, например ws://localhost:9222) | | CAMOFOX_URL | Локальный антидетект-браузер Camofox URL (по умолчанию: http://localhost:9377) | | BROWSER_INACTIVITY_TIMEOUT | Таймаут неактивности сессии браузера в секундах | | FAL_KEY | Генерация изображений (fal.ai) | | GROQ_API_KEY | Ключ Groq Whisper STT API (groq.com) | | ELEVENLABS_API_KEY | Премиальные TTS голоса ElevenLabs (elevenlabs.io) | | STT_GROQ_MODEL | Переопределить модель Groq STT (по умолчанию: whisper-large-v3-turbo) | | GROQ_BASE_URL | Переопределить OpenAI-совместимый endpoint Groq STT | | STT_OPENAI_MODEL | Переопределить модель OpenAI STT (по умолчанию: whisper-1) | | STT_OPENAI_BASE_URL | Переопределить OpenAI-совместимый endpoint STT | | GITHUB_TOKEN | Токен GitHub для Skills Hub (более высокие лимиты скорости API, публикация навыков) || HONCHO_API_KEY | Кросс-сессионное моделирование пользователя (honcho.dev) | | HONCHO_BASE_URL | Базовый URL для self-hosted экземпляров Honcho (по умолчанию: облако Honcho). Для локальных экземпляров ключ API не требуется | | HINDSIGHT_TIMEOUT | Таймаут в секундах для вызовов API провайдера памяти Hindsight (по умолчанию: 60). Увеличьте его, если ваш экземпляр Hindsight медленно отвечает во время /sync или on_session_switch и вы видите таймауты в errors.log. | | SUPERMEMORY_API_KEY | Семантическая долгосрочная память с восстановлением профиля и ingest сессий (supermemory.ai) | | TINKER_API_KEY | RL-обучение (tinker-console.thinkingmachines.ai) | | WANDB_API_KEY | Метрики RL-обучения (wandb.ai) | | DAYTONA_API_KEY | Облачные песочницы Daytona (daytona.io) | | VERCEL_TOKEN | Токен доступа Vercel Sandbox (vercel.com) | | VERCEL_PROJECT_ID | ID проекта Vercel (требуется с VERCEL_TOKEN) | | VERCEL_TEAM_ID | ID команды Vercel (требуется с VERCEL_TOKEN) | | VERCEL_OIDC_TOKEN | Краткоживущий токен OIDC Vercel (альтернатива только для разработки) |

Переменные окружения для встроенного плагина observability/langfuse. Задайте их с помощью hermes tools → Langfuse Observability или вручную в ~/.hermes/.env. Плагин также должен быть включён (hermes plugins enable observability/langfuse), прежде чем что-либо из этого вступит в силу.

VariableDescription
HERMES_LANGFUSE_PUBLIC_KEYПубличный ключ проекта Langfuse (pk-lf-...). Обязательно.
HERMES_LANGFUSE_SECRET_KEYСекретный ключ проекта Langfuse (sk-lf-...). Обязательно.
HERMES_LANGFUSE_BASE_URLURL сервера Langfuse (по умолчанию: https://cloud.langfuse.com). Укажите для self-hosted.
HERMES_LANGFUSE_ENVТег окружения в трассировках (production, staging, …)
HERMES_LANGFUSE_RELEASEТег Release/version в трассировках
HERMES_LANGFUSE_SAMPLE_RATEЧастота сэмплирования SDK 0.0–1.0 (по умолчанию: 1.0)
HERMES_LANGFUSE_MAX_CHARSУсечение по полям для сериализованных payload (по умолчанию: 12000)
HERMES_LANGFUSE_DEBUGtrue включает подробное логирование плагина в agent.log
LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY / LANGFUSE_BASE_URLСтандартные имена SDK Langfuse. Принимаются как резервные, если эквиваленты HERMES_LANGFUSE_* не заданы.

Эти переменные настраивают Tool Gateway для платных подписчиков Nous или self-hosted-развёртываний gateway. Большинству пользователей не нужно задавать их — gateway настраивается автоматически через hermes model или hermes tools.

VariableDescription
TOOL_GATEWAY_DOMAINБазовый домен для маршрутизации Tool Gateway (по умолчанию: nousresearch.com)
TOOL_GATEWAY_SCHEMEСхема HTTP или HTTPS для URL gateway (по умолчанию: https)
TOOL_GATEWAY_USER_TOKENТокен аутентификации для Tool Gateway (обычно заполняется автоматически из аутентификации Nous)
FIRECRAWL_GATEWAY_URLПереопределяет URL специально для endpoint gateway Firecrawl

|----------|-------------| | TERMINAL_ENV | Backend: local, docker, ssh, singularity, modal, daytona, vercel_sandbox | | HERMES_DOCKER_BINARY | Переопределяет бинарный файл контейнера, который Hermes вызывает через shell (например, podman, /usr/local/bin/docker). Если не задано, Hermes автоматически обнаруживает docker или podman в PATH. Требуется, когда установлены оба варианта и нужен не вариант по умолчанию, либо когда бинарный файл находится вне PATH. | | TERMINAL_DOCKER_IMAGE | Docker-образ (по умолчанию: nikolaik/python-nodejs:python3.11-nodejs20) | | TERMINAL_DOCKER_FORWARD_ENV | JSON массив имён env var, которые нужно явно пробрасывать в терминальные сессии Docker. Примечание: required_environment_variables, объявленные навыком, пробрасываются автоматически — это нужно только для переменных, не объявленных ни одним навыком. | | TERMINAL_DOCKER_VOLUMES | Дополнительные монтирования томов Docker (разделённые запятыми пары host:container) | | TERMINAL_DOCKER_MOUNT_CWD_TO_WORKSPACE | Дополнительная расширенная настройка: смонтировать launch cwd в Docker /workspace (true/false, по умолчанию: false) | | TERMINAL_SINGULARITY_IMAGE | Образ Singularity или путь к .sif | | TERMINAL_MODAL_IMAGE | Образ контейнера Modal | | TERMINAL_DAYTONA_IMAGE | Образ sandbox Daytona | | TERMINAL_VERCEL_RUNTIME | Runtime Vercel Sandbox (node24, node22, python3.13) | | TERMINAL_TIMEOUT | Тайм-аут команды в секундах | | TERMINAL_LIFETIME_SECONDS | Максимальное время жизни терминальных сессий в секундах | | TERMINAL_CWD | Рабочий каталог для терминальных сессий (только gateway/cron; CLI использует каталог запуска) | | SUDO_PASSWORD | Включает sudo без интерактивного prompt |

Для backend облачных sandbox персистентность ориентирована на файловую систему. TERMINAL_LIFETIME_SECONDS определяет, когда Hermes очищает неактивную терминальную сессию, а при последующих возобновлениях sandbox может быть пересоздан вместо сохранения тех же запущенных процессов.

|----------|-------------| | TERMINAL_SSH_HOST | Имя хоста удалённого сервера | | TERMINAL_SSH_USER | Имя пользователя SSH | | TERMINAL_SSH_PORT | Порт SSH (по умолчанию: 22) | | TERMINAL_SSH_KEY | Путь к приватному ключу | | TERMINAL_SSH_PERSISTENT | Переопределить persistent shell для SSH (по умолчанию: использует TERMINAL_PERSISTENT_SHELL) |

VariableОписание
TERMINAL_CONTAINER_CPUЯдра CPU (по умолчанию: 1)
TERMINAL_CONTAINER_MEMORYПамять в MB (по умолчанию: 5120)
TERMINAL_CONTAINER_DISKДиск в MB (по умолчанию: 51200)
TERMINAL_CONTAINER_PERSISTENTСохранять файловую систему контейнера между сессиями (по умолчанию: true)
TERMINAL_SANDBOX_DIRКаталог хоста для рабочих пространств и overlay (по умолчанию: ~/.hermes/sandboxes/)
VariableОписание
TERMINAL_PERSISTENT_SHELLВключить persistent shell для нелокальных backend’ов (по умолчанию: true). Также можно задать через terminal.persistent_shell в config.yaml
TERMINAL_LOCAL_PERSISTENTВключить persistent shell для локального backend’а (по умолчанию: false)
TERMINAL_SSH_PERSISTENTПереопределить persistent shell для backend’а SSH (по умолчанию: использует TERMINAL_PERSISTENT_SHELL)

Обмен сообщениями| Переменная | Описание |

Заголовок раздела «Обмен сообщениями| Переменная | Описание |»

|----------|-------------| | TELEGRAM_BOT_TOKEN | Токен Telegram-бота (от @BotFather) | | TELEGRAM_ALLOWED_USERS | Разделённые запятыми ID пользователей, которым разрешено использовать бота (применяется к личным сообщениям, группам и форумам) | | TELEGRAM_GROUP_ALLOWED_USERS | Разделённые запятыми ID пользователей-отправителей, авторизованных только в groups/forums (не даёт ли NOT доступ к личным сообщениям). Значения в формате Chat-ID (начинающиеся с -) по-прежнему учитываются как chat ID для обратной совместимости с конфигурациями до pre-#17686, с предупреждением об устаревании. | | TELEGRAM_GROUP_ALLOWED_CHATS | Разделённые запятыми chat ID group/forum; любой участник авторизован | | TELEGRAM_HOME_CHANNEL | Telegram chat/channel по умолчанию для доставки cron | | TELEGRAM_HOME_CHANNEL_NAME | Отображаемое имя для домашнего канала Telegram | | TELEGRAM_WEBHOOK_URL | Публичный HTTPS URL для режима webhook (включает webhook вместо polling) | | TELEGRAM_WEBHOOK_PORT | Локальный порт прослушивания для webhook-сервера (по умолчанию: 8443) | | TELEGRAM_WEBHOOK_SECRET | Секретный токен, который Telegram возвращает в каждом обновлении для проверки. Обязателен всегда, когда задан TELEGRAM_WEBHOOK_URL — gateway отказывается запускаться без него (GHSA-3vpc-7q5r-276h). Сгенерируйте с помощью openssl rand -hex 32. | | TELEGRAM_REACTIONS | Включить emoji-реакции на сообщения во время обработки (по умолчанию: false) | | TELEGRAM_REPLY_TO_MODE | Поведение ссылок в ответах: off, first (по умолчанию) или all. Соответствует шаблону Discord. | | TELEGRAM_IGNORED_THREADS | Разделённые запятыми ID topic/thread форумов Telegram, где бот никогда не отвечает | | TELEGRAM_PROXY | Proxy URL для соединений Telegram — переопределяет HTTPS_PROXY. Поддерживает http://, https://, socks5:// | | DISCORD_BOT_TOKEN | Токен Discord-бота | | DISCORD_ALLOWED_USERS | Разделённые запятыми ID пользователей Discord, которым разрешено использовать бота | | DISCORD_ALLOWED_ROLES | Разделённые запятыми ID ролей Discord, которым разрешено использовать бота (OR с DISCORD_ALLOWED_USERS). Автоматически включает intent Members. Полезно, когда команды модерации меняются — права ролей распространяются автоматически. || DISCORD_ALLOWED_CHANNELS | ID каналов Discord, разделённые запятыми. Если задано, бот отвечает только в этих каналах (а также в DM, если разрешено). Переопределяет config.yaml discord.allowed_channels. | | DISCORD_PROXY | Proxy URL для подключений Discord — переопределяет HTTPS_PROXY. Поддерживает http://, https://, socks5:// | | DISCORD_HOME_CHANNEL | Канал Discord по умолчанию для доставки cron | | DISCORD_HOME_CHANNEL_NAME | Отображаемое имя для домашнего канала Discord | | DISCORD_COMMAND_SYNC_POLICY | Политика синхронизации slash-команд Discord при запуске: safe (сравнить различия и согласовать), bulk (устаревший tree.sync()), или off | | DISCORD_REQUIRE_MENTION | Требовать @mention перед ответом в каналах сервера | | DISCORD_FREE_RESPONSE_CHANNELS | ID каналов, разделённые запятыми, где mention не требуется | | DISCORD_AUTO_THREAD | Автоматически создавать треды для длинных ответов, если поддерживается | | DISCORD_REACTIONS | Включить emoji-реакции на сообщениях во время обработки (по умолчанию: true) | | DISCORD_IGNORED_CHANNELS | ID каналов, разделённые запятыми, где бот никогда не отвечает | | DISCORD_NO_THREAD_CHANNELS | ID каналов, разделённые запятыми, где бот отвечает без автоматического создания тредов | | DISCORD_REPLY_TO_MODE | Поведение ссылок на ответ: off, first (по умолчанию), или all | | DISCORD_ALLOW_MENTION_EVERYONE | Разрешить боту пинговать @everyone/@here (по умолчанию: false). См. Управление упоминаниями. | | DISCORD_ALLOW_MENTION_ROLES | Разрешить боту пинговать упоминания @role (по умолчанию: false). | | DISCORD_ALLOW_MENTION_USERS | Разрешить боту пинговать отдельные упоминания @user (по умолчанию: true). | | DISCORD_ALLOW_MENTION_REPLIED_USER | Пинговать автора при ответе на его сообщение (по умолчанию: true). | | SLACK_BOT_TOKEN | Токен Slack-бота (xoxb-...) | | SLACK_APP_TOKEN | Токен уровня приложения Slack (xapp-..., требуется для Socket Mode) | | SLACK_ALLOWED_USERS | ID пользователей Slack, разделённые запятыми | | SLACK_HOME_CHANNEL | Канал Slack по умолчанию для доставки cron | | SLACK_HOME_CHANNEL_NAME | Отображаемое имя для домашнего канала Slack | | GOOGLE_CHAT_PROJECT_ID | Проект GCP, размещающий тему Pub/Sub (иначе используется GOOGLE_CLOUD_PROJECT) || GOOGLE_CHAT_SUBSCRIPTION_NAME | Полный путь подписки Pub/Sub, projects/{proj}/subscriptions/{sub} (устаревший алиас: GOOGLE_CHAT_SUBSCRIPTION) | | GOOGLE_CHAT_SERVICE_ACCOUNT_JSON | Путь к Service Account JSON, или сам JSON inline (использует GOOGLE_APPLICATION_CREDENTIALS как резервный вариант) | | GOOGLE_CHAT_ALLOWED_USERS | Разделённые запятыми email пользователей, которым разрешено общаться с ботом | | GOOGLE_CHAT_ALLOW_ALL_USERS | Разрешить любому пользователю Google Chat вызывать бота (только для dev) | | GOOGLE_CHAT_HOME_CHANNEL | Пространство по умолчанию (например, spaces/AAAA...) для доставки cron | | GOOGLE_CHAT_HOME_CHANNEL_NAME | Отображаемое имя для домашнего пространства Google Chat | | GOOGLE_CHAT_MAX_MESSAGES | Максимум сообщений в полёте для Pub/Sub FlowControl (по умолчанию: 1) | | GOOGLE_CHAT_MAX_BYTES | Максимум байтов в полёте для Pub/Sub FlowControl (по умолчанию: 16777216, 16 MiB) | | GOOGLE_CHAT_BOOTSTRAP_SPACES | Разделённые запятыми дополнительные ID пространств, которые нужно проверять при запуске при определении собственного users/{id} бота | | GOOGLE_CHAT_DEBUG_RAW | Установите любое значение, чтобы логировать редактированные конверты Pub/Sub на уровне DEBUG (только для отладки) | | WHATSAPP_ENABLED | Включить bridge WhatsApp (true/false) | | WHATSAPP_MODE | bot (отдельный номер) или self-chat (отправка сообщений самому себе) | | WHATSAPP_ALLOWED_USERS | Разделённые запятыми номера телефонов (с кодом страны, без +), или * для разрешения всех отправителей | | WHATSAPP_ALLOW_ALL_USERS | Разрешить всех отправителей WhatsApp без allowlist (true/false) | | WHATSAPP_DEBUG | Логировать необработанные события сообщений в bridge для диагностики (true/false) | | SIGNAL_HTTP_URL | endpoint демона signal-cli HTTP (например, http://127.0.0.1:8080) | | SIGNAL_ACCOUNT | Номер телефона бота в формате E.164 | | SIGNAL_ALLOWED_USERS | Разделённые запятыми номера телефонов в формате E.164 или UUID | | SIGNAL_GROUP_ALLOWED_USERS | Разделённые запятыми ID групп, или * для всех групп | | SIGNAL_HOME_CHANNEL_NAME | Отображаемое имя для домашнего канала Signal | | SIGNAL_IGNORE_STORIES | Игнорировать обновления Signal stories/status | | SIGNAL_ALLOW_ALL_USERS | Разрешить всех пользователей Signal без allowlist | | TWILIO_ACCOUNT_SID | SID аккаунта Twilio (используется совместно с telephony skill) || TWILIO_AUTH_TOKEN | Twilio Auth Token (общий с telephony skill; также используется для проверки подписи webhook) | | TWILIO_PHONE_NUMBER | Номер телефона Twilio в формате E.164 (общий с telephony skill) | | SMS_WEBHOOK_URL | Публичный URL для проверки подписи Twilio — должен совпадать с webhook URL в Twilio Console (обязательно) | | SMS_WEBHOOK_PORT | Порт прослушивателя webhook для входящих SMS (по умолчанию: 8080) | | SMS_WEBHOOK_HOST | Адрес привязки webhook (по умолчанию: 0.0.0.0) | | SMS_INSECURE_NO_SIGNATURE | Установите значение true, чтобы отключить проверку подписи Twilio (только для локальной разработки — не для production) | | SMS_ALLOWED_USERS | Разделенные запятыми номера телефонов в формате E.164, которым разрешено общаться в чате | | SMS_ALLOW_ALL_USERS | Разрешить всех отправителей SMS без allowlist | | SMS_HOME_CHANNEL | Номер телефона для cron job / доставки уведомлений | | SMS_HOME_CHANNEL_NAME | Отображаемое имя для домашнего канала SMS | | EMAIL_ADDRESS | Адрес электронной почты для адаптера Email gateway | | EMAIL_PASSWORD | Пароль или app password для учетной записи электронной почты | | EMAIL_IMAP_HOST | Имя хоста IMAP для адаптера email | | EMAIL_IMAP_PORT | Порт IMAP | | EMAIL_SMTP_HOST | Имя хоста SMTP для адаптера email | | EMAIL_SMTP_PORT | Порт SMTP | | EMAIL_ALLOWED_USERS | Разделенные запятыми адреса электронной почты, которым разрешено отправлять сообщения боту | | EMAIL_HOME_ADDRESS | Получатель по умолчанию для проактивной доставки email | | EMAIL_HOME_ADDRESS_NAME | Отображаемое имя для домашней цели email | | EMAIL_POLL_INTERVAL | Интервал опроса email в секундах | | EMAIL_ALLOW_ALL_USERS | Разрешить всех отправителей входящей электронной почты | | DINGTALK_CLIENT_ID | AppKey бота DingTalk из developer portal (open.dingtalk.com) | | DINGTALK_CLIENT_SECRET | AppSecret бота DingTalk из developer portal | | DINGTALK_ALLOWED_USERS | Разделенные запятыми ID пользователей DingTalk, которым разрешено отправлять сообщения боту | | FEISHU_APP_ID | App ID бота Feishu/Lark с open.feishu.cn | | FEISHU_APP_SECRET | App Secret бота Feishu/Lark | | FEISHU_DOMAIN | feishu (Китай) или lark (международный). По умолчанию: feishu | | FEISHU_CONNECTION_MODE | websocket (рекомендуется) или webhook. По умолчанию: websocket || FEISHU_ENCRYPT_KEY | Необязательный ключ шифрования для webhook mode | | FEISHU_VERIFICATION_TOKEN | Необязательный токен верификации для webhook mode | | FEISHU_ALLOWED_USERS | Разделённые запятыми ID пользователей Feishu, которым разрешено отправлять сообщения боту | | FEISHU_ALLOW_BOTS | none (по умолчанию) / mentions / all — принимать входящие сообщения от других ботов. См. обмен сообщениями между ботами | | FEISHU_REQUIRE_MENTION | true (по умолчанию) / false — требуется ли в групповых сообщениях @упоминание бота. Переопределяется для каждого чата через group_rules.<chat_id>.require_mention. | | FEISHU_HOME_CHANNEL | ID чата Feishu для доставки cron и уведомлений | | WECOM_BOT_ID | ID AI Bot WeCom из консоли администратора | | WECOM_SECRET | Секрет AI Bot WeCom | | WECOM_WEBSOCKET_URL | Пользовательский WebSocket URL (по умолчанию: wss://openws.work.weixin.qq.com) | | WECOM_ALLOWED_USERS | Разделённые запятыми ID пользователей WeCom, которым разрешено отправлять сообщения боту | | WECOM_HOME_CHANNEL | ID чата WeCom для доставки cron и уведомлений | | WECOM_CALLBACK_CORP_ID | Enterprise Corp ID WeCom для callback self-built app | | WECOM_CALLBACK_CORP_SECRET | Corp secret для self-built app | | WECOM_CALLBACK_AGENT_ID | Agent ID self-built app | | WECOM_CALLBACK_TOKEN | Токен верификации callback | | WECOM_CALLBACK_ENCODING_AES_KEY | Ключ AES для шифрования callback | | WECOM_CALLBACK_HOST | Адрес bind сервера callback (по умолчанию: 0.0.0.0) | | WECOM_CALLBACK_PORT | Порт сервера callback (по умолчанию: 8645) | | WECOM_CALLBACK_ALLOWED_USERS | Разделённые запятыми ID пользователей для allowlist | | WECOM_CALLBACK_ALLOW_ALL_USERS | Установите true, чтобы разрешить всех пользователей без allowlist | | WEIXIN_ACCOUNT_ID | ID учётной записи Weixin, полученный через QR-вход через iLink Bot API | | WEIXIN_TOKEN | Токен аутентификации Weixin, полученный через QR-вход через iLink Bot API | | WEIXIN_BASE_URL | Переопределить базовый URL Weixin iLink Bot API (по умолчанию: https://ilinkai.weixin.qq.com) | | WEIXIN_CDN_BASE_URL | Переопределить базовый URL Weixin CDN для медиафайлов (по умолчанию: https://novac2c.cdn.weixin.qq.com/c2c) | | WEIXIN_DM_POLICY | Политика личных сообщений: open, allowlist, pairing, disabled (по умолчанию: open) || WEIXIN_GROUP_POLICY | Политика групповых сообщений: open, allowlist, disabled (по умолчанию: disabled) | | WEIXIN_ALLOWED_USERS | Разделённые запятыми ID пользователей Weixin, которым разрешено писать боту в личные сообщения | | WEIXIN_GROUP_ALLOWED_USERS | Разделённые запятыми ID групповых чатов Weixin (не ID пользователей-участников), которым разрешено взаимодействовать с ботом. Имя переменной устарело — ожидаются ID групп. Работает только когда iLink действительно доставляет события групп; QR-login iLink-идентификаторы бота (...@im.bot) обычно не получают обычные сообщения групп WeChat. | | WEIXIN_HOME_CHANNEL | ID чата Weixin для cron-доставки и уведомлений | | WEIXIN_HOME_CHANNEL_NAME | Отображаемое имя для домашнего канала Weixin | | WEIXIN_ALLOW_ALL_USERS | Разрешить всех пользователей Weixin без allowlist (true/false) | | BLUEBUBBLES_SERVER_URL | BlueBubbles server URL (например, http://192.168.1.10:1234) | | BLUEBUBBLES_PASSWORD | Пароль сервера BlueBubbles | | BLUEBUBBLES_WEBHOOK_HOST | Адрес привязки слушателя webhook (по умолчанию: 127.0.0.1) | | BLUEBUBBLES_WEBHOOK_PORT | Порт слушателя webhook (по умолчанию: 8645) | | BLUEBUBBLES_HOME_CHANNEL | Phone/email для доставки cron/notification | | BLUEBUBBLES_ALLOWED_USERS | Разделённые запятыми авторизованные пользователи | | BLUEBUBBLES_ALLOW_ALL_USERS | Разрешить всех пользователей (true/false) | | QQ_APP_ID | QQ Bot App ID из q.qq.com | | QQ_CLIENT_SECRET | QQ Bot App Secret из q.qq.com | | QQ_STT_API_KEY | Ключ API для внешнего резервного провайдера STT (необязательно, используется, когда встроенный ASR QQ не возвращает текст) | | QQ_STT_BASE_URL | Базовый URL для внешнего провайдера STT (необязательно) | | QQ_STT_MODEL | Имя модели для внешнего провайдера STT (необязательно) | | QQ_ALLOWED_USERS | Разделённые запятыми openID пользователей QQ, которым разрешено писать боту | | QQ_GROUP_ALLOWED_USERS | Разделённые запятыми ID групп QQ для доступа к групповым @-сообщениям | | QQ_ALLOW_ALL_USERS | Разрешить всех пользователей (true/false, переопределяет QQ_ALLOWED_USERS) | | QQBOT_HOME_CHANNEL | openID QQ user/group для cron-доставки и уведомлений | | QQBOT_HOME_CHANNEL_NAME | Отображаемое имя для домашнего канала QQ || QQ_PORTAL_HOST | Переопределить host портала QQ (установите sandbox.q.qq.com, чтобы маршрутизировать через sandbox gateway; по умолчанию: q.qq.com). | | MATTERMOST_URL | URL сервера Mattermost (например, https://mm.example.com) | | MATTERMOST_TOKEN | Токен бота или personal access token для Mattermost | | MATTERMOST_ALLOWED_USERS | Разделённые запятыми ID пользователей Mattermost, которым разрешено писать боту | | MATTERMOST_HOME_CHANNEL | ID канала для проактивной доставки сообщений (cron, уведомления) | | MATTERMOST_REQUIRE_MENTION | Требовать @mention в каналах (по умолчанию: true). Установите false, чтобы отвечать на все сообщения. | | MATTERMOST_FREE_RESPONSE_CHANNELS | Разделённые запятыми ID каналов, где бот отвечает без @mention | | MATTERMOST_REPLY_MODE | Стиль ответов: thread (ответы в тредах) или off (плоские сообщения, по умолчанию) | | MATRIX_HOMESERVER | URL Matrix homeserver (например, https://matrix.org) | | MATRIX_ACCESS_TOKEN | Matrix access token для аутентификации бота | | MATRIX_USER_ID | ID пользователя Matrix (например, @hermes:matrix.org) — обязателен для входа по паролю, необязателен при использовании access token | | MATRIX_PASSWORD | Пароль Matrix (альтернатива access token) | | MATRIX_ALLOWED_USERS | Разделённые запятыми ID пользователей Matrix, которым разрешено писать боту (например, @alice:matrix.org) | | MATRIX_HOME_ROOM | ID комнаты для проактивной доставки сообщений (например, !abc123:matrix.org) | | MATRIX_ENCRYPTION | Включить сквозное шифрование (true/false, по умолчанию: false) | | MATRIX_DEVICE_ID | Стабильный ID устройства Matrix для сохранения E2EE между перезапусками (например, HERMES_BOT). Без этого ключи E2EE будут меняться при каждом запуске, и расшифровка истории комнат нарушится. | | MATRIX_REACTIONS | Включить emoji-реакции жизненного цикла обработки на входящие сообщения (по умолчанию: true). Установите false, чтобы отключить. | | MATRIX_REQUIRE_MENTION | Требовать @mention в комнатах (по умолчанию: true). Установите false, чтобы отвечать на все сообщения. | | MATRIX_FREE_RESPONSE_ROOMS | Разделённые запятыми ID комнат, где бот отвечает без @mention | | MATRIX_AUTO_THREAD | Автоматически создавать треды для сообщений в комнатах (по умолчанию: true) | | MATRIX_DM_MENTION_THREADS | Создавать тред, когда бот @mentioned в DM (по умолчанию: false) || MATRIX_RECOVERY_KEY | Ключ восстановления для проверки cross-signing после ротации ключа устройства. Рекомендуется для конфигураций E2EE с включённым cross-signing. | | HASS_TOKEN | Long-Lived Access Token для Home Assistant (включает платформу HA + инструменты) | | HASS_URL | URL Home Assistant (по умолчанию: http://homeassistant.local:8123) | | WEBHOOK_ENABLED | Включить адаптер платформы webhook (true/false) | | WEBHOOK_PORT | Порт сервера HTTP для получения webhook’ов (по умолчанию: 8644) | | WEBHOOK_SECRET | Глобальный секрет HMAC для проверки подписи webhook’ов (используется как запасной вариант, когда маршруты не указывают собственный) | | API_SERVER_ENABLED | Включить OpenAI-совместимый сервер API (true/false). Работает параллельно с другими платформами. | | API_SERVER_KEY | Bearer-токен для аутентификации сервера API. Обязателен при привязке не к loopback. | | API_SERVER_CORS_ORIGINS | Разделённые запятыми origin’ы браузера, которым разрешено напрямую вызывать сервер API (например, http://localhost:3000,http://127.0.0.1:3000). По умолчанию: отключено. | | API_SERVER_PORT | Порт для сервера API (по умолчанию: 8642) | | API_SERVER_HOST | Адрес Host/bind для сервера API (по умолчанию: 127.0.0.1). Используйте 0.0.0.0 для сетевого доступа — требуются API_SERVER_KEY и узкий allowlist API_SERVER_CORS_ORIGINS. | | API_SERVER_MODEL_NAME | Имя модели, объявляемое на /v1/models. По умолчанию используется имя профиля (или hermes-agent для профиля по умолчанию). Полезно для многопользовательских конфигураций, где фронтендам вроде Open WebUI нужны разные имена моделей для каждого подключения. | | GATEWAY_PROXY_URL | URL удалённого сервера Hermes API для пересылки сообщений (режим proxy). Когда задано, gateway обрабатывает только платформенные I/O — вся работа агента делегируется удалённому серверу. Также можно настроить через gateway.proxy_url в config.yaml. | | GATEWAY_PROXY_KEY | Bearer-токен для аутентификации на удалённом сервере API в режиме proxy. Должен совпадать с API_SERVER_KEY на удалённом хосте. | | MESSAGING_CWD | Рабочая директория для terminal-команд в режиме обмена сообщениями (по умолчанию: ~) | | GATEWAY_ALLOWED_USERS | Разделённые запятыми ID пользователей, которым разрешён доступ на всех платформах || GATEWAY_ALLOW_ALL_USERS | Разрешить всех пользователей без списков разрешений (true/false, по умолчанию: false) |

Учетные данные app-only для клиента Microsoft Graph REST, используемого предстоящим конвейером сводок по собраниям Teams. Пошаговые инструкции в Azure portal и точный набор необходимых разрешений API см. в Register a Microsoft Graph application.

VariableDescription
MSGRAPH_TENANT_IDID тенанта Azure AD (ID каталога GUID) для регистрации приложения Graph.
MSGRAPH_CLIENT_IDID приложения (клиента) регистрации приложения Azure.
MSGRAPH_CLIENT_SECRETЗначение client secret для регистрации приложения. Храните в ~/.hermes/.env вместе с chmod 600; периодически ротируйте через Azure portal.
MSGRAPH_SCOPEОбласть OAuth2 для запроса токена client-credentials (по умолчанию: https://graph.microsoft.com/.default).
MSGRAPH_AUTHORITY_URLAuthority платформы идентификации Microsoft (по умолчанию: https://login.microsoftonline.com). Переопределяйте только для облаков national/sovereign (например, https://login.microsoftonline.us для GCC High).

Входящий listener уведомлений об изменениях для событий Graph (собрания Teams, календарь, чат и т. д.). Сведения о настройке и усилении безопасности см. в Microsoft Graph Webhook Listener.

VariableDescription
MSGRAPH_WEBHOOK_ENABLEDВключить платформу gateway msgraph_webhook (true/1/yes).
MSGRAPH_WEBHOOK_PORTПорт, к которому привязывается listener (по умолчанию: 8646).
MSGRAPH_WEBHOOK_CLIENT_STATEОбщий секрет, который Graph возвращает в каждом уведомлении; сравнивается с hmac.compare_digest. Сгенерируйте с помощью openssl rand -hex 32.
MSGRAPH_WEBHOOK_ACCEPTED_RESOURCESРазделенный запятыми allowlist шаблонов ресурсов Graph paths/patterns (например, communications/onlineMeetings,chats/*/messages). Завершающий * означает сопоставление по префиксу. Пусто = принимать все.
MSGRAPH_WEBHOOK_ALLOWED_SOURCE_CIDRSРазделенные запятыми диапазоны CIDR, которым разрешено POST к listener (например, 52.96.0.0/14,52.104.0.0/14). Пусто = разрешить все (по умолчанию). В production ограничьте опубликованными исходящими диапазонами Microsoft Graph.
ПеременнаяОписание
TEAMS_DELIVERY_MODEgraph или incoming_webhook.
TEAMS_INCOMING_WEBHOOK_URLСгенерированный Teams webhook URL; обязателен, когда TEAMS_DELIVERY_MODE=incoming_webhook.
TEAMS_GRAPH_ACCESS_TOKENПредварительно полученный делегированный токен доступа для доставки через Graph. Нужен редко — writer использует учётные данные приложения MSGRAPH_*, если значение не задано.
TEAMS_TEAM_IDID целевой Team для доставки в канал (режим graph).
TEAMS_CHANNEL_IDID целевого канала (в паре с TEAMS_TEAM_ID).
TEAMS_CHAT_IDID целевого чата 1:1 или группового чата (альтернатива team+channel для режима graph).

Расширенная настройка обмена сообщениями

Заголовок раздела «Расширенная настройка обмена сообщениями»

Расширенные платформенно-специфичные параметры для ограничения исходящего пакетного отправителя сообщений. Большинству пользователей никогда не нужно их менять; значения по умолчанию настроены так, чтобы учитывать ограничения скорости каждой платформы без ощущения медлительности.| Переменная | Описание | |----------|-------------| | HERMES_TELEGRAM_TEXT_BATCH_DELAY_SECONDS | Окно ожидания перед сбросом поставленного в очередь текстового фрагмента Telegram (по умолчанию: 0.6). | | HERMES_TELEGRAM_TEXT_BATCH_SPLIT_DELAY_SECONDS | Задержка между разделёнными фрагментами, когда одно сообщение Telegram превышает ограничение по длине (по умолчанию: 2.0). | | HERMES_TELEGRAM_MEDIA_BATCH_DELAY_SECONDS | Окно ожидания перед сбросом поставленных в очередь медиа Telegram (по умолчанию: 0.6). | | HERMES_TELEGRAM_FOLLOWUP_GRACE_SECONDS | Задержка перед отправкой следующего сообщения после завершения агента, чтобы избежать гонки с последним фрагментом потока. | | HERMES_TELEGRAM_HTTP_CONNECT_TIMEOUT / _READ_TIMEOUT / _WRITE_TIMEOUT / _POOL_TIMEOUT | Переопределяют тайм-ауты базового python-telegram-bot HTTP (в секундах). | | HERMES_TELEGRAM_HTTP_POOL_SIZE | Максимальное число одновременных подключений HTTP к Telegram API. | | HERMES_TELEGRAM_DISABLE_FALLBACK_IPS | Отключает жёстко заданные резервные IP Cloudflare, используемые, когда DNS не удаётся (true/false). | | HERMES_DISCORD_TEXT_BATCH_DELAY_SECONDS | Окно ожидания перед сбросом поставленного в очередь текстового фрагмента Discord (по умолчанию: 0.6). | | HERMES_DISCORD_TEXT_BATCH_SPLIT_DELAY_SECONDS | Задержка между разделёнными фрагментами, когда сообщение Discord превышает ограничение по длине (по умолчанию: 2.0). | | HERMES_MATRIX_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDS | Эквиваленты настроек пакетной обработки Telegram для Matrix. | | HERMES_FEISHU_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDS / _MAX_CHARS / _MAX_MESSAGES | Настройка batcher для Feishu — задержка, задержка разделения, максимум символов на сообщение, максимум сообщений на пакет. | | HERMES_FEISHU_MEDIA_BATCH_DELAY_SECONDS | Задержка сброса медиа Feishu. | | HERMES_FEISHU_DEDUP_CACHE_SIZE | Размер кэша дедупликации webhook Feishu (по умолчанию: 1024). | | HERMES_WECOM_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDS | Настройка batcher для WeCom. | | HERMES_VISION_DOWNLOAD_TIMEOUT | Тайм-аут в секундах для загрузки изображения перед передачей его vision model (по умолчанию: 30). | | HERMES_RESTART_DRAIN_TIMEOUT | Gateway: сколько секунд ждать завершения активных запусков на /restart перед принудительным перезапуском (по умолчанию: 900). || HERMES_GATEWAY_PLATFORM_CONNECT_TIMEOUT | Таймаут подключения для каждой платформы при запуске gateway (в секундах). | | HERMES_GATEWAY_BUSY_INPUT_MODE | Поведение busy-input gateway по умолчанию: queue, steer или interrupt. Можно переопределить для каждого чата с помощью /busy. | | HERMES_GATEWAY_BUSY_ACK_ENABLED | Определяет, отправляет ли gateway сообщение-подтверждение (⚡/⏳/⏩), когда пользователь отправляет ввод, пока агент занят (по умолчанию: true). Установите false, чтобы полностью отключить эти сообщения — ввод по-прежнему queued/steered/прерывает как обычно, отключается только ответ в чате. Пробрасывается из display.busy_ack_enabled в config.yaml. | | HERMES_CRON_TIMEOUT | Таймаут неактивности для запусков агента cron job в секундах (по умолчанию: 600). Агент может работать неограниченно долго, пока активно вызывает инструменты или получает stream tokens — это срабатывает только в состоянии простоя. Установите 0 для отсутствия ограничения. | | HERMES_CRON_SCRIPT_TIMEOUT | Таймаут для pre-run скриптов, привязанных к cron jobs, в секундах (по умолчанию: 120). Переопределяйте для скриптов, которым нужно больше времени на выполнение (например, случайные задержки для anti-bot таймингов). Также настраивается через cron.script_timeout_seconds в config.yaml. | | HERMES_CRON_MAX_PARALLEL | Максимальное число cron jobs, выполняемых параллельно за один tick (по умолчанию: 4). |

|----------|-------------| | HERMES_MAX_ITERATIONS | Максимум итераций вызова инструментов на один разговор (по умолчанию: 90) | | HERMES_INFERENCE_MODEL | Переопределяет имя модели на уровне процесса (имеет приоритет над config.yaml для сессии). Также можно задать через флаг -m/--model. | | HERMES_YOLO_MODE | Установите 1, чтобы обходить prompts подтверждения опасных команд. Эквивалентно --yolo. | | HERMES_ACCEPT_HOOKS | Автоматически подтверждает любые ранее не встречавшиеся shell hooks, объявленные в config.yaml, без prompt TTY. Эквивалентно --accept-hooks или hooks_auto_accept: true. | | HERMES_IGNORE_USER_CONFIG | Пропускает ~/.hermes/config.yaml и использует встроенные значения по умолчанию (учётные данные в .env всё равно загружаются). Эквивалентно --ignore-user-config. | | HERMES_IGNORE_RULES | Пропускает автоинъекцию AGENTS.md, SOUL.md, .cursorrules, памяти и предзагруженных навыков. Эквивалентно --ignore-rules. | | HERMES_MD_NAMES | Список имён файлов правил, разделённых запятыми, для автоинъекции (по умолчанию: AGENTS.md,CLAUDE.md,.cursorrules,SOUL.md). | | HERMES_TOOL_PROGRESS | Устаревшая переменная совместимости для отображения прогресса инструментов. Предпочтительно использовать display.tool_progress в config.yaml. | | HERMES_TOOL_PROGRESS_MODE | Устаревшая переменная совместимости для режима прогресса инструментов. Предпочтительно использовать display.tool_progress в config.yaml. | | HERMES_HUMAN_DELAY_MODE | Темп ответа: off/natural/custom | | HERMES_HUMAN_DELAY_MIN_MS | Минимум пользовательского диапазона задержки (мс) | | HERMES_HUMAN_DELAY_MAX_MS | Максимум пользовательского диапазона задержки (мс) | | HERMES_QUIET | Подавляет несущественный вывод (true/false) | | HERMES_API_TIMEOUT | Таймаут вызова LLM API в секундах (по умолчанию: 1800) | | HERMES_API_CALL_STALE_TIMEOUT | Таймаут устаревшего вызова без стриминга в секундах (по умолчанию: 300). Автоматически отключается для локальных провайдеров, если не задан. Также можно настроить через providers.<id>.stale_timeout_seconds или providers.<id>.models.<model>.stale_timeout_seconds в config.yaml. | | HERMES_STREAM_READ_TIMEOUT | Таймаут чтения streaming socket в секундах (по умолчанию: 120). Автоматически увеличивается до HERMES_API_TIMEOUT для локальных провайдеров. Увеличьте значение, если локальные LLM завершаются по таймауту во время длительной генерации кода. || HERMES_STREAM_STALE_TIMEOUT | Таймаут обнаружения зависшего потока в секундах (по умолчанию: 180). Автоматически отключается для локальных провайдеров. Приводит к разрыву соединения, если в течение этого окна не поступают chunks. | | HERMES_STREAM_RETRIES | Количество попыток переподключения в середине потока при временных сетевых ошибках (по умолчанию: 3). | | HERMES_AGENT_TIMEOUT | Таймаут неактивности gateway для запущенного агента в секундах (по умолчанию: 900). Сбрасывается при каждом вызове инструмента и каждом streamed token. Установите 0, чтобы отключить. | | HERMES_AGENT_TIMEOUT_WARNING | Gateway: отправить предупреждающее сообщение после такого количества секунд неактивности (по умолчанию: 75% от HERMES_AGENT_TIMEOUT). | | HERMES_AGENT_NOTIFY_INTERVAL | Gateway: интервал в секундах между уведомлениями о прогрессе при длительных ходах агента. | | HERMES_CHECKPOINT_TIMEOUT | Таймаут создания checkpoint файловой системы в секундах (по умолчанию: 30). | | HERMES_EXEC_ASK | Включить prompts подтверждения выполнения в режиме gateway (true/false) | | HERMES_ENABLE_PROJECT_PLUGINS | Включить автообнаружение локальных для repo плагинов из ./.hermes/plugins/ (true/false, по умолчанию: false) | | HERMES_PLUGINS_DEBUG | 1/true для вывода подробных логов обнаружения плагинов в stderr — просканированные директории, разобранные manifests, причины пропуска и полные tracebacks при разборе или сбое register(). Предназначено для авторов плагинов. | | HERMES_BACKGROUND_NOTIFICATIONS | Режим уведомлений о фоновых процессах в gateway: all (по умолчанию), result, error, off | | HERMES_EPHEMERAL_SYSTEM_PROMPT | Эфемерный system prompt, внедряемый во время вызова API (никогда не сохраняется в сессии) | | HERMES_PREFILL_MESSAGES_FILE | Путь к файлу JSON с эфемерными сообщениями prefill, внедряемыми во время вызова API. | | HERMES_ALLOW_PRIVATE_URLS | true/false — разрешить инструментам получать URL localhost/private-network. По умолчанию выключено в режиме gateway. | | HERMES_REDACT_SECRETS | true/false — управлять маскированием секретов в выводе инструментов, логах и ответах чата (по умолчанию: true). | | HERMES_WRITE_SAFE_ROOT | Необязательный префикс директории, ограничивающий запись write_file/patch; для путей вне него требуется подтверждение. || HERMES_DISABLE_FILE_STATE_GUARD | Установите 1, чтобы отключить защиту «файл изменился с момента, когда вы его читали» для patch/write_file. | | HERMES_CORE_TOOLS | Переопределение канонического списка основных инструментов через запятую (для продвинутых случаев; требуется редко). | | HERMES_BUNDLED_SKILLS | Переопределение списка встроенных навыков, загружаемых при запуске, через запятую. | | HERMES_OPTIONAL_SKILLS | Список имён необязательных навыков через запятую для автоматической установки при первом запуске. | | HERMES_DEBUG_INTERRUPT | Установите 1, чтобы записывать подробную трассировку interrupt/cancel в agent.log. | | HERMES_DUMP_REQUESTS | Выгружать полезные нагрузки запросов API в файлы журналов (true/false) | | HERMES_DUMP_REQUEST_STDOUT | Выгружать полезные нагрузки запросов API в stdout вместо файлов журналов. | | HERMES_OAUTH_TRACE | Установите 1, чтобы записывать обмен OAuth-токенов и попытки обновления. Включает обезличенную информацию о времени. | | HERMES_OAUTH_FILE | Переопределить путь, используемый для хранения учётных данных OAuth (по умолчанию: ~/.hermes/auth.json). | | HERMES_AGENT_HELP_GUIDANCE | Добавить дополнительный текст с указаниями к системному prompt для пользовательских развёртываний. | | HERMES_AGENT_LOGO | Переопределить логотип баннера ASCII при запуске CLI. | | DELEGATION_MAX_CONCURRENT_CHILDREN | Максимум параллельных subagents на пакет delegate_task (по умолчанию: 3, минимум 1, без верхнего предела). Также настраивается через delegation.max_concurrent_children в config.yaml — значение конфигурации имеет приоритет. |

VariableDescription
HERMES_TUIЗапускать TUI вместо классического CLI, если установлено значение 1. Эквивалентно передаче --tui.
HERMES_TUI_DIRПуть к предварительно собранному каталогу ui-tui/ (должен содержать dist/entry.js и заполненный node_modules). Используется дистрибутивами и Nix, чтобы пропустить npm install при первом запуске.
HERMES_TUI_RESUMEВозобновить конкретную сессию TUI по ID при запуске. Если задано, hermes --tui пропускает создание новой сессии и вместо этого продолжает указанную сессию — полезно для повторного подключения после разрыва соединения или сбоя терминала.
HERMES_TUI_THEMEПринудительно задать цветовую тему TUI: light, dark или необработанный 6-символьный hex фона (например, ffffff или 1a1a2e). Если не задано, Hermes автоматически определяет тему с помощью COLORFGBG и запросов фона терминала; эта переменная переопределяет автоопределение в терминалах (Ghostty, Warp, iTerm2 и т. д.), которые не задают COLORFGBG.
HERMES_INFERENCE_MODELПринудительно задать модель для hermes -z / hermes chat без изменения config.yaml. Используется вместе с HERMES_INFERENCE_PROVIDER. Полезно для вызывающих скриптов (sweeper, CI, batch runners), которым нужно переопределять модель по умолчанию для каждого запуска.
VariableDescription
SESSION_IDLE_MINUTESСбрасывать сессии после N минут бездействия (по умолчанию: 1440)
SESSION_RESET_HOURЕжедневный час сброса в 24-часовом формате (по умолчанию: 4 = 4 утра)

Сжатие контекста настраивается исключительно через config.yaml — переменных окружения для этого нет. Пороговые настройки находятся в блоке compression:, а summarization model/provider находится в auxiliary.compression:.

compression:
enabled: true
threshold: 0.50
target_ratio: 0.20
# fraction of threshold to preserve as recent tail
protect_last_n: 20
# minimum recent messages to keep uncompressed

:::info Миграция legacy Старые конфигурации с compression.summary_model, compression.summary_provider и compression.summary_base_url автоматически мигрируются в auxiliary.compression.* при первой загрузке. :::

Переопределения вспомогательных задач| Variable | Описание |

Заголовок раздела «Переопределения вспомогательных задач| Variable | Описание |»

|----------|-------------| | AUXILIARY_VISION_PROVIDER | Переопределить провайдер для задач vision | | AUXILIARY_VISION_MODEL | Переопределить модель для задач vision | | AUXILIARY_VISION_BASE_URL | Прямой OpenAI-совместимый endpoint для задач vision | | AUXILIARY_VISION_API_KEY | Ключ API, связанный с AUXILIARY_VISION_BASE_URL | | AUXILIARY_WEB_EXTRACT_PROVIDER | Переопределить провайдер для web extraction/summarization | | AUXILIARY_WEB_EXTRACT_MODEL | Переопределить модель для web extraction/summarization | | AUXILIARY_WEB_EXTRACT_BASE_URL | Прямой OpenAI-совместимый endpoint для web extraction/summarization | | AUXILIARY_WEB_EXTRACT_API_KEY | Ключ API, связанный с AUXILIARY_WEB_EXTRACT_BASE_URL |

Для прямых endpoint, специфичных для задач, Hermes использует настроенный для задачи ключ API или OPENAI_API_KEY. Он не повторно использует OPENROUTER_API_KEY для этих пользовательских endpoint.

Цепочка fallback для основной модели настраивается исключительно через config.yaml — переменных окружения для этого нет. Добавьте список верхнего уровня fallback_providers с ключами provider и model, чтобы включить автоматическое переключение при сбоях вашей основной модели.

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

Устаревшая форма с одним провайдером верхнего уровня fallback_model по-прежнему читается для обратной совместимости, но в новой конфигурации следует использовать fallback_providers.

См. Fallback Providers для полной информации.

Маршрутизация провайдеров (только config.yaml)

Заголовок раздела «Маршрутизация провайдеров (только config.yaml)»

Они указываются в ~/.hermes/config.yaml в разделе provider_routing:

KeyОписание
sortСортировка провайдеров: "price" (по умолчанию), "throughput" или "latency"
onlyСписок slug провайдеров, которые нужно разрешить (например, ["anthropic", "google"])
ignoreСписок slug провайдеров, которые нужно пропустить
orderСписок slug провайдеров, которые нужно пробовать по порядку
require_parametersИспользовать только провайдеры, поддерживающие все параметры запроса (true/false)
data_collection"allow" (по умолчанию) или "deny" для исключения провайдеров, сохраняющих данные