Встроенные плагины

Hermes поставляется с небольшим набором плагинов, встроенных в репозиторий. Они находятся в <repo>/plugins/<name>/ и загружаются автоматически вместе с плагинами пользователя из ~/.hermes/plugins/. Они используют тот же интерфейс, что и сторонние плагины — хуки, инструменты, слеш-команды — но поддерживаются внутри репозитория.

Смотрите страницу Plugins для общего описания системы плагинов, и Build a Hermes Plugin, чтобы создать свой собственный.

Как работает обнаружение

PluginManager сканирует четыре источника по порядку:

  1. Встроенные<repo>/plugins/<name>/ (документируемые на этой странице)

  2. Пользовательские~/.hermes/plugins/<name>/

  3. Проектные./.hermes/plugins/<name>/ (требует HERMES_ENABLE_PROJECT_PLUGINS=1)

  4. Точки входа piphermes_agent.plugins

При конфликте имён побеждают источники позднее в списке — пользовательский плагин с именем disk-cleanup заменит встроенный.

Директории plugins/memory/ и plugins/context_engine/ намеренно исключены из сканирования встроенных плагинов. Эти директории используют собственные пути обнаружения, поскольку провайдеры памяти и контекстные движки являются одноединичными провайдерами, настраиваемыми через hermes memory setup / context.engine в конфиге.

Встроенные плагины подключаются вручную

Встроенные плагины поставляются отключёнными. Обнаружение находит их (они отображаются в hermes plugins list и интерактивном UI hermes plugins), но ни один не загружается, пока вы явно не включите его:

hermes plugins enable disk-cleanup

Или через ~/.hermes/config.yaml:

plugins:
  enabled:
    - disk-cleanup

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

Чтобы снова отключить встроенный плагин:

hermes plugins disable disk-cleanup
# или: удалите его из plugins.enabled в config.yaml

Поставляемые плагины

Репозиторий включает следующие встроенные плагины в plugins/. Все подключаются вручную — включите их через hermes plugins enable <name>.

Плагин Тип Назначение
disk-cleanup хуки + слеш-команда Автоматически отслеживать временные файлы и очищать их при завершении сессии
observability/langfuse хуки Трассировка витков / вызовов LLM / инструментов в Langfuse
spotify бэкенд (7 инструментов) Нативное управление Spotify: воспроизведение, очередь, поиск, плейлисты, альбомы, библиотека
google_meet автономный Подключение к Meet, транскрипция в реальном времени, опциональное двустороннее аудио
image_gen/openai бэкенд генерации изображений Бэкенд генерации изображений OpenAI gpt-image-2 (альтернатива FAL)
image_gen/openai-codex бэкенд генерации изображений Генерация изображений OpenAI через Codex OAuth
image_gen/xai бэкенд генерации изображений Бэкенд xAI grok-2-image
hermes-achievements вкладка панели Коллекционные значки в стиле Steam, созданные на основе истории ваших сессий Hermes
kanban/dashboard вкладка панели UI канбан-доски для многопользовательского диспетчера — задачи, комментарии, рассылка, переключение досок. См. Kanban Multi-Agent.

