Мультиагентность в Hermes: как запустить 5 агентов на одном сервере

Hermes Agent поддерживает запуск нескольких независимых агентов на одной машине через систему профилей. Каждый профиль — это отдельный агент со своей конфигурацией, памятью, скиллами, сессиями и шлюзом к мессенджерам. В статье разберём, как устроена мультиагентность, как создать и настроить несколько профилей, и какие задачи удобно распределять между агентами.

Что такое профили в Hermes Agent?

Профиль (profile) в Hermes — это изолированная директория со всем состоянием агента: конфигурация, API-ключи, память, сессии, скиллы, cron-задачи и база данных. Профили позволяют запускать независимых агентов для разных задач без смешивания их состояния.

Когда вы создаёте профиль с именем coder, система автоматически создаёт команду coder chat, coder setup, coder gateway start и все остальные подкоманды Hermes. Это не просто разделение настроек — это полностью автономные агенты.

Ключевое отличие от запуска нескольких экземпляров Hermes: профили разделяют одну установку кода и один бинарник, но имеют полностью изолированное состояние. Это экономит место на диске и упрощает обновление — hermes update обновляет код один раз для всех профилей.

Как устроена директория профилей

Каждый профиль живёт в /root/.hermes/profiles// и содержит:

Файл / Папка Назначение
`config.yaml` Настройки модели, провайдера, инструментов
`.env` API-ключи, токены ботов
`SOUL.md` Личность и поведенческие инструкции агента
`workspace/` Рабочее пространство агента
`memories/` Системная память (MEMORY.md, USER.md)
`skills/` Скиллы профиля (+ наследуемые глобальные)
`sessions/` История сессий
`cron/` Cron-задачи профиля
`credentials.json` Учётные данные для внешних сервисов

Глобальные скиллы из /root/.hermes/skills/ наследуются всеми профилями. Скиллы в директории профиля переопределяют или расширяют глобальные.

Создание профилей: пошаговая инструкция

Шаг 1: Создание профиля

Создать новый профиль можно одной командой:

hermes profile create researcher

Система создаст директорию /root/.hermes/profiles/researcher/ с базовой структурой и команду-алиас researcher.

