Справочник переменных окружения
Все переменные задаются в ~/.hermes/.env. Также можно установить их командой hermes config set VAR value.
Провайдеры LLM
| Переменная | Описание |
|---|---|
OPENROUTER_API_KEY | API-ключ OpenRouter (рекомендуется для гибкости) |
OPENROUTER_BASE_URL | Переопределить базовый URL совместимого с OpenRouter эндпоинта |
HERMES_OPENROUTER_CACHE | Включить кэширование ответов OpenRouter (1/true/yes/on). Переопределяет openrouter.response_cache в config.yaml. См. Response Caching. |
HERMES_OPENROUTER_CACHE_TTL | TTL кэша в секундах (1–86400). Переопределяет openrouter.response_cache_ttl в config.yaml. |
NOUS_BASE_URL | Переопределить базовый URL Nous Portal (редко нужно; только для разработки и тестирования) |
NOUS_INFERENCE_BASE_URL | Напрямую переопределить эндпоинт инференса Nous |
OPENAI_API_KEY | API-ключ для пользовательских эндпоинтов, совместимых с OpenAI (используется вместе с OPENAI_BASE_URL) |
OPENAI_BASE_URL | Базовый URL пользовательского эндпоинта (VLLM, SGLang и др.) |
LM_API_KEY | API-ключ для LM Studio (провайдер lmstudio). Часто это заглушка для локальных серверов |
LM_BASE_URL | Базовый URL LM Studio (по умолчанию: http://localhost:1234/v1) |
COPILOT_GITHUB_TOKEN | GitHub-токен для Copilot API — высший приоритет (OAuth gho_* или fine-grained PAT github_pat_*; классические PAT вида ghp_* не поддерживаются) |
GH_TOKEN | GitHub-токен — второй приоритет для Copilot (также используется CLI gh) |
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 |
COPILOT_API_BASE_URL | Переопределить базовый URL Copilot API (провайдер copilot) |
GLM_API_KEY | API-ключ z.ai / ZhipuAI GLM (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 | API-ключ Kimi / Moonshot AI (moonshot.ai) |
KIMI_CODING_API_KEY | Ключ-псевдоним для провайдера kimi-coding (принимается наряду с KIMI_API_KEY) |
KIMI_BASE_URL | Переопределить базовый URL Kimi (по умолчанию: https://api.moonshot.ai/v1) |
KIMI_CN_API_KEY | API-ключ Kimi / Moonshot для Китая (moonshot.cn) |
ARCEEAI_API_KEY | API-ключ Arcee AI (chat.arcee.ai) |
ARCEE_BASE_URL | Переопределить базовый URL Arcee (по умолчанию: https://api.arcee.ai/api/v1) |
GMI_API_KEY | API-ключ GMI Cloud (gmicloud.ai) |
GMI_BASE_URL | Переопределить базовый URL GMI Cloud (по умолчанию: https://api.gmi-serving.com/v1) |
MINIMAX_API_KEY | API-ключ MiniMax — глобальный эндпоинт (minimax.io). Не используется провайдером minimax-oauth (OAuth-путь использует вход через браузер). |
MINIMAX_BASE_URL | Переопределить базовый URL MiniMax (по умолчанию: https://api.minimax.io/anthropic — Hermes использует совместимый с Anthropic Messages эндпоинт MiniMax). Не используется minimax-oauth. |
MINIMAX_CN_API_KEY | API-ключ MiniMax — китайский эндпоинт (minimaxi.com). Не используется minimax-oauth. |
MINIMAX_CN_BASE_URL | Переопределить базовый URL MiniMax для Китая (по умолчанию: https://api.minimaxi.com/anthropic). Не используется minimax-oauth. |
KILOCODE_API_KEY | API-ключ Kilo Code (kilo.ai) |
KILOCODE_BASE_URL | Переопределить базовый URL Kilo Code (по умолчанию: https://api.kilo.ai/api/gateway) |
XIAOMI_API_KEY | API-ключ Xiaomi MiMo (platform.xiaomimimo.com) |
XIAOMI_BASE_URL | Переопределить базовый URL Xiaomi MiMo (по умолчанию: https://api.xiaomimimo.com/v1) |
TOKENHUB_API_KEY | API-ключ Tencent TokenHub (tokenhub.tencentmaas.com) |
TOKENHUB_BASE_URL | Переопределить базовый URL Tencent TokenHub (по умолчанию: https://tokenhub.tencentmaas.com/v1) |
AZURE_FOUNDRY_API_KEY | API-ключ Microsoft Foundry / Azure OpenAI (ai.azure.com). Не нужен при model.auth_mode: entra_id |
AZURE_FOUNDRY_BASE_URL | URL эндпоинта Microsoft Foundry (например, https://<resource>.openai.azure.com/openai/v1 для стиля OpenAI или https://<resource>.services.ai.azure.com/anthropic для стиля Anthropic) |
AZURE_ANTHROPIC_KEY | API-ключ Azure Anthropic для provider: anthropic + base_url, указывающего на развёртывание Claude в Microsoft Foundry (альтернатива ANTHROPIC_API_KEY при одновременной настройке Anthropic и Azure Anthropic) |
AZURE_TENANT_ID | Tenant ID Entra ID (для сервис-принципалов; используется azure-identity при model.auth_mode: entra_id) |
AZURE_CLIENT_ID | Client ID Entra ID (сервис-принципал, workload identity или managed identity с назначенным пользователем) |
AZURE_CLIENT_SECRET | Секрет сервис-принципала, используемый EnvironmentCredential |
AZURE_CLIENT_CERTIFICATE_PATH | Сертификат сервис-принципала (альтернатива AZURE_CLIENT_SECRET) |
AZURE_FEDERATED_TOKEN_FILE | Путь к файлу федеративного токена для AKS Workload Identity / OIDC |
AZURE_AUTHORITY_HOST | Переопределение authority для суверенного облака (например, https://login.microsoftonline.us для Azure Government). См. руководство по Azure Foundry |
IDENTITY_ENDPOINT / MSI_ENDPOINT | Эндпоинт Managed Identity для App Service, Functions и Container Apps; VM обычно используют IMDS и не задают эти переменные |
HF_TOKEN | Токен Hugging Face для Inference Providers (huggingface.co/settings/tokens) |
HF_BASE_URL | Переопределить базовый URL Hugging Face (по умолчанию: https://router.huggingface.co/v1) |
GOOGLE_API_KEY | API-ключ Google AI Studio (aistudio.google.com/app/apikey) |
GEMINI_API_KEY | Псевдоним для GOOGLE_API_KEY |
GEMINI_BASE_URL | Переопределить базовый URL Google AI Studio |
HERMES_GEMINI_CLIENT_ID | OAuth client ID для PKCE-входа google-gemini-cli (необязательно; по умолчанию используется публичный клиент gemini-cli от Google) |
HERMES_GEMINI_CLIENT_SECRET | OAuth client secret для google-gemini-cli (необязательно) |
HERMES_GEMINI_PROJECT_ID | ID проекта GCP для платных уровней Gemini (бесплатный уровень выдаётся автоматически) |
ANTHROPIC_API_KEY | API-ключ Anthropic Console (console.anthropic.com) |
ANTHROPIC_BASE_URL | Переопределить базовый URL Anthropic API |
ANTHROPIC_TOKEN | Ручное или устаревшее переопределение OAuth/setup-token для Anthropic |
DASHSCOPE_API_KEY | API-ключ Qwen Cloud (Alibaba DashScope) для моделей 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 для материкового Китая) |
ALIBABA_CODING_PLAN_API_KEY | API-ключ Qwen Coding Plan (провайдер alibaba-coding-plan) |
ALIBABA_CODING_PLAN_BASE_URL | Переопределить базовый URL Qwen Coding Plan |
DEEPSEEK_API_KEY | API-ключ DeepSeek для прямого доступа (platform.deepseek.com) |
DEEPSEEK_BASE_URL | Пользовательский базовый URL DeepSeek API |
NOVITA_API_KEY | API-ключ NovitaAI — AI-native облако для Model API, Agent Sandbox и GPU Cloud (novita.ai/settings/key-management) |
NOVITA_BASE_URL | Переопределить базовый URL NovitaAI (по умолчанию: https://api.novita.ai/openai/v1) |
NVIDIA_API_KEY | API-ключ NVIDIA NIM — Nemotron и открытые модели (build.nvidia.com) |
NVIDIA_BASE_URL | Переопределить базовый URL NVIDIA (по умолчанию: https://integrate.api.nvidia.com/v1; задайте http://localhost:8000/v1 для локального эндпоинта NIM) |
STEPFUN_API_KEY | API-ключ StepFun — модели серии Step (platform.stepfun.com) |
STEPFUN_BASE_URL | Переопределить базовый URL StepFun (по умолчанию: https://api.stepfun.com/v1) |
OLLAMA_API_KEY | API-ключ Ollama Cloud — управляемый каталог Ollama без локального GPU (ollama.com/settings/keys) |
OLLAMA_BASE_URL | Переопределить базовый URL Ollama Cloud (по умолчанию: https://ollama.com/v1) |
XAI_API_KEY | API-ключ xAI (Grok) для чата, TTS и веб-поиска (console.x.ai) |
XAI_BASE_URL | Переопределить базовый URL xAI (по умолчанию: https://api.x.ai/v1) |
MISTRAL_API_KEY | API-ключ Mistral для 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 Bedrock runtime (по умолчанию: 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 | API-ключ OpenCode Zen — оплата по факту использования для избранных моделей (opencode.ai) |
OPENCODE_ZEN_BASE_URL | Переопределить базовый URL OpenCode Zen |
OPENCODE_GO_API_KEY | API-ключ OpenCode Go — подписка $10/месяц для открытых моделей (opencode.ai) |
OPENCODE_GO_BASE_URL | Переопределить базовый URL OpenCode Go |
CLAUDE_CODE_OAUTH_TOKEN | Явное переопределение токена Claude Code при ручном экспорте |
HERMES_MODEL | Переопределить название модели на уровне процесса (используется планировщиком cron; для обычного использования предпочтительнее config.yaml) |
VOICE_TOOLS_OPENAI_KEY | Предпочтительный ключ OpenAI для провайдеров speech-to-text и text-to-speech от OpenAI |
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). Также задаёт область видимости для PID-файла шлюза и имени systemd-сервиса, что позволяет запускать несколько установок одновременно |
HERMES_GIT_BASH_PATH | Только Windows. Переопределить поиск bash.exe для инструмента терминала. Указывает на любой bash — полная установка Git-for-Windows, WSL bash через симлинк, MSYS2, Cygwin. Установщик задаёт это автоматически для PortableGit. См. руководство по Windows (Native) |
HERMES_DISABLE_WINDOWS_UTF8 | Только Windows. Задайте 1, чтобы отключить UTF-8 stdio shim (configure_windows_stdio()) и вернуться к кодовой странице консоли. Полезно для диагностики ошибок кодировки; редко нужна в штатной работе |
HERMES_KANBAN_HOME | Переопределить общий корневой каталог Hermes для канбан-доски (БД + рабочие пространства + логи воркеров). По умолчанию — get_default_hermes_root() (родитель активного профиля). Полезно для тестов и нестандартных развёртываний |
HERMES_KANBAN_BOARD | Привязать активную канбан-доску для текущего процесса. Приоритет выше ~/.hermes/kanban/current; диспетчер внедряет это в env дочерних процессов воркеров, чтобы воркеры физически не видели задачи на других досках. По умолчанию: default. Валидация slug: строчные буквы и цифры + дефисы + подчёркивания, 1–64 символа |
HERMES_KANBAN_DB | Напрямую задать путь к файлу канбан-базы данных (наивысший приоритет; превышает HERMES_KANBAN_BOARD и HERMES_KANBAN_HOME). Диспетчер внедряет это в env дочерних процессов воркеров |
HERMES_KANBAN_WORKSPACES_ROOT | Напрямую задать корневой каталог рабочих пространств канбан (наивысший приоритет для workspaces; превышает HERMES_KANBAN_HOME). Диспетчер внедряет это в env дочерних процессов воркеров |
HERMES_KANBAN_DISPATCH_IN_GATEWAY | Переопределить kanban.dispatch_in_gateway во время выполнения. Задайте 0, false, no или off, чтобы шлюз не запускал встроенный диспетчер Kanban; любое другое непустое значение включает его. Полезно, когда отдельный процесс-диспетчер владеет доской. |
Аутентификация провайдеров (OAuth)
При нативной аутентификации Anthropic Hermes предпочитает собственные файлы учётных данных Claude Code, если они существуют — эти учётные данные умеют автоматически обновляться. OAuth против Anthropic требует плана Claude Max с дополнительными приобретёнными кредитами использования — Hermes маршрутизируется как Claude Code, который расходует только дополнительные/overage-кредиты плана Max, а не базовый лимит Max, и не работает с Claude Pro. Без Max + дополнительных кредитов используйте API-ключ. Переменные вроде ANTHROPIC_TOKEN остаются полезны как ручные переопределения, но больше не являются предпочтительным путём для входа через Claude Max.
| Переменная | Описание |
|---|---|
HERMES_PORTAL_BASE_URL | Переопределить URL Nous Portal (для разработки/тестирования) |
NOUS_INFERENCE_BASE_URL | Переопределить URL Nous inference API |
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) |
Tool APIs
| Переменная | Описание |
|---|---|
PARALLEL_API_KEY | AI-native веб-поиск (parallel.ai) |
FIRECRAWL_API_KEY | Веб-скрапинг и облачный браузер (firecrawl.dev) |
FIRECRAWL_API_URL | Пользовательский эндпоинт Firecrawl API для self-hosted инстансов (необязательно) |
TAVILY_API_KEY | API-ключ Tavily для AI-native веб-поиска, извлечения и обхода (app.tavily.com) |
SEARXNG_URL | URL инстанса SearXNG для бесплатного self-hosted веб-поиска — API-ключ не нужен (searxng.github.io) |
TAVILY_BASE_URL | Переопределить эндпоинт Tavily API. Полезно для корпоративных прокси и self-hosted бэкендов, совместимых с Tavily. Тот же паттерн, что и GROQ_BASE_URL. |
EXA_API_KEY | API-ключ Exa для AI-native веб-поиска и получения контента (exa.ai) |
BROWSERBASE_API_KEY | Автоматизация браузера (browserbase.com) |
BROWSERBASE_PROJECT_ID | ID проекта Browserbase |
BROWSER_USE_API_KEY | API-ключ облачного браузера Browser Use (browser-use.com) |
FIRECRAWL_BROWSER_TTL | TTL браузерной сессии Firecrawl в секундах (по умолчанию: 300) |
BROWSER_CDP_URL | URL Chrome DevTools Protocol для локального браузера (задаётся через /browser connect, например ws://localhost:9222) |
CAMOFOX_URL | URL локального анти-детект браузера Camofox (по умолчанию: http://localhost:9377) |
CAMOFOX_USER_ID | Необязательный внешне управляемый ID пользователя Camofox для совместных видимых сессий |
CAMOFOX_SESSION_KEY | Необязательный ключ сессии Camofox при создании вкладок для CAMOFOX_USER_ID |
CAMOFOX_ADOPT_EXISTING_TAB | Задайте true, чтобы переиспользовать существующую вкладку Camofox вместо создания новой |
BROWSER_INACTIVITY_TIMEOUT | Таймаут неактивности браузерной сессии в секундах |
AGENT_BROWSER_ARGS | Дополнительные флаги запуска Chromium (через запятую или новую строку). Hermes автоматически добавляет --no-sandbox,--disable-dev-shm-usage при запуске от root или в AppArmor-ограниченных пространствах имён без привилегий (Ubuntu 23.10+, DGX Spark, многие контейнерные образы); задавайте вручную только для переопределения или добавления других флагов. |
FAL_KEY | Генерация изображений (fal.ai) |
GROQ_API_KEY | API-ключ Groq Whisper STT (groq.com) |
ELEVENLABS_API_KEY | Премиум TTS-голоса ElevenLabs (elevenlabs.io) |
STT_GROQ_MODEL | Переопределить модель Groq STT (по умолчанию: whisper-large-v3-turbo) |
GROQ_BASE_URL | Переопределить совместимый с OpenAI STT-эндпоинт Groq |
STT_OPENAI_MODEL | Переопределить модель OpenAI STT (по умолчанию: whisper-1) |
STT_OPENAI_BASE_URL | Переопределить совместимый с OpenAI STT-эндпоинт |
GITHUB_TOKEN | GitHub-токен для Skills Hub (повышенные лимиты API, публикация навыков) |
HONCHO_API_KEY | Кросс-сессионное моделирование пользователей (honcho.dev) |
HONCHO_BASE_URL | Базовый URL для self-hosted инстансов Honcho (по умолчанию — Honcho cloud). Для локальных инстансов API-ключ не нужен |
HINDSIGHT_TIMEOUT | Таймаут в секундах для API-вызовов провайдера памяти Hindsight (по умолчанию: 60). Увеличьте, если ваш инстанс Hindsight медленно отвечает при /sync или on_session_switch и вы видите таймауты в errors.log. |
SUPERMEMORY_API_KEY | Семантическая долгосрочная память с восстановлением профиля и инжестом сессий (supermemory.ai) |
DAYTONA_API_KEY | Облачные sandbox-среды Daytona (daytona.io) |
Наблюдаемость через Langfuse
Переменные окружения для встроенного плагина observability/langfuse. Задаются в ~/.hermes/.env. Плагин также должен быть включён (hermes plugins enable observability/langfuse или через чекбокс в hermes plugins) — иначе эти переменные не дают эффекта.
| Переменная | Описание |
|---|---|
HERMES_LANGFUSE_PUBLIC_KEY | Публичный ключ проекта Langfuse (pk-lf-...). Обязательно. |
HERMES_LANGFUSE_SECRET_KEY | Секретный ключ проекта Langfuse (sk-lf-...). Обязательно. |
HERMES_LANGFUSE_BASE_URL | URL сервера Langfuse (по умолчанию: https://cloud.langfuse.com). Задайте для self-hosted. |
HERMES_LANGFUSE_ENV | Тег окружения на трассах (production, staging, …) |
HERMES_LANGFUSE_RELEASE | Тег релиза/версии на трассах |
HERMES_LANGFUSE_SAMPLE_RATE | Частота выборки SDK от 0.0 до 1.0 (по умолчанию: 1.0) |
HERMES_LANGFUSE_MAX_CHARS | Усечение по полю для сериализованных полезных нагрузок (по умолчанию: 12000) |
HERMES_LANGFUSE_DEBUG | true включает подробное логирование плагина в agent.log |
LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY / LANGFUSE_BASE_URL | Стандартные имена Langfuse SDK. Принимаются как запасные варианты, когда не заданы аналоги HERMES_LANGFUSE_*. |
Nous Tool Gateway (шлюз инструментов)
Эти переменные настраивают Tool Gateway для платных подписчиков Nous или self-hosted развёртываний шлюза. Большинству пользователей их задавать не нужно — шлюз настраивается автоматически через hermes model или hermes tools.
| Переменная | Описание |
|---|---|
TOOL_GATEWAY_DOMAIN | Базовый домен для маршрутизации Tool Gateway (по умолчанию: nousresearch.com) |
TOOL_GATEWAY_SCHEME | HTTP- или HTTPS-схема для URL шлюза (по умолчанию: https) |
TOOL_GATEWAY_USER_TOKEN | Токен аутентификации для Tool Gateway (обычно заполняется автоматически из аутентификации Nous) |
FIRECRAWL_GATEWAY_URL | Переопределить URL конкретного эндпоинта шлюза Firecrawl |
Терминальный бэкенд
| Переменная | Описание |
|---|---|
TERMINAL_ENV | Бэкенд: local, docker, ssh, singularity, modal, daytona |
HERMES_DOCKER_BINARY | Переопределить бинарный файл контейнера, вызываемый Hermes (например, 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-массив имён переменных окружения для явной передачи в Docker-сессии терминала. Примечание: переменные, объявленные в required_environment_variables навыка, передаются автоматически — это нужно только для переменных, не объявленных ни одним навыком. |
TERMINAL_DOCKER_VOLUMES | Дополнительные монтирования томов Docker (пары host:container через запятую) |
TERMINAL_DOCKER_MOUNT_CWD_TO_WORKSPACE | Расширенная опция: монтировать рабочий каталог запуска в Docker /workspace (true/false, по умолчанию: false) |
TERMINAL_SINGULARITY_IMAGE | Образ Singularity или путь к файлу .sif |
TERMINAL_MODAL_IMAGE | Образ контейнера Modal |
TERMINAL_DAYTONA_IMAGE | Образ sandbox Daytona |
TERMINAL_TIMEOUT | Таймаут команды в секундах |
TERMINAL_LIFETIME_SECONDS | Максимальное время жизни терминальных сессий в секундах |
TERMINAL_CWD | Устаревшее прямое переопределение рабочего каталога для сессий шлюза/cron. Предпочтительнее terminal.cwd в config.yaml; CLI по-прежнему использует каталог запуска. |
SUDO_PASSWORD | Включить sudo без интерактивного запроса пароля |
Для облачных sandbox-бэкендов персистентность ориентирована на файловую систему. TERMINAL_LIFETIME_SECONDS контролирует, когда Hermes завершает простаивающую терминальную сессию; при повторном подключении sandbox может быть создан заново, а не продолжать работу тех же процессов.
SSH-бэкенд
| Переменная | Описание |
|---|---|
TERMINAL_SSH_HOST | Имя хоста удалённого сервера |
TERMINAL_SSH_USER | Имя пользователя SSH |
TERMINAL_SSH_PORT | Порт SSH (по умолчанию: 22) |
TERMINAL_SSH_KEY | Путь к приватному ключу |
TERMINAL_SSH_PERSISTENT | Переопределить persistent shell для SSH (по умолчанию следует TERMINAL_PERSISTENT_SHELL) |
Ресурсы контейнера (Docker, Singularity, Modal, Daytona)
| Переменная | Описание |
|---|---|
TERMINAL_CONTAINER_CPU | Ядра CPU (по умолчанию: 1) |
TERMINAL_CONTAINER_MEMORY | Память в МБ (по умолчанию: 5120) |
TERMINAL_CONTAINER_DISK | Диск в МБ (по умолчанию: 51200) |
TERMINAL_CONTAINER_PERSISTENT | Сохранять файловую систему контейнера между сессиями (по умолчанию: true) |
TERMINAL_SANDBOX_DIR | Директория хоста для рабочих пространств и оверлеев (по умолчанию: ~/.hermes/sandboxes/) |
Персистентный shell
| Переменная | Описание |
|---|---|
TERMINAL_PERSISTENT_SHELL | Включить persistent shell для не-локальных бэкендов (по умолчанию: true). Также задаётся через terminal.persistent_shell в config.yaml |
TERMINAL_LOCAL_PERSISTENT | Включить persistent shell для локального бэкенда (по умолчанию: false) |
TERMINAL_SSH_PERSISTENT | Переопределить persistent shell для SSH-бэкенда (по умолчанию следует TERMINAL_PERSISTENT_SHELL) |
Мессенджеры
| Переменная | Описание |
|---|---|
TELEGRAM_BOT_TOKEN | Токен Telegram-бота (от @BotFather) |
TELEGRAM_ALLOWED_USERS | ID пользователей через запятую, которым разрешено использовать бота (применяется к ЛС, группам и форумам) |
TELEGRAM_GROUP_ALLOWED_USERS | ID отправителей через запятую, авторизованных только в группах/форумах (НЕ даёт доступа к ЛС). Значения в формате Chat ID (начинающиеся с -) по-прежнему трактуются как chat ID для обратной совместимости с конфигами до #17686 — с предупреждением об устаревании. |
TELEGRAM_GROUP_ALLOWED_CHATS | ID чатов групп/форумов через запятую; любой участник авторизован |
TELEGRAM_HOME_CHANNEL | Чат/канал Telegram по умолчанию для доставки cron |
TELEGRAM_HOME_CHANNEL_NAME | Отображаемое имя домашнего канала Telegram |
TELEGRAM_CRON_THREAD_ID | ID темы форума для получения cron-доставок; переопределяет TELEGRAM_HOME_CHANNEL_THREAD_ID только для cron. Используйте в режиме тем, чтобы ответы на cron-сообщения открывали новую сессию вместо обращения к системному лобби (#24409). |
TELEGRAM_WEBHOOK_URL | Публичный HTTPS URL для режима вебхука (включает вебхук вместо поллинга) |
TELEGRAM_WEBHOOK_PORT | Локальный порт прослушивания для сервера вебхука (по умолчанию: 8443) |
TELEGRAM_WEBHOOK_SECRET | Секретный токен, который Telegram возвращает в каждом обновлении для верификации. Обязателен при задании TELEGRAM_WEBHOOK_URL — шлюз откажется запускаться без него (GHSA-3vpc-7q5r-276h). Сгенерируйте через openssl rand -hex 32. |
TELEGRAM_REACTIONS | Включить эмодзи-реакции на сообщения во время обработки (по умолчанию: false) |
TELEGRAM_REQUIRE_MENTION | Требовать явное упоминание перед ответом в группах Telegram. Аналог telegram.require_mention в config.yaml. |
TELEGRAM_MENTION_PATTERNS | JSON-массив, список через новую строку или запятую с регулярными выражениями для wake-word при включённой фильтрации по упоминанию в группах Telegram. Аналог telegram.mention_patterns. |
TELEGRAM_EXCLUSIVE_BOT_MENTIONS | При включении явные упоминания @...bot в группах Telegram маршрутизируются только к упомянутым именам ботов перед запасными вариантами ответа или wake-word. По умолчанию: true. Аналог telegram.exclusive_bot_mentions. |
TELEGRAM_REPLY_TO_MODE | Поведение ссылок на ответы: off, first (по умолчанию) или all. Повторяет паттерн Discord. |
TELEGRAM_IGNORED_THREADS | ID тем/тредов форума Telegram через запятую, в которых бот никогда не отвечает |
TELEGRAM_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). Автоматически включает Members intent. Удобно, когда состав команды модерации часто меняется — назначение роли распространяется автоматически. |
DISCORD_ALLOWED_CHANNELS | ID каналов Discord через запятую. Если задано, бот отвечает только в этих каналах (плюс ЛС, если разрешено). Переопределяет discord.allowed_channels в config.yaml. |
DISCORD_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 | Требовать @упоминание перед ответом в каналах сервера |
DISCORD_FREE_RESPONSE_CHANNELS | ID каналов через запятую, где упоминание не требуется |
DISCORD_AUTO_THREAD | Автоматически создавать тред для длинных ответов при поддержке платформой |
DISCORD_ALLOW_ANY_ATTACHMENT | При true принимать вложения любого типа (не только встроенный список PDF/текст/zip/офис). Неизвестные типы кэшируются и передаются агенту как локальный путь для проверки через terminal / read_file / ffprobe. По умолчанию false. |
DISCORD_MAX_ATTACHMENT_BYTES | Максимальный размер вложения в байтах, которое шлюз кэширует. По умолчанию 33554432 (32 МиБ). Задайте 0 для отсутствия ограничения (вложения хранятся в памяти при записи). |
DISCORD_REACTIONS | Включить эмодзи-реакции на сообщения во время обработки (по умолчанию: true) |
DISCORD_IGNORED_CHANNELS | ID каналов через запятую, в которых бот никогда не отвечает |
DISCORD_NO_THREAD_CHANNELS | ID каналов через запятую, где бот отвечает без создания треда |
DISCORD_REPLY_TO_MODE | Поведение ссылок на ответы: off, first (по умолчанию) или all |
DISCORD_ALLOW_MENTION_EVERYONE | Разрешить боту пинговать @everyone/@here (по умолчанию: false). См. Mention Control. |
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 | App-level токен 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 | Путь к JSON Service Account или JSON прямо в переменной (запасное: GOOGLE_APPLICATION_CREDENTIALS) |
GOOGLE_CHAT_ALLOWED_USERS | Email-адреса пользователей через запятую, которым разрешено писать боту |
GOOGLE_CHAT_ALLOW_ALL_USERS | Разрешить любому пользователю Google Chat запускать бота (только для разработки) |
GOOGLE_CHAT_HOME_CHANNEL | Пространство по умолчанию (например, spaces/AAAA...) для cron-доставки |
GOOGLE_CHAT_HOME_CHANNEL_NAME | Отображаемое имя домашнего пространства Google Chat |
GOOGLE_CHAT_MAX_MESSAGES | Максимальное количество сообщений в полёте FlowControl Pub/Sub (по умолчанию: 1) |
GOOGLE_CHAT_MAX_BYTES | Максимальный объём байт в полёте FlowControl Pub/Sub (по умолчанию: 16777216, 16 МиБ) |
GOOGLE_CHAT_BOOTSTRAP_SPACES | ID дополнительных пространств через запятую для проверки при запуске для определения собственного users/{id} бота |
GOOGLE_CHAT_DEBUG_RAW | Задайте любое значение, чтобы логировать редактированные конверты Pub/Sub на уровне DEBUG (только для отладки) |
WHATSAPP_ENABLED | Включить мост WhatsApp (true/false) |
WHATSAPP_MODE | bot (отдельный номер) или self-chat (сообщение себе) |
WHATSAPP_ALLOWED_USERS | Номера телефонов через запятую (с кодом страны, без +), или * для всех отправителей |
WHATSAPP_ALLOW_ALL_USERS | Разрешить всем отправителям WhatsApp без списка допуска (true/false) |
WHATSAPP_DEBUG | Логировать сырые события сообщений в мосте для диагностики (true/false) |
WHATSAPP_CLOUD_PHONE_NUMBER_ID | Meta Phone Number ID из WhatsApp Business Cloud API (15–17 цифр; не сам номер телефона) |
WHATSAPP_CLOUD_ACCESS_TOKEN | Токен доступа Meta (начинается с EAA); временные токены истекают через 24ч, токены System User бессрочны |
WHATSAPP_CLOUD_APP_SECRET | 32-символьный hex app secret для проверки подписи входящих вебхуков |
WHATSAPP_CLOUD_VERIFY_TOKEN | Общий секрет для рукопожатия верификации вебхука Meta (генерируется мастером настройки автоматически) |
WHATSAPP_CLOUD_ALLOWED_USERS | wa_id через запятую (номера телефонов с кодом страны, без +), которым разрешено писать боту |
WHATSAPP_CLOUD_ALLOW_ALL_USERS | Разрешить всем отправителям WhatsApp Cloud без списка допуска (true/false) |
WHATSAPP_CLOUD_APP_ID | Необязательный Meta App ID (для будущей интеграции аналитики) |
WHATSAPP_CLOUD_WABA_ID | Необязательный ID аккаунта WhatsApp Business (для будущей интеграции аналитики) |
WHATSAPP_CLOUD_WEBHOOK_HOST | Интерфейс, к которому привязывается сервер входящих вебхуков (по умолчанию 0.0.0.0) |
WHATSAPP_CLOUD_WEBHOOK_PORT | Порт, к которому привязывается сервер входящих вебхуков (по умолчанию 8090) |
WHATSAPP_CLOUD_WEBHOOK_PATH | URL-путь, по которому Meta присылает входящие сообщения (по умолчанию /whatsapp/webhook) |
WHATSAPP_CLOUD_API_VERSION | Версия Meta Graph API для вызовов (по умолчанию v20.0) |
WHATSAPP_CLOUD_HOME_CHANNEL | wa_id, используемый как домашний канал бота (для cron-заданий и т.п.) |
WHATSAPP_CLOUD_DM_POLICY | Фильтрация ЛС для Cloud-адаптера (open/allowlist/disabled); при отсутствии задания берётся WHATSAPP_DM_POLICY |
WHATSAPP_CLOUD_ALLOW_FROM | Отправители через запятую, разрешённые при dm_policy: allowlist (голые wa_id; JID в стиле Baileys нормализуются) |
WHATSAPP_CLOUD_GROUP_POLICY | Фильтрация групп для Cloud-адаптера (open/allowlist/disabled); при отсутствии задания берётся WHATSAPP_GROUP_POLICY |
WHATSAPP_CLOUD_GROUP_ALLOW_FROM | ID групповых чатов через запятую, разрешённые при group_policy: allowlist |
SIGNAL_HTTP_URL | HTTP-эндпоинт демона signal-cli (например, http://127.0.0.1:8080) |
SIGNAL_ACCOUNT | Номер телефона бота в формате E.164 |
SIGNAL_ALLOWED_USERS | Номера телефонов или UUID в формате E.164 через запятую |
SIGNAL_GROUP_ALLOWED_USERS | ID групп через запятую или * для всех групп |
SIGNAL_HOME_CHANNEL_NAME | Отображаемое имя домашнего канала Signal |
SIGNAL_IGNORE_STORIES | Игнорировать истории/статусы Signal |
SIGNAL_ALLOW_ALL_USERS | Разрешить всем пользователям Signal без списка допуска |
TWILIO_ACCOUNT_SID | Account SID Twilio (общий с навыком телефонии) |
TWILIO_AUTH_TOKEN | Auth Token Twilio (общий с навыком телефонии; также для валидации подписи вебхука) |
TWILIO_PHONE_NUMBER | Номер телефона Twilio в формате E.164 (общий с навыком телефонии) |
SMS_WEBHOOK_URL | Публичный URL для валидации подписи Twilio — должен совпадать с URL вебхука в Twilio Console (обязательно) |
SMS_WEBHOOK_PORT | Порт слушателя вебхука для входящих SMS (по умолчанию: 8080) |
SMS_WEBHOOK_HOST | Адрес привязки вебхука (по умолчанию: 0.0.0.0) |
SMS_INSECURE_NO_SIGNATURE | Задайте true, чтобы отключить валидацию подписи Twilio (только локальная разработка — не для продакшна) |
SMS_ALLOWED_USERS | Номера телефонов в формате E.164 через запятую, которым разрешено писать |
SMS_ALLOW_ALL_USERS | Разрешить всем отправителям SMS без списка допуска |
SMS_HOME_CHANNEL | Номер телефона для cron-заданий / доставки уведомлений |
SMS_HOME_CHANNEL_NAME | Отображаемое имя домашнего канала SMS |
EMAIL_ADDRESS | Адрес электронной почты для адаптера шлюза Email |
EMAIL_PASSWORD | Пароль или пароль приложения для учётной записи email |
EMAIL_IMAP_HOST | Имя хоста IMAP для адаптера email |
EMAIL_IMAP_PORT | Порт IMAP |
EMAIL_SMTP_HOST | Имя хоста SMTP для адаптера email |
EMAIL_SMTP_PORT | Порт SMTP |
EMAIL_ALLOWED_USERS | Email-адреса через запятую, которым разрешено писать боту |
EMAIL_HOME_ADDRESS | Получатель по умолчанию для проактивной доставки email |
EMAIL_HOME_ADDRESS_NAME | Отображаемое имя домашнего получателя email |
EMAIL_POLL_INTERVAL | Интервал опроса email в секундах |
EMAIL_ALLOW_ALL_USERS | Разрешить всем входящим отправителям email |
DINGTALK_CLIENT_ID | AppKey бота DingTalk из портала разработчика (open.dingtalk.com) |
DINGTALK_CLIENT_SECRET | AppSecret бота DingTalk из портала разработчика |
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 | Необязательный ключ шифрования для режима вебхука |
FEISHU_VERIFICATION_TOKEN | Необязательный токен верификации для режима вебхука |
FEISHU_ALLOWED_USERS | ID пользователей Feishu через запятую, которым разрешено писать боту |
FEISHU_ALLOW_BOTS | none (по умолчанию) / mentions / all — принимать входящие сообщения от других ботов. См. bot-to-bot messaging |
FEISHU_REQUIRE_MENTION | true (по умолчанию) / false — требовать ли @упоминание бота в групповых сообщениях. Переопределяется для конкретного чата через group_rules.<chat_id>.require_mention. |
FEISHU_HOME_CHANNEL | ID чата Feishu для cron-доставки и уведомлений |
WECOM_BOT_ID | ID AI-бота WeCom из консоли администратора |
WECOM_SECRET | Секрет AI-бота WeCom |
WECOM_WEBSOCKET_URL | Пользовательский URL WebSocket (по умолчанию: wss://openws.work.weixin.qq.com) |
WECOM_ALLOWED_USERS | ID пользователей WeCom через запятую, которым разрешено писать боту |
WECOM_HOME_CHANNEL | ID чата WeCom для cron-доставки и уведомлений |
WECOM_CALLBACK_CORP_ID | Corp ID предприятия WeCom для callback self-built app |
WECOM_CALLBACK_CORP_SECRET | Corp secret самостоятельно разработанного приложения |
WECOM_CALLBACK_AGENT_ID | Agent ID самостоятельно разработанного приложения |
WECOM_CALLBACK_TOKEN | Токен верификации callback |
WECOM_CALLBACK_ENCODING_AES_KEY | AES-ключ для шифрования callback |
WECOM_CALLBACK_HOST | Адрес привязки сервера callback (по умолчанию: 0.0.0.0) |
WECOM_CALLBACK_PORT | Порт сервера callback (по умолчанию: 8645) |
WECOM_CALLBACK_ALLOWED_USERS | ID пользователей через запятую для списка допуска |
WECOM_CALLBACK_ALLOW_ALL_USERS | Задайте true, чтобы разрешить всех без списка допуска |
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 CDN Weixin для медиа (по умолчанию: 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 bot identity (...@im.bot) обычно не получает обычные групповые сообщения WeChat. |
WEIXIN_HOME_CHANNEL | ID чата Weixin для cron-доставки и уведомлений |
WEIXIN_HOME_CHANNEL_NAME | Отображаемое имя домашнего канала Weixin |
WEIXIN_ALLOW_ALL_USERS | Разрешить всем пользователям Weixin без списка допуска (true/false) |
BLUEBUBBLES_SERVER_URL | URL сервера BlueBubbles (например, http://192.168.1.10:1234) |
BLUEBUBBLES_PASSWORD | Пароль сервера BlueBubbles |
BLUEBUBBLES_WEBHOOK_HOST | Адрес привязки слушателя вебхука (по умолчанию: 127.0.0.1) |
BLUEBUBBLES_WEBHOOK_PORT | Порт слушателя вебхука (по умолчанию: 8645) |
BLUEBUBBLES_HOME_CHANNEL | Телефон/email для cron/уведомлений |
BLUEBUBBLES_ALLOWED_USERS | Авторизованные пользователи через запятую |
BLUEBUBBLES_ALLOW_ALL_USERS | Разрешить всех пользователей (true/false) |
QQ_APP_ID | App ID бота QQ с q.qq.com |
QQ_CLIENT_SECRET | App Secret бота QQ с 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 для cron-доставки и уведомлений |
QQBOT_HOME_CHANNEL_NAME | Отображаемое имя домашнего канала QQ |
QQ_PORTAL_HOST | Переопределить хост портала QQ (задайте sandbox.q.qq.com для маршрутизации через sandbox; по умолчанию: q.qq.com). |
MATTERMOST_URL | URL сервера Mattermost (например, https://mm.example.com) |
MATTERMOST_TOKEN | Токен бота или персональный токен доступа для Mattermost |
MATTERMOST_ALLOWED_USERS | ID пользователей Mattermost через запятую, которым разрешено писать боту |
MATTERMOST_HOME_CHANNEL | ID канала для проактивной доставки сообщений (cron, уведомления) |
MATTERMOST_REQUIRE_MENTION | Требовать @упоминание в каналах (по умолчанию: true). Задайте false, чтобы отвечать на все сообщения. |
MATTERMOST_FREE_RESPONSE_CHANNELS | ID каналов через запятую, где бот отвечает без @упоминания |
MATTERMOST_REPLY_MODE | Стиль ответов: thread (ответы в треде) или off (плоские сообщения, по умолчанию) |
MATRIX_HOMESERVER | URL домашнего сервера Matrix (например, https://matrix.org) |
MATRIX_ACCESS_TOKEN | Токен доступа Matrix для аутентификации бота |
MATRIX_USER_ID | ID пользователя Matrix (например, @hermes:matrix.org) — обязателен для входа по паролю, необязателен с токеном доступа |
MATRIX_PASSWORD | Пароль Matrix (альтернатива токену доступа) |
MATRIX_ALLOWED_USERS | ID пользователей Matrix через запятую, которым разрешено писать боту (например, @alice:matrix.org) |
MATRIX_ALLOWED_ROOMS | ID комнат Matrix через запятую, которым разрешено вызывать ответы бота |
MATRIX_HOME_ROOM | ID комнаты для проактивной доставки сообщений (например, !abc123:matrix.org) |
MATRIX_ENCRYPTION | Включить сквозное шифрование (true/false, по умолчанию: false) |
MATRIX_E2EE_MODE | Поведение E2EE в Matrix: off, optional или required. При задании переопределяет MATRIX_ENCRYPTION. |
MATRIX_DEVICE_ID | Стабильный ID устройства Matrix для сохранения E2EE между перезапусками (например, HERMES_BOT). Без него E2EE-ключи меняются при каждом запуске и расшифровка исторических сообщений ломается. |
MATRIX_REACTIONS | Включить эмодзи-реакции жизненного цикла обработки на входящие сообщения (по умолчанию: true). Задайте false для отключения. |
MATRIX_REQUIRE_MENTION | Требовать @упоминание в комнатах (по умолчанию: true). Задайте false, чтобы отвечать на все сообщения. |
MATRIX_FREE_RESPONSE_ROOMS | ID комнат через запятую, где бот отвечает без @упоминания |
MATRIX_IGNORE_USER_PATTERNS | Регулярные выражения через запятую для ID ghost-пользователей мостов/appservice Matrix, которых нужно игнорировать |
MATRIX_PROCESS_NOTICES | Обрабатывать входящие события Matrix m.notice (по умолчанию: false) |
MATRIX_SESSION_SCOPE | Область сессии Matrix для проектных комнат: auto, room или thread (по умолчанию: auto) |
MATRIX_TOOLS_ALLOW_CROSS_ROOM | Разрешить инструментам Matrix обращаться к явно указанным комнатам, отличным от текущей (по умолчанию: false) |
MATRIX_TOOLS_ALLOW_CROSS_ROOM_DESTRUCTIVE | Разрешить кросс-комнатные инструменты Matrix вроде redaction/invite; требует MATRIX_TOOLS_ALLOW_CROSS_ROOM=true (по умолчанию: false) |
MATRIX_TOOLS_ALLOW_REDACTION | Разрешить выполнение инструмента redaction (удаления) сообщений Matrix (по умолчанию: false) |
MATRIX_TOOLS_ALLOW_INVITES | Разрешить выполнение инструмента приглашений Matrix (по умолчанию: false) |
MATRIX_TOOLS_ALLOW_ROOM_CREATE | Разрешить выполнение инструмента создания комнат Matrix (по умолчанию: false) |
MATRIX_ALLOW_ROOM_MENTIONS | Разрешить исходящие упоминания @room для уведомления всех участников комнаты (по умолчанию: false) |
MATRIX_AUTO_THREAD | Автоматически создавать треды для сообщений в комнатах (по умолчанию: true) |
MATRIX_DM_MENTION_THREADS | Создавать тред при @упоминании бота в ЛС (по умолчанию: false) |
MATRIX_APPROVAL_REQUIRE_SENDER | Требовать, чтобы реакции подтверждения/выбора модели приходили от исходного запросившего, когда он известен (по умолчанию: true) |
MATRIX_APPROVAL_TIMEOUT_SECONDS | Таймаут запросов подтверждения/выбора модели по реакциям Matrix (по умолчанию: 300) |
MATRIX_ALLOW_PUBLIC_ROOMS | Разрешить инструментам создания комнат Matrix создавать публичные комнаты (по умолчанию: false) |
MATRIX_MAX_MEDIA_BYTES | Максимальный размер загрузки/скачивания медиа Matrix в байтах (по умолчанию: 104857600) |
MATRIX_RECOVERY_KEY | Ключ восстановления для верификации кросс-подписи после ротации ключей устройства. Рекомендуется для E2EE-конфигураций с включённой кросс-подписью. |
MATRIX_RECOVERY_KEY_OUTPUT_FILE | Необязательный одноразовый путь для сгенерированного ключа восстановления Matrix. Создаётся с режимом 0600 и никогда не перезаписывается. |
HASS_TOKEN | Долгосрочный токен доступа Home Assistant (включает платформу HA + инструменты) |
HASS_URL | URL Home Assistant (по умолчанию: http://homeassistant.local:8123) |
WEBHOOK_ENABLED | Включить адаптер платформы webhook (true/false) |
WEBHOOK_PORT | Порт HTTP-сервера для получения вебхуков (по умолчанию: 8644) |
WEBHOOK_SECRET | Глобальный HMAC-секрет для валидации подписи вебхука (используется как запасной вариант, когда маршруты не задают свой собственный) |
API_SERVER_ENABLED | Включить OpenAI-совместимый API-сервер (true/false). Работает параллельно с другими платформами. |
API_SERVER_KEY | Bearer-токен для аутентификации API-сервера. Обязателен при включённом API-сервере. |
API_SERVER_CORS_ORIGINS | Браузерные origins через запятую, которым разрешено обращаться к API-серверу напрямую (например, http://localhost:3000,http://127.0.0.1:3000). По умолчанию: отключено. |
API_SERVER_PORT | Порт API-сервера (по умолчанию: 8642) |
API_SERVER_HOST | Хост/адрес привязки API-сервера (по умолчанию: 127.0.0.1). API_SERVER_KEY по-прежнему требуется на loopback; используйте строгий список API_SERVER_CORS_ORIGINS для доступа из браузера. |
API_SERVER_MODEL_NAME | Имя модели, объявляемое на /v1/models. По умолчанию — имя профиля (или hermes-agent для профиля по умолчанию). Полезно в многопользовательских конфигурациях, где фронтенды вроде Open WebUI нуждаются в уникальных именах моделей на соединение. |
GATEWAY_PROXY_URL | URL удалённого API-сервера Hermes для пересылки сообщений (режим прокси). При задании шлюз обрабатывает только ввод/вывод платформы — вся работа агента делегируется удалённому серверу. Также настраивается через gateway.proxy_url в config.yaml. |
GATEWAY_PROXY_KEY | Bearer-токен для аутентификации на удалённом API-сервере в режиме прокси. Должен совпадать с API_SERVER_KEY на удалённом хосте. |
MESSAGING_CWD | Устаревший запасной вариант для рабочего каталога шлюза. Предпочтительнее terminal.cwd в config.yaml. |
GATEWAY_ALLOWED_USERS | ID пользователей через запятую, разрешённых на всех платформах |
GATEWAY_ALLOW_ALL_USERS | Разрешить всех пользователей без списков допуска (true/false, по умолчанию: false) |
Веб-дашборд и Hermes Desktop
Аутентификация для веб-дашборда и подключения Hermes Desktop к удалённому бэкенду. По принятому правилу хранить только секреты, учётные данные размещаются в ~/.hermes/.env; OAuth client_id лучше задать в dashboard.oauth в config.yaml (переменная окружения побеждает при наличии).
В комплект входят три провайдера аутентификации дашборда. Для удалённого подключения Hermes Desktop или любого дашборда, доступного из интернета, рекомендуется OAuth (Nous Portal) — задайте HERMES_DASHBOARD_OAUTH_CLIENT_ID (получите через hermes dashboard register). Встроенный провайдер имя пользователя/пароль (HERMES_DASHBOARD_BASIC_AUTH_*) — самый быстрый вариант для бэкенда в доверенной локальной сети или за VPN, но не подходит для прямого публичного доступа. Для аутентификации через собственный identity provider используйте self-hosted OIDC (HERMES_DASHBOARD_OIDC_*). В любом случае не-loopback привязка (hermes dashboard --host 0.0.0.0) активирует шлюз аутентификации. Полная картина — в Web Dashboard → Authentication.
| Переменная | Описание |
|---|---|
HERMES_DASHBOARD_BASIC_AUTH_USERNAME | Имя пользователя для встроенного провайдера аутентификации дашборда по логину/паролю (plugins/dashboard_auth/basic). Активирует провайдер при задании вместе с паролем. Переопределяет dashboard.basic_auth.username. |
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD | Пароль в открытом виде для базового провайдера (хэшируется в памяти при загрузке). Имеет приоритет над password_hash в конфиге, что позволяет менять пароль через переменную. Переопределяет dashboard.basic_auth.password. |
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD_HASH | scrypt-хэш пароля для базового провайдера (предпочтительно — нет открытого пароля на диске). Вычислите через python -c "from plugins.dashboard_auth.basic import hash_password; print(hash_password('PW'))". Переопределяет dashboard.basic_auth.password_hash. |
HERMES_DASHBOARD_BASIC_AUTH_SECRET | HMAC-ключ (32+ байта, base64/hex/raw) для подписи stateless-токенов сессий базового провайдера. Задавайте явно, чтобы сессии переживали перезапуски и охватывали несколько воркеров; пустое значение — случайное на процесс (при каждом перезапуске будете выходить из системы). Переопределяет dashboard.basic_auth.secret. |
HERMES_DASHBOARD_BASIC_AUTH_TTL_SECONDS | Время жизни токена доступа для базового провайдера (по умолчанию 12ч). Переопределяет dashboard.basic_auth.session_ttl_seconds. |
HERMES_DASHBOARD_OAUTH_CLIENT_ID | OAuth client id (agent:{instance_id}) для защищённого/публичного дашборда, активирующий провайдер Nous (plugins/dashboard_auth/nous). Переопределяет dashboard.oauth.client_id. Получите через hermes dashboard register. |
HERMES_DASHBOARD_PUBLIC_URL | Полный публичный URL дашборда для построения OAuth callback за обратными прокси. Переопределяет dashboard.public_url. |
HERMES_DASHBOARD_OIDC_ISSUER | URL эмитента OIDC для встроенного self-hosted OIDC провайдера (plugins/dashboard_auth/self_hosted). Обязателен для активации. Переопределяет dashboard.oauth.self_hosted.issuer. |
HERMES_DASHBOARD_OIDC_CLIENT_ID | Публичный client id OIDC (authorization-code + PKCE) для self-hosted OIDC провайдера. Обязателен для активации. Переопределяет dashboard.oauth.self_hosted.client_id. |
HERMES_DASHBOARD_OIDC_SCOPES | Запрашиваемые области OIDC для self-hosted OIDC провайдера (по умолчанию openid profile email). Переопределяет dashboard.oauth.self_hosted.scopes. |
HERMES_DESKTOP_REMOTE_URL | (Сторона Desktop) Базовый URL удалённого бэкенда, например http://host:9119. При задании переопределяет URL шлюза в приложении; вход по-прежнему выполняется из панели настроек шлюза (OAuth redirect или имя пользователя/пароль — в зависимости от того, что объявляет бэкенд). |
Microsoft Graph (встречи Teams)
App-only учётные данные для REST-клиента Microsoft Graph, используемого в пайплайне суммаризации встреч Teams. См. Регистрация приложения Microsoft Graph — пошаговое руководство по порталу Azure с точными требованиями к разрешениям API.
| Переменная | Описание |
|---|---|
MSGRAPH_TENANT_ID | Tenant ID Azure AD (GUID директории) для регистрации приложения Graph. |
MSGRAPH_CLIENT_ID | Application (client) ID регистрации приложения Azure. |
MSGRAPH_CLIENT_SECRET | Значение client secret для регистрации приложения. Храните в ~/.hermes/.env с chmod 600; периодически обновляйте через портал Azure. |
MSGRAPH_SCOPE | Область OAuth2 для запроса токена по client credentials (по умолчанию: https://graph.microsoft.com/.default). |
MSGRAPH_AUTHORITY_URL | Authority платформы Microsoft Identity (по умолчанию: https://login.microsoftonline.com). Переопределяйте только для национальных/суверенных облаков (например, https://login.microsoftonline.us для GCC High). |
Слушатель вебхуков Microsoft Graph
Слушатель входящих уведомлений об изменениях для событий Graph (встречи Teams, календарь, чат и др.). См. Microsoft Graph Webhook Listener — настройка и усиление безопасности.
| Переменная | Описание |
|---|---|
MSGRAPH_WEBHOOK_ENABLED | Включить платформу шлюза msgraph_webhook (true/1/yes). |
MSGRAPH_WEBHOOK_PORT | Порт привязки слушателя (по умолчанию: 8646). |
MSGRAPH_WEBHOOK_CLIENT_STATE | Общий секрет, который Graph возвращает в каждом уведомлении; сравнивается через hmac.compare_digest. Сгенерируйте через openssl rand -hex 32. |
MSGRAPH_WEBHOOK_ACCEPTED_RESOURCES | Список допустимых путей/паттернов ресурсов Graph через запятую (например, communications/onlineMeetings,chats/*/messages). Символ * в конце означает префиксное совпадение. Пусто = принимать всё. |
MSGRAPH_WEBHOOK_ALLOWED_SOURCE_CIDRS | Диапазоны CIDR через запятую, которым разрешено POST на слушатель (например, 52.96.0.0/14,52.104.0.0/14). Пусто = разрешить всё (по умолчанию). В продакшне ограничьте опубликованными диапазонами исходящих IP Microsoft Graph. |
Доставка суммаризации встреч Teams
Используется только при включённом плагине teams_pipeline. Параметры также настраиваются в platforms.teams.extra в config.yaml — переменные окружения имеют приоритет при совместном задании. См. Microsoft Teams → Meeting Summary Delivery.
| Переменная | Описание |
|---|---|
TEAMS_DELIVERY_MODE | graph или incoming_webhook. |
TEAMS_INCOMING_WEBHOOK_URL | URL вебхука, сгенерированного Teams; обязателен при TEAMS_DELIVERY_MODE=incoming_webhook. |
TEAMS_GRAPH_ACCESS_TOKEN | Предварительно полученный делегированный токен доступа для доставки через Graph. Редко нужен — при отсутствии writer использует учётные данные MSGRAPH_*. |
TEAMS_TEAM_ID | ID целевой команды для доставки в канал (режим graph). |
TEAMS_CHANNEL_ID | ID целевого канала (вместе с TEAMS_TEAM_ID). |
TEAMS_CHAT_ID | ID личного или группового чата (альтернатива team+channel для режима graph). |
LINE Messaging API
Используется встроенным плагином платформы LINE (plugins/platforms/line/). Полная настройка — в Messaging Gateway → LINE.
| Переменная | Описание |
|---|---|
LINE_CHANNEL_ACCESS_TOKEN | Долгосрочный токен доступа канала из LINE Developers Console (вкладка Messaging API). Обязательно. |
LINE_CHANNEL_SECRET | Channel secret (вкладка Basic settings); используется для верификации подписи вебхука HMAC-SHA256. Обязательно. |
LINE_HOST | Хост привязки вебхука (по умолчанию: 0.0.0.0). |
LINE_PORT | Порт привязки вебхука (по умолчанию: 8646). |
LINE_PUBLIC_URL | Публичный HTTPS базовый URL (например, https://my-tunnel.example.com). Обязателен для отправки изображений / аудио / видео — LINE принимает только HTTPS-URL. |
LINE_ALLOWED_USERS | ID пользователей через запятую, которым разрешено писать боту в ЛС (с префиксом U). |
LINE_ALLOWED_GROUPS | ID групп через запятую, в которых бот будет отвечать (с префиксом C). |
LINE_ALLOWED_ROOMS | ID комнат через запятую, в которых бот будет отвечать (с префиксом R). |
LINE_ALLOW_ALL_USERS | Лазейка только для разработки — принимать любой источник. По умолчанию: false. |
LINE_HOME_CHANNEL | Цель доставки по умолчанию для cron-заданий с deliver: line. |
LINE_SLOW_RESPONSE_THRESHOLD | Секунды до срабатывания постбэка Template Buttons для медленного LLM (по умолчанию: 45). Задайте 0 для отключения и всегда Push-fallback. |
LINE_PENDING_TEXT | Текст пузыря, отображаемый вместе с кнопкой постбэка. |
LINE_BUTTON_LABEL | Метка кнопки постбэка (по умолчанию: Get answer). |
LINE_DELIVERED_TEXT | Ответ при повторном нажатии уже доставленной кнопки постбэка (по умолчанию: Already replied ✅). |
LINE_INTERRUPTED_TEXT | Ответ при нажатии кнопки постбэка, осиротевшей из-за /stop (по умолчанию: Run was interrupted before completion.). |
ntfy (push-уведомления)
ntfy — лёгкий HTTP-сервис push-уведомлений. Подпишитесь на тему в мобильном приложении ntfy и публикуйте в эту тему для общения с агентом.
| Переменная | Описание |
|---|---|
NTFY_TOPIC | Тема для подписки (входящие сообщения). Обязательно. |
NTFY_SERVER_URL | URL сервера (по умолчанию: https://ntfy.sh). Укажите self-hosted ntfy для конфиденциальности. |
NTFY_TOKEN | Необязательный токен аутентификации. Bearer-токен (например, tk_xyz) или user:pass для Basic auth. |
NTFY_PUBLISH_TOPIC | Тема для исходящих ответов (по умолчанию: NTFY_TOPIC). |
NTFY_MARKDOWN | Задайте true для отправки ответов с заголовком X-Markdown: true. По умолчанию: false. |
NTFY_ALLOWED_USERS | Список допуска (трактуется как ID пользователей; в ntfy это имена тем). Обычно задаётся то же значение, что и NTFY_TOPIC. |
NTFY_ALLOW_ALL_USERS | Лазейка только для разработки — безопасна только на закрытых приватных темах. По умолчанию: false. |
NTFY_HOME_CHANNEL | Цель доставки по умолчанию для cron-заданий с deliver: ntfy. |
NTFY_HOME_CHANNEL_NAME | Человекочитаемая метка домашнего канала (по умолчанию — имя темы). |
Перед развёртыванием с ненадёжными темами обязательно ознакомьтесь с руководством по ntfy — особенно с разделом модели идентификации.
Тонкая настройка мессенджеров
Продвинутые настройки буферизации исходящих сообщений для каждой платформы. Большинству пользователей никогда не понадобится их трогать; значения по умолчанию соблюдают лимиты частоты запросов каждой платформы без лишних задержек.
| Переменная | Описание |
|---|---|
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 | Задержка перед отправкой follow-up после завершения агента, чтобы избежать гонки с последним фрагментом стрима. |
HERMES_TELEGRAM_HTTP_CONNECT_TIMEOUT / _READ_TIMEOUT / _WRITE_TIMEOUT / _POOL_TIMEOUT | Переопределить HTTP-таймауты python-telegram-bot (в секундах). |
HERMES_TELEGRAM_HTTP_POOL_SIZE | Максимальное количество одновременных HTTP-соединений с API Telegram. |
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 | Аналоги batch-параметров Telegram для Matrix. |
HERMES_FEISHU_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDS / _MAX_CHARS / _MAX_MESSAGES | Настройка буферизации Feishu — задержка, задержка разбивки, максимум символов на сообщение, максимум сообщений в батче. |
HERMES_FEISHU_MEDIA_BATCH_DELAY_SECONDS | Задержка сброса медиа Feishu. |
HERMES_FEISHU_DEDUP_CACHE_SIZE | Размер кэша дедупликации вебхуков Feishu (по умолчанию: 1024). |
HERMES_WECOM_TEXT_BATCH_DELAY_SECONDS / _SPLIT_DELAY_SECONDS | Настройка буферизации WeCom. |
HERMES_VISION_DOWNLOAD_TIMEOUT | Таймаут в секундах для загрузки изображения перед передачей в vision-модели (по умолчанию: 30). |
HERMES_RESTART_DRAIN_TIMEOUT | Шлюз: секунды ожидания завершения активных запусков при /restart перед принудительным перезапуском (по умолчанию: 900). |
HERMES_GATEWAY_PLATFORM_CONNECT_TIMEOUT | Таймаут подключения каждой платформы при запуске шлюза (в секундах). |
HERMES_GATEWAY_BUSY_INPUT_MODE | Поведение шлюза при занятом агенте: queue, steer или interrupt. Может быть переопределено для каждого чата через /busy. |
HERMES_GATEWAY_BUSY_ACK_ENABLED | Отправлять ли шлюзу подтверждение (⚡/⏳/⏩), когда пользователь пишет, пока агент занят (по умолчанию: true). Задайте false для полного отключения этих сообщений — ввод по-прежнему ставится в очередь/перенаправляется/прерывает в обычном режиме, только ответ в чате подавляется. Синхронизируется с display.busy_ack_enabled в config.yaml. |
HERMES_GATEWAY_NO_SUPERVISE | В Docker-образе с s6-overlay — отказаться от авто-наблюдения при запуске hermes gateway run и использовать семантику foreground без s6 (без авто-перезапуска, шлюз — основной процесс контейнера). Истинные значения: 1, true, yes. Аналог флага --no-supervise. Игнорируется вне образа с s6. |
HERMES_GATEWAY_BOOTSTRAP_STATE | В Docker-образе с s6-overlay — объявить начальное состояние supervised шлюза на свежем томе. На пустом томе нет сохранённого gateway_state.json, поэтому загрузчик регистрирует слот gateway-default, но оставляет его остановленным (авто-запуск только если последнее записанное состояние было running). Задайте running — хук первого запуска заполнит gateway_state.json до запуска загрузчика, шлюз поднимется при первой загрузке. Реагирует только на буквальное значение running. Только первый запуск: существующий gateway_state.json никогда не перезаписывается. Игнорируется вне образа с s6. |
HERMES_FILE_MUTATION_VERIFIER | Включить верификатор мутаций файлов в конце каждого хода (по умолчанию: true). При включении Hermes добавляет предупреждение со списком вызовов write_file / patch, которые не удались в ходе хода и не были заменены успешной записью. Задайте 0, false, no или off для отключения. Зеркалирует display.file_mutation_verifier в config.yaml; переменная окружения побеждает при задании. |
HERMES_CRON_TIMEOUT | Таймаут неактивности для запусков агента cron-заданий в секундах (по умолчанию: 600). Агент может работать неограниченно долго, пока активно вызывает инструменты или получает токены стрима — таймаут срабатывает только при простое. Задайте 0 для неограниченного времени. |
HERMES_CRON_SCRIPT_TIMEOUT | Таймаут для скриптов предварительного запуска cron-заданий в секундах (по умолчанию: 120). Увеличьте для скриптов, требующих длительного выполнения (например, рандомизированные задержки для anti-bot тайминга). Также настраивается через cron.script_timeout_seconds в config.yaml. |
HERMES_CRON_MAX_PARALLEL | Максимальное количество параллельно запускаемых cron-заданий за тик (по умолчанию: 4). |
Поведение агента
| Переменная | Описание |
|---|---|
HERMES_MAX_ITERATIONS | Максимальное количество итераций вызова инструментов за разговор (по умолчанию: 90) |
HERMES_INFERENCE_MODEL | Переопределить имя модели на уровне процесса (приоритет над config.yaml для сессии). Также задаётся флагом -m/--model. |
HERMES_YOLO_MODE | Задайте 1 для обхода запросов подтверждения опасных команд. Аналог --yolo. |
HERMES_ACCEPT_HOOKS | Автоматически принимать любые незнакомые shell-хуки, объявленные в config.yaml, без 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_SAFE_MODE | Режим диагностики: отключить ВСЕ кастомизации — пропускает обнаружение плагинов и загрузку MCP-серверов. Задаётся автоматически флагом --safe-mode (который также включает два флага выше). |
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) |
CODEX_HOME | При включённом рантайме Codex app-server — переопределить директорию, из которой Codex CLI читает конфиг и аутентификацию (по умолчанию: ~/.codex). Миграция Hermes записывает управляемый блок в <CODEX_HOME>/config.toml. |
HERMES_KANBAN_TASK | Задаётся диспетчером канбана при запуске воркера (UUID задачи). Воркеры и порождённый subprocess hermes-tools MCP наследуют его для корректного контроля доступа к инструментам канбана. Не задавайте вручную. |
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 | Таймаут чтения стримингового сокета в секундах (по умолчанию: 120). Автоматически увеличивается до HERMES_API_TIMEOUT для локальных провайдеров. Увеличьте при таймаутах локальных LLM при генерации большого кода. |
HERMES_STREAM_STALE_TIMEOUT | Таймаут обнаружения устаревшего стрима в секундах (по умолчанию: 180). Автоматически отключается для локальных провайдеров. Запускает разрыв соединения, если в течение этого времени не поступают фрагменты. |
HERMES_STREAM_RETRIES | Количество попыток переподключения в середине стрима при временных сетевых ошибках (по умолчанию: 3). |
HERMES_AGENT_TIMEOUT | Таймаут неактивности работающего агента в шлюзе в секундах (по умолчанию: 900). Сбрасывается при каждом вызове инструмента и токене стрима. Задайте 0 для отключения. |
HERMES_AGENT_TIMEOUT_WARNING | Шлюз: отправить предупреждение после этого количества секунд неактивности (по умолчанию: 75% от HERMES_AGENT_TIMEOUT). |
HERMES_AGENT_NOTIFY_INTERVAL | Шлюз: интервал в секундах между уведомлениями о прогрессе при долгих ходах агента. |
HERMES_CHECKPOINT_TIMEOUT | Таймаут создания контрольной точки файловой системы в секундах (по умолчанию: 30). |
HERMES_EXEC_ASK | Включить запросы подтверждения выполнения в режиме шлюза (true/false) |
HERMES_ENABLE_PROJECT_PLUGINS | Включить авто-обнаружение локальных плагинов репозитория из ./.hermes/plugins/ для загрузчика агента и веб-сервера дашборда. Принимает стандартный набор истинных значений: 1 / true / yes / on (без учёта регистра). Всё остальное — включая 0, false, no, off и пустую строку — трактуется как отключено (по умолчанию). Примечание: начиная с GHSA-5qr3-c538-wm9j (#29156) веб-сервер дашборда отказывается авто-импортировать Python api-файл проектного плагина даже при включённой переменной — проектные плагины могут расширять UI через статические JS/CSS, но их бэкенд-маршруты загружаются только при перемещении в ~/.hermes/plugins/. |
HERMES_PLUGINS_DEBUG | 1/true для вывода подробных логов обнаружения плагинов в stderr — сканируемые директории, разобранные манифесты, причины пропуска и полные трейсбэки при ошибках разбора или register(). Предназначено для авторов плагинов. |
HERMES_BACKGROUND_NOTIFICATIONS | Режим уведомлений о фоновых процессах в шлюзе: all (по умолчанию), result, error, off |
HERMES_EPHEMERAL_SYSTEM_PROMPT | Эфемерный системный промпт, внедряемый во время API-вызова (никогда не сохраняется в сессиях) |
HERMES_PREFILL_MESSAGES_FILE | Путь к JSON-файлу с эфемерными prefill-сообщениями, внедряемыми во время API-вызова. |
HERMES_ALLOW_PRIVATE_URLS | true/false — разрешить инструментам обращаться к localhost/адресам приватных сетей. Отключено по умолчанию в режиме шлюза. |
HERMES_REDACT_SECRETS | true/false — управлять редактированием секретов в выводе инструментов, логах и ответах в чате (по умолчанию: true). |
HERMES_WRITE_SAFE_ROOT | Необязательный префикс директории, ограничивающий запись write_file/patch; пути за его пределами требуют подтверждения. |
HERMES_DISABLE_LAZY_INSTALLS | Внутренняя связующая переменная, задаётся автоматически в официальном Docker-образе, чтобы предотвратить установку зависимостей во время выполнения в неизменяемое дерево /opt/hermes. Пользовательский аналог — security.allow_lazy_installs: false в config.yaml; не задавайте её в .env. |
HERMES_DISABLE_FILE_STATE_GUARD | Задайте 1 для отключения защиты “файл изменился с момента чтения” в patch/write_file. |
HERMES_CORE_TOOLS | Переопределение списка базовых инструментов через запятую (продвинутый режим; редко нужно). |
HERMES_BUNDLED_SKILLS | Переопределение списка встроенных навыков, загружаемых при запуске, через запятую. |
HERMES_OPTIONAL_SKILLS | Список имён необязательных навыков через запятую для авто-установки при первом запуске. |
HERMES_DEBUG_INTERRUPT | Задайте 1 для подробного логирования трассировки прерываний/отмены в 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 | Добавить дополнительный текст инструкций в системный промпт для пользовательских развёртываний. |
HERMES_AGENT_LOGO | Переопределить ASCII-баннер при запуске CLI. |
DELEGATION_MAX_CONCURRENT_CHILDREN | Максимальное количество параллельных подагентов на батч delegate_task (по умолчанию: 3, минимум 1, без верхней границы). Также настраивается через delegation.max_concurrent_children в config.yaml — значение из конфига имеет приоритет. |
Интерфейс
| Переменная | Описание |
|---|---|
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 или шестизначный HEX фона (например, ffffff или 1a1a2e). Без задания Hermes авто-определяет тему через COLORFGBG и запросы фона терминала; переменная переопределяет авто-определение в терминалах (Ghostty, Warp, iTerm2 и др.), которые не задают COLORFGBG. |
HERMES_INFERENCE_MODEL | Принудительно задать модель для hermes -z / hermes chat без изменения config.yaml. Работает вместе с флагом --provider. Удобно для скриптовых вызовов (sweeper, CI, пакетные запуски), которым нужно переопределять модель по умолчанию для каждого запуска. |
Настройки сессии
| Переменная | Описание |
|---|---|
SESSION_IDLE_MINUTES | Сброс сессий после N минут неактивности (по умолчанию: 1440) |
SESSION_RESET_HOUR | Час ежедневного сброса в 24-часовом формате (по умолчанию: 4 = 4:00) |
HERMES_SESSION_ID | Автоматически экспортируется в каждый дочерний процесс инструмента, порождённый Hermes (terminal, execute_code, persistent shell, бэкенды Docker/Singularity, делегированные запуски подагентов). Задаётся агентом как ID текущей сессии; пользовательские скрипты, вызываемые из инструментов, могут читать его для корреляции вывода, телеметрии или побочных эффектов с исходной сессией Hermes. Не задавайте вручную — переопределение из родительского shell работает только вне запуска агента и перезаписывается в момент старта сессии агентом. |
Сжатие контекста (только config.yaml)
Сжатие контекста настраивается исключительно через config.yaml — переменных окружения для него нет. Пороговые параметры находятся в блоке compression:, а модель суммаризации — в auxiliary.compression:.
compression:
enabled: true
threshold: 0.50
target_ratio: 0.20 # доля threshold для сохранения как недавний хвост
protect_last_n: 20 # минимальное число недавних сообщений без сжатия
Старые конфиги с compression.summary_model, compression.summary_provider и compression.summary_base_url автоматически мигрируют в auxiliary.compression.* при первой загрузке.
Переопределения вспомогательных задач
| Переменная | Описание |
|---|---|
AUXILIARY_VISION_PROVIDER | Переопределить провайдер для задач vision |
AUXILIARY_VISION_MODEL | Переопределить модель для задач vision |
AUXILIARY_VISION_BASE_URL | Прямой OpenAI-совместимый эндпоинт для задач vision |
AUXILIARY_VISION_API_KEY | API-ключ в паре с AUXILIARY_VISION_BASE_URL |
AUXILIARY_WEB_EXTRACT_PROVIDER | Переопределить провайдер для задач веб-извлечения/суммаризации |
AUXILIARY_WEB_EXTRACT_MODEL | Переопределить модель для задач веб-извлечения/суммаризации |
AUXILIARY_WEB_EXTRACT_BASE_URL | Прямой OpenAI-совместимый эндпоинт для задач веб-извлечения/суммаризации |
AUXILIARY_WEB_EXTRACT_API_KEY | API-ключ в паре с AUXILIARY_WEB_EXTRACT_BASE_URL |
Для прямых эндпоинтов конкретных задач Hermes использует настроенный API-ключ задачи или OPENAI_API_KEY. OPENROUTER_API_KEY для таких пользовательских эндпоинтов не переиспользуется.
Запасные провайдеры (только config.yaml)
Основная цепочка запасных провайдеров настраивается исключительно через config.yaml — переменных окружения для неё нет. Добавьте список fallback_providers верхнего уровня с ключами provider и model для автоматического переключения при ошибках основной модели. Вспомогательные задачи с провайдером auto тоже обращаются к этой цепочке перед встроенной цепочкой обнаружения вспомогательных провайдеров Hermes.
fallback_providers:
- provider: openrouter
model: anthropic/claude-sonnet-4
Устаревший формат с одним провайдером fallback_model по-прежнему поддерживается для обратной совместимости, но для новых конфигов используйте fallback_providers. Для политики вспомогательных задач задайте auxiliary.<task>.fallback_chain в config.yaml; эквивалента в виде переменной окружения нет.
Подробности — в Fallback Providers.
Маршрутизация провайдеров (только config.yaml)
Задаётся в ~/.hermes/config.yaml в разделе provider_routing:
| Ключ | Описание |
|---|---|
sort | Сортировка провайдеров: "price" (по умолчанию), "throughput" или "latency" |
only | Список slug-ов провайдеров для использования (например, ["anthropic", "google"]) |
ignore | Список slug-ов провайдеров для исключения |
order | Список slug-ов провайдеров для перебора по порядку |
require_parameters | Использовать только провайдеров, поддерживающих все параметры запроса (true/false) |
data_collection | "allow" (по умолчанию) или "deny" для исключения провайдеров, хранящих данные |
Используйте hermes config set для задания переменных окружения — команда автоматически сохраняет их в нужный файл (.env для секретов, config.yaml для всего остального).