Профили: несколько агентов

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

Что такое профили и зачем они нужны

Профиль — это отдельный домашний каталог Hermes. Каждый профиль содержит свои config.yaml, .env, SOUL.md, воспоминания, сессии, навыки, задачи по расписанию и базу состояния. При создании профиля он автоматически становится отдельной командой: профиль coder даёт команды coder chat, coder setup, coder gateway start и т.д.

Профили удобно использовать, когда нужны разные модели, разные личности (SOUL.md) или разные наборы инструментов для разных задач — всё на одном сервере.

Структура каталога профиля

Каждый профиль живёт в /root/.hermes/profiles/<name>/ с такой структурой:

/root/.hermes/profiles/<name>/
├── config.yaml       # конфигурация профиля (перезаписывает глобальную)
├── .env              # переменные окружения и API-ключи
├── workspace/        # рабочий каталог (cwd для терминала)
├── memories/         # системная память (MEMORY.md, USER.md)
├── skills/           # навыки профиля (+ наследуются глобальные)
├── cron/             # запланированные задачи профиля
├── credentials.json  # учётные данные профиля
├── SOUL.md           # личность и поведение агента
└── sessions/         # сессии профиля

CLI-команды

hermes profile list                    # все профили со статусом
hermes profile create NAME             # создать чистый профиль
hermes profile create NAME --clone     # клонировать config + .env + SOUL.md
hermes profile create NAME --clone-all # полный клон (память, сессии, навыки)
hermes profile create NAME --clone-from PROFILE  # клонировать из указанного профиля
hermes profile use NAME                # сделать профилем по умолчанию
hermes profile show NAME               # подробная информация о профиле
hermes profile alias NAME              # управление wrapper-скриптами (алиасы)
hermes profile rename OLD NEW          # переименовать профиль
hermes profile export NAME             # экспорт в tar.gz-архив
hermes profile import FILE             # импорт из архива
hermes profile delete NAME             # удалить профиль (с подтверждением)

Создание и варианты

Быстрый старт

hermes profile create coder    # создать профиль
coder setup                    # настроить ключи и модель
coder chat                     # начать общение

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

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

Использование

Каждый профиль получает алиас команды. Также можно указать профиль через флаг -p:

hermes -p coder chat
hermes --profile coder doctor

Команда hermes profile use coder делает профиль профилем по умолчанию для всех команд.

Управление алиасами

hermes profile alias NAME создаёт wrapper-скрипт, позволяющий вызывать профиль напрямую — например, coder chat вместо hermes -p coder chat. Это удобно для часто используемых профилей.

Переименование

hermes profile rename old-name new-name переименовывает каталог и все внутренние ссылки. Wrapper-скрипты обновляются автоматически.

Экспорт и импорт

Экспорт создаёт tar.gz-архив профиля для резервного копирования или переноса на другой сервер:

hermes profile export coder            # → coder-YYYYMMDD.tar.gz
hermes profile import coder-20260722.tar.gz  # восстановить из архива

Шлюзы (Gateways)

Каждый профиль запускает свой шлюз с отдельным бот-токеном. Поддерживается защита от дублирования токенов: если два профиля используют один токен, второй будет заблокирован. Можно установить как системный сервис:

coder gateway install   # создаёт systemd/launchd сервис

Наследование навыков (Skills)

Навыки из глобального каталога /root/.hermes/skills/ доступны всем профилям. Профильные навыки в /root/.hermes/profiles/<name>/skills/ переопределяют или дополняют глобальные. При вызове hermes skills list отображаются оба уровня.

Идентификация текущего профиля

Чтобы определить, под каким профилем работает агент:

echo $HERMES_HOME                    # путь к каталогу профиля
cat ~/.hermes/profiles/<name>/.env   # переменные окружения профиля

В системном промпте секция MEMORY и содержимое SOUL.md определяют личность агента. Если они противоречат друг другу — доверяйте пользователю.

Profile Distributions — шаринг агентов

Distribution — это упакованный профиль в виде git-репозитория. Любой пользователь может установить готового агента одной командой и обновить его, не потеряв свои данные.

Структура дистрибутива

my-agent/
├── distribution.yaml   # манифест: имя, версия, зависимости
├── SOUL.md             # личность агента
├── config.yaml         # настройки модели и инструментов
├── skills/             # навыки
├── cron/               # запланированные задачи
└── mcp.json            # MCP-серверы

Установка и обновление

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

