Куратор
Куратор — это фоновая процедура поддержки навыков, созданных агентом. Он отслеживает, как часто каждый навык просматривается, используется и обновляется, переводит давно неиспользуемые навыки через состояния 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 проверяет:
- Прошло ли достаточно времени с последнего запуска куратора (
interval_hours, по умолчанию 7 дней), и - Был ли агент бездействующим достаточно долго (
min_idle_hours, по умолчанию 2 часа).
Если оба условия истинны, он порождает фоновый форк AIAgent — тот же шаблон, что используется для подсказок самосовершенствования памяти/навыков. Форк работает в собственном кеше промптов и никогда не касается активного разговора.
На новой установке (или при первом тике установки до появления куратора после vibeos update) куратор не запускается сразу. Первое наблюдение устанавливает last_run_at на «сейчас» и откладывает первый реальный проход на полный interval_hours. Это даёт вам полный интервал для просмотра вашей библиотеки навыков, закрепления важного или полного отказа, прежде чем куратор к ней прикоснётся.
Если вы хотите увидеть, что куратор сделал бы, до реального запуска, выполните vibeos curator run --dry-run — он выдаст тот же отчёт проверки без изменения библиотеки.
Проход состоит из двух фаз:
- Автоматические переходы (детерминированные, без LLM). Навыки, не использовавшиеся
stale_after_days(30), становятсяstale; навыки, не использовавшиесяarchive_after_days(90), перемещаются в~/.vibeos/skills/.archive/. Это всегда включённое поведение очистки — оно выполняется всякий раз, когда куратор включён, без затрат вспомогательной модели. - Консолидация 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/<utc-iso>/skills.tar.gz. Если проход архивировал или консолидировал что-то, что вы не хотели трогать, вы можете отменить весь запуск одной командой:
vibeos curator rollback # восстановить новейший снимок (с подтверждением)
vibeos curator rollback -y # пропустить запрос
vibeos curator rollback --list # показать все снимки с причиной и размером
Сам откат обратим: перед заменой дерева навыков VibeOS делает ещё один снимок с пометкой pre-rollback to <target-id>, так что ошибочный откат можно отменить, откатившись вперёд к нему с помощью --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. Навык считается таковым, когда ВСЕ следующие
условия истинны:
- Его имя не находится в
~/.vibeos/skills/.bundled_manifest(встроенные навыки, поставляемые с репозиторием). - Его имя не находится в
~/.vibeos/skills/.hub/lock.json(навыки, установленные из хаба). - Его запись в
.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/<name>/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, поэтому на активной рабочей машине он естественным образом запускается только в периоды затишья.
См. также
- Система навыков — как работают навыки в целом и цикл самосовершенствования, который их создаёт
- Память — параллельная фоновая проверка, поддерживающая долговременную память
- Каталог встроенных навыков
- Issue #7816 — оригинальное предложение и обсуждение дизайна