Hermes Agent: самообучающийся ИИ-агент в контейнере на microsrv


Агент, который живёт в ноутбуке, живёт недолго. Закрыли крышку, и сессия кончилась. Hermes Agent от Nous Research живёт по-другому: он ставится на сервер и работает круглосуточно. Отвечает в Telegram, пока вы занимаетесь своими делами. И помнит всё, что происходило раньше.
Ниже — что он умеет и как поднять его контейнер в microsrv, от регистрации OCI-образа до дашборда на домене *.msrv.space. Вся настройка укладывается в пять шагов консоли, со скриншотами.
Коротко: Hermes работает как автономный сервис с постоянной памятью и навыками. На microsrv он разворачивается как обычный контейнер: официальный образ, аргументы gateway run, том под состояние и HTTP-шлюз для веб-панели.
1. Что такое Hermes Agent
Hermes Agent — открытый (лицензия MIT) автономный агент от Nous Research, лаборатории за моделями Hermes, Nomos и Psyche. Работает он сам по себе. Отвечает в мессенджерах, исполняет задачи по расписанию, копит опыт между сеансами.
Самое интересное в нём — замкнутый цикл обучения. Агент ведёт постоянную память, время от времени напоминает себе зафиксировать важное, после сложной задачи создаёт навык и улучшает его при следующем применении. Прошлые сессии ищутся полнотекстовым поиском, профиль пользователя строится через Honcho. Авторы называют Hermes единственным агентом, у которого такой цикл работает из коробки.
Остальные возможности:
- Более 60 встроенных инструментов и MCP. Терминал, файлы, веб-поиск, генерация картинок, озвучка, браузерная автоматизация. Любой внешний MCP-сервер подключается как дополнительный источник инструментов.
- Более 20 платформ общения из одного gateway-процесса. Telegram, Discord, Slack, WhatsApp, Signal, Matrix, почта, Teams и другие. Голосовые сообщения транскрибируются, диалог переезжает между платформами.
- Планировщик cron. Регулярные задачи на естественном языке с доставкой результата в мессенджер: утренний отчёт, ночной бэкап.
- Субагенты. Параллельные рабочие потоки в изолированных субагентах. Многошаговый пайплайн схлопывается в один вызов через программный вызов инструментов.
- OpenAI-совместимый API-сервер на порту 8642. Эндпоинты
/v1/chat/completionsи/v1/responses. Open WebUI, LobeChat, LibreChat и сотни других фронтендов подключаются к агенту как к бэкенду, вместе со всеми его инструментами. - Веб-дашборд. Сессии, модели и настройки агента из браузера.
- Любая модель. Nous Portal, OpenRouter, OpenAI, Anthropic, свой локальный эндпоинт. Переключение без правок кода.
Агенту нужен доступ к LLM-провайдеру и место, где он будет жить.
2. Почему это удобно именно на microsrv
Всё состояние Hermes хранит в директории /opt/data внутри контейнера: конфигурацию, ключи, сессии, память, навыки. Сам образ stateless. В обычном Docker для сохранности понадобился бы bind-mount или named volume. В microsrv достаточно первого подключённого тома: механизм Stateful OverlayFS пишет любые изменения корневой файловой системы на реплицируемый NVMe-диск. Подключили том при создании, и /opt/data вместе со всей памятью агента переживает перезапуски и переезды между хостами.
Остальную инфраструктуру платформа даёт сама. Контейнер получает статический IP в вашем VPC и ходит в интернет через eBPF NAT без публичного адреса, поэтому API-сервер Hermes на порту 8642 остаётся внутри приватной сети, где его видят только ваши машины. Дашборд публикуется наружу через HTTPS-шлюз на домене *.msrv.space с автоматическим TLS-сертификатом. Контейнер умеет переезжать между хостами живой миграцией, а процесс gateway внутри официального образа подстраховывает супервизор s6: упадёт и через пару секунд поднимется. Снаружи контейнер работает в песочнице gVisor.
По ресурсам агент скромный: 1–2 ГБ RAM хватает для обычных задач. Браузерная автоматизация прожорливее, ей нужно от 2 ГБ.
3. Шаг 1. Регистрация образа
Hermes распространяется как публичный OCI-образ на Docker Hub. Для продакшена пинните конкретный digest вместо тега latest: вы всегда знаете, какая версия агента запущена, и обновление не приедет незаметно.
Перейдите в Консоль → Образы контейнеров, нажмите Добавить образ и вставьте ссылку:
index.docker.io/nousresearch/hermes-agent@sha256:76ddc21e785fc4522c7fbe7bf67ca665682cbe06724d55b5750a0688e03650d8
Образ последовательно пройдёт статусы Pending, Downloading и Ready: слои скачаются и закэшируются на узлах кластера. Из статуса Ready контейнеры стартуют за секунды.
В карточке образа видна «полная ссылка» с digest — та самая, которую мы пиннем. Она пригодится и для docker run, и для создания контейнера в консоли.
4. Шаг 2. Создание контейнера
В разделе Консоль → Контейнеры нажмите Создать контейнер. Мастер из трёх шагов:
- Идентификация. Имя
hermes— просто удобная метка контейнера в проекте, на домены и адреса она не влияет. Flavor —std.1c2g(1 vCPU / 2 ГБ RAM): для агентских задач хватает, браузерной автоматизации берите от 2 ГБ памяти. - Образ. Зарегистрированный на прошлом шаге
nousresearch/hermes-agent. Ниже раздел «Запуск»: команду (entrypoint) не трогаем — оставляем дефолтную из образа, в «Аргументы (CMD)» вписываемgateway run. Переменные окружения — из таблицы ниже, по одной или кнопкой «Вставить .env». - Тома. Постоянный NVMe-диск от 5 ГБ, с запасом на растущие сессии и навыки. Первый выбранный том уйдёт под Stateful OverlayFS, там и будет жить состояние агента. Здесь же — свободный сетевой интерфейс VPC: контейнер получит статический приватный IP.
Аргументы gateway run переводят Hermes в режим постоянного сервиса: поднимаются шлюзы мессенджеров, API-сервер и, если включён, дашборд.
Переменные окружения:
| Переменная | Значение | Зачем |
|---|---|---|
HERMES_DASHBOARD |
1 |
Включить веб-дашборд |
HERMES_DASHBOARD_HOST |
0.0.0.0 |
Слушать на всех интерфейсах контейнера, иначе шлюз не достучится |
HERMES_DASHBOARD_PORT |
80 |
Порт дашборда, его и опубликуем через HTTP-шлюз |
HERMES_DASHBOARD_BASIC_AUTH_USERNAME |
ваш логин | Basic auth на входе в дашборд |
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD |
ваш пароль | Пароль basic auth |
HERMES_DASHBOARD_BASIC_AUTH_SECRET |
Секрет для стабильных сессий между перезапусками | |
API_SERVER_ENABLED |
true |
Включить OpenAI-совместимый API |
API_SERVER_HOST |
0.0.0.0 |
Слушать на всех интерфейсах контейнера |
API_SERVER_KEY |
Bearer-ключ API, минимум 8 символов | |
API_SERVER_CORS_ORIGINS |
* |
Разрешённые origin. Внутри приватного VPC допустимо, при желании сузьте |
Кнопки «Сгенерировать» в таблице делают то же, что openssl rand -hex 32: берут 32 случайных байта через crypto.getRandomValues локально в вашем браузере и сразу кладут значение в буфер обмена. Целиком значение нигде не показывается, только в буфере, поэтому сразу сохраните его в менеджер секретов.
Ключ LLM-провайдера удобнее передать здесь же, ещё одной переменной: OPENAI_API_KEY, ANTHROPIC_API_KEY или любой другой, с которым работаете. Переменные окружения перекрывают конфиг внутри контейнера, так что это самый короткий путь.
Если привычнее docker run, вот те же настройки:
docker run -d --name hermes --restart unless-stopped \
-v ~/.hermes:/opt/data \
-p 80:80 \
-e HERMES_DASHBOARD=1 \
-e HERMES_DASHBOARD_HOST=0.0.0.0 \
-e HERMES_DASHBOARD_PORT=80 \
-e HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin \
-e HERMES_DASHBOARD_BASIC_AUTH_PASSWORD="..." \
-e HERMES_DASHBOARD_BASIC_AUTH_SECRET="$(openssl rand -hex 32)" \
-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='*' \
index.docker.io/nousresearch/hermes-agent@sha256:76ddc21e... \
gateway run
В microsrv том монтировать не нужно. Наружный порт публикует шлюз.
5. Шаг 3. Публикация дашборда через HTTP-шлюз
Дашборд слушает порт 80 внутри контейнера. Наружу его выпускает раздел «Шлюз»: отметьте Опубликовать HTTP, и платформа создаст маршрут на домене *.msrv.space и сама же выпустит TLS-сертификат. Certbot не понадобится. SSH-галочку рядом не трогаем: порту 22 из интернета брать неоткуда, для администрирования есть SSH-шлюз. Пропустили раздел при создании — тот же переключатель есть в карточке контейнера.
Вход закрывают два слоя. Basic auth самой панели (переменные HERMES_DASHBOARD_BASIC_AUTH_*) встречает любой запрос страницей логина. Приватная сеть добавляет второй: у контейнера нет публичного IP, снаружи виден только шлюз.
Это не перестраховка. В июне 2026 года сканеры находили в интернете дашборды агентов без аутентификации и через них внедряли SSH-бэкдоры. После этого авторы Hermes сделали аутентификацию обязательной на любом адресе, кроме loopback, а связка логин-пароль осталась самым простым способом её настроить.
6. Шаг 4. Первый вход и проверка
Откройте домен, который выдал шлюз (*.msrv.space), и введите логин с паролем. Дашборд на экране.
API-сервер остался в приватной сети. Проверить его можно с любой машины вашего VPC по внутреннему IP контейнера (10.x.x.x, он виден в карточке):
curl http://10.x.x.x:8642/v1/chat/completions \
-H "Authorization: Bearer $API_SERVER_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "hermes-agent", "messages": [{"role": "user", "content": "Привет! Что ты умеешь?"}]}'
Работают стриминг через SSE, /v1/responses с серверным состоянием диалога и /v1/models для списка моделей. Любой OpenAI-совместимый клиент подключается к http://10.x.x.x:8642/v1 с вашим API_SERVER_KEY.
Если ключ провайдера не задан переменной окружения, зайдите один раз в контейнер и выполните hermes setup, выбрав провайдера интерактивно. Конфиг ляжет на тот же том и переживёт любые перезапуски.
7. Что дальше
Контейнер с gateway run больше не меняется, всё остальное надстраивается сверху. Подключите Telegram-бота, и агент станет доступен с телефона: написали задачу, он выполнит её на своём сервере и ответит в чат. Заведите cron-задачу на естественном языке, скажем «каждое утро в 9:00 присылай сводку задач», и планировщик Hermes сам доставит отчёт в выбранный канал. Навыки агент создаёт и улучшает сам по мере работы. Внешние MCP-серверы добавляют инструменты, от GitHub до корпоративных API. Выйдет новая версия, зарегистрируете образ со свежим digest и пересоздадите контейнер, состояние на томе никуда не денется.
Итог
Hermes действительно умеет учиться. Память, навыки и планировщик работают из коробки, без всякой обвязки. Инфраструктурную часть закрывает microsrv. Постоянный том под состояние, приватная сеть, шлюз с TLS. Между пустым проектом и работающим агентом пять шагов в консоли.
Источники и что почитать дальше
- Документация Hermes Agent и раздел запуска в Docker: устройство официального образа, s6-супервизия, переменные окружения
- API-сервер Hermes: полный реестр эндпоинтов
/v1/* - GitHub: NousResearch/hermes-agent: исходный код, лицензия MIT
- microsrv: создание контейнеров, Stateful OverlayFS, HTTPS-шлюз, eBPF-сеть
Из практики: пинните образ по digest, а
API_SERVER_KEYиHERMES_DASHBOARD_BASIC_AUTH_SECRETгенерируйте кнопкой в таблице выше и храните в менеджере секретов. Тома от 5 ГБ хватает с запасом: сессии, память и навыки агента накапливаются.
FAQ
Чем дашборд (порт 80) отличается от API (8642)? Дашборд для человека: веб-интерфейс, опубликованный через HTTPS-шлюз с basic auth. API для ваших приложений: OpenAI-совместимый протокол, который остаётся внутри приватного VPC.
Почему не тег latest? Тег двигается без предупреждений. Digest фиксирует точную версию образа, обновляетесь только тогда, когда сами решите.
Что будет при перезапуске контейнера? Конфиг, ключи, сессии, память и навыки лежат на постоянном томе через Stateful OverlayFS. Перезапуски, переезды между хостами и обновления образа состояние не трогают.
Можно ли запустить несколько агентов? Да. Hermes поддерживает профили внутри одного контейнера (hermes profile create). Нужна жёсткая изоляция ресурсов, поднимайте отдельные контейнеры с разными томами.
Запускайте виртуальные машины в недорогом облаке для разработчиков
microsrv автоматически управляет прерываемыми ресурсами облаков: переносит ВМ до отзыва хоста, сохраняя диски, IP-адреса и открытые соединения.






