Разработка плагинов и практики промышленной эксплуатации 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:
Пример
# Простой пример плагина: записывать все вызовы 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 | В конце сессии | Освобождение ресурсов, формирование сводки |
Регистрация пользовательских инструментов
Добавление совершенно новых возможностей инструментов Агенту через плагины:
Пример
# Регистрация пользовательских инструментов — Агент может использовать их так же, как встроенные инструменты
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 export --format hermes > openclaw-config.json
# Импорт в Hermes
hermes import --from openclaw openclaw-config.json
# Проверить результаты миграции
hermes doctor
Сравнение основных концепций
| Концепции | OpenClaw | Hermes |
|---|---|---|
| Определение агента | JSON-конфигурация агента | SOUL.md + config.yaml |
| Рабочий процесс | Ручное написание YAML-потоков | Навык (SKILL.md) |
| Бэкенд памяти | Внешняя база данных | Встроенный SQLite + Подключаемый |
| Навыки/Инструменты | Плагин для кода | Markdown-файлы навыков |
| несколько экземпляров | Многопроцессная конфигурация | Система профилей |
Лучшие практики для продакшн-среды
Контрольный список безопасности
Рекомендуемая конфигурация безопасности для развертывания в продакшене:
Пример
# Рекомендуемая конфигурация безопасности для продакшн-среды
terminal:
backend: docker # Обязательно: изолировать среду выполнения команд Agent
approvals:
mode: smart # Опасные команды требуют подтверждения (или manual строже).
cron_mode: deny # Запланированные задачи по умолчанию отклоняют опасные команды
безопасность:
redact_secrets: true # Автоматически маскировать конфиденциальную информацию в журналах (включено по умолчанию)
Управление доступом в переменных окружения:
Пример
# Конфигурация контроля доступа для рабочей среды
GATEWAY_ALLOW_ALL_USERS=false # Никогда не разрешать всем пользователям
TELEGRAM_ALLOWED_USERS=ваш ID пользователя# Явный белый список
Контроль стоимости токенов
Вспомогательные задачи используют более дешёвые модели, значительно снижая операционные расходы:
Пример
# Использовать отдельную модель для вспомогательных задач, чтобы снизить затраты на токены
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 новых навыка)
Другие расширенияНавыки, изменённые пользователем, никогда не будут перезаписаны. Обновления синхронизируют только новые и изменённые части встроенных навыков.