Встроенные плагины
Гермес держит небольшой набор вилок, встроенных в репозиторий. Они находятся в <repo>/plugins/<name>/ и загружаются автоматически вместе с выбранными пользовательскими плагинами в ~/.hermes/plugins/. Они используют же интерфейсные плагины, а также внешние плагины — хуки, инструменты, слеш-команды — просто используются в исходном коде.
См. страница Плагины для общей информации о системе плагинов и Создание плагина Hermes, чтобы написать свой урожай.
Как обнаружено работание
PluginManager сканирует четыре источника в следующем порядке:
- Встроенные —
<repo>/plugins/<имя>/(то, что документировано на этой странице) - Пользовательские —
~/.hermes/plugins/<имя>/ - Проектные —
./.hermes/plugins/<имя>/(требуетсяHERMES_ENABLE_PROJECT_PLUGINS=1) - Точки входа Pip —
hermes_agent.plugins
При конфликте имен побеждают более поздние источники — используйте плагин с именем disk-cleanup, чтобы заменить встроенный.
plugins/memory/ и plugins/context_engine/ намеренно исключены из встроенных плагинов. Эти каталоги используют свои собственные пути определения пути, поскольку провайдеры памяти и контекстные движки являются провайдерами с особым выбором, настраиваемыми через hermes Memory setup/context.engine в config.
Встроенные плагины являются опциональными
Встроенные плагины для подключения отключены. Обнаружение их находит (они встроены в «список плагинов Hermes» и в интерактивном пользовательском интерфейсе «Плагины Hermes»), но ни один из них не загружается, пока вы явно не его:
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>.
| Плагин | Тип | Назначение |
|---|---|---|
очистка диска |
хуки + слэш-команда | Автоматически отслеживайте эфемерные файлы и очищайте их по завершении сеанса |
наблюдаемость/langfuse |
хуки | Трассировать шаги/вызовы LLM/инструменты в Langfuse |
спотифай |
бэкенд (7 инструментов) | Нативное звучание Spotify, очередь, поиск, плейлисты, альбомы, библиотека |
google_meet |
автономный | Присоединяться к звонкам Встречайте, транскрипция в первое время, дополнительное дуплексное аудио |
image_gen/openai |
резервные изображения | Беэкенд генерации изображений OpenAI gpt-image-2 (альтернатива FAL) |
image_gen/openai-codex |
резервные изображения | Генерация изображений OpenAI через OAuth Codex |
image_gen/xai |
резервные изображения | Бэкенд xAI grok-2-image |
гермес-достижения |
вкладка панели управления | Коллекции значков в стиле Steam, созданные в вашей истории сеансов Hermes |
канбан/панель мониторинга |
вкладка панели управления | UI доски Канбан для многопользовательского диспетчера — задачи, комментарии, рассылка, переключение досок. См. Мультиагент Канбан. |
Провайдеры памяти (plugins/memory/*) и контекстные движки (plugins/context_engine/*) перечисляются отдельно в Memory Providers — они управляются через hermes Memory и hermes Plugins соответственно. Полная информация по каждому плагину для двух долговременных рабочих плагинов на основе хуков приведена ниже.
очистка диска
Автоматически отслеживаются и сохраняются эфемерные файлы, созданные во время сеансов — тестовые скрипты, данные временных выходных, журналы cron, виртуальные профили Chrome — без необходимости агенту помнить о вызове инструмента.
Как это работает:
| Хук | Поведение |
|---|---|
post_tool_call |
Когда write_file / terminal / patch создает файл, соответствующий test_*, tmp_* или *.test.* внутри HERMES_HOME или /tmp/hermes-*, молча отследите его как test / temp / cron-output. |
on_session_end |
Если какие-либо тестовые файлы были автоматически отслежены во время шага, выберите безопасную «быструю» очистку и запишите однострочную сводку. В противном случае молчит. |
Правила удаления:
| Категория | Порог | Подтверждение |
|---|---|---|
тест |
каждое завершение сеанса | Никогда |
темп |
>7 дней с момента идентификации | Никогда |
cron-выход |
>14 дней с момента идентификации | Никогда |
| пустые каталоги под HERMES_HOME | всегда | Никогда |
исследования |
>30 дней, за подключение 10 самых новых | Всегда (только глубокая) |
хром-профиль |
>14 дней с момента идентификации | Всегда (только глубокая) |
| файлы >500 МБ | никогда автоматически | Всегда (только глубокая) |
Слеш-команда — /disk-cleanup доступна как в CLI, так и в сеансах шлюза:
/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 включают очистку диска (или из ссылки в Плагины Гермеса).
Отключение: Плагины Hermes отключают очистку диска.
наблюдаемость/langfuse
Трассирует шаги Hermes, вызовы LLM и вызовы инструментов в Langfuse — платформа наблюдения LLM с открытым исходным кодом. Один интервал за шаг, одна генерация 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 # или ваш собственный URL
Как это работает:
| Хук | Поведение |
|---|---|
pre_api_request / pre_llm_call |
Открыть (или повторно использовать) корневой пролет «Поворот Гермеса» для каждого шага. Запустить дочернее наблюдение генерации для этого вызова API с последовательными последними сообщениями в качестве ввода. |
post_api_request / post_llm_call |
Закройте генерацию, прикрепите usage_details, cost_details, finish_reason, выведите ассистента + вызовы инструментов. Если нет вызовов инструментов и непустое уважение, закройте шаг. |
pre_tool_call |
Запустить дочернее наблюдение tool с очищенными args. |
post_tool_call |
Закройте инструмент наблюдения с очищенным «результатом». Полезные нагрузки read_file суммируются (голова + хвост + количество пропущенных строк), чтобы обеспечить большую стабильность файла в пределах HERMES_LANGFUSE_MAX_CHARS. |
Группировка сеансов осуществляется по ID-сеансу Hermes (или задаче ID для под-агентов) через langfuse.propagate_attributes, поэтому все в одном сеансе hermeschat находится под одним сеансом Langfuse.
Проверка:
hermes plugins list # observability/langfuse должно показывать "enabled"
hermes chat -q "hello" # проверьте UI Langfuse на наличие трассировки "Hermes turn"
Дополнительная настройка (в .env):
| Переменная | По умолчанию | Назначение |
|---|---|---|
HERMES_LANGFUSE_ENV |
— | Тег окружения на трассировках (постановка, постановка, …) |
HERMES_LANGFUSE_RELEASE |
— | Тег релиза/версии |
HERMES_LANGFUSE_SAMPLE_RATE |
1.0 |
Коэффициент выбора, экспертный SDK (0.0–1.0) |
HERMES_LANGFUSE_MAX_CHARS |
12000 |
Усечение на поле для сравнения результатов / инструмента аргументов / инструмента результатов |
HERMES_LANGFUSE_DEBUG |
ложь |
Подробная регистрация плагина в agent.log |
Принимаются как переменные с префиксом Hermes, так и стандартные переменные окружения SDK (LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_BASE_URL) — переменные с префиксом Hermes имеют приоритет, если установлены оба.
Производительность: клиент Langfuse кэшируется после первого вызова хука. Если учетные данные или SDK отсутствуют, это решение также включается — кэш-хуки быстро возвращаются без повторной проверки окружения или перезагрузки конфигурации.
Отключение: плагины Hermes отключают наблюдаемость/langfuse. Модуль плагина все еще обнаруживается, но модуль кода неэффективен, пока вы не увидите его снова.
google_meet
Представляем агенту присоединяться, транскрибировать и участвовать в звонках Google Meet — делать заметки на встрече, суммировать обсуждение после уточнения конкретных моментов и (опционально) озвучивать ответы обратно в звонок через TTS.
Что добавлено:
- Безголовый виртуальный участник, который присоединяется к URL Meet с помощью браузера автоматизации.
- Транскрипция аудио встречи в первое время через настроенного STT-провайдера
- Набор инструментов
meet_summarize/meet_speak/meet_followup, который агент возникает для действий на основе конкретного - Артефакты после встречи (транскрипт, заметки с указанием говорящего, пунктов действий) отображаются в
~/.hermes/cache/google_meet/<meeting_id>/
Настройка:
hermes plugins enable google_meet
# При первом использовании предложит войти через OAuth-поток плагина —
# требуется учетная запись Google с доступом к Meet. Может потребоваться
# одобрение организатора, если встреча требует "только приглашенные участники".
Использование из чата:
"Join meet.google.com/abc-defg-hij and take notes. After the call, send me a summary with action items."
Агент запускает присоединение к встрече, транслирует транскрипцию обратно в свой контекст по ходу звонка и создает структурированную сводку, когда встреча заканчивается (или когда вы скажете ему остановиться).
Когда использовать: регулярные стендапы, где нужен бот для транскрипции + сводки для асинхронных участников; интервью в стиле допросов, где нужны структурированные заметки; любой случай, когда иначе понадобился бы Fireflies / Otter / Grain. Если вы не хотите, чтобы AI слушал — не включайте его.
Отключение: 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
Прогресс по уровням: Copper → Silver → Gold → Diamond → Olympian. Каждая карточка показывает раздел "What counts", в котором указана точная отслеживаемая метрика.
Состояния достижений:
| Состояние | Значение |
|---|---|
| Unlocked | Достигнут хотя бы один уровень |
| Discovered | Известное достижение, прогресс виден, еще не заработано |
| Secret | Скрыто, пока Hermes не обнаружит первый связанный сигнал в вашей истории |
API — маршруты монтируются в /api/plugins/hermes-achievements/:
| Эндпоинт | Назначение |
|---|---|
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 — см. Build a Hermes Plugin. Единственные отличия:
- Каталог находится в
<repo>/plugins/<name>/вместо~/.hermes/plugins/<name>/ - Источник манифеста указывается как
bundledвhermes plugins list - Пользовательские плагины с тем же именем переопределяют встроенную версию
Плагин является хорошим кандидатом для включения в дерево, когда:
- У него нет опциональных зависимостей (или они уже являются зависимостями
pip install.[all]) - Поведение полезно большинству пользователей и является отказным, а не согласием
- Логика привязана к хукам жизненного цикла, которые агенту иначе пришлось бы помнить о вызове
- Он дополняет основную возможность без расширения видимой модели поверхности инструментов
Контрпримеры — вещи, которые должны оставаться устанавливаемыми пользователем плагинами, а не встроенными: сторонние интеграции с API-ключами, нишевые рабочие процессы, большие деревья зависимостей, все, что существенно изменило бы поведение агента по умолчанию.