Перейти к содержанию

In Plugins

На этой странице

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

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

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

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), но ни один не загружается, пока вы явно не включите его:

[code] hermes plugins enable disk-cleanup

[/code]

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

[code] plugins: enabled: - disk-cleanup

[/code]

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

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

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

[/code]

Текущий состав

Репозиторий включает следующие встроенные плагины в 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 по OAuth Codex
image_gen/xai бэкенд изображений Бэкенд xAI grok-2-image
hermes-achievements вкладка панели Значки в стиле Steam, созданные на основе реальной истории сессий Hermes
example-dashboard пример панели Эталонный плагин панели для Расширения панели
strike-freedom-cockpit скин панели Пример пользовательского скина панели

Провайдеры памяти (plugins/memory/*) и контекстные движки (plugins/context_engine/*) перечислены отдельно на странице Провайдеры памяти — они управляются через 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 последних Всегда (только глубокая)
chrome-profile >14 дней с момента отслеживания Всегда (только глубокая)
файлы >500 МБ никогда автоматически Всегда (только глубокая)

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

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

[/code]

Состояние — всё хранится в $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 видит ту же разбивку (ввод / вывод / cache_read_input_tokens / cache_creation_input_tokens / reasoning_tokens), что и в hermes logs.

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

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

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

[/code]

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

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

[code] pip install langfuse hermes plugins enable observability/langfuse

[/code]

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

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

[/code]

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

Хук Поведение
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.

Проверка:

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

[/code]

Опциональная настройка.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.

Что добавляет: * Безголовый виртуальный участник, подключающийся к Meet-ссылке через браузерную автоматизацию * Живая транскрипция аудио конференции через настроенный STT-провайдер * Набор инструментов meet_summarize / meet_speak / meet_followup, которые агент вызывает для действий на основе услышанного * Артефакты после встречи (транскрипт, заметки с указанием говорящего, пункты действий), сохраняемые в ~/.hermes/cache/google_meet/<meeting_id>/

Настройка:

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

[/code]

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

«Подключись к 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/state.db на бэкенде панели * Статистика по сессиям кэшируется по отпечатку (started_at, last_active), поэтому при последующих сканированиях анализируются только новые или изменённые сессии * Первое сканирование выполняется в фоновом потоке — панель никогда не блокируется в ожидании, даже на базах данных с тысячами сессий * Состояние разблокировок сохраняется в $HERMES_HOME/plugins/hermes-achievements/state.json

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

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

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

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

Endpoint Назначение
GET /achievements Полный каталог с состоянием разблокировки каждого значка (возвращает заглушку «ожидание» пока выполняется первое холодное сканирование)
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 Кэш статистики по сессиям, ключ — отпечаток (ускоряет тёплые повторные сканирования)

Замечания по производительности: * Холодное сканирование ~8 000 сессий занимает несколько минут. Оно выполняется в фоновом потоке при первом запросе панели; UI видит заполнитель «ожидание» и опрашивает /scan-status. * Инкрементальные результаты во время холодного сканирования — сканер публикует частичный снимок каждые ~250 сессий, так что каждый обновление панели показывает всё больше разблокированных значков по мере сканирования. Никакого минутного ожидания на нулях. * Тёплое повторное сканирование переиспользует статистику по сессиям для каждой сессии, чей отпечаток started_at + last_active совпадает с контрольной точкой — выполняется за секунды даже на больших историях. * TTL снимка в памяти — 120 с; устаревшие запросы немедленно обслуживают старый снимок и запускают фоновое обновление. Вы никогда не ждёте спиннер просто из-за истечения TTL.

Включение: Ничего включать не нужно — 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 — см. Создание плагина Hermes. Отличия только в следующем: * Директория находится в <repo>/plugins/<name>/, а не в ~/.hermes/plugins/<name>/ * Источник манифеста отображается как bundled в hermes plugins list * Пользовательские плагины с тем же именем переопределяют встроенную версию

Плагин является хорошим кандидатом для включения в репозиторий, когда: * У него нет опциональных зависимостей (или они уже являются зависимостями pip install .[all]) * Поведение полезно большинству пользователей и лучше реализовано как opt-out, а не opt-in * Логика привязана к хукам жизненного цикла, которые агенту иначе пришлось бы помнить и вызывать вручную * Он дополняет основную функциональность, не расширяя поверхность инструментов, видимых модели

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