Встроенные плагины
VibeOS поставляется с небольшим набором плагинов, включённых в репозиторий. Они находятся в каталоге <repo>/plugins/<name>/ и загружаются автоматически вместе с плагинами, установленными пользователем в ~/.vibeos/plugins/. Они используют тот же интерфейс, что и сторонние плагины — хуки, инструменты, слеш-команды — но поддерживаются в основном дереве исходного кода.
Общую информацию о системе плагинов см. на странице Плагины, а инструкцию по созданию собственного плагина — в руководстве Создание плагина VibeOS.
Как работает обнаружение
PluginManager сканирует четыре источника в следующем порядке:
- Встроенные —
<repo>/plugins/<name>/(то, что описано на этой странице) - Пользовательские —
~/.vibeos/plugins/<name>/ - Проектные —
./.vibeos/plugins/<name>/(требуетсяVIBEOS_ENABLE_PROJECT_PLUGINS=1) - Точки входа pip —
vibeos_agent.plugins
При совпадении имён побеждают источники, расположенные ниже по списку — пользовательский плагин с именем disk-cleanup заменит встроенный.
Каталоги plugins/memory/ и plugins/context_engine/ намеренно исключены из сканирования встроенных плагинов. В этих каталогах используются собственные пути обнаружения, поскольку провайдеры памяти и контекстные движки являются единственными выбираемыми провайдерами, настраиваемыми через vibeos memory setup / context.engine в конфигурации.
Встроенные плагины подключаются вручную
Встроенные плагины поставляются отключёнными. Обнаружение находит их (они отображаются в vibeos plugins list и в интерактивном интерфейсе vibeos plugins), но ни один из них не загружается, пока вы явно не включите его:
vibeos plugins enable disk-cleanup
Или через ~/.vibeos/config.yaml:
plugins:
enabled:
- disk-cleanup
Это тот же механизм, который используется для плагинов, установленных пользователем. Встроенные плагины никогда не включаются автоматически — ни при чистой установке, ни для существующих пользователей, обновляющихся до новой версии VibeOS. Вы всегда подключаете их явно.
Чтобы снова отключить встроенный плагин:
vibeos plugins disable disk-cleanup
# или: удалите его из plugins.enabled в config.yaml
Текущий состав
Репозиторий включает следующие встроенные плагины в каталоге plugins/. Все они подключаются вручную — включите их через vibeos plugins enable <name>`.
| Плагин | Тип | Назначение |
|---|---|---|
disk-cleanup | хуки + слеш-команда | Автоматическое отслеживание временных файлов и их очистка при завершении сессии |
security-guidance | хуки | Поиск опасного кода по шаблонам при write_file/patch и добавление предупреждения безопасности (или блокировка) — 25 правил (форк шаблонов Anthropic claude-plugins-official под лицензией Apache-2.0) |
observability/langfuse | хуки | Отправка трассировок вызовов / LLM-запросов / инструментов в Langfuse |
observability/nemo_relay | хуки | Релейная передача событий наблюдаемости (вызовы / LLM-запросы / инструменты) в конечную точку NVIDIA NeMo |
teams_pipeline | автономный | Конвейер собраний Microsoft Teams — сводки на основе расшифровки с использованием Graph API |
spotify | бэкенд (7 инструментов) | Нативное управление воспроизведением Spotify: очередь, поиск, плейлисты, альбомы, библиотека |
google_meet | автономный | Подключение к звонкам Google Meet, расшифровка в реальном времени, опциональное двустороннее аудио |
image_gen/openai | бэкенд изображений | Бэкенд генерации изображений OpenAI gpt-image-2 (альтернатива FAL) |
image_gen/openai-codex | бэкенд изображений | Генерация изображений OpenAI через OAuth Codex |
image_gen/xai | бэкенд изображений | Бэкенд xAI grok-2-image |
vibeos-achievements | вкладка панели управления | Коллекционные значки в стиле Steam, созданные на основе реальной истории ваших сессий VibeOS |
kanban/dashboard | вкладка панели управления | Интерфейс доски Канбан для многогаентного диспетчера — задачи, комментарии, рассылка, переключение досок. См. Канбан-мультиагент. |
Провайдеры памяти (plugins/memory/*) и контекстные движки (plugins/context_engine/*) перечислены отдельно на странице Провайдеры памяти — они управляются через vibeos memory и vibeos plugins соответственно. Полное описание двух долгоиграющих плагинов на основе хуков приведено ниже.
disk-cleanup
Автоматически отслеживает и удаляет временные файлы, созданные во время сессий — тестовые скрипты, временные выводы, журналы cron, устаревшие профили Chrome — без необходимости агенту помнить о вызове соответствующего инструмента.
Как это работает:
| Хук | Поведение |
|---|---|
post_tool_call | Когда write_file / terminal / patch создаёт файл, соответствующий шаблонам test_*, tmp_* или *.test.* внутри VIBEOS_HOME или /tmp/vibeos-*, он молча отслеживается как test / temp / cron-output. |
on_session_end | Если во время сессии были автоматически отслежены какие-либо тестовые файлы, выполняется безопасная quick очистка и записывается однострочный итог. В противном случае ничего не происходит. |
Правила удаления:
| Категория | Порог | Подтверждение |
|---|---|---|
test | каждое завершение сессии | Никогда |
temp | >7 дней с момента отслеживания | Никогда |
cron-output | >14 дней с момента отслеживания | Никогда |
| пустые каталоги внутри VIBEOS_HOME | всегда | Никогда |
research | >30 дней, кроме 10 самых новых | Всегда (только глубокая) |
chrome-profile | >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> # прекратить отслеживание (не удаляет)
Состояние — всё хранится в $VIBEOS_HOME/disk-cleanup/:
| Файл | Содержимое |
|---|---|
tracked.json | Отслеживаемые пути с категорией, размером и временной меткой |
tracked.json.bak | Резервная копия атомарной записи |
cleanup.log | Аудит-журнал только для добавления: каждое отслеживание / пропуск / отклонение / удаление |
Безопасность — очистка затрагивает только пути внутри VIBEOS_HOME или /tmp/vibeos-*. Монтирования Windows (/mnt/c/...) отклоняются. Известные каталоги состояния верхнего уровня (logs/, memories/, sessions/, cron/, cache/, skills/, plugins/, disk-cleanup/) никогда не удаляются, даже если пусты — чистая установка не будет «выпотрошена» при первом завершении сессии.
Включение: vibeos plugins enable disk-cleanup (или установите флажок в vibeos plugins).
Отключение: vibeos plugins disable disk-cleanup.
security-guidance
Быстрые предупреждения безопасности на основе сопоставления с шаблонами при записи файлов. Когда вызовы агентом write_file / patch / skill_manage содержат код, соответствующий известному опасному шаблону — pickle.load, yaml.load без SafeLoader, eval(, os.system, subprocess(..., shell=True), JS child_process.exec, React dangerouslySetInnerHTML, сырые .innerHTML = / .outerHTML = / document.write, Node crypto.createCipher, режим AES ECB, отключённая проверка TLS, парсеры xml.etree / minidom, подверженные XXE, <script src="//..." > без SRI, torch.load без weights_only=True, инъекции ${{ github.event.* }} в GitHub Actions — плагин добавляет блок ⚠️ Security guidance к результату инструмента.
Файл всё равно записывается. Модель читает предупреждение в следующем сообщении инструмента и может либо исправить код, либо объяснить, почему конструкция безопасна в данном контексте. Сопоставление с шаблонами имеет нетривиальный уровень ложных срабатываний, поэтому по умолчанию используется режим предупреждения, а не блокировки.
Покрытие: всего 25 правил, охватывающих небезопасную десериализацию, инъекции команд, XSS-приёмники, криптографические «грабли», XXE, цепочки поставок (SRI) и инъекции в CI/CD. Данные шаблонов являются точной копией форка Anthropic claude-plugins-official под лицензией Apache-2.0 — см. файлы LICENSE и NOTICE плагина для указания авторства.
Режимы:
| Переменная окружения | Эффект |
|---|---|
| (не установлена) | режим предупреждения (по умолчанию) — файл записывается, предупреждение добавляется к результату |
SECURITY_GUIDANCE_BLOCK=1 | режим блокировки — запись отклоняется, предупреждение возвращается как причина блокировки |
SECURITY_GUIDANCE_DISABLE=1 | аварийный выключатель — плагин загружается, но ничего не делает |
Включение: vibeos plugins enable security-guidance (или установите флажок в vibeos plugins).
Отключение: vibeos plugins disable security-guidance.
Что он пока не делает: в исходном плагине Anthropic есть ещё два уровня — проверка diff с помощью LLM на каждом шаге агента, затрагивающем файлы, и проверка на уровне коммита, отслеживающая потоки данных между файлами. Ни один из них не портирован. Агент уже может выполнять такие проверки по запросу через delegate_task.
observability/langfuse
Отправляет трассировки вызовов VibeOS, LLM-запросов и вызовов инструментов в Langfuse — платформу наблюдаемости LLM с открытым исходным кодом. Один span на вызов, одна генерация на API-запрос, одно наблюдение инструмента на вызов инструмента. Итоги использования, количество токенов по типам и оценка стоимости берутся из канонических чисел agent.usage_pricing VibeOS, поэтому панель управления Langfuse видит ту же разбивку (входные / выходные / cache_read_input_tokens / cache_creation_input_tokens / reasoning_tokens), что и в vibeos logs.
Плагин работает по принципу «отказоустойчивости»: отсутствие SDK, учётных данных или временная ошибка Langfuse — всё это превращается в молчаливую пустую операцию в хуке. Цикл агента никогда не нарушается.
Настройка (интерактивная — рекомендуется):
vibeos tools # → Langfuse Observability → Cloud или Self-Hosted
Мастер собирает ваши ключи, выполняет pip install SDK langfuse и добавляет observability/langfuse в plugins.enabled. Перезапустите VibeOS, и следующий вызов отправит трассировку.
Настройка (вручную):
pip install langfuse
vibeos plugins enable observability/langfuse
Затем поместите учётные данные в ~/.vibeos/.env:
VIBEOS_LANGFUSE_PUBLIC_KEY=pk-lf-...
VIBEOS_LANGFUSE_SECRET_KEY=sk-lf-...
VIBEOS_LANGFUSE_BASE_URL=https://cloud.langfuse.com # или URL вашего self-hosted
Как это работает:
| Хук | Поведение |
|---|---|
pre_api_request / pre_llm_call | Открыть (или переиспользовать) корневой span «VibeOS 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 суммируются (заголовок + хвост + количество пропущенных строк), чтобы чтение огромного файла оставалось в пределах VIBEOS_LANGFUSE_MAX_CHARS. |
Группировка сессий привязана к ID сессии VibeOS (или ID задачи для под-агентов) через langfuse.propagate_attributes, поэтому всё в рамках одной сессии vibeos chat находится в одной сессии Langfuse.
Проверка:
vibeos plugins list # observability/langfuse должен показывать "enabled"
vibeos chat -q "hello" # проверьте интерфейс Langfuse на наличие трассировки "VibeOS turn"
Дополнительная настройка (в .env):
| Переменная | По умолчанию | Назначение |
|---|---|---|
VIBEOS_LANGFUSE_ENV | — | Тег окружения на трассировках (production, staging, …) |
VIBEOS_LANGFUSE_RELEASE | — | Тег релиза/версии |
VIBEOS_LANGFUSE_SAMPLE_RATE | 1.0 | Коэффициент выборки, передаваемый SDK (0.0–1.0) |
VIBEOS_LANGFUSE_MAX_CHARS | 12000 | Обрезка полей для содержимого сообщений / аргументов инструментов / результатов инструментов |
VIBEOS_LANGFUSE_DEBUG | false | Подробное логирование плагина в agent.log |
Принимаются как переменные с префиксом VibeOS, так и стандартные переменные окружения SDK (LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_BASE_URL) — приоритет у переменных с префиксом VibeOS, если установлены оба набора.
Производительность: клиент Langfuse кэшируется после первого вызова хука. Если учётные данные или SDK отсутствуют, это решение также кэшируется — последующие хуки быстро возвращаются без повторной проверки переменных окружения или перезагрузки конфигурации.
Отключение: vibeos plugins disable observability/langfuse. Модуль плагина всё ещё обнаруживается, но код модуля не выполняется до повторного включения.
google_meet
Позволяет агенту подключаться, расшифровывать и участвовать в звонках Google Meet — делать заметки на собрании, подводить итоги обсуждения, уточнять отдельные моменты и (опционально) озвучивать ответы обратно в звонок через TTS.
Что добавляет:
- Безголовый виртуальный участник, подключающийся к URL Meet с помощью автоматизации браузера
- Расшифровка аудио собрания в реальном времени через настроенный STT-провайдер
- Набор инструментов
meet_summarize/meet_speak/meet_followup, которые агент вызывает для обработки услышанного - Артефакты после собрания (расшифровка, заметки с указанием говорящего, пункты действий), сохраняемые в
~/.vibeos/cache/google_meet/<meeting_id>/
Настройка:
vibeos plugins enable google_meet
# При первом использовании запросит вход через OAuth-поток плагина —
# требуется учётная запись Google с доступом к Meet. Может потребоваться
# одобрение организатора, если на собрании включено «только приглашённые участники».
Использование из чата:
«Подключись к meet.google.com/abc-defg-hij и делай заметки. После звонка отправь мне сводку с пунктами действий.»
Агент запускает подключение к собранию, транслирует расшифровку в свой контекст по ходу звонка и формирует структурированную сводку по окончании собрания (или когда вы скажете остановиться).
Когда использовать: регулярные стендапы, где нужен бот для расшифровки и сводки для асинхронных участников; интервью в стиле допросов, где нужны структурированные заметки; любые случаи, где иначе потребовались бы Fireflies / Otter / Grain. Если вы не хотите, чтобы ИИ слушал — не включайте его.
Отключение: vibeos plugins disable google_meet. Все кэшированные расшифровки и записи остаются в ~/.vibeos/cache/google_meet/, пока вы их не удалите.
vibeos-achievements
Добавляет вкладку достижений в стиле Steam на панель управления — 60+ коллекционных многоуровневых значков, созданных на основе реальной истории ваших сессий VibeOS. Достижения в работе с инструментами, шаблоны отладки, серии «вайб-кодинга», использование навыков/памяти, разнообразие моделей/провайдеров, особенности образа жизни (сессии по выходным и ночью). Изначально создан @PCinkusz как внешний плагин; перенесён в основное дерево, чтобы оставаться синхронизированным с изменениями функций VibeOS.
Как это работает:
- Сканирует всю историю сессий из
~/.vibeos/state.dbна бэкенде панели управления - Статистика по каждой сессии кэшируется по отпечатку
(started_at, last_active), поэтому при последующих сканированиях анализируются только новые или изменённые сессии - Первое сканирование выполняется в фоновом потоке — панель управления никогда не блокируется в ожидании, даже в базах данных с тысячами сессий
- Состояние разблокировки сохраняется в
$VIBEOS_HOME/plugins/vibeos-achievements/state.json
Прогресс по уровням: Медь → Серебро → Золото → Бриллиант → Олимпиец. На каждой карточке есть раздел «Что учитывается», где указана точная отслеживаемая метрика.
Состояния достижений:
| Состояние | Значение |
|---|---|
| Разблокировано | Достигнут как минимум один уровень |
| Обнаружено | Известное достижение, прогресс виден, ещё не получено |
| Секретное | Скрыто, пока VibeOS не обнаружит первый соответствующий сигнал в вашей истории |
API — маршруты монтируются в /api/plugins/vibeos-achievements/:
| Конечная точка | Назначение |
|---|---|
GET /achievements | Полный каталог с состоянием разблокировки каждого значка (возвращает временный заполнитель, пока выполняется первое холодное сканирование) |
GET /scan-status | Состояние фонового сканера: idle / running / failed, последняя длительность, количество запусков |
GET /recent-unlocks | Двадцать последних разблокированных значков, сначала новые |
GET /sessions/{id}/badges | Значки, полученные в основном в одной конкретной сессии |
POST /rescan | Ручное синхронное повторное сканирование (блокируется; используйте, когда пользователь нажимает кнопку повторного сканирования) |
POST /reset-state | Очистить историю разблокировок и кэшированный снимок |
Файлы состояния — находятся в $VIBEOS_HOME/plugins/vibeos-achievements/:
| Файл | Содержимое |
|---|---|
state.json | История разблокировок: какие значки вы получили и когда. Стабильна при обновлениях VibeOS. |
scan_snapshot.json | Полезная нагрузка последнего завершённого сканирования (немедленно отдаётся при загрузке панели управления) |
scan_checkpoint.json | Кэш статистики по сессиям, ключом является отпечаток (делает тёплые повторные сканирования быстрыми) |
Замечания по производительности:
- Холодное сканирование ~8 000 сессий занимает несколько минут. Оно выполняется в фоновом потоке при первом запросе панели управления; интерфейс видит временный заполнитель и опрашивает
/scan-status. - Инкрементальные результаты во время холодного сканирования — сканер публикует частичный снимок каждые ~250 сессий, поэтому при каждом обновлении панели управления отображается больше разблокированных значков. Никакого минутного ожидания на нулях.
- Тёплое повторное сканирование повторно использует статистику по сессиям для каждой сессии, чей отпечаток
started_at+last_activeсовпадает с контрольной точкой — завершается за секунды даже на больших историях. - TTL кэшированного снимка в памяти составляет 120 с; устаревшие запросы немедленно отдают старый снимок и запускают фоновое обновление. Вы никогда не ждёте спиннер только из-за истечения TTL.
Включение: Ничего включать не нужно — vibeos-achievements — это плагин только для панели управления (без хуков жизненного цикла, без видимых модели инструментов). Он автоматически регистрируется как вкладка в vibeos dashboard при первом запуске. Конфигурация plugins.enabled управляет только плагинами жизненного цикла/инструментов; плагины панели управления обнаруживаются исключительно через их dashboard/manifest.json.
Отказ от использования: Удалите или переименуйте plugins/vibeos-achievements/dashboard/manifest.json, или переопределите его пользовательским плагином с тем же именем в ~/.vibeos/plugins/vibeos-achievements/, который не содержит панели управления. Файлы состояния плагина в $VIBEOS_HOME/plugins/vibeos-achievements/ сохраняются — при переустановке история ваших разблокировок не теряется.
Добавление встроенного плагина
Встроенные плагины пишутся точно так же, как и любой другой плагин VibeOS — см. Создание плагина VibeOS. Отличия только в следующем:
- Каталог находится в
<repo>/plugins/<name>/, а не в `~/.vibeos/plugins/<name>/ - Источник манифеста отображается как
bundledвvibeos plugins list - Пользовательские плагины с тем же именем переопределяют встроенную версию
Плагин является хорошим кандидатом для включения в состав, если:
- У него нет опциональных зависимостей (или они уже являются зависимостями
pip install .[all]) - Поведение полезно большинству пользователей и является opt-out, а не opt-in
- Логика привязана к хукам жизненного цикла, которые агенту иначе пришлось бы помнить о необходимости вызывать
- Он дополняет основную функциональность, не расширяя поверхность инструментов, видимую модели
Контрпримеры — то, что должно оставаться устанавливаемыми пользователем плагинами, а не встроенными: сторонние интеграции с API-ключами, узкоспециализированные рабочие процессы, большие деревья зависимостей, всё, что существенно изменило бы поведение агента по умолчанию.