Дистрибутивы профилей: поделитесь целым агентом

Дистрибутив профиля упаковывает полноценного Hermes-агента — личность, навыки, cron-задачи, MCP-подключения, конфигурацию — в git-репозиторий. Любой, у кого есть доступ к репозиторию, может установить агента одной командой, обновлять его на месте, при этом сохраняя свои воспоминания, сессии и API-ключи нетронутыми.

Если профиль — это локальный агент, то дистрибутив делает этого агента доступным для распространения.

Что это значит

До появления дистрибутивов, чтобы поделиться агентом Hermes, нужно было отправить кому-то:

  1. Ваш SOUL.md

  2. Список навыков для установки

  3. Ваш config.yaml, без секретов

  4. Описание того, какие MCP-серверы вы подключили

  5. Любые запланированные cron-задачи

  6. Инструкции, какие переменные окружения задать

…и надеяться, что они всё соберут правильно. Каждое обновление версии или исправление ошибки означало повторную передачу.

С дистрибутивами всё это живёт в одном git-репозитории:

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

Получатели выполняют:

hermes profile install github.com/you/my-research-agent --alias

…и у них теперь есть полный агент. Они заполняют свои собственные API-ключи (.env.EXAMPLE.env) и могут запускать my-research-agent chat или обращаться к нему через Telegram / Discord / Slack / любую шлюзовую платформу. Когда вы публикуете новую версию, они выполняют hermes profile update my-research-agent и получают ваши изменения — их воспоминания и сессии остаются нетронутыми.

Почему git?

Мы рассматривали tarball-архивы, HTTP-архивы, собственный формат. Ни один из них не превзошёл git:

Компромисс: получателям нужен установленный git. На любой машине, работающей с Hermes в 2026 году, это уже так.

Когда следует использовать дистрибутив?

Хорошо подходит:

Не подходит:

Жизненный цикл: от автора к установщику к обновлению

Ниже описан полный сквозной процесс. Выберите ту сторону, которая вас интересует.


Для авторов: публикация дистрибутива

Шаг 1 — Начните с рабочего профиля

Создайте и настройте агента как любой другой профиль:

hermes profile create research-bot
research-bot setup                    # настройка модели, API-ключей
# Редактируйте ~/.hermes/profiles/research-bot/SOUL.md
# Установите навыки, подключите MCP-серверы, запланируйте cron-задачи и т.д.
research-bot chat                     # тестируйте, пока всё не заработает как надо

Шаг 2 — Добавьте distribution.yaml

Создайте ~/.hermes/profiles/research-bot/distribution.yaml:

name: research-bot
version: 1.0.0
description: "Autonomous research assistant with arXiv and web tools"
hermes_requires: ">=0.12.0"
author: "Your Name"
license: "MIT"

# Сообщает установщикам, какие переменные окружения нужны агенту.
# Они проверяются в оболочке установщика и существующем файле .env,
# чтобы не надоедать с ключами, которые уже настроены.
env_requires:
  - name: OPENAI_API_KEY
    description: "OpenAI API key (for model access)"
    required: true
  - name: SERPAPI_KEY
    description: "SerpAPI key for web search"
    required: false
    default: ""

Это весь манифест. Для каждого поля, кроме name, есть разумное значение по умолчанию.

Шаг 3 — Отправьте в git-репозиторий

cd ~/.hermes/profiles/research-bot
git init
git add .
git commit -m "v1.0.0"
git remote add origin git@github.com:you/research-bot.git
git tag v1.0.0
git push -u origin main --tags

Теперь репозиторий является дистрибутивом. Любой, у кого есть к нему доступ, может его установить.

git-репозиторий содержит **всё из каталога профиля, кроме того, что уже исключено из дистрибутивов**: `auth.json`, `.env`, `memories/`, `sessions/`, `state.db*`, `logs/`, `workspace/`, `*_cache/`, `local/`. Они остаются на вашей машине. Вы также можете добавить `.gitignore`, если хотите исключить дополнительные пути.

Шаг 4 — Помечайте версионные релизы тегами

Каждый раз, когда агент достигает стабильной точки, увеличивайте версию и ставьте тег:

# Отредактируйте distribution.yaml: version: 1.1.0
git add distribution.yaml SOUL.md skills/
git commit -m "v1.1.0: tighter research SOUL, add arxiv skill"
git tag v1.1.0
git push --tags

Получатели, выполнившие hermes profile update research-bot, получат последнюю версию.

Как выглядит репозиторий

Полный опубликованный дистрибутив:

