Docker + Hermes Agent: два способа игры
Event Hooks — Auto-Trigger at Key Moments — easy-to-understand guide based on official docs (updated 2026-08-09)
Docker + Hermes Agent: два способа игры
Если вы когда-нибудь задумывались, как Docker вписывается в картину Hermes Agent, вы попали по адресу. На самом деле есть два разных способа, как эти два инструмента могут работать вместе, и стоит знать разницу, прежде чем начинать печатать docker run.
Два режима Docker
- Запуск Hermes В Docker — сам агент живёт внутри контейнера. Это основная тема данного руководства.
- Docker как терминальный бэкенд — Hermes работает на вашей хост-машине, но каждая команда, которую он выполняет, происходит внутри единой постоянной Docker-песочницы. Эта песочница переживает вызовы инструментов,
/newи даже субагентов, пока жив процесс Hermes.
Эта статья охватывает вариант 1. Ключевой момент: все ваши данные (конфиг, API-ключи, сессии, навыки, воспоминания) хранятся в одной директории на хосте, смонтированной в /opt/data внутри контейнера. Сам образ не хранит состояние, так что вы можете в любой момент подтянуть новую версию, не теряя настройки.
Быстрый старт: первичная настройка
Если это ваш первый опыт, создайте директорию для данных и запустите контейнер в интерактивном режиме, чтобы пройти мастер настройки:
mkdir -p ~/.hermes
docker run -it --rm \
-v ~/.hermes:/opt/data \
nousresearch/hermes-agent setup
Это запустит мастер, который запросит ваши API-ключи и запишет их в ~/.hermes/.env. Это нужно сделать всего один раз. Заодно — отличный момент настроить чат-систему (Telegram, Discord и т.д.), чтобы вашему шлюзу было где общаться.
⚠️ Важное предупреждение: избегайте браузерных VPS-консолей для этих команд установки. Некоторые провайдеры (например, Hetzner) искажают спецсимволы —
:может прийти как;,@отображается неправильно, а вставленные API-ключи могут молча повредиться. Всегда подключайтесь по SSH для безопасного копирования и вставки команд. Если вы вынуждены использовать браузерную консоль, вводите команды вручную и перепроверяйте каждый:,@,=и/.
Совет от профи: внутри контейнера один раз выполните hermes setup --portal — refresh-токен сохранится в вашем смонтированном томе ~/.hermes.
Запуск в режиме шлюза
После настройки запустите контейнер в фоне как постоянный шлюз:
docker run -d \
--name hermes \
--restart unless-stopped \
-v ~/.hermes:/opt/data \
-p 8642:8642 \
nousresearch/hermes-agent gateway run
Порт 8642 открывает OpenAI-совместимый API-сервер шлюза и endpoint для проверки здоровья. Он необязателен, если вы используете только чат-платформы, но обязателен, если вы хотите, чтобы дашборд или внешние инструменты могли обращаться к шлюзу.
Что нового: супервизируемый шлюз
Вот важное изменение: внутри официального Docker-образа gateway run теперь автоматически супервизируется через s6-overlay. Если шлюз упадёт, он перезапустится в течение секунд, не теряя контейнер. Дашборд (когда включён) супервизируется вместе с ним.
В docker logs вы увидите однострочный маркер, подтверждающий обновление. Чтобы отказаться от этого и получить старое поведение (выход контейнера = выход шлюза), передайте --no-supervise или установите HERMES_GATEWAY_NO_SUPERVISE=1. Это полезно для CI-смоук-тестов; для продакшена супервизируемый режим по умолчанию строго лучше.
Жёсткие остановки цикла инструментов
Одна важная настройка для автономных шлюзов: tool_loop_guardrails.hard_stop_enabled по умолчанию имеет значение false. Это нормально для интерактивных сессий, где человек видит предупреждения. Но в автономных развёртываниях одних предупреждений может не хватить, чтобы остановить агента, застрявшего в цикле. Если вы хотите поведение автоматического выключателя, включите его в config.yaml вашего профиля:
tool_loop_guardrails:
hard_stop_enabled: true
hard_stop_after:
exact_failure: 5
idempotent_no_progress: 5
Открытие API-сервера
API-сервер включается через API_SERVER_ENABLED=true. Чтобы открыть его за пределы 127.0.0.1 внутри контейнера, также установите API_SERVER_HOST=0.0.0.0 и API_SERVER_KEY (минимум 8 символов — сгенерируйте с помощью openssl rand -hex 32):
docker run -d \
--name hermes \
--restart unless-stopped \
-v ~/.hermes:/opt/data \
-p 8642:8642 \
-e API_SERVER_ENABLED=true \
-e API_SERVER_HOST=0.0.0.0 \
-e API_SERVER_KEY="$(openssl rand -hex 32)" \
-e API_SERVER_CORS_ORIGINS='*' \
nousresearch/hermes-agent gateway run
Замечание по безопасности: открытие любого порта на машине, доступной из интернета, — это риск. Не делайте этого, если вы полностью не понимаете последствия.
Запуск дашборда
Встроенный веб-дашборд работает как супервизируемый s6-rc сервис вместе со шлюзом в том же контейнере. Просто установите HERMES_DASHBOARD=1:
docker run -d \
--name hermes \
--restart unless-stopped \
-v ~/.hermes:/opt/data \
-p 8642:8642 \
-p 9119:9119 \
-e HERMES_DASHBOARD=1 \
nousresearch/hermes-agent gateway run
Если дашборд упадёт, s6-supervise автоматически перезапустит его после короткой паузы. Его вывод попадает в docker logs <container>.
Куда уходят логи
Полную карту маршрутизации (шлюзы по профилям, дашборд, boot-реконсилятор и обще-контейнерные docker logs) смотрите в соответствующем разделе документации. Короткая версия: всё в итоге попадает в docker logs, но с чёткими префиксами, чтобы вы могли понять, что есть что.
Подводим итоги
Docker даёт вам чистый и легко обновляемый способ запуска Hermes Agent. Контейнер не хранит состояние, ваши данные безопасно лежат на хосте, а новое s6-супервизирование означает, что ваш шлюз останется в строю, даже если упадёт. Запускаете ли вы простую настройку или полный комбо-комплект с дашбордом и API-сервером — команды выше помогут вам сделать это за считанные минуты.
📖 Официальная документация
Эта статья основана на официальной документации Hermes Agent :Официальные документы › user-guide/features/hooks