Перейти к основному содержимому

Куратор

Куратор — это фоновая процедура поддержки навыков, созданных агентом. Он отслеживает, как часто каждый навык просматривается, используется и обновляется, переводит давно неиспользуемые навыки через состояния active → stale → archived и периодически запускает короткую вспомогательную проверку с помощью модели, которая предлагает объединение или исправление дрейфа.

Он существует для того, чтобы навыки, созданные через цикл самосовершенствования, не накапливались бесконечно. Каждый раз, когда агент решает новую проблему и сохраняет навык, этот навык попадает в ~/.vibeos/skills/. Без обслуживания вы получаете десятки узких почти-дубликатов, которые засоряют каталог и тратят токены.

По умолчанию (prune_builtins: true) куратор может архивировать неиспользуемые встроенные навыки (поставляемые с репозиторием) после archive_after_days бездействия, наряду с навыками, созданными агентом, которыми он в основном управляет. Навыки, установленные из хаба (с agentskills.io), всегда неприкосновенны. Установите curator.prune_builtins: false, чтобы вернуть старое поведение, при котором затрагиваются только навыки, созданные агентом, а встроенные навыки никогда не трогаются. Куратор также никогда не удаляет автоматически — худший исход — архивация в ~/.vibeos/skills/.archive/, откуда всё можно восстановить.

Отслеживается в issue #7816.

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

Куратор запускается по проверке бездействия, а не по cron-демону. При запуске CLI-сессии и по повторяющемуся тику в потоке cron-тика шлюза VibeOS проверяет:

  1. Прошло ли достаточно времени с последнего запуска куратора (interval_hours, по умолчанию 7 дней), и
  2. Был ли агент бездействующим достаточно долго (min_idle_hours, по умолчанию 2 часа).

Если оба условия истинны, он порождает фоновый форк AIAgent — тот же шаблон, что используется для подсказок самосовершенствования памяти/навыков. Форк работает в собственном кеше промптов и никогда не касается активного разговора.

Поведение при первом запуске

На новой установке (или при первом тике установки до появления куратора после vibeos update) куратор не запускается сразу. Первое наблюдение устанавливает last_run_at на «сейчас» и откладывает первый реальный проход на полный interval_hours. Это даёт вам полный интервал для просмотра вашей библиотеки навыков, закрепления важного или полного отказа, прежде чем куратор к ней прикоснётся.

Если вы хотите увидеть, что куратор сделал бы, до реального запуска, выполните vibeos curator run --dry-run — он выдаст тот же отчёт проверки без изменения библиотеки.

Проход состоит из двух фаз:

  1. Автоматические переходы (детерминированные, без LLM). Навыки, не использовавшиеся stale_after_days (30), становятся stale; навыки, не использовавшиеся archive_after_days (90), перемещаются в ~/.vibeos/skills/.archive/. Это всегда включённое поведение очистки — оно выполняется всякий раз, когда куратор включён, без затрат вспомогательной модели.
  2. Консолидация LLM (один проход вспомогательной модели, max_iterations=8) — ВЫКЛЮЧЕНА по умолчанию. Когда curator.consolidate: true, форкнутый агент просматривает навыки, созданные агентом, может читать любой из них с помощью skill_view и решает для каждого навыка: оставить, исправить (через skill_manage), объединить пересекающиеся в классовые «зонтики» или архивировать через терминальный инструмент. Консолидация рассматривает навык как полный пакет: если навык имеет references/, templates/, scripts/, assets/ или относительные ссылки на эти пути, куратор должен либо оставить его отдельно, переместить необходимые вспомогательные файлы и переписать пути, либо архивировать весь пакет без изменений — а не переносить только SKILL.md в файл references/ другого навыка.
Консолидация — это добровольный выбор

По умолчанию куратор только очищает — детерминированный проход бездействия помечает навыки как устаревшие и архивирует давно неиспользуемые. Мнение LLM консолидация (создание зонтиков, слияние пересекающихся навыков) отключена по умолчанию, потому что она тратит токены вспомогательной модели при каждом запуске и вносит масштабные структурные изменения в вашу библиотеку. Включите её с помощью curator.consolidate: true или запустите один раз по требованию с помощью vibeos curator run --consolidate.

Закреплённые навыки неприкосновенны как для авто-переходов куратора, так и для собственного инструмента skill_manage агента. См. Закрепление навыка ниже.