research-bot/
├── distribution.yaml            # обязательно
├── SOUL.md                      # настоятельно рекомендуется
├── config.yaml                  # модель, провайдер, настройки инструментов по умолчанию
├── mcp.json                     # подключения к MCP-серверам
├── skills/
   ├── arxiv-search/SKILL.md
   ├── paper-summarization/SKILL.md
   └── citation-lookup/SKILL.md
├── cron/
   └── weekly-digest.json       # запланированные задачи
└── README.md                    # описание для людей (необязательно)

Принадлежащее дистрибутиву vs принадлежащее пользователю

Когда установщик обновляется до новой версии, одни вещи заменяются (область автора), а другие остаются (область установщика). По умолчанию:

Категория Пути При обновлении
Принадлежит дистрибутиву SOUL.md, config.yaml, mcp.json, skills/, cron/, distribution.yaml Заменяется из новой копии
Переопределение конфига config.yaml Фактически сохраняется по умолчанию — установщик мог настроить модель или провайдера. Передайте --force-config при обновлении, чтобы сбросить.
Принадлежит пользователю memories/, sessions/, state.db*, auth.json, .env, logs/, workspace/, plans/, home/, *_cache/, local/ Никогда не трогается

Вы можете переопределить список принадлежащего дистрибутиву в манифесте:

distribution_owned:
  - SOUL.md
  - skills/research/            # только мои исследовательские навыки; другие установленные навыки остаются
  - cron/digest.json

Если этот параметр опущен, применяются значения по умолчанию, указанные выше — что подходит для большинства дистрибутивов.


Для установщиков: использование дистрибутива

Установка

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

Что происходит:

  1. Клонирует репозиторий во временный каталог.

  2. Читает distribution.yaml, показывает вам манифест (имя, версия, описание, автор, требуемые переменные окружения).

  3. Проверяет каждую обязательную переменную окружения в вашей оболочке и в существующем .env целевого профиля. Помечает каждую как ✓ задано или требует настройки, чтобы вы точно знали, что нужно настроить.

  4. Запрашивает подтверждение. Передайте -y / --yes, чтобы пропустить.

  5. Копирует файлы, принадлежащие дистрибутиву, в ~/.hermes/profiles/research-bot/ (или туда, куда указывает name из манифеста).

  6. Записывает .env.EXAMPLE с закомментированными обязательными ключами — скопируйте в .env и заполните.

  7. С опцией --alias создаёт обёртку, чтобы вы могли запускать research-bot chat напрямую.

Типы источников

Любой git-адрес работает:

# Сокращение GitHub
hermes profile install github.com/you/research-bot

# Полный HTTPS
hermes profile install https://github.com/you/research-bot.git

# SSH
hermes profile install git@github.com:you/research-bot.git

# Self-hosted, GitLab, Gitea, Forgejo — любой Git-хост
hermes profile install https://git.example.com/team/research-bot.git

# Приватный репозиторий с использованием настроенной git-аутентификации
hermes profile install git@github.com:your-org/internal-bot.git

# Локальная директория во время разработки (без git push)
hermes profile install ~/my-profile-in-progress/

Переопределение имени профиля

Два пользователя, желающие установить один и тот же дистрибутив под разными именами:

# Алиса
hermes profile install github.com/acme/support-bot --name support-us --alias
# Боб (тот же дистрибутив, другое локальное имя)
hermes profile install github.com/acme/support-bot --name support-eu --alias

Заполнение переменных окружения

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

# Переменные окружения, необходимые для этого дистрибутива Hermes.
# Скопируйте в `.env` и заполните своими значениями перед запуском.

# OpenAI API key (для доступа к модели)
# (обязательно)
OPENAI_API_KEY=

# SerpAPI key для веб-поиска
# (необязательно)
# SERPAPI_KEY=

Скопируйте его:

cp ~/.hermes/profiles/research-bot/.env.EXAMPLE ~/.hermes/profiles/research-bot/.env
# Отредактируйте .env, вставьте свои настоящие ключи

Обязательные ключи, которые уже были в вашей оболочке (например, OPENAI_API_KEY, экспортированный в ~/.zshrc), помечаются как ✓ задано во время установки — вам не нужно дублировать их в .env.

Проверьте, что вы установили

hermes profile info research-bot

Показывает:

Distribution: research-bot
Version:      1.0.0
Description:  Autonomous research assistant with arXiv and web tools
Author:       Your Name
Requires:     Hermes >=0.12.0
Source:       https://github.com/you/research-bot
Installed:    2026-05-08T17:04:32+00:00

Environment variables:
  OPENAI_API_KEY (required)  OpenAI API key (for model access)
  SERPAPI_KEY (optional)  SerpAPI key for web search

