Встроенные плагины
Hermes поставляется с небольшим набором плагинов, встроенных в репозиторий. Они находятся в <repo>/plugins/<name>/ и загружаются автоматически вместе с плагинами пользователя из ~/.hermes/plugins/. Они используют тот же интерфейс, что и сторонние плагины — хуки, инструменты, слеш-команды — но поддерживаются внутри репозитория.
Смотрите страницу Plugins для общего описания системы плагинов, и Build a Hermes Plugin, чтобы создать свой собственный.
Как работает обнаружение
PluginManager сканирует четыре источника по порядку:
-
Встроенные —
<repo>/plugins/<name>/(документируемые на этой странице) -
Пользовательские —
~/.hermes/plugins/<name>/ -
Проектные —
./.hermes/plugins/<name>/(требуетHERMES_ENABLE_PROJECT_PLUGINS=1) -
Точки входа pip —
hermes_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.
Что добавляет:
-
Безголового виртуального участника, который подключается к Meet URL, используя браузерную автоматизацию
-
Транскрипцию аудио встречи в реальном времени через настроенный STT-провайдер
-
Набор инструментов
meet_summarize/meet_speak/meet_followup, которые агент вызывает для действий на основе услышанного -
Артефакты после встречи (транскрипт, заметки с указанием говорящего, пункты действий), сохраняемые в
~/.hermes/cache/google_meet/<meeting_id>/
Настройка:
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/state.dbна бэкенде панели -
Статистика по каждой сессии кэшируется по отпечатку
(started_at, last_active), поэтому при последующих сканированиях анализируются только новые или изменённые сессии -
Первое сканирование выполняется в фоновом потоке — панель никогда не блокируется в ожидании, даже при базах данных с тысячами сессий
-
Состояние разблокировки сохраняется в
$HERMES_HOME/plugins/hermes-achievements/state.json
Прогресс по уровням: Медь → Серебро → Золото → Алмаз → Олимпиец. Каждая карточка содержит раздел «Что учитывается» с точным описанием отслеживаемого показателя.
Состояния достижений:
| Состояние | Значение |
|---|---|
| Разблокировано | Достигнут как минимум один уровень |
| Обнаружено | Известное достижение, прогресс виден, ещё не заработано |
| Секретное | Скрыто, пока 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 |
Кэш статистики по сессиям, ключом по отпечатку (ускоряет тёплые повторные сканирования) |
Замечания по производительности:
-
Холодное сканирование ~8 000 сессий занимает несколько минут. Оно выполняется в фоновом потоке при первом запросе панели; UI показывает временный placeholder и опрашивает
/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]) -
Поведение полезно большинству пользователей и является opt-out, а не opt-in
-
Логика привязана к хукам жизненного цикла, которые агенту иначе пришлось бы помнить о вызове
-
Он дополняет ключевую функциональность без расширения видимой модели поверхности инструментов
Контрпримеры — вещи, которые должны оставаться устанавливаемыми пользователем плагинами, а не встроенными: сторонние интеграции с API-ключами, узкоспециализированные рабочие процессы, большие деревья зависимостей, всё, что может существенно изменить поведение агента по умолчанию.