Конфигурация​

Все настройки находятся в config.yaml в разделе curator: (не в .env — это не секрет). Значения по умолчанию:

curator:
enabled: true
interval_hours: 168 # 7 дней
min_idle_hours: 2
stale_after_days: 30
archive_after_days: 90
consolidate: false # Проход создания зонтиков LLM — добровольный (по умолчанию только очистка)
prune_builtins: true # также архивировать неиспользуемые встроенные навыки (навыки из хаба всегда исключены)

Чтобы полностью отключить, установите curator.enabled: false. Чтобы оставить всегда включённую очистку, но включить консолидацию LLM, установите curator.consolidate: true.

Запуск проверки на более дешёвой вспомогательной модели​

Проход проверки LLM куратора — это обычный слот вспомогательной задачи — auxiliary.curator — наряду с Vision, Compression, Session Search и т.д. «Auto» означает «использовать мою основную модель чата»; переопределите слот, чтобы закрепить конкретного провайдера + модель для прохода проверки.

Самый простой способ — vibeos model:

vibeos model                   # → «Вспомогательные модели — маршрутизация побочных задач»
# → выберите «Куратор» → выберите провайдера → выберите модель

Тот же выбор доступен в веб-панели на вкладке Модели.

Прямая настройка config.yaml (эквивалент):

auxiliary:
curator:
provider: openrouter
model: google/gemini-3-flash-preview
timeout: 600 # щедро — проверка может занять несколько минут

Если оставить provider: auto (по умолчанию), проход проверки будет маршрутизироваться через ту же модель, что и ваш основной чат, что соответствует поведению всех остальных вспомогательных задач.

Устаревшая конфигурация

В более ранних версиях использовался отдельный блок curator.auxiliary.{provider,model}. Этот путь всё ещё работает, но выдаёт строку устаревания в логе — пожалуйста, перейдите на auxiliary.curator выше, чтобы куратор использовал ту же инфраструктуру (vibeos model, вкладка Модели в панели, base_url, api_key, timeout, extra_body), что и все остальные вспомогательные задачи.

CLI​

vibeos curator status         # последний запуск, количество, список закреплённых, топ-5 по LRU
vibeos curator run # запустить проход сейчас (блокируется до завершения). Только очистка, если только curator.consolidate: true
vibeos curator run --consolidate # принудительно включить проход консолидации LLM для этого запуска, переопределяя настройку по умолчанию
vibeos curator run --background # запустить и забыть: начать проход в фоновом потоке
vibeos curator run --dry-run # только предпросмотр — отчёт без каких-либо изменений
vibeos curator backup # сделать ручной снимок ~/.vibeos/skills/
vibeos curator rollback # восстановить из новейшего снимка
vibeos curator rollback --list # список доступных снимков
vibeos curator rollback --id <ts> # восстановить конкретный снимок
vibeos curator rollback -y # пропустить запрос подтверждения
vibeos curator pause # остановить запуски до возобновления
vibeos curator resume
vibeos curator pin <skill> # никогда не применять авто-переходы к этому навыку
vibeos curator unpin <skill>
vibeos curator restore <skill> # переместить архивированный навык обратно в активные
vibeos curator list-archived # список навыков, находящихся в ~/.vibeos/skills/.archive/
vibeos curator archive <skill> # вручную архивировать один навык сейчас
vibeos curator prune [--days N] # массовая архивация навыков, созданных агентом, бездействующих >= N дней (по умолчанию 90)

Резервное копирование и откат​

Перед каждым реальным проходом куратора VibeOS создаёт tar.gz-снимок ~/.vibeos/skills/ в ~/.vibeos/skills/.curator_backups/&lt;utc-iso&gt;/skills.tar.gz. Если проход архивировал или консолидировал что-то, что вы не хотели трогать, вы можете отменить весь запуск одной командой:

vibeos curator rollback        # восстановить новейший снимок (с подтверждением)
vibeos curator rollback -y # пропустить запрос
vibeos curator rollback --list # показать все снимки с причиной и размером