При обновлении заменяются файлы автора (SOUL.md, навыки, cron), но сохраняются пользовательские данные: память, сессии, API-ключи и логи.

Что НИКОГДА не попадает в дистрибутив

  • auth.json и .env — ключи и токены
  • memories/ и sessions/ — пользовательские данные
  • state.db, logs/, workspace/ — состояние и кеши

Сценарии использования

  • Синхронизация: один агент на ноутбуке и рабочей станции через git
  • Команда: единый агент для код-ревью, развёрнутый у всех разработчиков
  • Сообщество: публикация специализированного агента на GitHub
  • Продукт: тиражирование готового решения с настроенными навыками

Чеклист миграции профиля (сервер → сервер)

При переносе профиля на другой сервер (например, со старого скомпрометированного сервера на новый чистый):

  1. Распаковать архив в каталог профиляcd /root/.hermes/profiles/<name> && unzip -o backup.zip -x "config.yaml"
  2. НЕ перезаписывать config.yaml — конфигурация из бэкапа была настроена под старый сервер. Сохраните новый.
  3. Обновить пути к credentialsmemories/MEMORY.md может содержать старые пути. Замените все ссылки на /root/.hermes/profiles/<name>/credentials/.
  4. Исправить workdir во всех cron-задачах — проверьте каждое поле workdir. Старые пути вида /root/.hermes/profiles/platon должны быть обновлены.
  5. Исправить промпты cron-задач — промпты могут содержать захардкоженные пути к скриптам, credentials или каталогам.
  6. Обновить модели в cron-задачах — если старый сервер использовал другую модель по умолчанию, обновите все задачи.
  7. Проверить работу credentials — API-ключи могут быть отозваны или ограничены после компрометации сервера.
  8. Подтвердить личность — проверьте memories/MEMORY.md и SOUL.md на соответствие нужному агенту. Старые бэкапы могут нести чужую личность.
  9. Протестировать одну cron-задачу вручную — запустите cronjob(action=run, job_id=...) перед тем, как доверять всему расписанию.

Подводные камни восстановления из бэкапа

  • НИКОГДА не распаковывайте всё подряд — спросите пользователя, что именно восстанавливать
  • НЕ перезаписывайте config.yaml — конфиг из бэкапа был для другого сервера/инстанса
  • Credentials могут быть устаревшими — всегда проверяйте после восстановления
  • Cron-задачи ссылаются на пути — старые пути могут указывать на несуществующие каталоги. Проверяйте workdir и текст промпта.
  • Файлы памяти могут конфликтать — MEMORY.md из бэкапа может описывать другую личность агента
  • Глобальный конфиг принадлежит основному агенту — если на сервере уже есть основной агент, его config.yaml в /root/.hermes/config.yaml — не ваш. Изменяйте только свой профильный конфиг.

Очистка устаревших путей после миграции

После переноса профиля или переименования старые пути будут всплывать снова и снова, пока не будут систематически устранены. Используйте этот чеклист:

Область Как найти Команда
.env TERMINAL_CWD, захардкоженные пути cat $HERMES_HOME/.env
Скрипты *.sh, *.py в memory/ grep -rn 'old-path' $HERMES_HOME/memory/
Навыки SKILL.md, references/, scripts/ grep -rn 'old-path' $HERMES_HOME/skills/
Cron промпты + workdir cron/jobs.json grep -n 'old-path' $HERMES_HOME/cron/jobs.json
Cron outputs cron/output/*.md — видны пользователю! grep -rln 'old-path' $HERMES_HOME/cron/output/ → удалить
.pyc кеши __pycache__/ — байткод содержит пути find $HERMES_HOME -name __pycache__ -exec rm -rf {} +
Симлинки Указывающие на старые каталоги find /root -type l -lname '*old*'
Системная память memories/MEMORY.md Проверить и убедиться

Результат должен быть пустым. Если что-то найдено — исправьте до завершения.

Важные предупреждения

  • cron output виден пользователю — старые файлы в cron/output/ доставляются в Telegram/Discord. Удаляйте их, а не просто исправляйте источники.
  • SKILL.md может содержать старый путь — если документация навыка ссылается на миграцию (например, «мы мигрировали из /root/.hermes-echo/»), эти ссылки сами становятся проблемой. Удаляйте упоминания старых путей из документации.
  • .env защищён от записи — инструмент write_file откажется писать в .env. Используйте sed -i через terminal: sed -i 's|old-value|new-value|' $HERMES_HOME/.env