Разработка плагинов и практики промышленной эксплуатации Hermes Agent

Эта глава предназначена для опытных пользователей: как расширить Hermes с помощью системы плагинов, как перейти с OpenClaw и лучшие практики обеспечения безопасности и оптимизации затрат при развёртывании Hermes в production.


Начало работы с разработкой плагинов

Hermes поддерживает три типа плагинов: плагины общего назначения (инструменты + хуки), провайдеры памяти и движки контекста.

Пример

# Интерактивное управление установленными плагинами
hermes plugins

# Управление из командной строки
hermes plugins list
hermes plugins install <path>
hermes plugins enable <name>
hermes plugins disable <name>

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

hermes dashboard

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

Система хуков

Наиболее часто используемая возможность плагинов — Hook — внедрение пользовательской логики в ключевых точках жизненного цикла Agent:

Пример

# Путь к файлу: plugin directory/logging_plugin.py
# Простой пример плагина: записывать все вызовы LLM
from hermes.plugins import Plugin, hook

class LoggingPlugin(Plugin):
    name = "logging-plugin"

    @hook("pre_llm_call")
    async def before_call(self, ctx):
        # Срабатывает перед каждым вызовом LLM
        print(f"[LOG] Собираемся вызвать LLM, текущая длина контекста: {len(ctx.messages)}")

    @hook("post_llm_call")
    async def after_call(self, ctx, response):
        # Срабатывает после каждого вызова LLM
        print(f"[LOG] Вызов LLM завершён, длина ответа: {len(response.content)}")

Доступные точки хуков

ХукМомент срабатыванияТипичное использование
pre_llm_callПеред вызовами LLMЗапись контекста, изменение промптов
post_llm_callПосле вызовов LLMЗапись ответов, статистический анализ
pre_tool_callПеред вызовом инструмента (можно перехватить/изменить)Проверка разрешений, фильтрация параметров
post_tool_callПосле вызова инструментаАудит результатов, логирование
on_message_receivedПри получении сообщений пользователяПредварительная обработка сообщений, фильтрация недопустимых слов
on_session_startВ начале сессииИнициализация ресурсов, внедрение контекста
on_session_endВ конце сессииОсвобождение ресурсов, формирование сводки

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

Добавление совершенно новых возможностей инструментов Агенту через плагины:

Пример

# Путь к файлу: plugin directory/my_tools.py
# Регистрация пользовательских инструментов — Агент может использовать их так же, как встроенные инструменты
from hermes.plugins import Plugin

class MyPlugin(Plugin):
    name = "my-tools"

    def register_tools(self, ctx):
        # Регистрация пользовательских инструментов, видимых в системном промпте агента
        ctx.register_tool(
            name="my_custom_tool",
            description="Этот инструмент делает что-то, используйте, когда пользователю нужно X",
            parameters={
                "type": "object",
                "properties": {
                    "input": {
                        "type": "string",
                        "description": "Описание входного параметра"
                    }
                },
                "required": ["input"]
            },
            handler=self.my_tool_handler
        )

    async def my_tool_handler(self, **kwargs):
        # Фактическая логика выполнения инструмента
        input_text = kwargs.get("input", "")
        # ... логика обработки ...
        return {"result": "done"}

Миграция с OpenClaw

Если вы используете OpenClaw, предоставляется официальное решение для миграции без простоя:

Пример

# Экспорт конфигурации OpenClaw
openclaw export --format hermes > openclaw-config.json

# Импорт в Hermes
hermes import --from openclaw openclaw-config.json

# Проверить результаты миграции
hermes doctor

Сравнение основных концепций

КонцепцииOpenClawHermes
Определение агентаJSON-конфигурация агентаSOUL.md + config.yaml
Рабочий процессРучное написание YAML-потоковНавык (SKILL.md)
Бэкенд памятиВнешняя база данныхВстроенный SQLite + Подключаемый
Навыки/ИнструментыПлагин для кодаMarkdown-файлы навыков
несколько экземпляровМногопроцессная конфигурацияСистема профилей

Лучшие практики для продакшн-среды

Контрольный список безопасности

Рекомендуемая конфигурация безопасности для развертывания в продакшене:

Пример

# Путь к файлу: ~/.hermes/config.yaml
# Рекомендуемая конфигурация безопасности для продакшн-среды
terminal
:
  backend
: docker          # Обязательно: изолировать среду выполнения команд Agent

approvals
:
  mode
: smart              # Опасные команды требуют подтверждения (или manual строже).
  cron_mode
: deny          # Запланированные задачи по умолчанию отклоняют опасные команды

безопасность
:
  redact_secrets
: true     # Автоматически маскировать конфиденциальную информацию в журналах (включено по умолчанию)

Управление доступом в переменных окружения:

Пример

# Путь к файлу: ~/.hermes/.env
# Конфигурация контроля доступа для рабочей среды
GATEWAY_ALLOW_ALL_USERS=false           # Никогда не разрешать всем пользователям
TELEGRAM_ALLOWED_USERS=ваш ID пользователя# Явный белый список

Контроль стоимости токенов

Вспомогательные задачи используют более дешёвые модели, значительно снижая операционные расходы:

Пример

# Путь к файлу: ~/.hermes/config.yaml
# Использовать отдельную модель для вспомогательных задач, чтобы снизить затраты на токены
auxiliary
:
  background_review
:
    provider
: openrouter
    model
: google/gemini-3-flash-preview    # Не нужно использовать основную модель

  vision
:
    provider
: openrouter
    model
: google/gemini-2.5-flash-preview

  session_search
:
    provider
: openrouter
    model
: google/gemini-3-flash-preview

Мультипрофильный мониторинг шлюза

Пример

# Просмотр состояния шлюза для всех профилей одновременно
hermes profile list

# Пакетный перезапуск всех шлюзов
for profile in coder assistant researcher; do
  $profile gateway restart
done

Стратегия обновления

Обновление кода и встроенных навыков всех профилей одной командой:

Пример

# Однократное обновление кода + синхронизация новых встроенных навыков для всех профилей
hermes update
# → Обновление кода (12 коммитов)
# → Синхронизация навыков:
# default (уже актуальная)
# coder (+2 новых навыка)
# assistant (+2 новых навыка)

Навыки, изменённые пользователем, никогда не будут перезаписаны. Обновления синхронизируют только новые и изменённые части встроенных навыков.

Другие расширения