hermes profile list также показывает колонку Distribution, чтобы вы могли с первого взгляда увидеть, какие из ваших профилей получены из репозиториев, а какие созданы вручную:

 Profile          Model                        Gateway      Alias        Distribution
 ───────────────    ───────────────────────────    ───────────    ───────────    ────────────────────
 default         claude-sonnet-4              stopped                  
  coder           gpt-5                        stopped      coder        
  research-bot    claude-opus-4                stopped      research-bot research-bot@1.0.0
  telemetry       claude-sonnet-4              running      telemetry    telemetry@2.3.1

Обновление

hermes profile update research-bot

Что происходит:

  1. Повторно клонирует репозиторий из сохранённого URL источника.

  2. Заменяет файлы, принадлежащие дистрибутиву (SOUL, навыки, cron, mcp.json).

  3. Сохраняет ваш config.yaml — вы могли настроить модель, температуру или другие параметры. Передайте --force-config, чтобы перезаписать.

  4. Никогда не трогает пользовательские данные: воспоминания, сессии, аутентификацию, .env, логи, состояние.

Никакой повторной загрузки всего архива. Никакого затирания ваших локальных изменений конфига. Никакого удаления истории разговоров.

Удаление

hermes profile delete research-bot

Подсказка удаления отображает информацию о дистрибутиве перед запросом подтверждения:

Profile: research-bot
Path:    ~/.hermes/profiles/research-bot
Model:   claude-opus-4 (anthropic)
Skills:  12
Distribution: research-bot@1.0.0
Installed from: https://github.com/you/research-bot

This will permanently delete:
   All config, API keys, memories, sessions, skills, cron jobs
   Command alias (~/.local/bin/research-bot)

Type 'research-bot' to confirm:

Так вы никогда случайно не удалите агента, не зная, откуда он взялся или не имея возможности переустановить его.


Примеры использования и паттерны

Личное: синхронизация одного агента между машинами

Вы создали исследовательского ассистента на ноутбуке. Вы хотите того же агента на рабочей станции.

# Ноутбук
cd ~/.hermes/profiles/research-bot
git init && git add . && git commit -m "initial"
git remote add origin git@github.com:you/research-bot.git
git push -u origin main

# Рабочая станция
hermes profile install github.com/you/research-bot --alias
# Заполните .env. Готово.

Любая итерация на ноутбуке (git commit && push) подтягивается на рабочую станцию командой hermes profile update research-bot. Воспоминания остаются на каждой машине — ноутбук помнит свои разговоры, рабочая станция — свои, они не пересекаются.

Команда: публикация проверенного внутреннего агента

Ваша инженерная команда хочет общего бота для ревью PR с определённым SOUL, конкретными навыками и cron-задачей, прогоняющей каждый PR через него.

# Лид инженерной команды
cd ~/.hermes/profiles/pr-reviewer
# ... сборка и настройка ...
git init && git add . && git commit -m "v1.0 PR reviewer"
git tag v1.0.0
git push -u origin main --tags    # отправка на внутренний Git-хост вашей компании

# Каждый инженер
hermes profile install git@github.com:your-org/pr-reviewer.git --alias
# Заполните .env своим собственным API-ключом (выставляется счёт им), .env.EXAMPLE показывает, что требуется
pr-reviewer chat

Когда лид выпускает v1.1 (улучшенный SOUL, новый навык), инженеры выполняют hermes profile update pr-reviewer, и все переходят на новую версию в течение нескольких минут.

Сообщество: публикация публичного агента

Вы создали что-то новое — может быть, «Polymarket trader» или «академический суммаризатор статей» или «ассистент для администрирования Minecraft-сервера». Вы хотите поделиться этим.

# Вы
cd ~/.hermes/profiles/polymarket-trader
# Напишите качественный README.md в корне репозитория — GitHub показывает его на странице репозитория
git init && git add . && git commit -m "v1.0"
git tag v1.0.0
# Опубликуйте в публичный GitHub-репозиторий
git remote add origin https://github.com/you/hermes-polymarket-trader.git
git push -u origin main --tags

# Любой желающий
hermes profile install github.com/you/hermes-polymarket-trader --alias

Опубликуйте команду установки в твиттере. Люди, которые попробуют, будут отправлять вам issue и PR. Если кто-то захочет кастомизировать — форкнут, тот же git-воркфлоу, который все уже знают.

Продукт: публикация специализированного агента

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

# distribution.yaml
name: telemetry-harness
version: 2.3.1
description: "Compliance telemetry harness  monitors and reviews regulated workflows"
hermes_requires: ">=0.13.0"
author: "Acme Compliance Inc."
license: "Commercial"

