hermesconfig# View current configuration
hermesconfigedit# Open config.yaml in your editor
hermesconfigsetKEYVAL# Set a specific value
hermesconfigcheck# Check for missing options (after updates)
hermesconfigmigrate# Interactively add missing options# Examples:
hermesconfigsetmodelanthropic/claude-opus-4
hermesconfigsetterminal.backenddocker
hermesconfigsetOPENROUTER_API_KEYsk-or-...# Saves to.env```:::совет
Команда«hermesconfigset»автоматическинаправляетзначениявнужныйфайл—ключиAPIсохраняютсяв«.env»,всеостальное—в«config.yaml».</div>
## Приоритет конфигурации
Настройкивыполняютсявследующемпорядке(сначалавысшийприоритет):
1.**АргументыCLI**—например,`hermeschat--modelanthropic/claude-sonnet-4`(переопределениедлякаждоговызова)2.**`~/.hermes/config.yaml`**—основнойфайлконфигурациидлявсехнесекретныхнастроек.
3.**`~/.hermes/.env`**—запаснойвариантдляпеременныхокружения;**требуется**длясекретов(ключиAPI,токены,пароли)4.**Встроенныенастройкипоумолчанию**—жесткозапрограммированныебезопасныенастройкипоумолчанию,когдабольшеничегонеустановлено.:::информацияПрактическоеправило
Секреты(ключи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 не расширяется.
Информацию о настройке поставщика ИИ (OpenRouter, Anthropic, Copilot, пользовательских конечных точек, автономных LLM, резервных моделей и т. д.) см. в разделе Поставщики ИИ.
Тайм-ауты поставщика
Вы можете установить providers.<id>.request_timeout_секундs для таймаута запроса на уровне всего провайдера, а также providers.<id>.models.<model>.timeout_секундs для переопределения для конкретной модели. Применяется к основному клиенту очереди на каждом транспорте (OpenAI-wire, собственный Anthropic, Anthropic-совместимый), резервной цепочке, перестраивается после ротации учетных данных и (для OpenAI-wire) kwarg таймаута для каждого запроса — поэтому настроенное значение выигрывает у устаревшей переменной env HERMES_API_TIMEOUT.
Вы также можете установить providers.<id>.stale_timeout_секундs для непотокового детектора устаревших вызовов, а также providers.<id>.models.<model>.stale_timeout_секундs для переопределения для конкретной модели. Это превосходит устаревшую переменную окружения HERMES_API_CALL_STALE_TIMEOUT.
Если эти значения не заданы, сохраняются устаревшие настройки по умолчанию (HERMES_API_TIMEOUT=1800, HERMES_API_CALL_STALE_TIMEOUT=300, родные Anthropic 900). В настоящее время не подключен к AWS Bedrock (пути SDK Bedrock_converse и AnthropicBedrock используют boto3 со своей собственной конфигурацией тайм-аута). См. пример с комментариями в cli-config.yaml.example.
Конфигурация серверной части терминала
Hermes поддерживает семь серверных частей терминала. Каждый из них определяет, где фактически выполняются команды оболочки агента — ваш локальный компьютер, контейнер Docker, удаленный сервер через SSH, модальная облачная песочница, рабочее пространство Daytona, Vercel Sandbox или контейнер Singularity/Apptainer.
terminal:backend:local# local | docker | ssh | modal | daytona | vercel_sandbox | singularitycwd:"."# Gateway/cron working directory (CLI always uses launch dir)timeout:180# Per-command timeout in secondsenv_passthrough:[]# Env var names to forward to sandboxed execution (terminal + execute_code)singularity_image:"docker://nikolaik/python-nodejs:python3.11-nodejs20"# Container image for Singularity backendmodal_image:"nikolaik/python-nodejs:python3.11-nodejs20"# Container image for Modal backenddaytona_image:"nikolaik/python-nodejs:python3.11-nodejs20"# Container image for Daytona backend
Для облачных песочниц, таких как 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Запускает команды внутри контейнера 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# Mount launch dir into /workspacedocker_run_as_host_user:false# See "Running container as host user" belowdocker_forward_env:# Env vars to forward into container-"GITHUB_TOKEN"docker_volumes:# Host directory mounts-"/home/user/projects:/workspace/projects"-"/home/user/data:/data:ro"#:ro for read-only# Resource limitscontainer_cpu:1# CPU cores (0 = unlimited)container_memory:5120# MB (0 = unlimited)container_disk:51200# MB (requires overlay2 on XFS+pquota)container_persistent:true# Persist /workspace and /root across sessions
Требования: 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 сохраняются от одного вызова инструмента к другому. Контейнер останавливается и удаляется при выключении Гермеса (или когда его забирает холостой ход).
Параллельные подагенты, порожденные через delegate_task(tasks=[...]), совместно используют этот контейнер — одновременные мутации cd, env и записи по одному и тому же пути будут конфликтовать. Если субагенту требуется изолированная песочница, он должен зарегистрировать переопределение образа для каждой задачи через 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 МБ)
Пересылка учетных данных: Переменные Env, перечисленные в docker_forward_env, сначала разрешаются из среды вашей оболочки, а затем из ~/.hermes/.env. Навыки также могут объявлять required_environment_variables, которые автоматически объединяются.
SSH-бэкэнд
Запускает команды на удаленном сервере через SSH. Использует ControlMaster для повторного использования соединения (поддержание активности в режиме ожидания в течение 5 минут). Постоянная оболочка включена по умолчанию — состояние (cwd, env vars) сохраняется при выполнении команд.
terminal:backend:sshpersistent_shell:true# Keep a long-lived bash session (default: true)
Как это работает: Подключается во время инициализации с помощью BatchMode=yes и StrictHostKeyChecking=accept-new. Постоянная оболочка поддерживает работу одного процесса bash -l на удаленном хосте, обмениваясь данными через временные файлы. Команды, которым требуются stdin_data или sudo, автоматически переходят в одноразовый режим.
Модальный бэкэнд
Запускает команды в облачной песочнице Modal. Для каждой задачи выделяется изолированная виртуальная машина с настраиваемым процессором, памятью и диском. Файловую систему можно сделать снимок/восстановить между сеансами.
terminal:backend:modalcontainer_cpu:1# CPU corescontainer_memory:5120# MB (5GB)container_disk:51200# MB (50GB)container_persistent:true# Snapshot/restore filesystem
Обязательно: либо переменные среды MODAL_TOKEN_ID + MODAL_TOKEN_SECRET, либо файл конфигурации ~/.modal.toml.
Постоянство. Если этот параметр включен, файловая система песочницы создается при очистке и восстанавливается при следующем сеансе. Снимки отслеживаются в ~/.hermes/modal_snapshots.json. При этом сохраняется состояние файловой системы, а не текущие процессы, пространство PID или фоновые задания.
Файлы учетных данных: Автоматически монтируются из ~/.hermes/ (токены OAuth и т. д.) и синхронизируются перед каждой командой.
Серверная часть Daytona
Выполняет команды в управляемой рабочей области Daytona. Поддерживает остановку/возобновление для постоянства.
terminal:backend:daytonacontainer_cpu:1# CPU corescontainer_memory:5120# MB → converted to GiBcontainer_disk:10240# MB → converted to GiB (max 10 GiB)container_persistent:true# Stop/resume instead of delete
Обязательно: переменная среды DAYTONA_API_KEY.
Постоянство. Если этот параметр включен, песочницы останавливаются (не удаляются) при очистке и возобновляются при следующем сеансе. Имена песочниц следуют шаблону hermes-{task_id}.
Ограничение по диску: Daytona устанавливает максимальный размер в 10 ГиБ. Запросы выше этого уровня ограничиваются предупреждением.
Серверная часть песочницы Vercel
Выполняет команды в облачной микроVM Vercel Sandbox. Hermes использует обычные поверхности терминала и файлового инструмента; инструментов Vercel для работы с моделями нет.
terminal:backend:vercel_sandboxvercel_runtime:node24# node24 | node22 | python3.13cwd:/vercel/sandbox# default workspace rootcontainer_persistent:true# Snapshot/restore filesystemcontainer_disk:51200# Shared default only; custom disk is unsupported
Требуется установка. Установите дополнительный SDK:
pipinstall'hermes-agent[vercel]'
Требуемая аутентификация: Настройте аутентификацию по токену доступа со всеми тремя параметрами: VERCEL_TOKEN, VERCEL_PROJECT_ID и VERCEL_TEAM_ID. Это поддерживаемая настройка для развертываний и обычных длительных процессов Hermes на Render, Railway, Docker и подобных хостах.
Для разовых местных разработок Hermes также принимает недолговечные токены Vercel OIDC:
В связанном каталоге проекта Vercel вы можете опустить имя проекта:
VERCEL_OIDC_TOKEN="$(vcprojecttoken)"hermeschat
Токены OIDC недолговечны и не должны использоваться в качестве документированного пути развертывания.
Среда выполнения:terminal.vercel_runtime поддерживает node24, node22 и python3.13. Если этот параметр не установлен, по умолчанию для Hermes используется node24.
Постоянство: Если container_persistent: true, Hermes делает снимок файловой системы песочницы во время очистки и восстанавливает более позднюю песочницу для той же задачи из этого снимка. Содержимое снимка может включать синхронизированные с Hermes учетные данные, навыки и файлы кэша, которые были скопированы в песочницу. При этом сохраняется только состояние файловой системы; он не сохраняет идентичность активной песочницы, пространство PID, состояние оболочки или запущенные фоновые процессы.
Фоновые команды:terminal(background=true) использует общий нелокальный фоновый процесс обработки Hermes. Вы можете запускать, опрашивать, ждать, просматривать журналы и завершать процессы с помощью обычного инструмента обработки, пока «песочница» жива. Hermes не обеспечивает встроенное восстановление отсоединенного процесса Vercel после очистки или перезапуска.
Размер диска. Vercel Sandbox в настоящее время не поддерживает ручку ресурса Hermes container_disk. Оставьте container_disk неустановленным или оставьте общее значение по умолчанию 51200; значения, отличные от значений по умолчанию, не позволяют выполнить диагностику и создание серверной части, а не игнорируются автоматически.
Серверная часть Singularity/Apptainer
Запускает команды в контейнере Singularity/Apptainer. Предназначен для кластеров HPC и общих компьютеров, где Docker недоступен.
terminal:backend:singularitysingularity_image:"docker://nikolaik/python-nodejs:python3.11-nodejs20"container_cpu:1# CPU corescontainer_memory:5120# MBcontainer_persistent:true# Writable overlay persists across sessions
Требования: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. Hermes регистрирует явную ошибку, если что-то отсутствует.
Модальный — требуется переменная окружения MODAL_TOKEN_ID или ~/.modal.toml. Запустите «Гермес доктор», чтобы проверить.
Daytona — требуется DAYTONA_API_KEY. Daytona SDK управляет настройкой 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# default — sync files up to 100 MB eachfile_sync_enabled:true# default — set false to skip the sync entirely
Таким образом вы восстанавливаете результаты из эфемерных облачных песочниц, которые уничтожаются после завершения сеанса, без необходимости явно указывать агенту scp или modal Volume put для каждого артефакта.
Монтирование томов Docker
При использовании бэкэнда Docker docker_volumes позволяет вам делиться каталогами хоста с контейнером. Каждая запись использует стандартный синтаксис Docker -v: host_path:container_path[:options].
Это полезно для:
- Предоставление файлов агенту (наборы данных, конфигурации, справочный код)
- Получение файлов от агента (сгенерированный код, отчеты, экспорт)
- Общие рабочие пространства, где и вы, и агент имеют доступ к одним и тем же файлам.
Если вы используете шлюз обмена сообщениями и хотите, чтобы агент отправлял сгенерированные файлы через
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 исправляет это:
Если этот параметр включен, Hermes добавляет --user $(id -u):$(id -g) к команде docker run, поэтому файлы, записанные в каталоги, смонтированные с помощью привязки (/workspace, /root, что-либо в docker_volumes), принадлежат пользователю вашего хоста, а не root. Компромисс: контейнер больше не может apt install или записывать в корневые пути, такие как /root/.npm — используйте базовый образ, HOME которого принадлежит пользователю без полномочий root (или добавьте необходимые инструменты во время сборки образа), если вам нужно и то, и другое.
Оставьте это значение false (по умолчанию) для обеспечения обратной совместимости. Включите его, когда ваш рабочий процесс в основном состоит из «редактирования смонтированных файлов хоста», и вы устали от sudo chown -R.
Необязательно: смонтируйте каталог запуска в /workspace
Песочницы Docker по умолчанию остаются изолированными. Hermes не передает ваш текущий рабочий каталог хоста в контейнер, если вы явно не разрешите это сделать.
Когда включено:
- если вы запускаете Hermes из ~/projects/my-app, этот каталог хоста привязывается к /workspace
- Серверная часть Docker запускается в /workspace
- файловые инструменты и команды терминала видят один и тот же смонтированный проект
Если этот параметр отключен, /workspace остаётся принадлежащим песочнице, если только вы явно не смонтируете что-либо через docker_volumes.
Компромисс безопасности:
- false сохраняет границу песочницы
- true предоставляет песочнице прямой доступ к каталогу, из которого вы запустили Hermes.
Используйте это согласие только в том случае, если вы намеренно хотите, чтобы контейнер работал с активными файлами хоста.
Постоянная оболочка
По умолчанию каждая команда терминала выполняется в своем собственном подпроцессе — рабочем каталоге, переменных среды и переменных оболочки, сбрасываемых между командами. Когда включена постоянная оболочка, один долгоживущий процесс bash сохраняется при вызовах execute(), так что состояние сохраняется между командами.
Это наиболее полезно для бэкэнда SSH, поскольку оно также устраняет накладные расходы на соединение для каждой команды. Постоянная оболочка включена по умолчанию для SSH и отключена для локального бэкэнда.
terminal:persistent_shell:true# default — enables persistent shell for 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,автоматическипереходятводноразовыйрежим,посколькустандартныйвводпостояннойоболочкиужезанятпротоколомIPC.</div>
См.[Выполнениекода](features/code-execution.md)и[раздел«Терминал»вREADME](features/tools.md)дляполученияподробнойинформацииокаждомбэкэнде.
## Настройки навыков
НавыкимогутобъявлятьсвоисобственныенастройкиконфигурациичерезсвойинтерфейсSKILL.md.Этонесекретныезначения(пути,настройки,настройкидомена),хранящиесявпространствеимен«skills.config»в«config.yaml».
```yaml
skills:
config:
myplugin:
path:~/myplugin-data# Example — each skill defines its own keys
Как работают настройки навыков:
hermes configmigrate сканирует все включенные навыки, находит ненастроенные настройки и предлагает вам подсказать
hermes config show отображает все настройки навыков в разделе «Настройки навыков» с указанием навыков, которым они принадлежат.
Когда навык загружается, его разрешенные значения конфигурации автоматически вводятся в контекст навыка.
Когда агент использует skill_manage для создания, редактирования, исправления или удаления навыка, Hermes может дополнительно сканировать новый/обновленный контент на наличие опасных шаблонов ключевых слов (сбор учетных данных, очевидное внедрение подсказок, инструкции по удалению). Сканер отключен по умолчанию — рабочие процессы реальных агентов, которые законно касаются ~/.ssh/ или упоминают $OPENAI_API_KEY, слишком часто нарушали эвристику. Включите его снова, если хотите, чтобы сканер выдавал вам подсказку до того, как навык агента запишет:
skills:guard_agent_created:true# default: false
Когда эта опция включена, любая запись с флагом skill_manage отображается в виде запроса на одобрение с обоснованием сканера. Принято пишет землю; Отказ в записи возвращает агенту поясняющую ошибку.
Управляет объемом содержимого, который может вернуть один вызов read_file. Чтения, превышающие лимит, отклоняются с ошибкой, сообщающей агенту использовать offset и limit для меньшего диапазона. Это предотвращает заполнение контекстного окна при однократном чтении мини-пакета JS или большого файла данных.
Поднимите его, если вы используете модель с большим контекстным окном и часто читаете большие файлы. Уменьшите его для моделей с небольшим контекстом, чтобы сохранить эффективность чтения:
# Large context model (200K+)file_read_max_chars:200000# Small local model (16K context)file_read_max_chars:30000
Агент также автоматически выполняет дедупликацию операций чтения файлов — если одна и та же область файла читается дважды и файл не изменился, вместо повторной отправки содержимого возвращается упрощенная заглушка. Это сбрасывается при сжатии контекста, поэтому агент может повторно прочитать файлы после суммирования их содержимого.
Пределы усечения выходных данных инструмента
Три связанных ограничения контролируют, сколько необработанных выходных данных инструмент может вернуть до того, как Hermes их обрежет:
tool_output:max_bytes:50000# terminal output cap (chars)max_lines:2000# read_file pagination capmax_line_length:2000# per-line cap in read_file's line-numbered view
max_bytes — Когда команда terminal выдает больше, чем это количество символов в совокупности stdout/stderr, Hermes сохраняет первые 40% и последние 60% и вставляет между ними уведомление [OUTPUT TRUNCATED]. По умолчанию 50000 (≈12–15 000 токенов в типичных токенизаторах).
max_lines — Верхняя граница параметра limit для одного вызова read_file. Запросы выше этого уровня ограничиваются, поэтому одно чтение не может заполнить контекстное окно. По умолчанию 2000.
max_line_length — ограничение на строку применяется, когда read_file создает представление с нумерацией строк. Строки длиннее этого числа усекаются до указанного количества символов, за которыми следует ... [truncated]. По умолчанию 2000.
Увеличьте ограничения на модели с большими контекстными окнами, которые могут обеспечить больше необработанных результатов за вызов. Уменьшите их для моделей с небольшим контекстом, чтобы результаты инструмента были компактными:
# Large context model (200K+)tool_output:max_bytes:150000max_lines:5000# Small local model (16K context)tool_output:max_bytes:20000max_lines:500
Отключить глобальный набор инструментов
Чтобы подавить определенные наборы инструментов в CLI и каждой платформе шлюза в одном
разместите их имена в agent.disabled_toolsets:
Это применяется после конфигурации инструмента для каждой платформы (platform_toolsets, написанной
hermestools), поэтому указанный здесь набор инструментов всегда удаляется, даже если
в сохраненной конфигурации платформы он все еще указан. Используйте это, если вам нужен один
переключатель «Выключить X везде» вместо редактирования более 15 строк платформы в
пользовательский интерфейс hermes Tools.
Оставить список пустым или пропустить ключ — это пустая операция.
Изоляция рабочего дерева Git
Включите изолированные рабочие деревья git для параллельного запуска нескольких агентов в одном репозитории:
worktree:true# Always create a worktree (same as hermes -w)# worktree: false # Default — only when -w flag is passed
Если этот параметр включен, каждый сеанс CLI создает новое рабочее дерево в каталоге .worktrees/ со своей собственной веткой. Агенты могут редактировать файлы, фиксировать, отправлять и создавать PR, не мешая друг другу. Чистые рабочие деревья удаляются при выходе; грязные сохраняются для ручного восстановления.
Вы также можете перечислить файлы gitignored для копирования в рабочие деревья через .worktreeinclude в корне вашего репо:
#.worktreeinclude.env.venv/
node_modules/
Сжатие контекста
Hermes автоматически сжимает длинные разговоры, чтобы оставаться в пределах контекстного окна вашей модели. Сумматор сжатия — это отдельный вызов LLM — вы можете указать его на любого провайдера или конечную точку.
Все настройки сжатия хранятся в config.yaml (без переменных среды).
Полная ссылка
compression:enabled:true# Toggle compression on/offthreshold:0.50# Compress at this % of context limittarget_ratio:0.20# Fraction of threshold to preserve as recent tailprotect_last_n:20# Min recent messages to keep uncompressedhygiene_hard_message_limit:400# Gateway safety valve — see below# The summarization model/provider is configured under auxiliary:auxiliary:compression:model:"google/gemini-3-flash-preview"# Model for summarizationprovider:"auto"# Provider: "auto", "openrouter", "nous", "codex", "main", etc.base_url:null# Custom OpenAI-compatible endpoint (overrides provider)```<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` — это **предохранительный клапан предварительного сжатия**, предназначенный только для шлюза. Неконтролируемые сеансы с тысячами сообщений могут достичь пределов контекста модели до того, как сработает обычный порог процента контекста; когда количество сообщений пересекает этот потолок, Hermes принудительно сжимает независимо от использования токена. Значение по умолчанию «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/и т.д.
не установлено
Принудительно использовать этого провайдера, использовать его авторизацию
любой
набор
Использовать пользовательскую конечную точку напрямую (поставщик игнорируется)
Сводная модель должна иметь контекстное окно не меньше, чем у основной модели агента. Компрессор отправляет полную среднюю часть диалога в сводную модель — если контекстное окно этой модели меньше окна основной модели, вызов суммирования завершится ошибкой с ошибкой длины контекста. Когда это происходит, средние фрагменты опускаются без краткого изложения, молча теряя контекст разговора. Если вы переопределяете модель, убедитесь, что ее длина контекста соответствует длине вашей основной модели или превышает ее.
## Механизм контекста
Механизм контекста управляет тем, как управляются разговоры при приближении к пределу токенов модели. Встроенный механизм сжатия использует суммирование с потерями (см. Сжатие контекста). Плагины могут заменить его альтернативными стратегиями.
Чтобы использовать подключаемый модуль (например, LCM для управления контекстом без потерь):
context:engine:"lcm"# must match the plugin's name
Механизмы плагинов никогда не активируются автоматически — вы должны явно указать context.engine для имени плагина. Доступные движки можно просмотреть и выбрать через «Плагины Hermes» → Плагины провайдера → Контекстный движок.
См. Поставщики памяти для получения информации об аналогичной системе единого выбора для плагинов памяти.
Давление на бюджет итерации
Когда агент работает над сложной задачей с множеством вызовов инструментов, он может израсходовать свой бюджет итераций (по умолчанию: 90 ходов), не осознавая, что он заканчивается. Бюджетное давление автоматически предупреждает модель, когда оно приближается к пределу:
Порог
Уровень
Что видит модель
70%
Внимание
[БЮДЖЕТ: 63/90. Осталось 27 итераций. Начинайте консолидироваться.]
90%
Предупреждение
[БЮДЖЕТНОЕ ПРЕДУПРЕЖДЕНИЕ: 81/90. Осталось всего 9. Ответьте СЕЙЧАС.]
Предупреждения вводятся в JSON последнего результата инструмента (как поле _budget_warning), а не в отдельные сообщения — это сохраняет кэширование подсказок и не нарушает структуру диалога.
agent:max_turns:90# Max iterations per conversation turn (default: 90)api_max_retries:2# Retries per provider before fallback engages (default: 2)
Бюджетное давление включено по умолчанию. Агент естественным образом воспринимает предупреждения как часть результатов работы инструмента, что побуждает его консолидировать свою работу и предоставить ответ до того, как иссякнут итерации.
Когда бюджет итерации полностью исчерпан, CLI показывает пользователю уведомление: «⚠ Бюджет итерации достигнут (90/90) — ответ может быть неполным». Если во время активной работы бюджет исчерпан, агент перед остановкой генерирует сводку о том, что было выполнено.
agent.api_max_retries контролирует, сколько раз Hermes повторяет вызов API провайдера при временных ошибках (ограничения скорости, разрывы соединения, 5xx) до переключения резервного провайдера. По умолчанию установлено значение «2» — всего три попытки, что соответствует значению по умолчанию OpenAI SDK. Если у вас настроены резервные поставщики и вы хотите ускорить отработку отказа, установите для этого параметра значение «0», чтобы первая временная ошибка на основном сервере немедленно перешла к резервному, а не повторяла повторные попытки к нестабильной конечной точке.
Тайм-ауты API
Hermes имеет отдельные уровни тайм-аута для потоковой передачи, а также детектор устаревших вызовов для непоточных вызовов. Детекторы устаревания автоматически настраиваются на местных поставщиков только в том случае, если вы оставляете для них неявные значения по умолчанию.
Тайм-аут
По умолчанию
Местные провайдеры
Конфиг/окр
Тайм-аут чтения сокета
120-е
Автоматически повышен до 1800-х годов
HERMES_STREAM_READ_TIMEOUT
Обнаружение устаревшего потока
180-е годы
Автоотключение
HERMES_STREAM_STALE_TIMEOUT
Устаревшее непотоковое обнаружение
300-е годы
Автоматически отключается, если оставить неявным
providers.<id>.stale_timeout_секунды или HERMES_API_CALL_STALE_TIMEOUT
Вызов API (без потоковой передачи)
1800-е годы
Без изменений
providers.<id>.request_timeout_секунды / timeout_секунды или HERMES_API_TIMEOUT
Тайм-аут чтения сокета определяет, как долго httpx ожидает следующего фрагмента данных от поставщика. Локальным LLM может потребоваться несколько минут для предварительного заполнения в больших контекстах перед созданием первого токена, поэтому Hermes увеличивает это время до 30 минут, когда обнаруживает локальную конечную точку. Если вы явно установили HERMES_STREAM_READ_TIMEOUT, это значение будет использоваться всегда независимо от обнаружения конечной точки.
Обнаружение устаревшего потока уничтожает соединения, которые получают сигналы проверки активности SSE, но не получают фактического контента. Это полностью отключено для местных провайдеров, поскольку они не отправляют сигналы проверки активности во время предварительного заполнения.
Обнаружение устаревшего непотока уничтожает непотоковые вызовы, которые слишком долго не отвечают. По умолчанию Hermes отключает это на локальных конечных точках, чтобы избежать ложных срабатываний во время длительных предзаполнений. Если вы явно задали providers.<id>.stale_timeout_секундs, providers.<id>.models.<model>.stale_timeout_секундs или HERMES_API_CALL_STALE_TIMEOUT, это явное значение учитывается даже на локальных конечных точках.
Предупреждения о давлении контекста
Помимо давления на бюджет итерации, давление контекста отслеживает, насколько близок разговор к порогу сжатия — точке, в которой срабатывает сжатие контекста для суммирования старых сообщений. Это поможет и вам, и агенту понять, когда разговор затягивается.
Прогресс
Уровень
Что происходит
≥ 60% до порогового значения
Информация
CLI показывает голубой индикатор выполнения; шлюз отправляет информационное уведомление
≥ 85% до порогового значения
Предупреждение
CLI показывает жирную желтую полосу; шлюз предупреждает, что уплотнение неизбежно
В CLI контекстное давление отображается в виде индикатора выполнения в выходной ленте инструмента:
На платформах обмена сообщениями отправляется текстовое уведомление:
◐ Context: ████████████░░░░░░░░ 62% to compaction (threshold: 50% of window).
Если автоматическое сжатие отключено, предупреждение сообщит вам, что вместо этого контекст может быть усечен.
Контекстное давление происходит автоматически — настройка не требуется. Он срабатывает исключительно как уведомление для пользователя и не изменяет поток сообщений и не вводит ничего в контекст модели.
Стратегии пула учетных данных
Если у вас есть несколько ключей API или токенов OAuth для одного и того же провайдера, настройте стратегию ротации:
credential_pool_strategies:openrouter:round_robin# cycle through keys evenlyanthropic:least_used# always pick the least-used key
Опции: «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
Почему «авто» использует вашу основную модель
Ранее пользователи раздельного агрегатора (OpenRouter, Nous Portal) создавались на основе дешевого дефолта на стороне провайдера. Это было удивительно — пользователи, оплатившие подписку на агрегатор, увидели другую модель обработки их вспомогательного трафика. auto теперь использует основную модель для всех, а переопределения для каждой задачи в config.yaml по-прежнему имеют преимущество (см. Полную ссылку на вспомогательную конфигурацию ниже).
Интерактивная настройка вспомогательных моделей
Вместо редактирования YAML вручную запустите модель Hermes и выберите в меню "Настроить вспомогательные модели". Вы получите интерактивный инструмент выбора каждой задачи:
Выберите задачу, выберите провайдера (потоки 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 не требуется). Запустите модель Hermes и выберите MiniMax (OAuth) для аутентификации. Вспомогательные задачи автоматически используют MiniMax-M2.7-highspeed. См. Руководство MiniMax OAuth.::::::предупреждение "main" предназначено только для вспомогательных задач.
Опция провайдера «main» означает «использовать любого провайдера, который использует мой основной агент» — она действительна только внутри конфигураций «auxiliary:», «compression:» и «fallback_model:». Это не допустимое значение для параметра model.provider верхнего уровня. Если вы используете собственную конечную точку, совместимую с OpenAI, установите provider: custom в разделе model:. См. Поставщики искусственного интеллекта для получения информации обо всех основных вариантах поставщиков моделей.
Полная ссылка на вспомогательную конфигурацию
auxiliary:# Image analysis (vision_analyze tool + browser screenshots)vision:provider:"auto"# "auto", "openrouter", "nous", "codex", "main", etc.model:""# e.g. "openai/gpt-4o", "google/gemini-2.5-flash"base_url:""# Custom OpenAI-compatible endpoint (overrides provider)api_key:""# API key for base_url (falls back to OPENAI_API_KEY)timeout:120# seconds — LLM API call timeout; vision payloads need generous timeoutdownload_timeout:30# seconds — image HTTP download; increase for slow connections# Web page summarization + browser page text extractionweb_extract:provider:"auto"model:""# e.g. "google/gemini-2.5-flash"base_url:""api_key:""timeout:360# seconds (6min) — per-attempt LLM summarization# Dangerous command approval classifierapproval:provider:"auto"model:""base_url:""api_key:""timeout:30# seconds# Context compression timeout (separate from compression.* config)compression:timeout:120# seconds — compression summarizes long conversations, needs more time# Session search — summarizes past session matchessession_search:provider:"auto"model:""base_url:""api_key:""timeout:30max_concurrency:3# Limit parallel summaries to reduce request-burst 429sextra_body:{}# Provider-specific OpenAI-compatible request fields# Skills hub — skill matching and searchskills_hub:provider:"auto"model:""base_url:""api_key:""timeout:30# MCP tool dispatchmcp:provider:"auto"model:""base_url:""api_key:""timeout:30```:::советКаждая вспомогательная задача имеет настраиваемый тайм-аут (в секундах). По умолчанию:Vision 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`:ограничивает количество совпавших сеансов, которые Hermes суммирует одновременно.-`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 не сможет синтезировать его от своего имени.
Изменение модели видения
Чтобы использовать GPT-4o вместо Gemini Flash для анализа изображений:
auxiliary:vision:model:"openai/gpt-4o"
Или через переменную среды (в ~/.hermes/.env):
AUXILIARY_VISION_MODEL=openai/gpt-4o
Параметры провайдера
Эти параметры применяются к конфигурациям вспомогательных задач (auxiliary:, compression:, fallback_model:), а не к вашей основной настройке model.provider.
Провайдер
Описание
Требования
"авто"
Лучшее из доступных (по умолчанию). Vision пробует OpenRouter → Nous → Codex.
—
"openrouter"
Force OpenRouter — маршруты на любую модель (Gemini, GPT-4o, Claude и т.д.)
OPENROUTER_API_KEY
"нус"
Портал Форс Ноус
гермес авт
"кодекс"
Принудительно использовать OAuth Кодекса (учетная запись ChatGPT). Поддерживает зрение (gpt-5.3-codex).
модель Гермеса → Кодекс
"minimax-oauth"
Принудительно использовать MiniMax OAuth (вход в браузер, без ключа API). Для вспомогательных задач использует MiniMax-M2.7-высокоскоростной.
модель Гермеса → 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 для этой пользовательской конечной точки.
Использование ключа OpenAI API для зрения:
# In ~/.hermes/.env:# OPENAI_BASE_URL=https://api.openai.com/v1# OPENAI_API_KEY=sk-...auxiliary:vision:provider:"main"model:"gpt-4o"# or "gpt-4o-mini" for cheaper
Использование OpenRouter для машинного зрения (переход к любой модели):
auxiliary:vision:provider:"openrouter"model:"openai/gpt-4o"# or "google/gemini-2.5-flash", etc.
Использование Codex OAuth (учетная запись ChatGPT Pro/Plus — ключ API не требуется):
auxiliary:vision:provider:"codex"# uses your ChatGPT OAuth token# model defaults to gpt-5.3-codex (supports vision)
Использование MiniMax OAuth (вход через браузер, ключ API не требуется):
Запустите «модель Гермеса» и выберите MiniMax (OAuth), чтобы войти в систему и установить это автоматически. Для региона Китая базовым URL-адресом будет https://api.minimaxi.com/anthropic. Полное описание см. в Руководстве MiniMax OAuth.
Использование локальной/автономной модели:
auxiliary:vision:provider:"main"# uses your active custom endpointmodel:"my-local-model"
provider: "main" использует любого провайдера, который Hermes использует для обычного чата — будь то именованный пользовательский провайдер (например, beans), встроенный провайдер, такой как openrouter, или устаревшая конечная точка OPENAI_BASE_URL.:::совет
Если вы используете Codex OAuth в качестве основного поставщика моделей, Vision работает автоматически — дополнительная настройка не требуется. Кодекс включен в цепочку автоопределения по зрению.::::::предупреждение
Для Vision требуется мультимодальная модель. Если вы установили provider: "main", убедитесь, что ваша конечная точка поддерживает мультимодальность/видение — в противном случае анализ изображения не удастся.
Переменные среды (устаревшие версии)
Вспомогательные модели также можно настроить с помощью переменных среды. Однако предпочтительным методом является config.yaml: им проще управлять, и он поддерживает все параметры, включая base_url и api_key.
Настройка
Переменная среды
Поставщик видения
AUXILIARY_VISION_PROVIDER
Модель видения
AUXILIARY_VISION_MODEL
Конечная точка зрения
AUXILIARY_VISION_BASE_URL
Ключ API Vision
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# Global speed multiplier (fallback for all providers)edge:voice:"en-US-AriaNeural"# 322 voices, 74 languagesspeed:1.0# Speed multiplier (converted to rate percentage, e.g. 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# Speed multiplier (clamped to 0.25–4.0 by the API)base_url:"https://api.openai.com/v1"# Override for OpenAI-compatible TTS endpointsminimax:speed:1.0# Speech speed multiplier# base_url: "" # Optional: override for OpenAI-compatible TTS endpointsmistral:model:"voxtral-mini-tts-2603"voice_id:"c69964a6-ab8b-4f8a-9465-ec0925096ec8"# Paul - Neutral (default)gemini:model:"gemini-2.5-flash-preview-tts"# or gemini-2.5-pro-preview-ttsvoice:"Kore"# 30 prebuilt voices: Zephyr, Puck, Kore, Enceladus, etc.xai:voice_id:"eve"# xAI TTS voicelanguage:"en"# ISO 639-1sample_rate:24000bit_rate:128000# MP3 bitrate# 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# Enable /verbose slash command in messaging gatewayplatforms:{}# Per-platform display overrides (see below)tool_progress_overrides:{}# DEPRECATED — use display.platforms insteadinterim_assistant_messages:true# Gateway: send natural mid-turn assistant updates as separate messagesskin:default# Built-in or custom CLI skin (see user-guide/features/skins)personality:"kawaii"# Legacy cosmetic field still surfaced in some summariescompact:false# Compact output mode (less whitespace)resume_display:full# full (show previous messages on resume) | minimal (one-liner only)bell_on_complete:false# Play terminal bell when agent finishes (great for long tasks)show_reasoning:false# Show model reasoning/thinking above each response (toggle with /reasoning show|hide)streaming:false# Stream tokens to terminal as they arrive (real-time output)show_cost:false# Show estimated $ cost in the CLI status bartool_preview_length:0# Max chars for tool call previews (0 = no limit, show full paths/commands)runtime_metadata_footer:false# Gateway: append a runtime-context footer to final replies
Режим
Что вы видите
выключено
Молчание — лишь последний ответ
новый
Индикатор инструмента только при смене инструмента
все
Каждый вызов инструмента с кратким предварительным просмотром (по умолчанию)
многословный
Полные аргументы, результаты и журналы отладки
В CLI переключайте эти режимы с помощью /verbose. Чтобы использовать /verbose на платформах обмена сообщениями (Telegram, Discord, Slack и т. д.), установите tool_progress_command: true в разделе display выше. Затем команда переключит режим и сохранит его в конфигурации.
Нижний колонтитул метаданных среды выполнения (только шлюз)
Когда display.runtime_metadata_footer: true, Hermes добавляет небольшой нижний колонтитул с контекстом времени выполнения к последнему сообщению каждого поворота шлюза — ту же информацию, которую CLI показывает в строке состояния (модель, продолжительность сеанса, токены, стоимость). По умолчанию выключено; выберите настройку для каждого шлюза, если ваша команда хочет, чтобы в каждом ответе указывалось происхождение.
display:runtime_metadata_footer:true
Пример нижнего колонтитула, добавленного к ответу Telegram/Discord/Slack:
—claude-opus-4.7·12toolcalls·2m14s·$0.042
Только последнее сообщение хода попадает в нижний колонтитул; промежуточные обновления остаются чистыми.
Переопределение прогресса для каждой платформы
Разные платформы имеют разные потребности в многословии. Например, Signal не может редактировать сообщения, поэтому каждое обновление прогресса становится отдельным сообщением — шумным. Используйте display.platforms для установки режимов для каждой платформы:
display:tool_progress:all# global defaultplatforms:signal:tool_progress:'off'# silence progress on Signaltelegram:tool_progress:verbose# detailed progress on Telegramslack:tool_progress:'off'# quiet in shared Slack workspace
Платформы без переопределения возвращаются к глобальному значению «tool_progress». Действительные ключи платформы: «telegram», «discord», «slack», «signal», «whatsapp», «matrix», «mattermost», «email», «sms», «homeassistant», «dingtalk», «feishu», «wecom», «weixin», «bluebubbles», «qqbot». Устаревший ключ display.tool_progress_overrides по-прежнему загружается для обратной совместимости, но считается устаревшим и переносится в display.platforms при первой загрузке.
interim_assistant_messages предназначен только для шлюза. Если эта функция включена, Hermes отправляет завершенные обновления помощника в середине хода в виде отдельных сообщений чата. Это не зависит от tool_progress и не требует потоковой передачи через шлюз.
Конфиденциальность
privacy:redact_pii:false# Strip PII from LLM context (gateway only)
Если для параметра «redact_pii» установлено значение «истина», шлюз удаляет личную информацию из системного приглашения перед отправкой ее в LLM на поддерживаемых платформах:
Поле
Лечение
Номера телефонов (идентификатор пользователя в WhatsApp/Signal)
Хэшировано как user_<12-char-sha256>
Идентификаторы пользователей
Хэшировано как user_<12-char-sha256>
Идентификаторы чата
Числовая часть хеширована, префикс платформы сохранен (telegram:<hash>)
Идентификаторы домашних каналов
Числовая часть хешируется
Имена пользователей / имена пользователей
Не затронуто (выбирается пользователем, общедоступно)
Поддержка платформ: Редактирование распространяется на WhatsApp, Signal и Telegram. Discord и Slack исключены, поскольку их системы упоминаний (<@user_id>) требуют реального идентификатора в контексте LLM.
Хэши детерминированы — один и тот же пользователь всегда сопоставляется с одним и тем же хешем, поэтому модель по-прежнему может различать пользователей в групповых чатах. При маршрутизации и доставке внутри используются исходные значения.
voice:record_key:"ctrl+b"# Push-to-talk key inside the CLImax_recording_seconds:120# Hard stop for long recordingsauto_tts:false# Enable spoken replies automatically when /voice onbeep_enabled:true# Play record start/stop beeps in CLI voice modesilence_threshold:200# RMS threshold for speech detectionsilence_duration:3.0# Seconds of silence before auto-stop
Используйте /voice on в CLI, чтобы включить режим микрофона, record_key, чтобы начать/остановить запись, и /voice tts, чтобы переключить голосовые ответы. См. Голосовой режим для полной настройки и поведения в зависимости от платформы.
Стриминг
Передавайте токены на терминал или платформы обмена сообщениями по мере их поступления, вместо ожидания полного ответа.
Потоковая передача через CLI
display:streaming:true# Stream tokens to terminal in real-timeshow_reasoning:true# Also stream reasoning/thinking tokens (optional)
Если этот параметр включен, ответы отображаются по токенам внутри поля потоковой передачи. Вызовы инструментов по-прежнему фиксируются автоматически. Если провайдер не поддерживает потоковую передачу, он автоматически возвращается к нормальному отображению.
Потоковая передача через шлюз (Telegram, Discord, Slack)
streaming:enabled:true# Enable progressive message editingtransport:edit# "edit" (progressive message editing) or "off"edit_interval:0.3# Seconds between message editsbuffer_threshold:40# Characters before forcing an edit flushcursor:"▉"# Cursor shown during streamingfresh_final_after_seconds:60# Send fresh final (Telegram) when preview is this old; 0 = always edit in place
Если эта функция включена, бот отправляет сообщение на первый токен, а затем постепенно редактирует его по мере поступления новых токенов. Платформы, которые не поддерживают редактирование сообщений (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 = per-user isolation in groups/channels, false = one shared session per chat
— «true» — это рекомендуемая настройка по умолчанию. В каналах Discord, группах Telegram, каналах Slack и подобных общих контекстах каждый отправитель получает свой собственный сеанс, когда платформа предоставляет идентификатор пользователя.
- «false» возвращает старое поведение в общей комнате. Это может быть полезно, если вы явно хотите, чтобы Hermes рассматривал канал как один совместный разговор, но это также означает, что пользователи разделяют контекст, стоимость токенов и состояние прерывания.
- Прямые сообщения не затронуты. Гермес по-прежнему управляет личными сообщениями по идентификатору чата/DM, как обычно.
- В любом случае потоки остаются изолированными от родительского канала; при значении true каждый участник также получает свой собственный сеанс внутри потока.
пара используется по умолчанию. Гермес отказывает в доступе, но отвечает одноразовым кодом сопряжения в личных сообщениях.
«игнорировать» автоматически удаляет неавторизованные DM.
Разделы платформы переопределяют глобальные настройки по умолчанию, поэтому вы можете широко включать сопряжение, одновременно делая одну платформу тише.
Быстрые команды
Определите пользовательские команды, которые либо запускают команды оболочки без вызова LLM, либо присваивают одну косую черту другой команде. Быстрые команды Exec не требуют токенов и полезны на платформах обмена сообщениями (Telegram, Discord и т. д.) для быстрой проверки сервера или служебных сценариев.
Использование: введите /status, /disk, /update, /gpu или /restart в CLI или на любой платформе обмена сообщениями. Команды exec запускаются локально на хосте и возвращают выходные данные напрямую — без вызова LLM и без потребления токенов. Команды alias перезаписываются в настроенную цель команды косой черты.
30-секундный тайм-аут — длительные команды завершаются с сообщением об ошибке.
Приоритет — быстрые команды проверяются перед командами навыков, поэтому вы можете переопределить названия навыков.
Автозаполнение — быстрые команды обрабатываются во время отправки и не отображаются во встроенных таблицах автозаполнения слэш-команд.
Тип — поддерживаемые типы: exec и alias; другие типы показывают ошибку
Работает везде — CLI, Telegram, Discord, Slack, WhatsApp, Signal, электронная почта, Home Assistant.
Сочетания клавиш, состоящие только из строк, не являются допустимыми быстрыми командами. Для многократного использования рабочих процессов подсказок создайте навык или псевдоним для существующей команды с косой чертой.
Человеческая задержка
Имитируйте человеческую скорость ответа на платформах обмена сообщениями:
human_delay:mode:"off"# off | natural | custommin_ms:800# Minimum delay (custom mode)max_ms:2500# Maximum delay (custom mode)
Выполнение кода
Настройте инструмент «execute_code»:
code_execution:mode:project# project (default) | stricttimeout:300# Max execution time in secondsmax_tool_calls:50# Max tool calls within code execution
mode управляет рабочим каталогом и интерпретатором Python для скриптов:
project (по умолчанию) — сценарии запускаются в рабочем каталоге сеанса с активным Python окружения virtualenv/conda. Параметры проекта (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 или с помощью инструментов Hermes:
Выбор серверной части: Если web.backend не задан, серверная часть автоматически определяется по доступным ключам API. Если установлен только EXA_API_KEY, используется Exa. Если установлен только TAVILY_API_KEY, используется Tavily. Если установлен только PARALLEL_API_KEY, используется Parallel. В противном случае Firecrawl используется по умолчанию.
Самостоятельный Firecrawl: Установите FIRECRAWL_API_URL, чтобы он указывал на ваш собственный экземпляр. Если задан пользовательский URL-адрес, ключ API становится необязательным (задайте на сервере USE_DB_AUTHENTICATION=false, чтобы отключить аутентификацию).
Режимы параллельного поиска. Установите PARALLEL_SEARCH_MODE для управления режимом поиска — «быстрый», «однократный» или «агентный» (по умолчанию: «агентный»).
Exa: Установите EXA_API_KEY в ~/.hermes/.env. Поддерживает фильтрацию по категориям («компания», «научная статья», «новости», «люди», «личный сайт», «pdf») и фильтры по домену/дате.
Браузер
Настройте поведение автоматизации браузера:
browser:inactivity_timeout:120# Seconds before auto-closing idle sessionscommand_timeout:30# Timeout in seconds for browser commands (screenshot, navigate, etc.)record_sessions:false# Auto-record browser sessions as WebM videos to ~/.hermes/browser_recordings/# Optional CDP override — when set, Hermes attaches directly to your own# Chrome (via /browser connect) rather than starting a headless browser.cdp_url:""# Dialog supervisor — controls how native JS dialogs (alert / confirm / prompt)# are handled when a CDP backend is attached (Browserbase, local Chrome via# /browser connect). Ignored on Camofox and default local agent-browser mode.dialog_policy:must_respond# must_respond | auto_dismiss | auto_acceptdialog_timeout_s:300# Safety auto-dismiss under must_respond (seconds)camofox:managed_persistence:false# When true, Camofox sessions persist cookies/logins across restarts
Политики диалога:
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 — захватить, принять немедленно. Полезно для страниц с агрессивными подсказками «перед загрузкой».
Набор инструментов браузера поддерживает несколько поставщиков. См. страницу функций браузера для получения подробной информации о базе браузеров, использовании браузера и локальной настройке Chrome CDP.
Часовой пояс
Переопределить локальный часовой пояс сервера с помощью строки часового пояса IANA. Влияет на временные метки в журналах, планирование cron и ввод времени системных подсказок.
Поддерживаемые значения: любой идентификатор часового пояса IANA (например, «Америка/Нью-Йорк», «Европа/Лондон», «Азия/Калькутта», «UTC»). Оставьте пустым или не указывайте локальное время сервера.
Дискорд
Настройте поведение шлюза обмена сообщениями, специфичное для Discord:
discord:require_mention:true# Require @mention to respond in server channelsfree_response_channels:""# Comma-separated channel IDs where bot responds without @mentionauto_thread:true# Auto-create threads on @mention in channels
require_mention — если true (по умолчанию), бот отвечает в каналах сервера только при упоминании с @BotName. Директ всегда работает без упоминания.
— free_response_channels — список идентификаторов каналов, разделенных запятыми, на которых бот отвечает на каждое сообщение, не требуя упоминания.
auto_thread — если true (по умолчанию), упоминания в каналах автоматически создают цепочку для разговора, сохраняя каналы чистыми (аналогично тредингу в Slack).
Безопасность
Сканирование безопасности перед выполнением и секретное редактирование:
security:redact_secrets:false# Redact API key patterns in tool output and logs (off by default)tirith_enabled:true# Enable Tirith security scanning for terminal commandstirith_path:"tirith"# Path to tirith binary (default: "tirith" in $PATH)tirith_timeout:5# Seconds to wait for tirith scan before timing outtirith_fail_open:true# Allow command execution if tirith is unavailablewebsite_blocklist:# See Website Blocklist section belowenabled:falsedomains:[]shared_files:[]
redact_secrets — если установлено значение true, автоматически обнаруживает и редактирует шаблоны, которые выглядят как ключи API, токены и пароли в выходных данных инструмента, прежде чем они войдут в контекст разговора и зарегистрируются. Выкл. по умолчанию — включите, если вы обычно работаете с реальными учетными данными в выходных данных инструмента и вам нужна подстраховка. Для включения явно установите значение true.
tirith_enabled — если true, команды терминала сканируются Tirith перед выполнением для обнаружения потенциально опасных операций.
tirith_path — путь к бинарному файлу tirith. Установите это значение, если Тирит установлен в нестандартном месте.
tirith_timeout — максимальное количество секунд ожидания сканирования тирита. Команды продолжают выполняться, если время сканирования истекло.
tirith_fail_open — когда true (по умолчанию), командам разрешено выполнение, если tirith недоступен или произошел сбой. Установите значение false, чтобы блокировать команды, когда Тирит не может их проверить.
Черный список веб-сайтов
Заблокируйте доступ к определенным доменам для веб-инструментов агента и браузера:
security:website_blocklist:enabled:false# Enable URL blocking (default: false)domains:# List of blocked domain patterns-"*.internal.company.com"-"admin.example.com"-"*.local"shared_files:# Load additional rules from external files-"/etc/hermes/blocked-sites.txt"
Если этот параметр включен, любой URL-адрес, соответствующий шаблону заблокированного домена, отклоняется до запуска веб-инструмента или браузера. Это относится к web_search, web_extract, browser_navigate и любому инструменту, который обращается к URL-адресам.
Правила домена поддерживают:
- Точные домены: admin.example.com
- Субдомены с подстановочными знаками: *.internal.company.com (блокирует все поддомены)
- Подстановочные знаки TLD: *.local
Общие файлы содержат по одному правилу домена в каждой строке (пустые строки и комментарии # игнорируются). Отсутствующие или нечитаемые файлы регистрируют предупреждение, но не отключают другие веб-инструменты.
Политика кэшируется на 30 секунд, поэтому изменения конфигурации вступают в силу быстро, без перезапуска.
Умные утверждения
Контролируйте, как Hermes обрабатывает потенциально опасные команды:
approvals:mode:manual# manual | smart | off
Режим
Поведение
ручной (по умолчанию)
Запрашивайте у пользователя перед выполнением любой помеченной команды. В интерфейсе командной строки отображается интерактивное диалоговое окно утверждения. При обмене сообщениями ставит в очередь ожидающий запрос на утверждение.
умный
Используйте вспомогательный LLM, чтобы оценить, действительно ли помеченная команда опасна. Команды с низким уровнем риска утверждаются автоматически с сохранением на уровне сеанса. Действительно рискованные команды передаются пользователю.
выключено
Пропустите все проверки одобрения. Эквивалент HERMES_YOLO_MODE=true. Использовать с осторожностью.
Интеллектуальный режим особенно полезен для снижения усталости от одобрения — он позволяет агенту более автономно работать над безопасными операциями, при этом перехватывая действительно деструктивные команды.:::предупреждение
Установка approvals.mode: off отключает все проверки безопасности для команд терминала. Используйте это только в надежных изолированных средах.
Контрольно-пропускные пункты
Автоматические снимки файловой системы перед разрушительными файловыми операциями. Подробности см. в разделе Проверочные точки и откат.
checkpoints:enabled:true# Enable automatic checkpoints (also: hermes --checkpoints)max_snapshots:50# Max checkpoints to keep per directory
Делегирование
Настройте поведение субагента для инструмента делегирования:
delegation:# model: "google/gemini-3-flash-preview" # Override model (empty = inherit parent)# provider: "openrouter" # Override provider (empty = inherit parent)# base_url: "http://localhost:1234/v1" # Direct OpenAI-compatible endpoint (takes precedence over provider)# api_key: "local-key" # API key for base_url (falls back to OPENAI_API_KEY)max_concurrent_children:3# Parallel children per batch (floor 1, no ceiling). Also via DELEGATION_MAX_CONCURRENT_CHILDREN env var.max_spawn_depth:1# Delegation tree depth cap (1-3, clamped). 1 = flat (default): parent spawns leaves that cannot delegate. 2 = orchestrator children can spawn leaf grandchildren. 3 = three levels.orchestrator_enabled:true# Global kill switch. When false, role="orchestrator" is ignored and every child is forced to leaf regardless of 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 в конфигурации → родительская модель (унаследованная). Установка только модели без поставщика изменяет только имя модели, сохраняя при этом учетные данные родителя (полезно для переключения моделей внутри одного поставщика, например OpenRouter).
Ширина и глубина:max_concurrent_children ограничивает количество субагентов, работающих параллельно в одном пакете (по умолчанию 3, нижний уровень – 1, без верхнего предела). Также может быть установлено через переменную окружения DELEGATION_MAX_CONCURRENT_CHILDREN. Когда модель отправляет массив «задач», длина которого превышает ограничение, «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# Seconds to wait for user clarification response
Контекстные файлы (SOUL.md, AGENTS.md)
Hermes использует две разные контекстные области:
Файл
Цель
Область применения
ДУША.md
Основной идентификатор агента — определяет, кем является агент (слот № 1 в системном приглашении)
~/.hermes/SOUL.md или $HERMES_HOME/SOUL.md
.hermes.md / HERMES.md
Инструкции по конкретному проекту (высший приоритет)
Переход к git root
AGENTS.md
Инструкции для конкретного проекта, соглашения по кодированию
Рекурсивный обход каталогов
CLAUDE.md
Контекстные файлы Claude Code (также обнаружены)
Только рабочий каталог
.cursorrules
Правила курсора IDE (также обнаружены)
Только рабочий каталог
.cursor/rules/*.mdc
Файлы правил курсора (также обнаружены)
Только рабочий каталог
SOUL.md — это основной идентификатор агента. Он занимает слот №1 в системной подсказке, полностью заменяя встроенный идентификатор по умолчанию. Отредактируйте его, чтобы полностью настроить агента.
Если SOUL.md отсутствует, пуст или не может быть загружен, Hermes возвращается к встроенному идентификатору по умолчанию.
Файлы контекста проекта используют систему приоритетов — загружается только ОДИН тип (побеждает первое совпадение): .hermes.md → AGENTS.md → CLAUDE.md → .cursorrules. SOUL.md всегда загружается независимо.
AGENTS.md является иерархическим: если подкаталоги также имеют AGENTS.md, все они объединяются.
Hermes автоматически создает файл SOUL.md по умолчанию, если он еще не существует.
Все загруженные файлы контекста ограничены 20 000 символами с интеллектуальным усечением.