Сам откат обратим: перед заменой дерева навыков VibeOS делает ещё один снимок с пометкой pre-rollback to &lt;target-id&gt;, так что ошибочный откат можно отменить, откатившись вперёд к нему с помощью --id`.

Вы также можете делать ручные снимки в любое время с помощью vibeos curator backup --reason "before-refactor". Строка --reason попадает в manifest.json снимка и отображается в --list.

Снимки сокращаются до curator.backup.keep (по умолчанию 5), чтобы ограничить использование диска:

curator:
backup:
enabled: true
keep: 5

Установите curator.backup.enabled: false, чтобы отключить автоматическое создание снимков. Ручная команда vibeos curator backup всё ещё работает, когда резервное копирование отключено, только если вы сначала установите enabled: true — флаг симметрично блокирует оба пути, так что нет возможности случайно пропустить предварительный снимок при изменяющих проходах.

vibeos curator status также показывает пять наименее недавно использованных навыков — быстрый способ увидеть, что, вероятно, станет устаревшим следующим.

Те же подкоманды доступны как slash-команда /curator внутри запущенной сессии (CLI или платформы шлюза).

Что значит «создан агентом»​

Куратор управляет только навыками, явно помеченными как созданные агентом в ~/.vibeos/skills/.usage.json. Навык считается таковым, когда ВСЕ следующие условия истинны:

  1. Его имя не находится в ~/.vibeos/skills/.bundled_manifest (встроенные навыки, поставляемые с репозиторием).
  2. Его имя не находится в ~/.vibeos/skills/.hub/lock.json (навыки, установленные из хаба).
  3. Его запись в .usage.json имеет "created_by": "agent" или "agent_created": true.

В настоящее время только фоновый форк проверки самосовершенствования устанавливает этот маркер — когда он создаёт новый зонтичный навык во время своего периодического прохода проверки (~каждые 10 шагов агента). Фоновый форк запускается с источником записи "background_review" (через tools/skill_provenance.py), который является единственным путём, вызывающим mark_agent_created() в skill_manage.

Навыки, которые агент переднего плана создаёт через skill_manage(action="create") во время разговора, не помечаются как созданные агентом — они считаются направленными пользователем, и куратор намеренно их не трогает.

Ваши собственноручно написанные навыки НЕ курируются

Если вы вручную создали SKILL.md или указали VibeOS на внешний каталог навыков, этот навык будет иметь запись в .usage.json с created_by: null (или поле будет отсутствовать). Куратор его не тронет. То же самое относится к навыкам, которые агент переднего плана создал по вашему запросу.

Чтобы увидеть, какими навыками на самом деле управляет куратор, выполните vibeos curator status. Если количество созданных агентом равно 0, ни один навык в настоящее время не находится в юрисдикции куратора — проход проверки LLM пропускается, и отчёт покажет Model: (not resolved) via (not resolved) с Duration: 0s.

Навыки, которые ЯВЛЯЮТСЯ созданными агентом, проходят полный жизненный цикл:

  • active → (30 дней без использования) stale → (90 дней без использования) archived
  • Закреплённые навыки обходят все авто-переходы
  • Архивы восстанавливаемы с помощью vibeos curator restore <name>`

Если вы хотите защитить конкретный навык от любых изменений — например, собственноручно написанный навык, на который вы полагаетесь — используйте vibeos curator pin <name>`. См. следующий раздел.

Закрепление навыка​

Закрепление защищает навык от удаления — как от автоматических проходов архивации куратора, так и от вызова инструмента skill_manage(action="delete") агентом. После закрепления навыка:

  • Куратор пропускает его во время авто-переходов (active → stale → archived), и его проход проверки LLM получает указание не трогать его.
  • Инструмент skill_manage агента отказывается от delete на нём, указывая пользователю на vibeos curator unpin <name>`. Исправления и редактирования всё ещё проходят, поэтому агент может улучшать содержимое закреплённого навыка по мере возникновения проблем без танцев с закреплением/откреплением/повторным закреплением.

Закрепить и открепить:

vibeos curator pin <skill>
vibeos curator unpin <skill>

Флаг хранится как "pinned": true в записи навыка в ~/.vibeos/skills/.usage.json, поэтому он сохраняется между сессиями.

Закреплять можно только созданные агентом навыки — vibeos curator pin отказывает для встроенных навыков и навыков из хаба с пояснительным сообщением, если вы попытаетесь. Навыки, установленные из хаба, никогда не подвергаются изменениям куратора. Встроенные навыки затрагиваются только когда curator.prune_builtins: true (по умолчанию), и даже тогда только архивируются после archive_after_days бездействия — никогда не исправляются, не консолидируются и не удаляются. Установите curator.prune_builtins: false, чтобы полностью исключить встроенные навыки.