Провайдеры памяти (plugins/memory/*) и контекстные движки (plugins/context_engine/*) перечислены отдельно на странице Memory Providers — они управляются через hermes memory и hermes plugins соответственно. Полное описание двух долгоиграющих плагинов на хуках приведено ниже.

disk-cleanup

Автоматически отслеживает и удаляет временные файлы, созданные во время сессий — тестовые скрипты, временные выводы, логи cron, устаревшие профили Chrome — без необходимости агенту помнить о вызове инструмента.

Как это работает:

Хук Поведение
post_tool_call Когда write_file / terminal / patch создаёт файл, соответствующий шаблону test_*, tmp_* или *.test.* внутри HERMES_HOME или /tmp/hermes-*, бесшумно отслеживать его как test / temp / cron-output.
on_session_end Если во время витка были автоматически отслежены тестовые файлы, выполнить безопасную quick очистку и записать однострочную сводку. В противном случае ничего не делать.

Правила удаления:

Категория Порог Подтверждение
test каждое завершение сессии Никогда
temp >7 дней с момента отслеживания Никогда
cron-output >14 дней с момента отслеживания Никогда
пустые директории в HERMES_HOME всегда Никогда
research >30 дней, кроме 10 самых новых Всегда (только deep)
chrome-profile >14 дней с момента отслеживания Всегда (только deep)
файлы >500 МБ никогда автоматически Всегда (только deep)

Слеш-команда/disk-cleanup доступна как в CLI, так и в gateway-сессиях:

/disk-cleanup status                     # разбивка + топ-10 крупнейших
/disk-cleanup dry-run                    # предпросмотр без удаления
/disk-cleanup quick                      # выполнить безопасную очистку сейчас
/disk-cleanup deep                       # quick + список элементов, требующих подтверждения
/disk-cleanup track <path> <category>    # ручное отслеживание
/disk-cleanup forget <path>              # прекратить отслеживание (не удаляет)

Состояние — всё хранится в $HERMES_HOME/disk-cleanup/:

Файл Содержимое
tracked.json Отслеживаемые пути с категорией, размером и временной меткой
tracked.json.bak Резервная копия атомарной записи
cleanup.log Аудиторский журнал только для добавления каждой операции отслеживания / пропуска / отклонения / удаления

Безопасность — очистка затрагивает только пути внутри HERMES_HOME или /tmp/hermes-*. Монтирования Windows (/mnt/c/...) отклоняются. Известные директории состояния верхнего уровня (logs/, memories/, sessions/, cron/, cache/, skills/, plugins/, disk-cleanup/) никогда не удаляются, даже если пусты — свежая установка не будет опустошена при первом завершении сессии.

Включение: hermes plugins enable disk-cleanup (или отметьте флажок в hermes plugins).

Отключение: hermes plugins disable disk-cleanup.

observability/langfuse

Трассирует витки Hermes, вызовы LLM и вызовы инструментов в Langfuse — открытую платформу наблюдаемости LLM. Один span на виток, одна генерация на вызов API, одно наблюдение инструмента на вызов инструмента. Итоги использования, количество токенов по типам и оценка стоимости берутся из канонических чисел agent.usage_pricing Hermes, поэтому панель Langfuse видит ту же разбивку (input / output / cache_read_input_tokens / cache_creation_input_tokens / reasoning_tokens), что и hermes logs.

Плагин работает по принципу «отказоустойчивости»: отсутствие SDK, учётных данных или временная ошибка Langfuse — всё превращается в молчаливую пустую операцию в хуке. Цикл агента никогда не затрагивается.

Настройка (интерактивная — рекомендуется):

hermes tools          # → Langfuse Observability → Cloud или Self-Hosted

Мастер собирает ваши ключи, выполняет pip install для SDK langfuse и добавляет observability/langfuse в plugins.enabled. Перезапустите Hermes — и следующий виток отправит трассировку.

Настройка (вручную):

pip install langfuse
hermes plugins enable observability/langfuse

Затем поместите учётные данные в ~/.hermes/.env:

HERMES_LANGFUSE_PUBLIC_KEY=pk-lf-...
HERMES_LANGFUSE_SECRET_KEY=sk-lf-...
HERMES_LANGFUSE_BASE_URL=https://cloud.langfuse.com   # или ваш self-hosted URL

Как это работает:

Хук Поведение
pre_api_request / pre_llm_call Открыть (или переиспользовать) корневой span витка «Hermes turn». Запустить дочернее наблюдение generation для этого вызова API с сериализованными последними сообщениями в качестве входа.
post_api_request / post_llm_call Закрыть генерацию, прикрепить usage_details, cost_details, finish_reason, вывод ассистента + вызовы инструментов. Если нет вызовов инструментов и содержимое непустое, закрыть виток.
pre_tool_call Запустить дочернее наблюдение tool с очищенными args.
post_tool_call Закрыть наблюдение инструмента с очищенным result. Полезные данные read_file суммируются (голова + хвост + количество пропущенных строк), чтобы чтение большого файла оставалось в пределах HERMES_LANGFUSE_MAX_CHARS.

Группировка сессий привязана к ID сессии Hermes (или ID задачи для под-агентов) через langfuse.propagate_attributes, поэтому всё в одной сессии hermes chat находится в одной сессии Langfuse.

Проверка:

hermes plugins list                 # observability/langfuse должен показывать "enabled"
hermes chat -q "hello"              # проверьте UI Langfuse на наличие трассировки "Hermes turn"

Опциональная настройка.env):

Переменная По умолчанию Назначение
HERMES_LANGFUSE_ENV Тег окружения на трассировках (production, staging, …)
HERMES_LANGFUSE_RELEASE Тег релиза/версии
HERMES_LANGFUSE_SAMPLE_RATE 1.0 Коэффициент сэмплирования, передаваемый SDK (0.0–1.0)
HERMES_LANGFUSE_MAX_CHARS 12000 Усечение на поле для содержимого сообщений / аргументов инструментов / результатов инструментов
HERMES_LANGFUSE_DEBUG false Подробное логирование плагина в agent.log

Переменные окружения с префиксом Hermes и стандартные переменные SDK (LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_BASE_URL) — оба варианта принимаются. Префикс Hermes имеет приоритет, если заданы оба.

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

Отключение: hermes plugins disable observability/langfuse. Модуль плагина всё ещё обнаруживается, но код модуля не выполняется, пока вы снова не включите его.

google_meet

Позволяет агенту подключаться к звонкам Google Meet, транскрибировать их и участвовать — делать заметки на встрече, суммировать обсуждение после, задавать уточняющие вопросы по конкретным пунктам и (опционально) озвучивать ответы обратно в звонок через TTS.

Что добавляет:

Настройка:

hermes plugins enable google_meet
# При первом использовании предложит войти через OAuth-поток плагина —
# требуется аккаунт Google с доступом к Meet. Может потребоваться
# одобрение организатора, если встреча требует «только приглашённые».

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

«Подключись к meet.google.com/abc-defg-hij и делай заметки. После звонка отправь мне сводку с пунктами действий.»

Агент запускает подключение к встрече, передаёт транскрипцию в свой контекст по мере хода звонка и формирует структурированную сводку, когда встреча завершается (или когда вы скажете остановиться).

Когда использовать: регулярные стендапы, где нужен бот для транскрипции и сводки для асинхронных участников; интервью в стиле допросов, где нужны структурированные заметки; любые случаи, когда иначе потребовались бы Fireflies / Otter / Grain. Когда не хотите, чтобы ИИ слушал — не включайте.

Отключение: hermes plugins disable google_meet. Все кэшированные транскрипты и записи остаются в ~/.hermes/cache/google_meet/, пока вы не удалите их вручную.

hermes-achievements

Добавляет вкладку достижений в стиле Steam на панель управления — 60+ коллекционных многоуровневых значков, созданных из реальной истории сессий Hermes. Цепочки инструментов, паттерны отладки, серии «vibe-coding», использование навыков/памяти, разнообразие моделей/провайдеров, жизненные особенности (ночные и выходные сессии). Исходно создан @PCinkusz как внешний плагин; перенесён в репозиторий, чтобы оставаться синхронизированным с изменениями функциональности Hermes.

Как это работает:

Прогресс по уровням: Медь → Серебро → Золото → Алмаз → Олимпиец. Каждая карточка содержит раздел «Что учитывается» с точным описанием отслеживаемого показателя.

Состояния достижений:

Состояние Значение
Разблокировано Достигнут как минимум один уровень
Обнаружено Известное достижение, прогресс виден, ещё не заработано
Секретное Скрыто, пока Hermes не обнаружит первый связанный сигнал в вашей истории

API — маршруты монтируются по пути /api/plugins/hermes-achievements/:

EndPoint Назначение
GET /achievements Полный каталог с состоянием разблокировки каждого значка (возвращает временный placeholder, пока выполняется первое холодное сканирование)
GET /scan-status Состояние фонового сканера: idle / running / failed, последняя длительность, количество запусков
GET /recent-unlocks Двадцать последних разблокированных значков, новейшие первыми
GET /sessions/{id}/badges Значки, заработанные преимущественно в одной конкретной сессии
POST /rescan Ручное синхронное повторное сканирование (блокируется; используйте, когда пользователь нажимает кнопку повторного сканирования)
POST /reset-state Очистить историю разблокировок и кэшированный снимок

Файлы состояния — находятся в $HERMES_HOME/plugins/hermes-achievements/:

Файл Содержимое
state.json История разблокировок: какие значки вы заработали и когда. Стабильно между обновлениями Hermes.
scan_snapshot.json Полезные данные последнего завершённого сканирования (отдаются сразу при загрузке панели)
scan_checkpoint.json Кэш статистики по сессиям, ключом по отпечатку (ускоряет тёплые повторные сканирования)

Замечания по производительности:

Включение: Ничего включать не нужно — hermes-achievements это плагин только для панели (нет хуков жизненного цикла, нет видимых модели инструментов). Он автоматически регистрируется как вкладка в hermes dashboard при первом запуске. Конфиг plugins.enabled управляет только плагинами с хуками/инструментами; плагины панели обнаруживаются исключительно через их dashboard/manifest.json.

Отказ от использования: Удалите или переименуйте plugins/hermes-achievements/dashboard/manifest.json, или переопределите его пользовательским плагином с тем же именем в ~/.hermes/plugins/hermes-achievements/, который не содержит панели. Файлы состояния плагина в $HERMES_HOME/plugins/hermes-achievements/ сохраняются — переустановка сохраняет историю ваших разблокировок.

Добавление встроенного плагина

Встроенные плагины пишутся точно так же, как и любые другие плагины Hermes — см. Build a Hermes Plugin. Единственные отличия:

Плагин является хорошим кандидатом для включения в репозиторий, когда:

Контрпримеры — вещи, которые должны оставаться устанавливаемыми пользователем плагинами, а не встроенными: сторонние интеграции с API-ключами, узкоспециализированные рабочие процессы, большие деревья зависимостей, всё, что может существенно изменить поведение агента по умолчанию.