Переменные окружения
Все переменные помещаются в ~/.hermes/.env. Их также можно задать с помощью hermes config set VAR value.
Провайдеры LLM| Переменная | Описание |
Заголовок раздела «Провайдеры LLM| Переменная | Описание |»|----------|-------------|
| 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 |
Аутентификация провайдера (OAuth)
Заголовок раздела «Аутентификация провайдера (OAuth)»Для нативной аутентификации Anthropic Hermes предпочитает собственные файлы учетных данных Claude Code, если они существуют, потому что эти учетные данные могут автоматически обновляться. OAuth через Anthropic требует план Claude Max с приобретенными дополнительными кредитами использования — Hermes маршрутизирует как Claude Code, который использует только кредиты extra/overage плана Max, а не базовый лимит Max, и не работает на Claude Pro. Без Max + дополнительных кредитов вместо этого используйте ключ API. Переменные окружения, такие как ANTHROPIC_TOKEN, по-прежнему полезны как ручные переопределения, но они больше не являются предпочтительным способом входа в Claude Max.
| Variable | Description |
|---|---|
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) |
API инструментов| Variable | Описание |
Заголовок раздела «API инструментов| Variable | Описание |»|----------|-------------|
| 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 (альтернатива только для разработки) |
Наблюдаемость Langfuse
Заголовок раздела «Наблюдаемость Langfuse»Переменные окружения для встроенного плагина observability/langfuse. Задайте их с помощью hermes tools → Langfuse Observability или вручную в ~/.hermes/.env. Плагин также должен быть включён (hermes plugins enable observability/langfuse), прежде чем что-либо из этого вступит в силу.
| Variable | Description |
|---|---|
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 | Тег Release/version в трассировках |
HERMES_LANGFUSE_SAMPLE_RATE | Частота сэмплирования SDK 0.0–1.0 (по умолчанию: 1.0) |
HERMES_LANGFUSE_MAX_CHARS | Усечение по полям для сериализованных payload (по умолчанию: 12000) |
HERMES_LANGFUSE_DEBUG | true включает подробное логирование плагина в agent.log |
LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY / LANGFUSE_BASE_URL | Стандартные имена SDK Langfuse. Принимаются как резервные, если эквиваленты HERMES_LANGFUSE_* не заданы. |
Nous Tool Gateway
Заголовок раздела «Nous Tool Gateway»Эти переменные настраивают Tool Gateway для платных подписчиков Nous или self-hosted-развёртываний gateway. Большинству пользователей не нужно задавать их — gateway настраивается автоматически через hermes model или hermes tools.
| Variable | Description |
|---|---|
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 Backend| Переменная | Описание |
Заголовок раздела «Terminal Backend| Переменная | Описание |»|----------|-------------|
| 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 может быть пересоздан вместо сохранения тех же запущенных процессов.
Backend SSH| Variable | Описание |
Заголовок раздела «Backend SSH| Variable | Описание |»|----------|-------------|
| 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)
Заголовок раздела «Ресурсы контейнера (Docker, Singularity, Modal, Daytona)»| 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/) |
Persistent Shell
Заголовок раздела «Persistent Shell»| 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) |
Microsoft Graph (Teams Meetings)
Заголовок раздела «Microsoft Graph (Teams Meetings)»Учетные данные app-only для клиента Microsoft Graph REST, используемого предстоящим конвейером сводок по собраниям Teams. Пошаговые инструкции в Azure portal и точный набор необходимых разрешений API см. в Register a Microsoft Graph application.
| Variable | Description |
|---|---|
MSGRAPH_TENANT_ID | ID тенанта Azure AD (ID каталога GUID) для регистрации приложения Graph. |
MSGRAPH_CLIENT_ID | ID приложения (клиента) регистрации приложения Azure. |
MSGRAPH_CLIENT_SECRET | Значение client secret для регистрации приложения. Храните в ~/.hermes/.env вместе с chmod 600; периодически ротируйте через Azure portal. |
MSGRAPH_SCOPE | Область OAuth2 для запроса токена client-credentials (по умолчанию: https://graph.microsoft.com/.default). |
MSGRAPH_AUTHORITY_URL | Authority платформы идентификации Microsoft (по умолчанию: https://login.microsoftonline.com). Переопределяйте только для облаков national/sovereign (например, https://login.microsoftonline.us для GCC High). |
Microsoft Graph Webhook Listener
Заголовок раздела «Microsoft Graph Webhook Listener»Входящий listener уведомлений об изменениях для событий Graph (собрания Teams, календарь, чат и т. д.). Сведения о настройке и усилении безопасности см. в Microsoft Graph Webhook Listener.
| Variable | Description |
|---|---|
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 Meeting Summary DeliveryИспользуется только когда включён [плагин teams_pipeline. Настройки также можно задать в platforms.teams.extra в config.yaml — переменные окружения имеют приоритет, если заданы оба варианта. См. Microsoft Teams → Доставка сводки встречи.
Заголовок раздела «Teams Meeting Summary DeliveryИспользуется только когда включён [плагин teams_pipeline. Настройки также можно задать в platforms.teams.extra в config.yaml — переменные окружения имеют приоритет, если заданы оба варианта. См. Microsoft Teams → Доставка сводки встречи.»| Переменная | Описание |
|---|---|
TEAMS_DELIVERY_MODE | graph или incoming_webhook. |
TEAMS_INCOMING_WEBHOOK_URL | Сгенерированный Teams webhook URL; обязателен, когда TEAMS_DELIVERY_MODE=incoming_webhook. |
TEAMS_GRAPH_ACCESS_TOKEN | Предварительно полученный делегированный токен доступа для доставки через Graph. Нужен редко — writer использует учётные данные приложения MSGRAPH_*, если значение не задано. |
TEAMS_TEAM_ID | ID целевой Team для доставки в канал (режим graph). |
TEAMS_CHANNEL_ID | ID целевого канала (в паре с TEAMS_TEAM_ID). |
TEAMS_CHAT_ID | ID целевого чата 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). |
Поведение агента| Variable | Описание |
Заголовок раздела «Поведение агента| Variable | Описание |»|----------|-------------|
| 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 — значение конфигурации имеет приоритет. |
Интерфейс
Заголовок раздела «Интерфейс»| Variable | Description |
|---|---|
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), которым нужно переопределять модель по умолчанию для каждого запуска. |
Настройки сессии
Заголовок раздела «Настройки сессии»| Variable | Description |
|---|---|
SESSION_IDLE_MINUTES | Сбрасывать сессии после N минут бездействия (по умолчанию: 1440) |
SESSION_RESET_HOUR | Ежедневный час сброса в 24-часовом формате (по умолчанию: 4 = 4 утра) |
Сжатие контекста (только config.yaml)
Заголовок раздела «Сжатие контекста (только config.yaml)»Сжатие контекста настраивается исключительно через 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-провайдеры (только config.yaml)»Цепочка 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" для исключения провайдеров, сохраняющих данные |