Все настройки сохраняются в каталоге ~/.hermes/ для удобного доступа.
Структура каталога
~/.hermes/
├── config.yaml # Настройки (модель, терминал, TTS, сжатие и т.д.)
├──.env # Ключи API и секреты
├── auth.json # Учётные данные OAuth-провайдеров (Nous Portal и др.)
├── SOUL.md # Основная идентичность агента (слот №1 в системном промпте)
├── memories/ # Постоянная память (MEMORY.md, USER.md)
├── skills/ # Навыки, созданные агентом (управление через skill_manage)
├── cron/ # Запланированные задания
├── sessions/ # Сессии шлюза
└── logs/ # Журналы (errors.log, gateway.log — секреты автоматически скрываются)
Управление конфигурацией
hermesconfig# Просмотр текущей конфигурации
hermesconfigedit# Открыть config.yaml в редакторе
hermesconfigsetKEYVAL# Установить конкретное значение
hermesconfigcheck# Проверить отсутствующие опции (после обновлений)
hermesconfigmigrate# Интерактивно добавить отсутствующие опции# Примеры:
hermesconfigsetmodelanthropic/claude-opus-4
hermesconfigsetterminal.backenddocker
hermesconfigsetOPENROUTER_API_KEYsk-or-...# Сохраняется в.env```:::совет
Команда`hermesconfigset`автоматическинаправляетзначениявнужныйфайл—ключиAPIуказаныв`.env`,всёостальноев`config.yaml`.</div>
## Приоритет конфигурации
Настройкиразрешаютсявследующемпорядке(наивысшийпервыйприоритет):
1.**АргументыCLI**—например,`hermeschat--modelanthropic/claude-sonnet-4`(переопределениепривызове)2.**`~/.hermes/config.yaml`**—основнойконфигурационныйфайлдлявсехнесекретныхнастроек.
3.**`~/.hermes/.env`**—запаснойвариантдлявключенияокружения;**обязателен**длясекретов(ключиAPI,токены,пароли)4.**Встроенныезначенияпоумолчанию**—жёсткозаданныебезопасныезначения,еслиничегодругогонеустановлено.<divclass="admonition admonition-info"><pclass="admonition-title">ℹ️Info</p>Правилобольшогопальца
Секреты(ключиAPI,токеныботов,пароли)хранятсяв`.env`.Всёостальное(модель,бэкендтерминала,настройкисжатия,лимитыпамяти,наборыинструментов)—в`config.yaml`.Еслиустановленоито,идругое,`config.yaml`имеетприоритетдлянесекретныхнастроек.</div>
## Подстановка окружения
Выможетессылатьсянапеременныеокруженияв`config.yaml`,используясинтаксис`${VAR_NAME}`:
```yaml
auxiliary:
vision:
api_key:${GOOGLE_API_KEY}base_url:${CUSTOM_VISION_URL}
delegation:
api_key:${DELEGATION_KEY}
Несколько ссылок в одной формуле работают: url: "${HOST}:${PORT}". Если указанная переменная не установлена, заполнение остается буквально (${UNDEFINED_VAR} остается как есть). Поддерживается только синтаксис ${VAR} — просто $VAR не раскрывается.
Информация о настройке AI-провайдеров (OpenRouter, Anthropic, Copilot, пользовательские конечные точки, самостоятельно размещённые LLM, резервные модели и т.д.) см. в разделе AI-провайдеры.
Тайм-ауты провайдера
Вы можете установить providers.<id>.request_timeout_секунды для тайм-аута запроса ко всему провайдеру, а также providers.<id>.models.<model>.timeout_секунды для переопределения для конкретной модели. Применяется к основному клиенту для каждого транспорта (OpenAI-wire, нативный Anthropic, совместимый с Anthropic), цепочкой запасных провайдеров, пересборкой после ротации учётных данных и (для OpenAI-wire) аргументом тайм-аута каждого запроса — так что установленное значение имеет приоритет над постоянным переменным окружением HERMES_API_TIMEOUT.
Вы также можете установить providers.<id>.stale_timeout_секундs для детектора «зависших» вызовов без потоковой передачи, а также providers.<id>.models.<model>.stale_timeout_секунды для переопределения для конкретных моделей. Это имеет приоритет над временным окружением HERMES_API_CALL_STALE_TIMEOUT.
Если оставить их неустановленными, использовались постоянные значения по умолчанию (HERMES_API_TIMEOUT=1800, HERMES_API_CALL_STALE_TIMEOUT=300, родной Anthropic 900). В настоящее время не работает для AWS Bedrock (оба пути bedrock_converse и AnthropicBedrock SDK используют boto3 самостоятельно с конфигурацией тайм-аута). См. пример с комментариями в cli-config.yaml.example.
Конфигурация бэкенда терминала
Hermes поддерживает семь серверных терминалов. Все определяет, где на самом деле выполняются команды выполняемого агента — на локальном компьютере, в контейнере Docker, в удалённом пространстве через SSH, в облачной песочнице Modal (напрямую или через управляемый шлюз Nous), в рабочей области Daytona, в песочнице Vercel или в контейнере Singularity/Apptainer.
terminal:backend:local# local | docker | ssh | modal | daytona | vercel_sandbox | singularitycwd:"."# Рабочий каталог для шлюза/cron (CLI всегда использует каталог запуска)timeout:180# Тайм-аут команды в секундахenv_passthrough:[]# Имена переменных окружения для передачи в изолированное выполнение (terminal + execute_code)singularity_image:"docker://nikolaik/python-nodejs:python3.11-nodejs20"# Образ контейнера для Singularitymodal_image:"nikolaik/python-nodejs:python3.11-nodejs20"# Образ контейнера для Modaldaytona_image:"nikolaik/python-nodejs:python3.11-nodejs20"# Образ контейнера для Daytona
Для облачных песочниц, таких как Modal, Daytona и Vercel Sandbox, container_persistent: true означает, что Hermes пытается сохранить состояние файловой системы при повторном создании песочницы. Это не гарантирует, что та самая активная песочница, космический PID или фоновые процессы, которые ещё будут работать позже.
Обзор бэкендов
Бекенд
Где выполняются команды
Изоляция
Лучше всего подходит для
местный
Напрямую на ваш компьютер
Нет
Разработка, личное использование
докер
Один постоянный контейнер Docker (общий для сессии, /new, подагентов)
Полная (пространства имён, капля)
Безопасная песочница, CI/CD
тсс
Удалённый сервер по SSH
Сетевая граница
Удалённая разработка, мощное оборудование
модальный
Облачная песочница Модальный
Полная (облачная ВМ)
Эфемерные облачные вычисления, оценки
дайтона
Рабочая область Дайтона
Полная (облачный контейнер)
Управляемые разработки облачной среды
vercel_sandbox
Песочница Версель
Полная (облачная микро-ВМ)
Облачное выполнение с сохранением состояния финансовой системы на основе кадров
необычность
Контейнер Singularity/Apptainer
Пространства имён (--containall)
Кластеры HPC, общие машины
Локальный бэкенд
Значение по умолчанию. Команды работают непосредственно на вашем компьютере без работы. Специальная настройка не требуется.
terminal:backend:local```:::предупреждениеАгент имеет тот же доступ к файлам системы, что и ваша учетная запись пользователя. Используйте «инструменты Hermes», чтобы отключить ненужные инструменты, или переключитесь на Docker для песочницы.</div>### Бэкенд ДокерВыполняет команды внутри контейнера Docker с повышенным уровнем безопасности (все возможности открыты, без изменения привилегий, ограничений PID).**Одинпостоянный контейнер, не для каждой команды.** Hermes запускает ОДИН долгоживущий контейнер при первом использовании и направляет каждый вызов терминала, файл и `execute_code` через `docker exec` в тот же контейнер — через сессию, `/new`, `/reset` и подагенты `delegate_task` — на всё время работы процесса Hermes. Изменения рабочего каталога, выбранные пакеты и файлы в `/workspace` переносятся из одного инструмента-инструмента в следующий, как в локальной оболочке. Контейнер останавливается и удаляется по окончании работ. Подробнее см. в разделе **Жизненный цикл-контейнер** ниже.```yamlterminal:backend:dockerdocker_image:"nikolaik/python-nodejs:python3.11-nodejs20"docker_mount_cwd_to_workspace:false# Монтировать каталог запуска в /workspacedocker_run_as_host_user:false# См. «Запуск контейнера от пользователя хоста» нижеdocker_forward_env:# Переменные окружения для передачи в контейнер-"GITHUB_TOKEN"docker_volumes:# Монтирование каталогов хоста-"/home/user/projects:/workspace/projects"-"/home/user/data:/data:ro"#:ro для только чтения# Ограничения ресурсовcontainer_cpu:1# Ядра ЦП (0 = без ограничений)container_memory:5120# МБ (0 = без ограничений)container_disk:51200# МБ (требуется overlay2 на XFS+pquota)container_persistent:true# Сохранять /workspace и /root между сессиями
Требования: Docker Desktop или Docker Engine установлены и запущены. Впоследствии Hermes $PATH плюс стандартные места установки macOS (/usr/local/bin/docker, /opt/homebrew/bin/docker, пакет приложения Docker Desktop). Функции Podman «из коробки»: установите HERMES_DOCKER_BINARY=podman (или полный путь), чтобы обеспечить его использование, когда установлены оба.
Жизненный цикл контейнера: Hermes повторно использует один долгоживущий контейнер (docker run -d... Sleep 2h) для каждого вызова терминала и финансового инструмента через сессию, /new, /reset и подагенты delegate_task, на протяжении всего процесса Hermes. Команды выполняются через docker exec с окошком входа, поэтому изменение рабочего каталога, установленных пакетов и файлов в /workspace включается от одного инструмента вызова к следующему. Контейнер останавливается и удаляется по завершении работ Hermes (или когда сборщик бездействия забирает его).
Параллельные подагенты, порождённые через delegate_task(tasks=[...]), используют этот контейнер — одновременные cd, мутации окружения и записи в одном и тот же путь могут определять. Если подагенту нужна изолированная песочница, он должен зарегистрировать переопределение образа для каждой задачи через register_task_env_overrides(), что среда RL и бенчмарки (TerminalBench2, HermesSweEnv и т.д.) делают автоматически для своих образов Docker для каждой задачи.
Усиление безопасности:
- --cap-drop ALL добавлены только DAC_OVERRIDE, CHOWN, FOWNER
- --security-opt no-new-privileges
- --pids-limit 256
- Ограниченные по размеру tmpfs для /tmp (512 МБ), /var/tmp (256 МБ), /run (64 МБ)
Пересылка учётных данных: Переменные окружения, перечисленные в docker_forward_env, сначала разрешаются из вашего окружения, а затем из ~/.hermes/.env. Навыки также могут объявлять обязательные_переменные_среды, которые автоматически объединяются.
Бэкенд SSH
Выполняется команда на удалённом сервере через SSH. Использует ControlMaster для повторного использования соединения (5-минутное удержание активности при бездействии). Постоянная включение включена по умолчанию — состояние (рабочий каталог, переменные окружения) сохраняется между командами.
terminal:backend:sshpersistent_shell:true# Сохранять долгоживущую сессию bash (по умолчанию: true)
Как это работает: Подключается при инициализации с BatchMode=yes и StrictHostKeyChecking=accept-new. Постоянная поддержка одного процесса bash -l на удаленном хосте, общая через временные файлы. Команды, которым нужны stdin_data или sudo, автоматически переключаются в одноразовый режим.
Бэкенд Модальный
Выполняет команды в облачной песочнице Modal. Каждая задача получает изолированную ВМ с настраиваемыми ЦП, памятью и диском. Файловая система может быть снимком/восстановлена между сессиями.
terminal:backend:modalcontainer_cpu:1# Ядра ЦПcontainer_memory:5120# МБ (5 ГБ)container_disk:51200# МБ (50 ГБ)container_persistent:true# Снимок/восстановление файловой системы
Требуется: Либо переменные окружения MODAL_TOKEN_ID + MODAL_TOKEN_SECRET, либо конфигурация файла ~/.modal.toml.
Постоянство: При включении файловая система песочницы снимается в снимок при очистке и восстанавливается во время следующей сессии. Снимки отслеживаются в ~/.hermes/modal_snapshots.json. Это сохраняет состояние файловой системы, а не активные процессы, пространство PID или фоновые задания.
Файлы учётных данных: Автоматически монтируются из ~/.hermes/ (токены OAuth и т.д.) и синхронизируются перед каждой командой.
Бэкенд Дайтона
Выполняет обязанности руководителя в управляемой рабочей области Дейтона. Поддерживает остановку/возобновление для постоянства.
terminal:backend:daytonacontainer_cpu:1# Ядра ЦПcontainer_memory:5120# МБ → преобразуется в ГиБcontainer_disk:10240# МБ → преобразуется в ГиБ (макс. 10 ГиБ)container_persistent:true# Остановить/возобновить вместо удаления
Требуется: Переменная окружения DAYTONA_API_KEY.
Постоянство: При включении песочницы останавливаются (не удаляются) при очистке и возобновляются на следующей сессии. Имена песочниц далее по шаблону hermes-{task_id}.
Лимит дисков: Daytona устанавливает максимум 10 ГиБ. Запросы выше этого ограничения распространяются с предупреждением.
Бэкенд Vercel Sandbox
Выполняет команды в облачной микро-ВМ Vercel Sandbox. Hermes использует обычные поверхностные инструменты, терминалы и файлы; нет инструментов, ориентированных на модели, для Vercel.
terminal:backend:vercel_sandboxvercel_runtime:node24# node24 | node22 | python3.13cwd:/vercel/sandbox# Корень рабочей области по умолчаниюcontainer_persistent:true# Снимок/восстановление файловой системыcontainer_disk:51200# Только общее значение по умолчанию; пользовательский диск не поддерживается
Необходимая аутентификация: Для установления аутентификации по токену доступа со всеми условиями: VERCEL_TOKEN, VERCEL_PROJECT_ID и VERCEL_TEAM_ID. Это применимая настройка для развёртывания и обычных долгоживущих процессов Hermes на Render, Railway, Docker и других хостингах.
Для разовой локальной разработки Hermes также использует соответствующие токены OIDC Vercel:
Из связанного каталога проекта Vercel вы можете опустить имя проекта:
VERCEL_OIDC_TOKEN="$(vcprojecttoken)"hermeschat
Токены OIDC являются достаточно важными и не должны использоваться в документированном порядке развёртывания.
Среда выполнения:terminal.vercel_runtime поддерживает node24, node22 и python3.13. Если не установлено, Hermes по умолчанию использует node24.
Постоянство: Когда container_persistent: true, Гермес создает исходную файловую систему песочницы во время очистки и управления более поздней песочницей для той же задачи из этого снимка. Содержимое снимка может включать синхронизированные учётные данные Hermes, навыки и денежные средства, которые были скопированы в песочницу. Это сохраняет только состояние файловой системы; оно не сохраняет идентичность активной песочницы, пространства PID, состояния или работы фоновых процессов.
Фоновые команды:terminal(background=true) использует общий поток фоновых процессов Hermes для нелокальных бэкендов. Вы можете запускать, опрашивать, ожидать, просматривать журналы и завершать процессы с помощью обычных инструментов управления процессами, пока песочница активна. Компания Hermes не обеспечивает естественного восстановления отдельных процессов Vercel после очистки или перезапуска.
Размер диска: Vercel Sandbox в настоящее время не поддерживает использование ресурса container_disk от Hermes. Оставьте container_disk не установленным или в общем понимании по умолчанию 51200; Значения, отличные от стандартных, которые приводят к сбою диагностики и созданию бэкенда, не будут молча игнорироваться.
Бэкенд Singularity/Apptainer
Выполняет команду в контейнере Singularity/Apptainer. используются для кластеров HPC и общих машин, где Docker недоступен.
terminal:backend:singularitysingularity_image:"docker://nikolaik/python-nodejs:python3.11-nodejs20"container_cpu:1# Ядра ЦПcontainer_memory:5120# МБcontainer_persistent:true# Перезаписываемый оверлей сохраняется между сессиями
Требования: Бинарный файл apptainer или singularity в $PATH.
Управление образами: URL-адреса Docker (docker://...) автоматически преобразуются в файлы SIF и кэшируются. Существующие файлы .sif используются напрямую.
Рабочий каталог для временных файлов: Определяется в следующем порядке: TERMINAL_SCRATCH_DIR → TERMINAL_SANDBOX_DIR/singularity → /scratch/$USER/hermes-agent (соглашение HPC) → ~/.hermes/sandboxes/singularity.
Изоляция: Использует --containall --no-home для полной реализации пространства без монтирования домашнего каталога хоста.
Распространённые проблемы бэкендов терминала
Если команда терминала немедленно завершает работу или сообщает, что инструмент терминала отключен:
Локальный — Особых требований нет. Самый безопасный вариант по умолчанию для начала работы.
Docker — Выполните docker version, чтобы убедиться, что Docker работает. Если нет, исправьте Docker или выполните hermes config set Terminal.backend local.
SSH — Должны быть установлены и TERMINAL_SSH_HOST, и TERMINAL_SSH_USER. Гермес чётко сообщает о деньгах, если что-то отсутствует.
Modal — Требуется переменное окружение MODAL_TOKEN_ID или ~/.modal.toml. Запустите hermes Doctor для проверки.
Daytona — Требуется DAYTONA_API_KEY. SDK Daytona сам проектирует конфигурацию URL-сервера.
Singularity — Требуется apptainer или singularity в $PATH. Обычно доступно на кластерах HPC.
Если сомневаетесь, верните terminal.backend обратно на local и сначала убедитесь, что команды там работают.
Синхронизация файлов с удалённого хоста на хост по завершении
Для бэкендов SSH, Modal и Daytona (где рабочее дерево агента находится на другой машине, чем хост, на котором работает Hermes), Hermes отслеживает файлы, которые агент определяет в удалённой песочнице, и при завершении сессии/очистке песочницы синхронизирует измененные файлы обратно на хостён в ~/.hermes/cache/remote-syncs/<session-id>/.
С при реализации: закрытия сессии, /new, /reset, тайм-ауте сообщений шлюза, завершения подагента delegate_task, если дочерний элемент использовал удаленный бэкенд.
Охватывает всё дерево, который агент конвертил, а не только файлы, которые он явно открывал. Добавления, изменения и удаление — все фиксируется.
Удалённая песочница может быть уже разрушена к тому моменту, как вы начнёте поиск; локальная копия в ~/.hermes/cache/remote-syncs/… является важной записью того, что изменился агент.
Крупные двоичные файлы (контрольные точки моделей, необработанные наборы данных) ограничены по размеру — синхронизация пропускает файлы размером больше file_sync_max_mb (по умолчанию 100). Увеличьте это значение, если ожидаете, что повернутся более крупные предметы.
terminal:file_sync_max_mb:100# по умолчанию — синхронизировать файлы размером до 100 МБ каждыйfile_sync_enabled:true# по умолчанию — установите false, чтобы полностью пропустить синхронизацию
Таким образом, вы восстанавливаете результаты из эфемерных облачных песочниц, которые уничтожаются после завершения сеанса, без необходимости указания агенту явно scp или modal Volume put в каждом документе.
Монтирование томов Docker
При использовании бэкенда Docker docker_volumes Позволяет делиться каталогами хоста с контейнером. каждая запись использует стандартный синтаксис Docker -v: host_path:container_path[:options].
terminal:backend:dockerdocker_volumes:-"/home/user/projects:/workspace/projects"# Чтение-запись (по умолчанию)-"/home/user/datasets:/data:ro"# Только чтение-"/home/user/.hermes/cache/documents:/output"# Экспорт, видимый шлюзу
Это полезно для:
- Предоставления файлов агенту (наборы данных, конфигурации, эталонный код)
- Получение файлов от агента (сгенерированный код, отчёты, экспорт)
- Общие области, где и вы, и агент обращаетесь к одним и тем же файлам.
Если вы используете шлюз сообщений и агент отправляет сгенерированные файлы через MEDIA:/..., предпочтите выделенное монтирование экспорта, вероятно, на хосту, например /home/user/.hermes/cache/documents:/output.
Записывайте файлы внутри Docker в /output/...
Указывайте путь хоста в MEDIA:, например:
МЕДИА:/home/user/.hermes/cache/documents/report.txt
Не указывайте /workspace/... или /output/..., если этот интеллектуальный путь также не существует для шлюзового процесса на хосте.:::предупреждение
Дублирующиеся ключи YAML молча перезаписывают звуки. Если у вас уже есть блок docker_volumes:, разделите новые монтирования в том же списке вместо добавления другого ключа docker_volumes: позже в файле.
Также может быть определено через переменное окружение: TERMINAL_DOCKER_VOLUMES='["/host:/container"]' (массив JSON).
Пересылка учётных данных Docker
По умолчанию сессия терминала Docker не наследует произвольные учётные данные хоста. Если вам нужен определенный токен внутри контейнера, добавьте его в terminal.docker_forward_env.
Hermes разрешает каждую указанную переменную сначала из вашего текущего потока, а затем из ~/.hermes/.env, если она была сохранена с помощью hermes config set.:::предупреждение
Всё, что указано в docker_forward_env, становится видимым для команды, выполняющей внутри контейнера. Пересылайте только те учетные данные, которые вы готовы раскрыть для терминала сессии.
Запуск контейнера с хоста пользователя
По умолчанию контейнеры Docker работают от root (UID 0). Файлы, созданные внутри /workspace или других монтированных файлов, оказываются благоприятными root на хосте, поэтому после сессии вам нужно выбрать sudo chown, чтобы отредактировать их в редакторе хоста. Флаг terminal.docker_run_as_host_user исправляет это:
terminal:backend:dockerdocker_run_as_host_user:true# по умолчанию: false
При включении Hermes добавляет --user $(id -u):$(id -g) в группу docker run, так что файлы, записываемые в смонтированные каталоги (/workspace, /root, всё в docker_volumes), являются пользователем хоста, а не root. Компромисс: контейнер больше не может выполнять apt install или записывать в пути, принципиальные root, такие как /root/.npm — воспользуйтесь базовым образом, в котором HOME принадлежит пользователю, не являющемуся корнем (или указателем обеспечиваемых инструментов на этапе сборки образа), если вам нужно и то, и другое.
Оставьте false (по умолчанию) для обратной совместимости. Включите, когда ваш рабочий процесс в основном состоит из «редактирования смонтированных файлов хоста», и вас утомило sudo chown -R.
Опционально: Монтирование каталога запускается в /workspace
Песочницы Docker по умолчанию изолированными. Гермес не передаёт ваш текущий рабочий каталог хоста в контейнер, если вы явно не укажете это.
При включении:
- если вы запускаете Hermes из ~/projects/my-app, этот каталог хоста примонтируется в /workspace
- бэкенд Docker запускается в /workspace
- инструменты, файлы и команда терминала продвигают один и тот же смонтированный проект
При отключении /workspace остаётся работать в песочнице, если вы явно не смонтируете что-то через docker_volumes.
Компромисс безопасности:
- false сохранение границы песочницы
- true дает песочнице прямой доступ к каталогу, из которого вы запустили Hermes
Используйте этот параметр только в том случае, если вы намеренно хотите хранить рабочие файлы, расположенные на хосте.
Постоянная крышка
По умолчанию используется команда терминала, результат в собственном подпроцессе — рабочий каталог, переменные окружения и переменные потоки сбрасываются между командами. При включенной постоянной оболочке один долгоживущий процесс bash сохраняется между вызовами execute(), так что состояние сохраняется между командами.
Это наиболее полезно для бэкенда SSH, где он также позволяет использовать большие затраты на соединение для каждой команды. Постоянная оболочка включена по умолчанию для SSH и отключена для локальной бэкенда.
terminal:persistent_shell:true# по умолчанию — включает постоянную оболочку для SSH
Чтобы выделить:
hermesconfigsetterminal.persistent_shellfalse
Что сохраняется между командами:
- Рабочий каталог (cd /tmp сохраняется для этой команды)
- Экспортированные переменные окружения (export FOO=bar)
- Переменные обработки (MY_VAR=hello)
Приоритет:
Уровень
Переменная
По умолчанию
Конфиг
terminal.persistent_shell
правда
Переопределение SSH
TERMINAL_SSH_PERSISTENT
следует за конфигом
Переопределение локального
TERMINAL_LOCAL_PERSISTENT
ложь
Переменные окружения, в частности, бэкенды имеют значительный приоритет. Если вы хотите постоянную оболочку и для локального бэкенда:
exportTERMINAL_LOCAL_PERSISTENT=true```:::примечание
Команды,которымтребуется`stdin_data`илиsudo,автоматическипереключаютсяводноразовыйрежим,таккакstdinпостояннопроверяетужезанятостьпротоколаIPC.</div>
Подробнееокаждомбэкендесм.в[Выполнениекода](features/code-execution.md)ивразделе[ТерминалвREADME](features/tools.md).
## Настройки функций
НавыкимогутобъявитьсвоисобственныенастройкиконфигурациичереззаголовоквSKILL.md.Этонесекретныезначения(пути,настройки,настройкидомена),хранящиесявпространствеимён`skills.config`в`config.yaml`.
```yaml
skills:
config:
myplugin:
path:~/myplugin-data# Пример — каждый навык определяет свои собственные ключи
Как работают настройки навыков:
hermes configmigrate сканирует все включенные навыки, находит ненастроенные параметры и предлагает их запросить.
hermes config show отображает все настройки функций в разделе «Настройки функций» вместе с навыком, который они единственные.
При включении навыка его разрешенные значения конфигурации автоматически включаются в контекст навыка.
Когда агент использует skill_manage для создания, редактирования, исправления или удаления навыков, Гермес может опционально проверять новое/изменённое качество на наличие ключевых слов (сбор учётных данных, очевидная инъекция промптов, инструкции по эксфильтрации). Проверка по умолчанию отключена — реальные рабочие процессы агентов, которые по закону обращаются к ~/.ssh/ или упоминают $OPENAI_API_KEY, слишком часто разрабатывают эвристику. Если вы хотите проверить запрашиваемое подтверждение перед тем, включите ее обратно, как записи навыков агента сохраняются:
skills:guard_agent_created:true# по умолчанию: false
При включении любая помеченная запись skill_manage отображается как запрос на утверждение с обоснованием проверки. Принятые записи основных; отклонённые возвращающиеся агенту сообщение об ошибках с объяснением.
Определяет, сколько содержимого может вернуть один вызов read_file. Чтения, превышающие лимит, отклоняются с ошибкой, указывающей агенту использовать «смещение» и «лимит» для уменьшения связи. Это собственное затопление контекстного окна одним чтением минифицированной привязки JS или большого файла данных.
file_read_max_chars:100000# по умолчанию — ~25-35K токенов
Увеличьте, если вы используете модель с большими контекстными окнами и часто читаете большие файлы. Уменьшите для моделей малый контекст, чтобы чтение было эффективным:
# Модель с большим контекстом (200K+)file_read_max_chars:200000# Маленькая локальная модель (16K контекст)file_read_max_chars:30000
Агент также автоматически сохраняет дубликаты при чтении файлов — если один и тот же файл региона читается дважды, а файл не изменяется повторно, возвращается легкая заглушка вместо изменения изменения. Это сбрасывается при сжатии контекста, чтобы агент мог перечитать файлы после того, как их требования были свёрнуты.
Лимиты усечения комплектных инструментов
Три ограничения контролируют, сколько необработанного результата можно вернуть инструменту, прежде чем Гермес усечёт его:
tool_output:max_bytes:50000# ограничение вывода терминала (символы)max_lines:2000# ограничение пагинации read_filemax_line_length:2000# ограничение на строку в нумерованном представлении read_file
max_bytes — Когда команда terminal выдаёт большее количество символов объединённого stdout/stderr, Hermes сохраняет первые 40% и последние 60% и вставляет между ними [OUTPUT TRUNCATED]. По умолчанию 50000 (≈12-15К токенов в типичных токенизаторах).
max_lines — Верхняя граница для параметра limit при одном вызове read_file. Запросы выше этого значения усекаются, чтобы при одном чтении не затопило контекстное окно. По умолчанию 2000.
max_line_length — Ограничение на текст, применяется, когда read_file выдает нумерованное представление. Строки длиннее этого усекаются до этого количества символов с добавлением ... [усечено]. По умолчанию 2000.
Увеличьте лимиты для моделей с заданными контекстными окнами, которые могут предоставить вам больше необработанного результата вызова. Уменьшите модели с малым контекстом, чтобы результаты инструментов были компактными:
# Модель с большим контекстом (200K+)tool_output:max_bytes:150000max_lines:5000# Маленькая локальная модель (16K контекст)tool_output:max_bytes:20000max_lines:500
Глобальное отключение набора инструментов
Чтобы отключить определенные наборы инструментов в CLI и на каждом шлюзе платформы в одном месте, укажите их имена в agent.disabled_toolsets:
agent:disabled_toolsets:-memory# скрыть инструменты памяти + внедрение MEMORY_GUIDANCE-web# без web_search / web_extract где бы то ни было
Это применяется после конфигурации инструментов для каждой платформы (platform_toolsets, записываемые hermestools), так что набор, указанный здесь, всегда удаляется — даже если сохранённая конфигурация платформы всё ещё содержит его. Используйте его, когда вам нужен любой переключатель «выключить X везде», не сохраняя платформу из 15+ строк в интерфейсе «hermestools».
Оставление списка пустым или пропуск ключа не дает результата.
Изоляция рабочих компьютеров Git
Включите изолированные рабочие деревья Git для параллельного запуска нескольких агентов в одном репозитории:
worktree:true# Всегда создавать рабочее дерево (как hermes -w)# worktree: false # По умолчанию — только при передаче флага -w
При включении сессия CLI создает свежее игровое дерево в .worktrees/ с собственной веткой. Агенты могут оставить файлы, коммитить, пушить и создавать пиар, не мешая другу. Чистые рабочие деревья удаляются при выходе; грязные элементы для ручного восстановления.
Вы также можете добавить ошибочные файлы git для копирования в рабочие деревья через .worktreeinclude в корневом репозитории:
#.worktreeinclude.env.venv/
node_modules/
Сжатие контекста
Гермес автоматически запускает длинные разговоры, чтобы оказаться в пределах контекстного окна вашей модели. Суммаризатор сжатия — это отдельный вызов LLM — вы можете направить его на любого провайдера или конечную точку.
Все настройки уменьшаются в config.yaml (без включения окружения).
Полная справка
compression:enabled:true# Включить/выключить сжатиеthreshold:0.50# Сжимать при этом % от лимита контекстаtarget_ratio:0.20# Доля порога для сохранения в качестве недавнего хвостаprotect_last_n:20# Мин. количество последних сообщений для сохранения без сжатияhygiene_hard_message_limit:400# Предохранительный клапан шлюза — см. ниже# Модель/провайдер суммаризации настраиваются в auxiliary:auxiliary:compression:model:""# Пусто = использовать основную модель чата. Переопределите, например, "google/gemini-3-flash-preview" для более дешёвого/быстрого сжатия.provider:"auto"# Провайдер: "auto", "openrouter", "nous", "codex", "main" и т.д.base_url:null# Пользовательская конечная точка, совместимая с OpenAI (переопределяет провайдера)```<div class="admonition admonition-info"><p class="admonition-title">ℹ️ Info</p> Миграция устаревшей конфигурацииСтарые конфиги с `compression.summary_model`, `compression.summary_provider` и `compression.summary_base_url` автоматически мигрируются в `auxiliary.compression.*` при первом компоненте (версия конфига 17). Ручное вмешательство не требуется.</div>`hygiene_hard_message_limit` — это предохранительный клапан шлюза **передним сжатием**. Вышедшие из-под контроля сессии с тысячами сообщений могут ограничивать лимиты контекстных моделей до того, как срабатывает обычный процентный порог контекста; Когда количество сообщений поднимается к этому потолку, Гермес усиливает сжатие независимо от использования токенов. По умолчанию `400` — увеличьте для платформы, где очень длинные сессии являются нормой, уменьшите для более агрессивного сжатия. Изменение этого значения в рабочем шлюзе повлияет на силу в следующую минуту (см. ниже).<div class="admonition admonition-tip"><p class="admonition-title">💡 Tip</p> Горячая перезагрузка сжатия и удлинения контекста в шлюзеНачиная с недавних релизов, редактирование `model.context_length` или любого ключа `compression.*` в `config.yaml` в рабочем шлюзе вступает в силу в следующую минуту — не требуется перезапуск шлюза, `/reset` или ротация сессии. Подпись кэшированного агента включает эти ключи, поэтому шлюз прозрачности пересобирает агента, когда видит изменение. Ключи API и инструменты настройки/навыков по-прежнему требуют традиционных способов перезагрузки.</div>### Типичные настройки**Поумолчанию (автоопределение) — настройка не требуется:**```yamlcompression:enabled:truethreshold:0.50
Использует вашего основного провайдера и основную модель. Переопределите для конкретной задачи (например, auxiliary.compression.provider: openrouter + model: google/gemini-2.5-flash), если вы хотите использовать для сжатия более дешёвую модель, чем ваша базовая модель чата.
Принудительно указать конкретного провайдера (на основе OAuth или ключа API):
Указывает на пользовательскую конечную точку, совместимую с OpenAI. Для аутентификации используется OPENAI_API_KEY.
Как взаимодействуют три параметра
auxiliary.compression.provider
auxiliary.compression.base_url
Результат
авто (по умолчанию)
не задано
Автоопределение наилучшего доступного провайдера
nous/openrouter/ и т.д.
не задано
Принудительно использовать этого провайдера, его аутентификацию
любой
задано
Использовать пользовательскую конечную точку напрямую (провайдер отключается)
Модель более крупной должна иметь контекстное окно не меньше, чем у вашей основной модели агента. Компрессор отправляет всю среднюю часть разговора модели краткой — если контекстное окно этой модели меньше, чем в основном, вызов последовательной обработки завершится ошибкой с потерей длины контекста. Когда это происходит, средние части отбрасываются без окончательной фиксации, что позволяет сохранять молчание в контексте разговора. Если вы переопределяете модель, убедитесь, что ее длина контекста равна или масштаб контура вашей основной модели.
## Механизм контекста
Контекст механизма определяет, как управляются разговоры при приближении к модели лимиту токенов. Встроенный механизм компрессор использует сжатие с потерями (см. Сжатие контекста). Плагинные механизмы могут заменить его альтернативными стратегиями.
context:engine:"compressor"# по умолчанию — встроенная суммаризация с потерями
Чтобы использовать плагинный механизм (например, LCM для управления контекстом без потерь):
context:engine:"lcm"# должно совпадать с именем плагина
Плагинные механизмы никогда не активируются автоматически — вы должны явно установить context.engine в имя плагина. Доступные механизмы можно просмотреть и выбрать через Плагины Hermes → Плагины провайдера → Контекстный движок.
См. Провайдеры памяти для последовательной системы одиночного выбора для подключения памяти.
Давление бюджета итераций
Когда агент над работой платы с большим количеством вызовов, он может исчерпать свой бюджет итераций (по умолчанию: 90 шагов), не осознавая, что он на исходе. Давление бюджета автоматически предупреждает модель о наименьшем приближении к лимиту:
Порог
Уровень
Что видит модель
70%
Осторожно
[БЮДЖЕТ: 63/90. Осталось 27 итераций. Начинайте консолидироваться.]
90%
Предупреждение
[БЮДЖЕТНОЕ ПРЕДУПРЕЖДЕНИЕ: 81/90. Осталось всего 9. Ответьте СЕЙЧАС.]
Предупреждения внедряются в JSON-инструмент последнего результата (например, поле _budget_warning), а не как сообщение — это сохраняет кэширование запросов и не нарушает структуру разговора.
agent:max_turns:90# Макс. итераций на один шаг разговора (по умолчанию: 90)api_max_retries:3# Повторных попыток на провайдера до включения запасного (по умолчанию: 3)
Давление бюджета включено по умолчанию. Агент видит предупреждения естественным образом в составе результатов инструментов, что побуждает его консолидировать работу и выдать ответ до того, как итерации закончатся.
Когда бюджет итераций полностью исчерпан, CLI показывает пользователю уведомление: ⚠ Бюджет итераций достигнут (90/90) — ответ может быть неполным. Если бюджет исчерпан во время активной работы, агент генерирует сводку выполненного перед остановкой.
agent.api_max_retries определяет, сколько раз Hermes повторяет вызов API провайдера при временных ошибках (ограничения скорости, обрывы соединения, 5xx) до того, как сработает переключение на запасного провайдера. По умолчанию 3 — всего четыре попытки. Если у вас настроены запасные провайдеры и вы хотите быстрее переключаться, уменьшите до 0, чтобы первая же временная ошибка на основном провайдере немедленно передала управление запасному, вместо того чтобы тратить попытки на нестабильную конечную точку.
Тайм-ауты API
У Hermes есть отдельные уровни тайм-аутов для потоковой передачи, а также детектор «зависших» вызовов для непотоковых вызовов. Детекторы «зависших» вызовов автоматически настраиваются для локальных провайдеров только в том случае, если вы оставляете их в неявных значениях по умолчанию.
providers.<id>.stale_timeout_seconds или HERMES_API_CALL_STALE_TIMEOUT
Вызов API (непотоковый)
1800 с
Без изменений
providers.<id>.request_timeout_seconds / timeout_seconds или HERMES_API_TIMEOUT
Тайм-аут чтения сокета определяет, сколько httpx ждёт следующего фрагмента данных от провайдера. Локальные LLM могут тратить минуты на префилл в больших контекстах, прежде чем выдать первый токен, поэтому Hermes увеличивает его до 30 минут при обнаружении локальной конечной точки. Если вы явно установите HERMES_STREAM_READ_TIMEOUT, это значение всегда используется независимо от обнаружения конечной точки.
Тайм-аут обнаружения зависшего потока завершает соединения, которые получают ping поддержания активности SSE, но не фактический контент. Он полностью отключается для локальных провайдеров, поскольку они не отправляют ping поддержания активности во время префилла.
Тайм-аут обнаружения зависшего непотокового вызова завершает непотоковые вызовы, которые не дают ответа слишком долго. По умолчанию Hermes отключает это на локальных конечных точках, чтобы избежать ложных срабатываний во время длительных префиллов. Если вы явно установите providers.<id>.stale_timeout_seconds, providers.<id>.models.<model>.stale_timeout_seconds или HERMES_API_CALL_STALE_TIMEOUT, это явное значение соблюдается даже на локальных конечных точках.
Предупреждения о давлении контекста
В отличие от давления бюджета итераций, давление контекста отслеживает, насколько разговор близок к порогу сжатия — точке, где срабатывает сжатие контекста для суммаризации старых сообщений. Это помогает и вам, и агенту понимать, когда разговор становится длинным.
Прогресс
Уровень
Что происходит
≥ 60% до порога
Информация
CLI показывает голубой индикатор выполнения; шлюз отправляет информационное уведомление
≥ 85% до порога
Предупреждение
CLI показывает жирный жёлтый индикатор; шлюз предупреждает о неминуемом сжатии
В CLI давление контекста отображается как индикатор выполнения в ленте вывода инструментов:
На платформе обмена сообщениями отправляется текстовое сообщение:
◐ Контекст: ████████████░░░░░░░░ 62% до сжатия (порог: 50% окна).
Если автосжатие отключено, в предупреждении сообщается, что контекст может быть усечён вместо этого.
Давление контекста незначительное — настройка не требуется. Оно реализуется исключительно как.для пользователя и не изменяет поток сообщений и не внедряет ничего в контекстные модели.
Стратегии пулов учётных данных
Если у вас несколько ключей API или токенов OAuth для одного провайдера, настройте балансировку ротации:
credential_pool_strategies:openrouter:round_robin# равномерно перебирать ключиanthropic:least_used# всегда выбирать наименее используемый ключ
Варианты: fill_first (по умолчанию), round_robin, least_used, random. Полная документация в разделе Пулы учётных данных.
Вспомогательные модели
Hermes использует «вспомогательные» модели для решения задач, таких как анализ изображений, масштабирование анализа веб-страницы, анализ скриншотов браузера, генерация названных сессий и сжатие контекста. По умолчанию (auxiliary.*.provider: "auto") Hermes направляет все вспомогательные задачи на основную модель чата — того же провайдера/модели, которую вы выбрали в hermes model. Для начала вам не нужно ничего настраивать, но имейте в виду, что на дорогах моделей рассуждений (Opus, MiniMax M2.7 и т.д.) вспомогательные задачи требуют значительных затрат. Если вам нужны дешёвые и простые сложные задачи, отличные от основных моделей, обязательно укажите auxiliary.<task>.provider и auxiliary.<task>.model (например, Gemini Flash на OpenRouter для просмотра и веб-страницы).
📝 Note
Почему «auto» использует основную модель
Ранние сборки разделяли пользователей агрегаторов (OpenRouter, Nous Portal) в дешёвом варианте по умолчанию на стороне провайдера. Это было неожиданно — пользователи, платившие за подписку агрегатора, по другую сторону модели, обрабатывающую их вспомогательный трафик. Теперь auto использует основную модель для всех, переопределение конкретных задач в config.yaml по-прежнему имеет приоритет (см. Полную справку по вспомогательной конфигурации ниже).
Интерактивная настройка вспомогательных моделей
Вместо ручного редактирования YAML запустите «модель Гермеса» и выберите в меню «Настроить вспомогательные модели». Вы получаете интерактивный выбор для каждой задачи:
Выберите вопрос, укажите провайдера (OAuth-потоки открывают браузер; провайдеры с ключами API запрашивают ключ), выберите модель. Изменение сохраняется в auxiliary.<task>.* в config.yaml. Тот же механизм, что и при выборе основной модели — никакого дополнительного синтаксиса.
Видеоурок
Универсальный шаблон конфигурации
Каждая модель слота Hermes — вспомогательные задачи, сжатие, запасные — использует одни и те же три параметра:
Ключ
Что делает
По умолчанию
провайдер
Какого провайдера использовать для аутентификации и маршрутизации
"авто"
модель
Какую модель спросить
По умолчанию провайдер
base_url
Пользовательская конечная точка, совместимая с OpenAI (переопределяет провайдера)
не задано
Когда задан base_url, Hermes отключает провайдера и обращается к этой конечной точке напрямую (используя api_key или OPENAI_API_KEY для аутентификации). Когда задан только «поставщик», Hermes использует встроенную аутентификацию и базовый URL-адрес этого провайдера.
Доступные провайдеры для вспомогательных задач: auto, main, а также любой провайдер из реестра провайдеров — openrouter, nous, openai-codex, copilot, copilot-acp, anthropic, gemini, google-gemini-cli, qwen-oauth, zai, kimi-coding, kimi-coding-cn, minimax, minimax-cn, minimax-oauth, deepseek, nvidia, xai, ollama-cloud, alibaba, bedrock, huggingface, arcee, xiaomi, kilocode, opencode-zen, opencode-go, ai-gateway, azure-foundry — или любой именованный пользовательский провайдер из вашего списка custom_providers (например, provider: "beans").:::совет MiniMax OAuth
minimax-oauth осуществляется через браузерный OAuth (ключ API не требуется). Запустите «модель Гермеса» и выберите MiniMax (OAuth) для аутентификации. Вспомогательные задачи автоматически используют МиниМакс-М2.7-Высокоскоростной. См. руководство по MiniMax OAuth.::::::предупреждение "main" только для вспомогательных задач
Вариант провайдера "main" означает «использовать того же провайдера, что и мой основной агент» — он действителен только в конфигах auxiliary:, compression: и fallback_model:. Это не допустимое значение для вашего основного параметра model.provider. Если вы используете пользовательскую конечную точку, совместимую с OpenAI, установите «provider: custom» в разделе «model:». См. AI-провайдеры для всех вариантов провайдеров основных моделей.
Полная корректировка вспомогательной конфигурации
auxiliary:# Анализ изображений (инструмент vision_analyze + скриншоты браузера)vision:provider:"auto"# "auto", "openrouter", "nous", "codex", "main" и т.д.model:""# например, "openai/gpt-4o", "google/gemini-2.5-flash"base_url:""# Пользовательская конечная точка, совместимая с OpenAI (переопределяет провайдера)api_key:""# Ключ API для base_url (запасной вариант — OPENAI_API_KEY)timeout:120# секунды — тайм-аут вызова API LLM; полезные нагрузки зрения требуют щедрого тайм-аутаdownload_timeout:30# секунды — HTTP-загрузка изображений; увеличьте для медленных соединений# Суммаризация веб-страниц + извлечение текста из страниц браузераweb_extract:provider:"auto"model:""# например, "google/gemini-2.5-flash"base_url:""api_key:""timeout:360# секунды (6 мин) — суммаризация LLM за попытку# Классификатор утверждения опасных командapproval:provider:"auto"model:""base_url:""api_key:""timeout:30# секунды# Тайм-аут сжатия контекста (отдельно от конфига compression.*)compression:timeout:120# секунды — сжатие суммаризирует длинные разговоры, требуется больше времени# Поиск по сессиям — суммаризация совпадений прошлых сессийsession_search:provider:"auto"model:""base_url:""api_key:""timeout:30max_concurrency:3# Ограничить параллельные суммаризации для уменьшения всплесков 429extra_body:{}# Специфичные для провайдера поля запроса, совместимые с OpenAI# Центр навыков — сопоставление и поиск навыковskills_hub:provider:"auto"model:""base_url:""api_key:""timeout:30# Диспетчер инструментов MCPmcp:provider:"auto"model:""base_url:""api_key:""timeout:30# Спецификатор канбана для триажа — `hermes kanban specify <id>` (или# кнопка ✨ Specify на карточках колонки Triage на панели) использует# этот слот для расширения однострочника в конкретную спецификацию и# перемещения задачи в `todo`. Дешёвые быстрые модели здесь работают# хорошо; расширение спецификации короткое и не требует глубины рассуждений.triage_specifier:provider:"auto"model:""base_url:""api_key:""timeout:120```:::советКаждая вспомогательная задача имеет настраиваемый «тайм-аут» (в секундах). Значения по умолчанию:видение 120 с, web_extract 360 с, утверждение 30 с, сжатие 120 с. Увеличьте их, если используете более низкие локальные модели для вспомогательных задач. В Vision также есть отдельный `download_timeout` (по умолчанию 30 с) для HTTP-загрузки изображений — увеличьте для медленных соединений или чистых изображений серверов.::::::информацияСжатие контекста имеет небольшой блок `compression:` для пороговых результатов и блок `auxiliary.compression:` для настроек модели/провайдера — см. [Сжатие контекста](#context-compression) выше. Запасная модель использует блок `fallback_model:` — см. [Запасная модель](/docs/integrations/providers#fallback-model). Все три последующих одного и тот же шаблон поставщика/модели/base_url.</div>### Настройка поиска по сессиямЕсли вы используете модель с интенсивными рассуждениями для `auxiliary.session_search`, Hermes теперь предоставляет два встроенных средства управления:-`auxiliary.session_search.max_concurrency`:ограничивает количество одновременно расширяемых совмещаемых сессий.-`auxiliary.session_search.extra_body`:передаёт специфические для провайдера поля запроса, совместимые с OpenAI, в вызовах быстрой обработки.Пример:```yamlauxiliary:session_search:provider:"main"model:"glm-4.5-air"timeout:60max_concurrency:2extra_body:enable_thinking:false
Используйте «max_concurrency», когда ваш провайдер ограничивает скорость запроса, и вы хотите, чтобы «session_search» обменивал некоторую параллельность на стабильность.
Используйте extra_body только в том случае, если ваш провайдер документирует поля запроса тела, совместимые с OpenAI, которые вы хотите, чтобы Hermes передавал для этой задачи. Гермес передаёт объект как есть.:::предупреждение
extra_body эффективен только в том случае, если ваш провайдер действительно поддерживает отправляемое поле. Если провайдер не обеспечивает национальный флаг отключения рассуждений, совместимый с OpenAI, Hermes не сможет объединить его с его именем.
Маршрутизация OpenRouter и код Парето для вспомогательных задач
Когда вспомогательная задача разрешается через OpenRouter (явно или через provider: "main", когда ваш основной агент находится в OpenRouter), настройки основного агента provider_routing и openrouter.min_coding_scoreне вызывают — по задумке, какая вспомогательная задача независима. Чтобы установить параметры провайдера OpenRouter или использовать маршрутизатор Кода Парето для конкретной вспомогательной задачи, установите их для каждой задачи через extra_body:
auxiliary:compression:provider:openroutermodel:openrouter/pareto-code# использовать маршрутизатор Pareto Code для этой задачиextra_body:provider:# Предпочтения маршрутизации провайдера OpenRouterorder:[anthropic,google]# пробовать этих провайдеров по порядкуsort:throughput# или "price" | "latency"# only: [anthropic] # ограничить конкретным провайдером# ignore: [deepinfra] # исключить конкретных провайдеровplugins:# Ручка маршрутизатора Pareto Code OpenRouter-id:pareto-routermin_coding_score:0.5# 0.0–1.0; выше = более сильные кодеры
Формат соответствует тому, что OpenRouter принимает телезапросы завершения чата. Hermes передаёт весь extra_body дословно, поэтому любые другие поля запроса тела OpenRouter, документированные на openrouter.ai/docs, работают так же.
Изменение модели
Чтобы использовать GPT-4o вместо Gemini Flash для анализа изображений:
auxiliary:vision:model:"openai/gpt-4o"
Или через переменное окружение (в ~/.hermes/.env):
AUXILIARY_VISION_MODEL=openai/gpt-4o
Варианты провайдеров
Эти варианты применяются к конфигам вспомогательных задач (auxiliary:, compression:,fallback_model:), а не к вашему основному model.provider.
Провайдер
Описание
Требования
"авто"
Лучший доступный (по умолчанию). Зрение пробует OpenRouter → Nous → Codex.
—
"openrouter"
Принудительно OpenRouter — маршрутизирует к любым моделям (Gemini, GPT-4o, Claude и т.д.)
OPENROUTER_API_KEY
"нус"
Принудительно наш портал
гермес авт
"кодекс"
Принудительно Codex OAuth (учётная запись ChatGPT). Поддерживает зрение (код gpt-5.3).
модель Гермеса → Кодекс
"minimax-oauth"
Принудительно MiniMax OAuth (вход в браузер, без включения API). Использует MiniMax-M2.7-highspeed для вспомогательных задач.
модель Гермеса → MiniMax (OAuth)
"главный"
Используйте вашу активную пользовательскую/основную конечную точку. Это может быть из OPENAI_BASE_URL + OPENAI_API_KEY или из пользовательской конечной точки, сохранённой через hermes model / config.yaml. Работает с OpenAI, локальными моделями или любым API, совместимым с OpenAI. Только для вспомогательных задач — недопустимо для model.provider.
Учётные данные пользовательского конечного пункта + базовый URL
Провайдеры с рекомендациями ключей API из основного каталога провайдеров также работают здесь, когда вы хотите, чтобы сложная задача обходила ваш маршрутизатор по умолчанию. gmi действителен после настройки GMI_API_KEY:
base_url имеет приоритет над provider, поэтому это наиболее удобный способ редактировать вспомогательную функцию на конкретной конечной точке. Для прямого переопределения конечной точки Hermes использует настроенный api_key или запасной вариант OPENAI_API_KEY; он не использует повторно OPENROUTER_API_KEY для конечной точки этого пользователя.
Использование переключателя API OpenAI для задач:
# В ~/.hermes/.env:# OPENAI_BASE_URL=https://api.openai.com/v1# OPENAI_API_KEY=sk-...auxiliary:vision:provider:"main"model:"gpt-4o"# или "gpt-4o-mini" для дешевле
Использование OpenRouter для зрения (маршрутизация к любой модели):
auxiliary:vision:provider:"openrouter"model:"openai/gpt-4o"# или "google/gemini-2.5-flash" и т.д.
Использование Codex OAuth (учётная запись ChatGPT Pro/Plus — ключ API не требуется):
auxiliary:vision:provider:"codex"# использует ваш токен OAuth ChatGPT# модель по умолчанию gpt-5.3-codex (поддерживает зрение)
Использование MiniMax OAuth (вход в браузер, ключ API не требуется):
Запустите «модель Гермеса» и выберите MiniMax (OAuth), чтобы войти и установить ее автоматически. Для региона Китай базовый URL-адрес будет https://api.minimaxi.com/anthropic. См. руководство по MiniMax OAuth для полного прохождения.
Использование локальной/самостоятельно размещённой модели:
auxiliary:vision:provider:"main"# использует ваш активный пользовательский endpointmodel:"my-local-model"
provider: "main" использует тот же провайдер, который Hermes использует для обычного чата — будь то именованный пользовательский провайдер (например, beans), встроенный провайдер, такой как openrouter, или конфиденциальная конечная точка OPENAI_BASE_URL.:::совет
Если вы используете Codex OAuth в качестве базовой модели провайдера, зрение работает автоматически — дополнительная настройка не требуется. Кодекс включен в цепочку автоопределения для чтения.::::::предупреждение
Зрение требует мультимодальной модели. Если вы установите provider: "main", убедитесь, что ваша конечная точка поддерживает мультимодальность/зрение — иначе анализ изображений завершится ошибкой.
Переменные окружения (устаревшие)
Вспомогательные модели также можно настраивать через переменное окружение. Однако config.yaml является простым методом — его проще поддерживать, и он поддерживает все опции, включая base_url и api_key.
Настройка
Переменная окружения
Провайдер вопросов
AUXILIARY_VISION_PROVIDER
Модель зрения
AUXILIARY_VISION_MODEL
Конечная точка зрения
AUXILIARY_VISION_BASE_URL
Ключ API-запроса
AUXILIARY_VISION_API_KEY
Провайдер извлечения веб-страницы
AUXILIARY_WEB_EXTRACT_PROVIDER
Модель открытия веб-страницы
AUXILIARY_WEB_EXTRACT_MODEL
Конечная точка доступа веб-страницы
AUXILIARY_WEB_EXTRACT_BASE_URL
Ключ API извлечения веб-страницы
AUXILIARY_WEB_EXTRACT_API_KEY
Настройки сжатия и запасной модели — только в config.yaml.:::совет
Запустите hermes config, чтобы просмотреть настройки вспомогательных моделей. Переопределения приводятся только в том случае, если они соответствуют измерениям по умолчанию.
Усилия рассуждений
Управляйте тем, сколько «размышлений» делает модель перед ответом:
Если не установлен (по умолчанию), уровень усилия рассуждений по умолчанию — «средний» — сбалансированный уровень, который хорошо работает для большинства задач. Установка значений переопределяет его — более высокие усилия рассуждений дают лучшие результаты на сложных задачах, ценой большего количества токенов и задержки.
Вы также можете изменить уровень усилий рассуждений во время выполнения с помощью команды /reasoning:
Некоторые модели иногда проверяют предполагаемые действия в тексте вместо вызова инструментов («Я бы запустил тесты...» вместо фактического вызова терминала). Принуждение к использованию инструментов включает в себя указания в системной подсказке, направляющие модель обратно к фактическому вызову инструментов.
Включено для моделей, соответствующих: gpt, codex, Gemini, Gemma, Grok. Отключено для всех остальных (Claude, DeepSeek, Qwen и т.д.).
правда
Всегда включено, независимо от модели. Полезно, если вы заметили, что ваша текущая модель описывает действия вместо их выполнения.
ложь
Всегда отключен, независимо от модели.
["gpt", "кодекс", "qwen", "лама"]
Включено, только если имя модели содержит одну из указанных подстрок (зависимо от регистрации).
Что внедряется
При включении в системный запрос могут быть добавлены три указанных уровня:
Общее принуждение к использованию инструментов (все соответствующие модели).
Дисциплина выполнения OpenAI (только модели GPT и Codex) — дополнительные требования для ограничения типовых сбоев GPT: продолжение работы причастных функций, пропуск предварительных поисков, галлюцинация вместо использования инструментов и объявление «готово» без проверок.
Операционные рекомендации Google (только модели Gemini и Gemma) — краткость, абсолютные пути, параллельные вызовы инструментов и шаблоны «проверь перед редактированием».
Они прозрачны для пользователя и действуют только на системную подсказку. Модели, которые уже надежно используют инструменты (например, Claude), не требуют соблюдения данных указаний, поэтому «автоматически» их фиксирует.
Когда это включится
Если вы используете модель, не входящую в список auto по умолчанию, и замечаете, что она часто описывает, что сделалось, вместо того, чтобы это делать, установите tool_use_enforcement: true или разделите подстроку модели в списке:
tts:provider:"edge"# "edge" | "elevenlabs" | "openai" | "minimax" | "mistral" | "gemini" | "xai" | "neutts"speed:1.0# Глобальный множитель скорости (запасной вариант для всех провайдеров)edge:voice:"en-US-AriaNeural"# 322 голоса, 74 языкаspeed:1.0# Множитель скорости (преобразуется в процент ставки, например, 1.5 → +50%)elevenlabs:voice_id:"pNInz6obpgDQGcFmaJgB"model_id:"eleven_multilingual_v2"openai:model:"gpt-4o-mini-tts"voice:"alloy"# alloy, echo, fable, onyx, nova, shimmerspeed:1.0# Множитель скорости (ограничен 0.25–4.0 API)base_url:"https://api.openai.com/v1"# Переопределение для конечных точек TTS, совместимых с OpenAIminimax:speed:1.0# Множитель скорости речи# base_url: "" # Опционально: переопределение для конечных точек TTS, совместимых с OpenAImistral:model:"voxtral-mini-tts-2603"voice_id:"c69964a6-ab8b-4f8a-9465-ec0925096ec8"# Paul - Neutral (по умолчанию)gemini:model:"gemini-2.5-flash-preview-tts"# или gemini-2.5-pro-preview-ttsvoice:"Kore"# 30 предустановленных голосов: Zephyr, Puck, Kore, Enceladus и т.д.xai:voice_id:"eve"# Голос TTS xAIlanguage:"en"# ISO 639-1sample_rate:24000bit_rate:128000# Битрейт MP3# base_url: "https://api.x.ai/v1"neutts:ref_audio:''ref_text:''model:neuphonic/neutts-air-q4-ggufdevice:cpu
Этот механизм использует text_to_speech, а также голосовые ответы в режиме голосования (/voice tts в CLI или шлюзе сообщений).
Иерархия запасных вариантов скорости: скорость для указания провайдера (например, tts.edge.speed) → глобальная tts.speed → значение по умолчанию 1.0. Установите глобальный tts.speed, чтобы применить единую скорость для всех провайдеров, или переопределите для каждого провайдера для точного контроля.
Настройки отображения
display:tool_progress:all# off | new | all | verbosetool_progress_command:false# Включить слэш-команду /verbose в шлюзе сообщенийplatforms:{}# Переопределения отображения для каждой платформы (см. ниже)tool_progress_overrides:{}# УСТАРЕЛО — используйте display.platformsinterim_assistant_messages:true# Шлюз: отправлять естественные промежуточные обновления ассистента как отдельные сообщенияskin:default# Встроенный или пользовательский скин CLI (см. user-guide/features/skins)personality:"kawaii"# Устаревшее косметическое поле, всё ещё отображается в некоторых сводкахcompact:false# Компактный режим вывода (меньше пробелов)resume_display:full# full (показывать предыдущие сообщения при возобновлении) | minimal (только одна строка)bell_on_complete:false# Воспроизводить звуковой сигнал терминала, когда агент заканчивает (отлично для длинных задач)show_reasoning:false# Показывать размышления/мышление модели над каждым ответом (переключение с /reasoning show|hide)streaming:false# Потоковая передача токенов в терминал по мере поступления (вывод в реальном времени)show_cost:false# Показывать примерную стоимость в долларах в строке состояния CLItool_preview_length:0# Макс. символов для предпросмотра вызовов инструментов (0 = без ограничения, показывать полные пути/команды)runtime_footer:# Шлюз: добавлять нижний колонтитул с контекстом выполнения к окончательным ответамenabled:falsefields:["model","context_pct","cwd"]file_mutation_verifier:true# Добавлять информационный нижний колонтитул, когда вызовы write_file/patch не удались на этом шагеlanguage:en# Язык интерфейса для статических сообщений (запросы на утверждение, некоторые ответы шлюза). en | zh | ja | de | es | fr | tr | uk
Проверка неисправности файлов
Когда display.file_mutation_verifier имеет значение true (по умолчанию), Hermes добавляет однострочное предупреждение к конечному ответу ассистента в любой момент, когда вызов write_file или patch не был выполнен на этом этапе и не был заменен успешной записью на том же самом пути. Это позволяет отслеживать классификацию ситуации, когда «пакет параллельных исправлений, половина молчания не удалась, модель сообщает об успехе», без необходимости вручную запускать «git status» после каждого редактирования.
Установите file_mutation_verifier: false (или HERMES_FILE_MUTATION_VERIFIER=0), чтобы отключить нижний колонтитул. Проверка осуществляется только при наличии одного сбоев на момент выполнения шага — модели, которая повторяет неудачное исправление и добивается успеха в течение того же шага, не вызывайте его для этого файла.
Язык интерфейса для статических сообщений
Настройка display.language передает небольшой набор статических сообщений, видимых пользователю: запрос на утверждение в CLI, несколько ответов на слэш-команды шлюза (например, уведомления о дренажном перезапуске, «срок действия утверждения истёк», «цель очистки»). Она не переводит ответы агента, записи журналов, инструменты вывода, отслеживание ошибок или описание слэш-команды — они переведены на английский язык. Если вы хотите, чтобы агент сам проверил разговор с другим человеком, просто сообщите ему об этом в своем подсказке или на системном адресе.
Поддерживаемые значения: en (по умолчанию), zh (упрощённый китайский), ja (японский), de (немецкий), es (испанский), fr (французский), tr (турецкий), uk (украинский). Неизвестные значения возвращаются на английский язык.
Вы также можете установить его для каждой сессии с помощью переменного окружения HERMES_LANGUAGE, которое переопределяет значение конфига.
display:language:zh# Запросы на утверждение в CLI отображаются на китайском
Режим
Что вы видите
выключено
Без индикаторов — только окончательный ответ
новый
Индикаторный инструмент только при смене инструмента
все
Каждый вызов инструмента с кратким предпросмотром (по умолчанию)
многословный
Полные аргументы, результаты и отладочные журналы
В CLI переключайтесь между мертвыми режимами с помощью /verbose. Чтобы использовать /verbose на платформах обмена сообщениями (Telegram, Discord, Slack и т.д.), установите tool_progress_command: true в разделе display выше. Команда будет переключать режим и сохранять его в конфиг.
Нижний колонтитул с метаданными выполнениями (только для шлюза)
Когда display.runtime_footer.enabled: true, Hermes добавляет небольшой нижний колонтитул с выполнением контекста к финальному сообщению каждого шага шлюза — та же самая информация, которую CLI показывает в своей строке состояния (модель, % контекста, рабочий каталог, продолжительность сессии, токены, стоимость). По умолчанию отключено; Включите каждый шлюз, если ваша команда хочет, чтобы каждый ответ включал информацию о происшествии.
Слэш-команда /footer переключает это во время выполнения в любой сессии.
Пример нижнего колонтитула, добавленного к ответу Telegram/Discord/Slack:
— claude-opus-4.7 · 12 вызовов инструментов · 2 м 14 с · $0.042
Только финальное сообщение шаг получает нижний колонтитул; промежуточные обновления остаются чистыми.
Переопределение прогресса для каждой платформы
Разные платформы имеют разные устройства для детализации. Например, Signal не может оставить сообщение, поэтому каждое обновление прогресса становится громким. Используйте display.platforms, чтобы установить режимы для каждой платформы:
display:tool_progress:all# глобальное значение по умолчаниюplatforms:signal:tool_progress:'off'# без прогресса в Signaltelegram:tool_progress:verbose# детальный прогресс в Telegramslack:tool_progress:'off'# тихо в общем рабочем пространстве Slack
Платформы без переопределения возвращаются к глобальному состоянию tool_progress. Допустимые ключи платформ: Telegram, Discord, Slack, Signal, Whatsapp, Matrix, Mattermost, электронная почта, SMS, Homeassistant, dingtalk, Feishu, Wecom, Weixin, Bluebubbles, qqbot. Устаревший ключ display.tool_progress_overrides всё ещё загружается для обратной версии, но устарел и при первой возможности мигрируется в display.platforms.
interim_assistant_messages работает только в шлюзе. При включении Hermes отправляет завершённые промежуточные обновления ассистента в качестве приложения чата. Это не зависит от tool_progress и не требует шлюза потоковой передачи.
Конфиденциальность
privacy:redact_pii:false# Удалять PII из контекста LLM (только для шлюза)
Когда redact_pii равно true, получите удаленную личную информацию из системного приглашения отправителя передать его LLM на поддерживаемых платформах:
Поле
Обработка
Номера телефонов (ID пользователя в WhatsApp/Signal)
Хэшируется до user_<12-char-sha256>
идентификатор пользователя
Хэшируется до user_<12-char-sha256>
ID чатов
Числовая часть хэшируется, префикс платформы сохраняется (telegram:<hash>)
ID домашних животных
Следующая часть хэшируется
Имена пользователей / логины
Не затрагиваются (выбраны пользователем, публично видны)
Поддержка платформы: Редактирование распространяется на WhatsApp, Signal и Telegram. Discord и Slack исключены, поскольку их системы ссылок (<@user_id>) требуют достаточного идентификатора в несколько LLM.
Хэши определено — один и тот же пользователь всегда отображаются на одном и том же хэше, поэтому модель может по-прежнему видеть пользователей в групповых чатах. Маршрутизация и доставка внутренних ресурсов исходного значения.
— «local» использует «faster-whisper», работая на вашем компьютере. Установите его отдельно с помощью pip install fast-whisper.
- groq использует соединение с конечной точкой Whisper Groq и читает GROQ_API_KEY.
- openai использует API речи OpenAI и читает VOICE_TOOLS_OPENAI_KEY.
Если запрошенный провайдер недоступен, Hermes автоматически переключается в следующем порядке: «local» → «groq» → «openai».
Переопределение моделей Groq и OpenAI осуществляется через окружение:
voice:record_key:"ctrl+b"# Клавиша push-to-talk в CLImax_recording_seconds:120# Жёсткая остановка для длинных записейauto_tts:false# Включать голосовые ответы автоматически при /voice onbeep_enabled:true# Воспроизводить звуковые сигналы начала/остановки записи в голосовом режиме CLIsilence_threshold:200# Порог RMS для обнаружения речиsilence_duration:3.0# Секунд тишины перед автостопом
Используйте /voice on в CLI для включения включения микрофона, record_key для начала/остановки записи и /voice tts для переключения голосовых ответов. См. Голосовой режим для полной настройки и поведения на разных платформах.
Потоковая передача
Потоковая передача токенов в терминал или на платформу для обмена сообщениями по мере их поступления, вместо ожидания полного ответа.
Потоковая передача в CLI
display:streaming:true# Потоковая передача токенов в терминал в реальном времениshow_reasoning:true# Также потоковая передача токенов рассуждений/мышления (опционально)
При включении ответов научный токен за токен внутри потокового блока. Вызовы инструменты по-прежнему фиксируются молча. Если провайдер не поддерживает потоковую передачу, автоматически возвращается к обычному подключению.
Потоковая связь в шлюзе (Telegram, Discord, Slack)
streaming:enabled:true# Включить прогрессивное редактирование сообщенийtransport:edit# "edit" (прогрессивное редактирование сообщений) или "off"edit_interval:0.3# Секунд между редактированиями сообщенийbuffer_threshold:40# Символов перед принудительным сбросом редактированияcursor:"▉"# Курсор, отображаемый во время потоковой передачиfresh_final_after_seconds:60# Отправить свежее финальное сообщение (Telegram), когда предпросмотр такой старый; 0 = всегда редактировать на месте
При включении бот отправляет сообщение при первом токене, а затем постепенно редактирует его по мере поступления новых токенов. Платформы, которые не редактируют сообщения (Signal, Email, Home Assistant), обнаруживаются автоматически при запуске — первая потоковая передача корректно отключается для этой сессии без потока сообщений.
Для последнего создания промежуточных обновлений ассистента без прогрессивного редактирования токенов установите display.interim_assistant_messages: true.
Обработка ограничения: Если потоковый текст ограничивает длину сообщений платформы (~4096 символов), текущее сообщение завершается и автоматически начинается новое.
Свежее финальное сообщение (Telegram):editMessageText в Telegram сохраняет исходную временную метку сообщения, поэтому длинный поток ответа сохраняет временную метку первого токена даже после завершения. Когда fresh_final_after_секунды > 0 (по умолчанию 60), завершённый ответ доставляется как совершенно новое сообщение (с конфиденциальным предпросмотром, удаленным по возможности), чтобы видимая временная метка Telegram отображала время завершения. Короткие предпросмотры по-прежнему завершаются на месте. Установите 0, чтобы всегда оставаться на месте.:::примечание
Потоковая передача по умолчанию отключена. Включите ее в ~/.hermes/config.yaml, чтобы попробовать потоковую передачу UX.
Изоляция сессий группового чата
Управляйте темой, сохраняя общие чаты как один разговор в комнате или один разговор с участниками:
group_sessions_per_user:true# true = изоляция по пользователю в группах/каналах, false = одна общая сессия на чат
правда — значение по умолчанию и рекомендуется. В каналах Discord, группах Telegram, каналах Slack и аналогичных контекстах контекстов каждый отправитель получает свою собственную сессию, если платформа предоставляет идентификатор пользователя.
false возвращается к старому поведению комнаты. Это может быть полезно, если вы явно хотите, чтобы Гермес рассматривал канал как один совместный разговор, но это также означает, что пользователи делят контекст, затраты на токены и состояние прерывания.
Личные сообщения не затрагиваются. Hermes по-прежнему индексирует личные сообщения по идентификатору чата/диалога, как обычно.
Ветки остаются изолированными от родительского канала в любом случае; с true каждый участник также получает свою собственную сессию внутри ветки.
Разделы платформ переопределяют глобальное значение по умолчанию, поэтому вы можете оставить соединение включенным в целом, действуя на платформе более тихо.
Быстрые команды
Определите пользовательские команды, которые либо выполняют команды без вызова LLM, либо создают псевдоним одной слэш-команды для другого. Быстрые команды exec не потребляют токены и не полезны на платформах обмена сообщениями (Telegram, Discord и т.д.) для быстрых просмотров сервера или служебных скриптов.
Использование: введите /status, /disk, /update, /gpu или /restart в CLI или на любой платформе обмена сообщениями. Команды exec выполняются локально на хосте и возвращают вывод напрямую — без вызова LLM, без потребления токенов. Команды «псевдоним» превращаются в настроенную цель слэш-команды.
Тайм-аут 30 секунд — длительные команды завершаются с сообщением об Нуждах.
Приоритет — быстрая проверка команд перед командами функций, поэтому вы можете переопределять имена функций.
Автозаполнение — команды быстро разрешаются во время отправки и не указываются во встроенных таблицах автодополнения слэш-командой.
Тип — применяются типы exec и alias; другие виды проявляют ошибку
Работает везде — CLI, Telegram, Discord, Slack, WhatsApp, Signal, электронная почта, Home Assistant
Ярлыки только для строковых подсказок не допускаются быстрыми командами. Для повторного рассмотрения рабочих процессов с подсказками создайте навыки или псевдонимы для соответствующих слэш-команд.
Человеческая задержка
Имитация темпа ответа, подобного человеческому, на платформах обмена сообщениями:
code_execution:mode:project# project (по умолчанию) | stricttimeout:300# Максимальное время выполнения в секундахmax_tool_calls:50# Максимум вызовов инструментов в рамках выполнения кода
mode включает дополнительный каталог и интерпретатор Python для скриптов:
project (по умолчанию) — скрипты выполняются в рабочем каталоге сессии с Python active virtualenv/conda env. Зависимость проекта (pandas, torch, пакеты проекта) и относительные пути (.env, ./data.csv) разрешаются соответствующим образом, соответствуя тому, что видит terminal().
strict — скрипты выполняются во временном промежуточном каталоге с sys.executable (собственный Python Hermes). Максимальная воспроизводимость, но в зависимости от проекта и соответствующие пути не будут разрешены.
Очистка окружения (удаляет *_API_KEY, *_TOKEN, *_SECRET, *_PASSWORD, *_CREDENTIAL, *_PASSWD, *_AUTH) и белый список инструментов, применяемых подобным образом в нижних режимах — смена режима не меняет уровень безопасности.
Бэкенды веб-поиска
Инструменты web_search, web_extract и web_crawl используют пять бэкендов-провайдеров. Настраиваем бэкенд в config.yaml или черезhermestools:
web:backend:firecrawl# firecrawl | searxng | parallel | tavily | exa# Или используйте ключи для каждой возможности, чтобы смешивать провайдеров (например, бесплатный поиск + платное извлечение):search_backend:"searxng"extract_backend:"firecrawl"
Бекенд
Переменная окружения
Поиск
Извлечение
Обход
Пожар (по умолчанию)
FIRECRAWL_API_KEY
✔
✔
✔
ИскатьXNG
SEARXNG_URL
✔
—
—
Параллельно
PARALLEL_API_KEY
✔
✔
—
Тавили
TAVILY_API_KEY
✔
✔
✔
Экса
EXA_API_KEY
✔
✔
—
Выбор бэкенда: Если web.backend не задан, бэкенд определяется автоматически из доступных ключей API. Если задано только SEARXNG_URL, используется SearXNG. Если задано только EXA_API_KEY, используется Exa. Если задано только TAVILY_API_KEY, используется Tavily. Если задано только PARALLEL_API_KEY, используется Parallel. В противном случае по умолчанию используется FireCrawl.
SearXNG — это бесплатная, самостоятельно размещаемая, уважающая конфиденциальность метапоисковая система, которая выполняет запросы к более чем 70 поисковым системам. Ключ API не требуется — просто установите SEARXNG_URL на вашем экземпляре (например, http://localhost:8080). SearXNG — только для поиска; web_extract и web_crawl требуют отдельного провайдера извлечения (установите web.extract_backend). См. руководство по настройке веб-поиска для получения инструкций по настройке Docker.
Самостоятельно размещённый Firecrawl: Установите FIRECRAWL_API_URL, чтобы указать на ваш экземпляр. Если задан пользовательский URL-адрес, ключ API становится опциональным (установите USE_DB_AUTHENTICATION=*** на сервере, чтобы отключить аутентификацию).
Режимы поиска Параллельный: Установите PARALLEL_SEARCH_MODE, чтобы управлять поведением определения — быстрый, одноразовый или агент (по умолчанию: агент).
Exa: Установите EXA_API_KEY в ~/.hermes/.env. Поддерживает фильтрацию по «категории» («компания», «научная работа», «новости», «люди», «личный сайт», «pdf») и фильтры по домену/дате.
Браузер
Для настройки поведения автоматизации браузера:
browser:inactivity_timeout:120# Секунд до автоматического закрытия бездействующих сессийcommand_timeout:30# Тайм-аут в секундах для команд браузера (скриншот, навигация и т.д.)record_sessions:false# Автоматически записывать сессии браузера как WebM-видео в ~/.hermes/browser_recordings/# Опциональное переопределение CDP — при установке Hermes подключается напрямую к вашему# собственному Chrome (через /browser connect) вместо запуска безголового браузера.cdp_url:""# Супервизор диалогов — управляет обработкой нативных JS-диалогов (alert / confirm / prompt)# при подключённом бэкенде CDP (Browserbase, локальный Chrome через# /browser connect). Игнорируется в Camofox и в режиме агентского браузера по умолчанию.dialog_policy:must_respond# must_respond | auto_dismiss | auto_acceptdialog_timeout_s:300# Автоматическое отклонение для безопасности при must_respond (секунды)camofox:managed_persistence:false# Если true, сессии Camofox сохраняют куки/логины между перезапускамиuser_id:""# Опциональный внешне управляемый userId Camofoxsession_key:""# Опциональный ключ сессии, отправляемый при создании вкладки Hermesadopt_existing_tab:false# Повторно использовать существующую вкладку для этой идентичности перед созданием новой
Политика диалогов:
must_respond (по умолчанию) — захватить диалог, отобразить его в browser_snapshot.pending_dialogs и подождать, пока агент вызовет browser_dialog(action=...). После dialog_timeout_s секунд без ответа диалог автоматически отклоняется, чтобы поток JS-страницы не зависал навсегда.
auto_dismiss — захватить, мгновенно отклонить. Агент всё ещё видит запись диалога в browser_snapshot.recent_dialogs с closed_by="auto_policy" после факта.
auto_accept — захватить, немедленно принять. Полезно для страниц с агрессивными промптами beforeunload.
Набор инструментов браузера поддерживает несколько провайдеров. См. Функция браузера страницы для получения подробной информации о настройке базы браузера, использования браузера и локального Chrome CDP.
Часовой пояс
Переопределите часовой пояс сервера, часовой пояс IANA. Влияет на временные метки в журналах, планирование cron и внедрение времени в системную подсказку.
timezone:"America/New_York"# Часовой пояс IANA (по умолчанию: "" = местное время сервера)
Поддерживаемые значения: любой идентификатор часового пояса IANA (например, America/New_York, Europe/London, Asia/Kolkata, UTC). Оставьте пустым или пропустите сервер местного времени.
Дискорд
Для настройки поведения, специфичного для Discord, в шлюзе сообщений:
discord:require_mention:true# Требовать @упоминание для ответа в серверных каналахfree_response_channels:""# ID каналов, разделённые запятыми, где бот отвечает без @упоминанияauto_thread:true# Автоматически создавать ветки при @упоминании в каналах
require_mention — когда true (по умолчанию), бот отвечает на серверных каналах только при упоминании с @BotName. Личные сообщения всегда работают без упоминаний.
free_response_channels — идентификатор списка каналов, разделенных запятыми, где бот отвечает на каждое сообщение без необходимости упоминания.
auto_thread — когда true (по умолчанию), ссылки в каналах автоматически запускают ветку для разговора, поддерживаются каналы в чистоте (аналогично Slack threading).
Безопасность
Сканирование безопасности перед выполнением и редактирование секретов:
security:redact_secrets:false# Редактировать шаблоны ключей API в выводе инструментов и журналах (по умолчанию отключено)tirith_enabled:true# Включить сканирование безопасности Tirith для команд терминалаtirith_path:"tirith"# Путь к бинарному файлу tirith (по умолчанию: "tirith" в $PATH)tirith_timeout:5# Секунд ожидания сканирования tirith до тайм-аутаtirith_fail_open:true# Разрешить выполнение команд, если tirith недоступенwebsite_blocklist:# См. раздел «Чёрный список веб-сайтов» нижеenabled:falsedomains:[]shared_files:[]
redact_secrets — когда true, автоматически обнаруживает и редактирует шаблоны, похожие на ключи API, токены и пароли, в выводах инструментов до того, как они попадают в контекст разговора и журналы. По умолчанию отключено USB — если вы часто работаете с реальными учётными данными в инструментах вывода и хотите страховочную сетку. Установите явно в true, чтобы включить.
tirith_enabled — когда true, команда терминала сканирует Tirith перед выполнением для обнаружения надежного шифрования операций.
tirith_path — путь к бинарному файлу тирит. Укажите, если тирит установлен в нестандартном месте.
tirith_timeout — максимальное количество секунд ожидания Тирита. Команды выполняют, если сканер рассчитывает тайм-аут.
tirith_fail_open — когда true (по умолчанию), командам разрешается выполняться, если тирит недоступен или даёт сбой. Установите значение «false», чтобы заблокировать команды, когда Тирит не может их проверить.
Чёрный список веб-сайтов
Заблокируйте доступ к определенным доменам с помощью веб-доступа и агента браузера:
security:website_blocklist:enabled:false# Включить блокировку URL (по умолчанию: false)domains:# Список шаблонов заблокированных доменов-"*.internal.company.com"-"admin.example.com"-"*.local"shared_files:# Загрузить дополнительные правила из внешних файлов-"/etc/hermes/blocked-sites.txt"
При включении любого URL-адреса, встроенного в шаблон заблокированного домена, отклоняется до выполнения инструмента веб-доступа или браузера. Это применимо к web_search, web_extract, browser_navigate и любому инструменту, который обращается к URL-адресу.
Правила обращения доменов:
- Точные домены: admin.example.com
- Поддомены с подстановочными знаками: *.internal.company.com (блокирует все поддомены)
- Подстановочные знаки TLD: *.local
Общие файлы содержат одно правило домена в строке (пустые строки и комментарии # добавляются). Отсутствующие или нечитаемые файлы регистрируют предупреждения, но не отключают другие веб-инструменты.
Политика кэширования составляет 30 секунд, поэтому изменения в схеме выполняются быстро, без перезапуска.
Умные заявления
Управляйте тем, как Гермес обрабатывает опасные команды:
approvals:mode:manual# manual | smart | off
Режим
Поведение
ручной (по умолчанию)
Запросить пользователя перед выполнением любой помеченной команды. В CLI отображается интерактивное диалоговое окно. В сообщениях появляется очередь ожидающего запроса на утверждение.
умный
Использовать вспомогательную LLM для оценки того, что помеченная команда действительно опасна. Команды снижают риск автоматически проверяются постоянство на уровне сессии. Действительно рискованные команды передаются пользователю.
выключено
Пропустить все условия проверки. Эквивалентно HERMES_YOLO_MODE=true. Используйте с осторожностью.
Умный режим особенно применяется на этапе утомления от утверждений — он позволяет агенту работать более автономно над безопасными операциями, всё ещё перехватывая действительно разрушительные команды.:::предупреждение
Установка approvals.mode: off отключает все проверки безопасности для командного терминала. Используйте его только в проверенных, изолированных средах.
Контрольные точки
Автоматические файлы файловой системы перед разрушительными файлами операциями. См. Контрольные точки и откат для получения подробной информации.
checkpoints:enabled:false# Включить автоматические контрольные точки (также: hermes chat --checkpoints). По умолчанию: false (подписка).max_snapshots:20# Максимум контрольных точек для хранения на каталог (по умолчанию: 20)
Делегирование
Настроить поведение подагентов для инструмента делегирования:
delegation:# model: "google/gemini-3-flash-preview" # Переопределить модель (пусто = наследовать от родителя)# provider: "openrouter" # Переопределить провайдера (пусто = наследовать от родителя)# base_url: "http://localhost:1234/v1" # Прямая конечная точка, совместимая с OpenAI (имеет приоритет над provider)# api_key: "local-key" # Ключ API для base_url (запасной вариант — OPENAI_API_KEY)max_concurrent_children:3# Параллельных потомков на пакет (минимум 1, без потолка). Также через переменную окружения DELEGATION_MAX_CONCURRENT_CHILDREN.max_spawn_depth:1# Глубина дерева делегирования (1-3, ограничивается). 1 = плоское (по умолчанию): родитель порождает листья, которые не могут делегировать. 2 = дочерние оркестраторы могут порождать внуков-листьев. 3 = три уровня.orchestrator_enabled:true# Глобальный выключатель. Если false, роль="orchestrator" игнорируется, и каждый потомок принудительно становится листом независимо от max_spawn_depth.
Переопределение провайдера/модели подагента: По умолчанию подагенты наследуют провайдера и модель родительского агента. Установите delegation.provider и delegation.model, чтобы направлять подагентов на другую пару провайдер:модель — например, используйте дешёвую/быструю модель для узконаправленных подзадач, пока ваш основной агент работает на дорогих моделях рассуждений.
Прямое переопределение конечной точки: Если вам нужен очевидный путь пользовательской конечной точки, установите delegation.base_url, delegation.api_key и delegation.model. Он направляет подагентов непосредственно в эту конечную точку, совместимую с OpenAI, и имеет приоритет над delegation.provider. Если delegation.api_key опущен, Hermes возвращается только к OPENAI_API_KEY.
Провайдер делегирования использует то же разрешение учётных данных, что и запуск CLI/шлюза. Поддерживаются все настроенные провайдеры: openrouter, nous, copilot, zai, kimi-coding, minimax, minimax-cn. При выборе провайдера система автоматически разрешает правильный базовый URL, API ключа и API режима — ручное подключение учётных данных не требуется.
Приоритет:delegation.base_url в конфиге → delegation.provider в конфиге → родительский провайдер (унаследован). delegation.model в конфиге → родительская модель (унаследована). Установка только model без provider изменяет только имя модели, сохраняя учётные данные родителя (полезно для переключения моделей в рамках одного провайдера, например OpenRouter).
Ширина и глубина:max_concurrent_children ограничивает количество подагентов, пропорциональное пакету (по умолчанию 3, минимум 1, без потолка). Также может быть установлено через переменное окружение DELEGATION_MAX_CONCURRENT_CHILDREN. Когда модель отправляет массив tasks длиннее лимита, delegate_task возвращает инструмент ошибки, объясняющий лимит, и не усекает молча. max_spawn_length управляет делегированием дерева (ограничено 1-3). По умолчанию 1 делегирование происходит по-английски: потомки не могут иметь наследников, и передача role="orchestrator" молча понижается до leaf. Увеличьте значение до «2», чтобы дочерние оркестраторы могли иметь наследие внуков-листьев; 3 для трехуровневых деревьев. Агент выбирает оркестровку при каждом вызове через role="orchestrator"; orchestrator_enabled: false ресурсы делает каждый потомка листом независимо. Затраты масштабируются мультипликативно — при max_spawn_length: 3 и max_concurrent_children: 3 дерево может осуществлять 3×3×3 = 27 параллельных агентов-листьев. См. Делегирование подагентов → Лимит мощности и вложенная оркестровка для примера использования.
Уточнение
Настроить поведение запроса на уточнение:
clarify:timeout:120# Секунд ожидания ответа пользователя на уточнение}## Контекстные файлы (SOUL.md, AGENTS.md)Hermes использует две разные области контекста:| Файл | Назначение | Область ||------|---------|-------|| `SOUL.md` | **Основная идентичность агента** — определяет, кем является агент (слот №1 в системном промпте) | `~/.hermes/SOUL.md` или `$HERMES_HOME/SOUL.md` || `.hermes.md` / `HERMES.md` | Инструкции, специфичные для проекта (наивысший приоритет) | Идёт к корню git || `AGENTS.md` | Инструкции, специфичные для проекта, соглашения по коду | Рекурсивный обход каталогов || `CLAUDE.md` | Контекстные файлы Claude Code (также обнаруживаются) | Только рабочий каталог || `.cursorrules` | Правила Cursor IDE (также обнаруживаются) | Только рабочий каталог || `.cursor/rules/*.mdc` | Файлы правил Cursor (также обнаруживаются) | Только рабочий каталог |-**SOUL.md** — это основная идентичность агента. Он занимает слот №1 в системном промпте, полностью заменяя встроенную идентичность по умолчанию. Отредактируйте его, чтобы полностью настроить, кем является агент.-Если SOUL.md отсутствует, пуст или не может быть загружен, Hermes возвращается к встроенной идентичности по умолчанию.-**Файлы контекста проекта используют систему приоритетов** — загружается только ОДИН тип (первое совпадение побеждает):`.hermes.md` → `AGENTS.md` → `CLAUDE.md` → `.cursorrules`. SOUL.md всегда загружается независимо.-**AGENTS.md** иерархичен:если подкаталоги также имеют AGENTS.md, все они объединяются.-Hermes автоматически создаёт `SOUL.md` по умолчанию, если его ещё не существует.-Все загруженные контекстные файлы ограничены 20 000 символов с интеллектуальным усечением.См. также:-[Личность и SOUL.md](/docs/user-guide/features/personality)-[Контекстные файлы](/docs/user-guide/features/context-files)## Рабочий каталог| Контекст | По умолчанию ||---------|---------|| **CLI (`hermes`)** | Текущий каталог, где вы запускаете команду || **Шлюз сообщений** | Домашний каталог `~` (переопределяется с `MESSAGING_CWD`) || **Docker / Singularity / Modal / SSH** | Домашний каталог пользователя внутри контейнера или удалённой машины |Переопределение рабочего каталога:```bash# В ~/.hermes/.env или ~/.hermes/config.yaml:MESSAGING_CWD=/home/myuser/projects# Сессии шлюзаTERMINAL_CWD=/workspace# Все сессии терминала