Небольшой набор защищённых встроенных навыков жёстко закодирован как никогда не архивируемый и никогда не консолидируемый, независимо от curator.prune_builtins, состояния закрепления или решения LLM. Они обеспечивают критически важный UX — например, plan управляет потоком slash-команды /plan — так что тихая архивация одного из них превратила бы его slash-команду в ошибку «Неизвестная команда» без какого-либо сигнала для вас. Защищённые встроенные навыки полностью отфильтровываются из списка кандидатов куратора, поэтому проход консолидации их никогда не видит.

Если вам нужна более сильная гарантия, чем «без удаления» — например, полная заморозка содержимого навыка, пока агент всё ещё его читает — отредактируйте ~/.vibeos/skills/&lt;name&gt;/SKILL.md напрямую своим редактором. Закрепление защищает от удаления через инструменты, а не от вашего собственного доступа к файловой системе.

Телеметрия использования​

Куратор ведёт вспомогательный файл ~/.vibeos/skills/.usage.json с одной записью на навык:

{
"my-skill": {
"use_count": 12,
"view_count": 34,
"last_used_at": "2026-04-24T18:12:03Z",
"last_viewed_at": "2026-04-23T09:44:17Z",
"patch_count": 3,
"last_patched_at": "2026-04-20T22:01:55Z",
"created_at": "2026-03-01T14:20:00Z",
"state": "active",
"pinned": false,
"archived_at": null
}
}

Счётчики увеличиваются, когда:

  • view_count: агент вызывает skill_view для навыка.
  • use_count: навык загружается в промпт разговора.
  • patch_count: skill_manage patch/edit/write_file/remove_file выполняется для навыка.

Встроенные навыки и навыки из хаба явно исключены из записи телеметрии.

Отчёты о проходах​

Каждый проход куратора записывает каталог с меткой времени в ~/.vibeos/logs/curator/:

~/.vibeos/logs/curator/
└── 20260429-111512/
├── run.json # машиночитаемый: полная точность, статистика, вывод LLM
└── REPORT.md # человекочитаемое резюме

REPORT.md — это быстрый способ увидеть, что сделал данный проход: какие навыки перешли, что сказал рецензент LLM, какие навыки он исправил. Хорошо подходит для аудита без необходимости grep'ить agent.log.

Нет кандидатов? Отчёт показывает (not resolved)

Когда у куратора нет навыков, созданных агентом, для проверки, проход проверки LLM полностью пропускается. Заголовок отчёта покажет Model: (not resolved) via (not resolved) с Duration: 0s — это не указывает на ошибку конфигурации или сбой разрешения модели. Это просто означает, что кандидатов не было, поэтому модель никогда не вызывалась. Фаза авто-переходов всё ещё выполняется и сообщает свои счётчики нормально.

Карта переименований в сводке​

Если проход объединил несколько навыков под зонтиком (или слил почти-дубликаты), видимая пользователю сводка, выводимая в конце прохода, включает явную карту переименований, показывающую каждую пару старое-имя → новое-имя, которую применил куратор. Это дополнение к строкам переходов по каждому навыку, так что когда волна переименований происходит, вы можете заметить их с первого взгляда, не сравнивая JSON-отчёт. Подсказка также появляется в vibeos curator pin, так что вы можете сразу закрепить зонтичное имя, если хотите заблокировать новую метку.

Восстановление архивированного навыка​

Если куратор архивировал то, что вам всё ещё нужно:

vibeos curator restore <skill-name>

Это перемещает навык обратно из ~/.vibeos/skills/.archive/ в активное дерево и сбрасывает его состояние на active. Восстановление отказывается, если с тех пор был установлен встроенный навык или навык из хаба с тем же именем (будет конфликтовать с вышестоящим источником).

Отключение по окружению​

Куратор включён по умолчанию. Чтобы отключить его:

  • Для одного профиля: отредактируйте ~/.vibeos/config.yaml (или конфигурацию активного профиля) и установите curator.enabled: false.
  • Для одного запуска: vibeos curator pause — пауза сохраняется между сессиями; используйте resume для повторного включения.

Куратор также отказывается запускаться, если не прошло min_idle_hours, поэтому на активной рабочей машине он естественным образом запускается только в периоды затишья.

См. также​