env_requires:
  - name: ACME_API_KEY
    description: "Your Acme Compliance license key (email support@acme.com)"
    required: true
  - name: OPENAI_API_KEY
    description: "OpenAI API key for model access"
    required: true
  - name: GRAPHITI_MCP_URL
    description: "URL for your Graphiti knowledge graph instance"
    required: false
    default: "http://127.0.0.1:8000/sse"

Ваши клиенты устанавливают одной командой; предпросмотр установки говорит им, какие ключи нужно подготовить; обновления выходят в тот момент, когда вы ставите тег нового релиза; их данные соответствия (memories/, sessions/) никогда не покидают их машины.

Эфемерное: одноразовые скрипты на общей инфраструктуре

Вы лидер ops. Вам нужен временный агент для диагностики производственного инцидента — готовый SOUL с правильными инструментами и MCP-подключениями — который будет работать на ноутбуках трёх дежурных инженеров в течение следующей недели.

# Вы
# Создайте профиль, закоммитьте, отправьте в приватный репозиторий
git push -u origin main

# Каждый дежурный
hermes profile install git@github.com:your-org/incident-2026-q2.git --alias

# Инцидент устранён — удаляем
hermes profile delete incident-2026-q2

Цикл установки-удаления достаточно лёгкий, чтобы быть одноразовым.


Рецепты

Фиксация конкретной версии

Фиксация git-ссылки (`#v1.2.0`) запланирована, но отсутствует в первом релизе — установка отслеживает ветку по умолчанию. Отслеживайте установленную версию через `hermes profile info <имя>` и воздержитесь от обновлений, пока не будете готовы.

Проверка вашей версии vs последней

# Ваша установленная версия
hermes profile info research-bot | grep Version

# Последняя версия в upstream (без установки)
git ls-remote --tags https://github.com/you/research-bot | tail -5

Сохранение локальных настроек конфига при обновлениях

Поведение обновления по умолчанию уже это делает: config.yaml сохраняется. Для надёжности записывайте свои локальные изменения в файл, который не принадлежит дистрибутиву:

# ~/.hermes/profiles/research-bot/local/my-overrides.yaml
# (дистрибутив никогда не трогает local/)

…и ссылайтесь на него из config.yaml или вашего SOUL по мере необходимости.

Принудительная чистая переустановка

# Снести и переустановить с нуля (также теряются воспоминания/сессии)
hermes profile delete research-bot --yes
hermes profile install github.com/you/research-bot --alias

# Обновление до текущего main, но сброс config.yaml до значений дистрибутива по умолчанию
hermes profile update research-bot --force-config --yes

Форк и кастомизация

Стандартный git-воркфлоу — дистрибутивы это просто репозитории:

# Форкните репозиторий на GitHub, затем установите свой форк
hermes profile install github.com/yourname/forked-research-bot --alias

# Итерируйте локально в ~/.hermes/profiles/forked-research-bot/
# Отредактируйте SOUL.md, закоммитьте, отправьте в свой форк
# Изменения из upstream: подтяните их в свой форк обычным способом

Тестирование дистрибутива перед отправкой

На машине автора:

# Установка из локальной директории (без git push)
hermes profile install ~/.hermes/profiles/research-bot --name research-bot-test --alias

# Доработка, удаление, переустановка, пока не будет правильно
hermes profile delete research-bot-test --yes
hermes profile install ~/.hermes/profiles/research-bot --name research-bot-test

Чего НЕТ в дистрибутиве (никогда)

Установщик жёстко исключает эти пути, даже если автор случайно их отправит. Никакая опция конфигурации не позволяет переопределить это — защита является регрессионно-тестируемым инвариантом:

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

Безопасность и доверие

Дистрибутивы профилей по умолчанию не подписаны. Вы доверяете:

Cron-задачи из дистрибутива не планируются автоматически — установщик выводит hermes -p <имя> cron list, и вы включаете их явно. SOUL.md и навыки АКТИВНЫ сразу после того, как вы начнёте общаться с профилем, поэтому прочитайте их перед первым запуском, если устанавливаете от незнакомого человека.

Грубая аналогия: установка дистрибутива похожа на установку расширения браузера или расширения VS Code. Малое трение, большая мощность, доверяйте источнику. Для внутренних корпоративных дистрибутивов используйте приватный репозиторий и свою обычную git-аутентификацию — ничего нового настраивать не нужно.

Будущие версии могут добавить подпись, lock-файл (.distribution-lock.yaml) с фиксированным SHA коммита и флаг --dry-run, показывающий diff перед применением обновления. Ничего из этого пока не реализовано.

Под капотом

Подробную реализацию, точное поведение CLI и все флаги см. в справочнике команд профилей.

Краткая версия:

Смотрите также