Варианты создания:

  • Чистый профиль: hermes profile create mybot — только базовые скиллы
  • Клонирование конфигурации: hermes profile create work --clone — копирует config.yaml, .env и SOUL.md из текущего профиля, но с чистой памятью и сессиями
  • Полное клонирование: hermes profile create backup --clone-all — копирует всё, включая память и сессии
  • Клонирование из конкретного профиля: hermes profile create work --clone --clone-from coder
  • Если профиль будет использоваться как kanban-воркер, стоит добавить описание при создании:

    hermes profile create researcher --description "Читает исходный код и документацию, пишет отчёты"
    

    Шаг 2: Настройка модели и API-ключей

    Каждый профиль может использовать разную модель и провайдер:

    # Интерактивная настройка
    researcher setup
    
    # Или вручную
    researcher config set model.default anthropic/claude-sonnet-4
    researcher config set model.provider anthropic
    

    API-ключи хранятся в .env профиля. Можно использовать разные ключи для разных агентов — это полезно для распределения лимитов:

    # Отредактировать ключи профиля
    nano ~/.hermes/profiles/researcher/.env
    

    Шаг 3: Настройка личности (SOUL.md)

    Каждый профиль имеет свой SOUL.md, определяющий поведение агента:

    echo "Ты — исследовательский агент. Твоя задача — анализировать данные и писать отчёты." > ~/.hermes/profiles/researcher/SOUL.md
    

    SOUL.md задаёт не только имя и характер агента, но и конкретные инструкции: как работать с группами, какие файлы читать, когда действовать самостоятельно, а когда спрашивать.

    Шаг 4: Настройка рабочей директории

    Если агент должен работать в конкретном проекте:

    researcher config set terminal.cwd /home/projects/research
    

    Без этой настройки агент будет запускаться в директории, из которой был вызван.

    Шаг 5: Запуск шлюза (gateway)

    Каждый профиль запускает свой шлюз как отдельный процесс с собственным токеном бота:

    researcher gateway start
    

    В Docker-контейнере каждый профиль получает свой слот s6-сервиса (/run/service/gateway-/), автоматический перезапуск при крахе и ротацию логов.

    Важно: два профиля не могут использовать один и тот же токен бота. Если попытаться, второй шлюз получит ошибку с указанием конфликтующего профиля. Это работает для Telegram, Discord, Slack, WhatsApp и Signal.

    Запуск нескольких агентов: практический пример

    Допустим, мы хотим запустить 5 агентов на одном сервере:

    Профиль Задача Модель
    `platon` Основной ассистент claude-sonnet-4
    `coder` Написание кода claude-sonnet-4
    `researcher` Исследования и отчёты gemini-2.5-flash
    `digest` Сбор и публикация дайджестов deepseek-v4
    `support` Клиентская поддержка claude-sonnet-4

    Создание всех профилей

    # Основной агент уже существует (default или platon)
    
    # Агент для кода
    hermes profile create coder --clone
    coder config set terminal.cwd /home/projects/app
    echo "Ты — агент-разработчик. Пиши чистый код с тестами." > ~/.hermes/profiles/coder/SOUL.md
    
    # Агент-исследователь
    hermes profile create researcher
    researcher setup
    researcher config set model.default google/gemini-2.5-flash
    echo "Ты — исследовательский агент. Анализируй данные, пиши структурированные отчёты." > ~/.hermes/profiles/researcher/SOUL.md
    
    # Агент для дайджестов
    hermes profile create digest --clone
    digest config set model.default deepseek/deepseek-v4
    echo "Ты — агент сбора новостей. Собирай дайджесты и публикуй их по расписанию." > ~/.hermes/profiles/digest/SOUL.md
    
    # Агент поддержки
    hermes profile create support
    support setup
    echo "Ты — агент клиентской поддержки. Отвечай вежливо и по делу." > ~/.hermes/profiles/support/SOUL.md
    

    Настройка разных токенов

    Каждому агенту нужен свой бот-токен (для Telegram) или свой Discord-бот:

    # Каждый профиль имеет свой .env
    nano ~/.hermes/profiles/coder/.env        # BOT_TOKEN=токен_кодера
    nano ~/.hermes/profiles/researcher/.env   # BOT_TOKEN=токен_исследователя
    nano ~/.hermes/profiles/digest/.env       # BOT_TOKEN=токен_дайджестов
    nano ~/.hermes/profiles/support/.env      # BOT_TOKEN=токен_поддержки
    

    Запуск всех шлюзов

    platon gateway start
    coder gateway start
    researcher gateway start
    digest gateway start
    support gateway start
    

    В Docker-контейнере s6-overlay автоматически перезапускает упавшие шлюзы. Для проверки статуса:

    hermes profile list
    

    Управление профилями

    Переключение между профилями

    # Установить профиль по умолчанию
    hermes profile use coder
    
    # Или указать явно в команде
    hermes -p researcher chat
    hermes --profile=digest doctor
    

    При использовании профиля CLI показывает его имя в промпте: coder ❯ вместо .

    Просмотр информации

    hermes profile list           # все профили со статусом
    hermes profile show coder     # подробная информация
    

    Переименование и удаление

    hermes profile rename coder dev-bot
    hermes profile delete researcher --yes
    

    Удаление профиля останавливает шлюз, удаляет systemd-сервис, алиас команды и все данные.

    Изоляция профилей: что общего, а что нет

    Компонент Общий / Изолированный
    Код Hermes (бинарник) Общий
    Глобальные скиллы Общие (наследуются)
    config.yaml Изолированный
    .env (API-ключи) Изолированный
    SOUL.md Изолированный
    Память (MEMORY.md) Изолированная
    Сессии Изолированные
    Cron-задачи Изолированные
    Шлюз (gateway) Изолированный (отдельный процесс)
    Рабочая директория Изолированная (настраивается)

    Важно: профили НЕ изолируют файловую систему. На дефолтном бэкенде local агент имеет тот же доступ к файлам, что и ваш пользователь. Профиль не является песочницей. Если нужна изоляция — используйте Docker-бэкенд терминала.

    Сценарии использования мультиагентности

    1. Разделение по ролям

    Основной ассистент общается с пользователем, а специализированные агенты выполняют фоновые задачи: сбор дайджестов, мониторинг, публикация контента. Каждый агент работает автономно со своим расписанием cron.

    2. Разделение по проектам

    Отдельный профиль для каждого проекта — своя память, свои сессии, свой набор скиллов. Агент не «засоряется» контекстом из других проектов.

    3. Разные модели для разных задач

    Исследовательские задачи можно направить на быструю и дешёвую модель (gemini-2.5-flash), а генерацию кода — на более мощную (claude-sonnet-4). Это экономит бюджет без потери качества.

    4. A/B тестирование моделей

    Клонируйте профиль с --clone и смените модель в копии. Запускайте одинаковые задачи и сравнивайте результаты.

    Docker: один контейнер — несколько агентов

    В официальном Docker-образе Hermes s6-overlay управляет шлюзами всех профилей как супервизор PID 1. Это значит:

  • Один контейнер, одна установка, несколько агентов
  • Каждый профиль получает свой s6-слот автоматически
  • Автоматический перезапуск при крахе
  • Ротация логов: 10 архивов по 1 МБ на профиль
  • Состояние шлюзов сохраняется при перезапуске контейнера
  • # Создать профиль внутри контейнера
    docker exec hermes hermes profile create coder
    
    # Запустить шлюз
    docker exec hermes hermes -p coder gateway start
    

    Это проще и экономнее, чем запускать отдельный контейнер на каждый профиль: общие образ, venv и кэш Playwright.

    Обновление всех профилей

    hermes update обновляет код один раз и синхронизирует новые скиллы во все профили:

    hermes update
    # → Code updated (12 commits)
    # → Skills synced: default (up to date), coder (+2 new), researcher (+2 new)
    

    Пользовательские скиллы никогда не перезаписываются.

    Экспорт и импорт профилей

    Профиль можно упаковать и перенести на другой сервер:

    # Экспорт
    hermes profile export coder    # создаёт coder.tar.gz
    
    # Импорт на другом сервере
    hermes profile import coder.tar.gz
    

    Также профили можно распространять как git-репозитории:

    hermes profile install github.com/you/research-bot --alias
    

    При импорте credentials, memories и sessions остаются локальными — переносятся только SOUL, config, skills и cron.

    Частые ошибки

    Модификация глобального конфига из профиля. Глобальный /root/.hermes/config.yaml принадлежит основному агенту. Если вы работаете как профиль platon, редактируйте только /root/.hermes/profiles/platon/config.yaml.

    Один токен бота на два профиля. Hermes блокирует это с понятной ошибкой. Каждому агенту — свой токен.

    Неправильные пути после миграции. При переносе профиля с другого сервера проверьте пути в config.yaml, .env, cron-задачах и скриптах. Старые пути ведут в несуществующие директории.

    SOUL.md из другого агента. При клонировании --clone-all SOUL.md может содержать имя и инструкции старого агента. Проверьте и обновите в первую сессию.

    FAQ

    Сколько профилей можно запустить на одном сервере?

    Технического лимита нет. Каждый профиль — это отдельный процесс шлюза и отдельная директория. Ограничение — ресурсы сервера: память, CPU и количество API-ключей. На практике 5-10 профилей работают без проблем на сервере с 4 ГБ RAM.

    Можно ли использовать разные провайдеры для разных профилей?

    Да. Каждый профиль имеет свой config.yaml и .env. Один профиль может работать через Anthropic, другой — через OpenRouter, третий — через локальную модель.

    Насколько изолированы профили?

    По состоянию — полностью: конфигурация, память, сессии, скиллы и шлюз изолированы. По файловой системе — нет: на дефолтном бэкенде local агент имеет доступ ко всем файлам пользователя. Для полной изоляции используйте Docker-бэкенд терминала.

    Какой профиль считается «основным»?

    Профиль по умолчанию — это /root/.hermes/ (без поддиректории profiles). Его можно сменить командой hermes profile use .

    Можно ли передавать контекст между агентами?

    Агенты не имеют прямого канала связи. Для обмена информацией используйте общие файлы в файловой системе или делегирование задач через delegate_task / запуск subprocess.

    Ссылки

  • Документация профилей Hermes
  • Docker и мультипрофильность
  • Конфигурация Hermes
  • Руководство по Hermes Agent на hermeswiki
  • Hermes + Neirohost: быстрый запуск