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. Это значит:
# Создать профиль внутри контейнера
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.