Обновление Библиотеки Навыков
Запуск Навыка
При явном вызове или однозначном смысловом совпадении применяйте навык сразу. Перед первым шагом покажите ровно одну короткую контекстную строку (не более 30 слов) и продолжайте работу в том же ответе, не ожидая реакции:
Фраза «Обнови библиотеку навыков» уже разрешает один полный цикл: штатное обновление, повторную установку пакета, перенос доказанных дублей в карантин, одну попытку безопасного перезапуска Codex и проверку после него. Не дробите это разрешение на отдельные вопросы.
Применяю экспериментальный навык «Обновление библиотеки навыков» (обратная связь — @kir-kopylov): <кратко назовите конкретную пользу для текущего запроса>; продолжаю без ожидания.
Не включайте в строку author_github, внутреннее имя папки или пересказ всего запроса. Не спрашивайте, применять ли навык.
Не завершайте первый ответ уведомлением или планом обновления. До его отправки обязательно вызовите доступные read-only инструменты и фактически выполните preflight штатного Codex: codex --version, наличие plugin-команд, codex plugin list --json и точные legacy-следы до любой мутации. Первый ответ без наблюдаемого вывода этих проверок запрещён. В этом же ответе верните статус и продолжайте уже разрешённый цикл либо назовите один доказанный blocker; не просите повторно разрешить отдельные стадии.
Если одновременно подходят совместимые навыки, выберите минимальный набор и покажите одну общую строку. Если подходы ведут к несовместимым результатам и запрос не позволяет выбрать, спросите только о желаемом результате, не о разрешении применить навык.
Запуск навыка не расширяет полномочия. Выполните всю безопасную и уже разрешённую часть; запросите подтверждение только непосредственно перед ещё не разрешённым внешним или изменяющим действием. Не запрашивайте повторно уже данное разрешение и не дублируйте системное окно подтверждения.
Обзор
Этот skill превращает фразу «Обнови библиотеку навыков» в один обслуживающий цикл. Пользователь не должен отдельно просить обновить marketplace, переустановить plugin, разобрать конфликтующие личные копии, разрешить перезапуск и затем напоминать, что результат надо проверить.
Канонический источник фиксирован:
- Git-источник:
kir-kopylov/codex-team-skills, веткаmain; - marketplace:
codex-team-skills; - plugin:
team-skills@codex-team-skills; - поддерживаемый способ доставки: штатные команды
codex plugin.
Навык не возвращает фоновый обновлятор, собственный загрузчик или прямую правку кэша. Он выполняется один раз по запросу пользователя и оставляет восстанавливаемый след всех перемещений.
Граница Первичного Подключения
Ещё не установленный и не видимый в текущей сессии skill не может запустить сам себя. Если obnovlenie-biblioteki-navykov отсутствует в списке навыков текущей сессии, первичное подключение выполняется по документу START_HERE_CONNECT_CODEX_SKILLS.md, а при следах старой установки — по START_HERE_RECONNECT_CODEX_SKILLS.md. После установки нужно полностью открыть новую сессию; уже затем фраза «Обнови библиотеку навыков» запускает будущие циклы целиком.
Не описывайте это как автоматическую самоустановку навыка. Документ первичного подключения — внешний вход в систему, а этот skill — обслуживающая процедура уже доступной библиотеки.
Естественные Входы
- «Обнови библиотеку навыков».
- «Установи свежую каноническую библиотеку skills».
- «Обнови Team Skills и убери локальные дубли».
- «Переустанови командные навыки из официального репозитория».
- «Приведи мою библиотеку навыков к одной канонической копии».
Разрешение И Статусы
Точная первая фраза из каталога разрешает весь описанный цикл на текущем компьютере без дополнительных вопросов. Она не разрешает:
- постоянное фоновое обновление;
- удаление файлов без карантина;
- изменение репозитория проекта, системных политик или защитного ПО;
- очистку неизвестных каталогов по похожему имени;
- отправку секретов, личных путей или журналов наружу.
Используйте только эти статусы:
PREFLIGHT_VERIFIED— штатная CLI и её plugin-команды доступны;INSTALLED_ON_DISK— канонический plugin переустановлен и виден в JSON-списке;LEGACY_QUARANTINED— все доказанные одноимённые личные копии перенесены и записаны в manifest;RESTART_PENDING— дисковая часть готова, но новая сессия ещё не проверена;LIVE_VERIFIED— в новой сессии виден контрольный навык из канонического plugin, а доказанные конфликты больше не активны;BLOCKED_CODEX_CLI— штатная CLI отсутствует, слишком старая или падает до выполнения plugin-команд;LEGACY_TRANSITION_REQUIRED— найден локальный marketplace Team Skills либо при отсутствующем plugin обнаружен след прежней схемы; сначала нужна процедура переподключения;BLOCKED_PRESERVATION— исходный пакет не сохранён и не проверен, цель изменилась или судьба нужного расширения не определена; замена остановлена;BLOCKED_LEGACY_OWNERSHIP— старый след найден, но его точное владение библиотекой не доказано, поэтому менять его нельзя;BLOCKED_DUPLICATE_REVIEW— кандидат на дубль неоднозначен или небезопасен для автоматического переноса;BLOCKED_RESTART_UNAVAILABLE— нет безопасного способа перезапустить Codex и продолжить проверку.
INSTALLED_ON_DISK и LEGACY_QUARANTINED не равны завершению. До наблюдения новой сессии итог — только RESTART_PENDING или блокирующий статус.
Процесс
1. Прочитать Известные Исключения
До команд прочитайте соседний known-exceptions.yaml. Если симптом совпал, сразу примените do_next_time; не изобретайте новый механизм доставки.
2. Проверить Штатный Путь
Выполните read-only проверки:
codex --version
codex plugin --help
codex plugin list --json
Примените общую процедуру проверки штатной CLI. Нужен Codex 0.144.4 или новее, доступная группа codex plugin и успешный JSON от list. При ENOENT или сломанном wrapper сначала проверьте наблюдаемый официальный executable уже установленного приложения с тем же Codex home и профилем. Только после неуспеха всех доступных подтверждённых кандидатов ставьте BLOCKED_CODEX_CLI. Выбранный абсолютный путь используйте во всём цикле; не меняйте постоянный PATH или защиту компьютера.
3. Снять Контрольную Точку До Изменений
Сохраните локально, без публикации:
- версию Codex;
- JSON-состояние установленного plugin;
- точный источник marketplace, если он возвращён;
- перечень существующих личных корней навыков;
- имена потенциальных конфликтов, пока без перемещения.
До любого удаления или замещающего plugin add выполните сохранение до замены: резервная копия конфигурации и всего фактически установленного пакета, проверка копии по SHA-256 и сведения о восстановлении. Для локального/разрабатываемого источника или просьбы сохранить расширение дополнительно сравните содержимое с актуальным полным SHA удалённого main. Если нужное изменение уже включено, не создавайте повторный PR; если отсутствует, сначала сохраните его и определите судьбу. Исходный рабочий Git-каталог, index и незакоммиченные файлы оставьте неизменными и проверьте это после перехода. Неизвестное владение блокирует изменение, неподтверждённая сохранность даёт BLOCKED_PRESERVATION.
Не включайте в ответ абсолютный домашний путь, содержимое личных навыков, токены или необработанный журнал.
4. Выбрать Маршрут По Источнику Marketplace
Независимо от наличия установленного plugin проверьте тип регистрации marketplace в свежем ответе CLI или его точной конфигурации: marketplaceSource.sourceType / source_type. Поле source.source = "local" у папки plugin внутри Git marketplace описывает другой слой. Наличие origin у локального каталога не превращает регистрацию в Git.
При отсутствующем plugin дополнительно проверьте legacy-следы:
Если codex plugin list --json не показывает установленный team-skills@codex-team-skills, до любой команды marketplace add или plugin add проверьте только точные признаки прежнего подключения:
~/plugins/team-skills;- точные границы
# BEGIN codex-team-skills managed blockи# END codex-team-skills managed blockв~/.codex/config.toml; ~/.codex/plugins/cache/codex-team-skillsи старый~/.agents/plugins/marketplace.json;- на Windows — задачу
Codex Team Skills Auto Updateи%LOCALAPPDATA%\CodexTeamSkills; - на macOS — LaunchAgent
com.codex-team-skills.autoupdateи~/Library/Application Support/CodexTeamSkills.
Если найден хотя бы один признак, не продолжайте по ветке чистой установки. Поставьте LEGACY_TRANSITION_REQUIRED и выполните процедуру из references/reconnect.md (вход для первой установки — START_HERE_RECONNECT_CODEX_SKILLS.md): каждый объект можно менять только после описанной там точной проверки владения. Если владение хотя бы одного объекта не доказано, остановитесь с BLOCKED_LEGACY_OWNERSHIP; не удаляйте и не переписывайте его по похожему имени.
Только отсутствие всех перечисленных следов разрешает ветку чистой первой установки. Эта проверка обязательна именно до изменяющих команд: последующая установка может скрыть различие между старым артефактом и новым состоянием.
После этой обязательной проверки выберите маршрут:
- Подтверждены Git-репозиторий
kir-kopylov/codex-team-skillsи refmain— переходите к шагу 5. - Подтверждён локальный marketplace Team Skills, даже если plugin уже установлен —
LEGACY_TRANSITION_REQUIREDи полное чтение процедуры переподключения, поставляемой внутри plugin. Уже разрешённое переподключение выполняйте без повторного согласования. Общий запрос обновить сам по себе не разрешает заменить источник с невыясненными отличиями: примените шаг 3 и уточните только отсутствующее решение. - Чужой или неизвестный source/ref, неоднозначный id или состав локального marketplace —
BLOCKED_LEGACY_OWNERSHIP, безupgradeи без молчаливой замены. Если в локальном marketplace есть другие plugins, не удаляйте их регистрацию или общий каталог ради Team Skills.
Локальный источник подтвердите по записи регистрации, точному пути, marketplace-записи Team Skills и manifest пакета; одного имени недостаточно. После переподключения снова проверьте Git source/ref и продолжите с проверенной стадии, не повторяя уже успешную установку.
5. Обновить Канонический Marketplace И Plugin
Перед первой изменяющей командой перечитайте состояние и проверьте свежесть снимка по references/preserve-before-reconnect.md; после паузы, расхождения версии или движения проверенного main обновите снимок до замены.
Если регистрация marketplace подтверждает Git-источник https://github.com/kir-kopylov/codex-team-skills.git и ref main, выполните:
codex plugin marketplace upgrade codex-team-skills --json
codex plugin add team-skills@codex-team-skills --json
Если plugin и канонический marketplace отсутствуют, а шаг 4 подтвердил отсутствие legacy-следов, выполните:
codex plugin marketplace add kir-kopylov/codex-team-skills --ref main --json
codex plugin add team-skills@codex-team-skills --json
Если добавление marketplace вернуло точный ответ «уже подключён», сначала подтвердите, что его source — тот же Git-репозиторий и main, затем выполните upgrade. При другом source, неизвестной структуре ответа или любой иной ошибке остановитесь; не заменяйте источник молча.
Повторный plugin add обязателен: обновлённый marketplace и установленный пакет — разные состояния. Сохраните его JSON-ответ с installedPath для проверки новой установки: последующий plugin list может не раскрывать путь. После команд проверьте сохранность исходного рабочего каталога и нужного расширения по шагу 3; затем снова выполните codex plugin list --json и подтвердите ровно одну установленную и включённую запись team-skills@codex-team-skills, ожидаемый Git-источник и semver. Путь проверьте по сохранённому успешному ответу plugin add. Только тогда поставьте INSTALLED_ON_DISK.
6. Построить Канонический Список Имён
Возьмите installedPath только из успешного JSON-ответа CLI и проверьте, что это обычный каталог внутри текущего Codex home. Из его каталога skills/ соберите имена папок. Для каждого имени проверьте, что соседний SKILL.md имеет frontmatter name, точно совпадающий с именем папки.
Несовпадение, ссылка, выход пути за установленный plugin или повреждённый frontmatter блокируют очистку дублей: BLOCKED_DUPLICATE_REVIEW. Установка при этом остаётся только INSTALLED_ON_DISK.
7. Найти Только Личные Конфликты
Проверяйте только существующие пользовательские корни навыков, которые Codex реально использует на этом компьютере. Типичные корни — $HOME/.agents/skills и прежний $HOME/.codex/skills, но не считайте их активными без проверки текущей среды. Не трогайте repo-scoped .agents/skills, системные навыки, другие plugins и уникальные личные навыки.
Каталог считается доказанным конфликтом только когда одновременно выполнены все условия:
- он находится непосредственно под проверенным личным корнем;
- это обычный каталог, а не symlink, alias или reparse point;
- внутри нет ссылок и путей, выходящих за каталог;
- имя каталога соответствует допустимому имени навыка;
SKILL.mdразбирается, а его frontmatternameточно совпадает с именем каталога;- такое же имя есть в проверенном каноническом списке нового plugin.
Похожее название, совпавшее описание или общий автор не доказывают конфликт. Неизвестный root, неправильный frontmatter, ссылка или расхождение имён дают BLOCKED_DUPLICATE_REVIEW для этого кандидата; ничего не перемещайте автоматически.
8. Перенести Дубли В Восстанавливаемый Карантин
Создайте отдельный каталог запуска внутри локального Codex home: quarantine/team-skills-library/<UTC-timestamp>/. До первого перемещения запишите manifest с:
- временем и причиной запуска;
- версией установленного plugin;
- исходным путём относительно личного корня;
- каноническим именем;
- деревом файлов и SHA-256 обычных файлов;
- целевым относительным путём карантина;
- статусом каждого шага.
Перемещайте каждый доказанный конфликт атомарным переименованием без перезаписи существующего target. Сразу проверьте: исходный каталог отсутствует, каталог карантина существует, дерево и хэши совпадают. Если исходник и карантин находятся на разных файловых системах, rename не атомарен или target уже существует, остановитесь до перемещения этого кандидата.
Не удаляйте карантин в этом запуске. Не очищайте резервные cache-каталоги вида .stale-*: они не являются активными личными навыками. Старый пользовательский plugin-каталог допустимо перенести только при точном name = team-skills в его manifest и после отдельной проверки границы владения. Все уникальные личные навыки должны остаться байт-в-байт без изменений.
Если доказанных конфликтов нет, запишите это в manifest и продолжайте. Если все найденные конфликты безопасно перенесены, поставьте LEGACY_QUARANTINED.
9. Сохранить Точку Продолжения
До перезапуска атомарно сохраните локальную карточку ~/.codex/skill-runs/obnovlenie-biblioteki-navykov/pending.json со статусом RESTART_PENDING, ожидаемым plugin id и semver, контрольным именем team-skills:razgrom-plana-na-naivnost, путём к manifest карантина и перечнем незакрытых блокеров. Секреты и содержимое личных файлов в карточку не помещайте.
10. Выполнить Один Безопасный Перезапуск
Точная команда пользователя уже разрешает одну попытку перезапуска; повторного вопроса не задавайте. Используйте только поддерживаемое текущей поверхностью действие, которое полностью закрывает и снова открывает Codex и сохраняет возможность продолжить эту задачу по контрольной точке.
Если такого действия нет или среда не гарантирует продолжение, не имитируйте перезапуск завершением процесса и не обещайте автоматическое возвращение. Остановитесь с BLOCKED_RESTART_UNAVAILABLE, сохранив RESTART_PENDING, и назовите одно ручное действие: полностью закрыть и снова открыть Codex. Это технический блокер, а не просьба отдельно разрешить уже разрешённые шаги.
11. Проверить В Новой Сессии
После фактического перезапуска прочитайте pending.json, затем проверяйте пользовательский результат только по списку навыков новой сессии:
- виден
team-skills:razgrom-plana-na-naivnost; - установленная semver совпадает с контрольной точкой;
- ни один перемещённый одноимённый личный каталог снова не активен;
- уникальные личные навыки остались доступны.
Наличие файлов в cache, успешный plugin list и старый список навыков не заменяют эту проверку. При успехе смените карточку на LIVE_VERIFIED и сохраните время проверки. При несовпадении оставьте контрольную точку и верните наблюдаемый статус без новой очистки и без второго перезапуска.
Формат Результата
Статус: [LIVE_VERIFIED | RESTART_PENDING | блокирующий статус]
Канонический plugin: [id, semver, источник]
Перенесено в карантин: [имена или «ничего»]
Сохранено без изменений: [уникальные личные навыки]
Восстановление: [локальный manifest карантина или «не создавался»]
Проверка новой сессии: [наблюдаемый результат или «не выполнена»]
Блокер: [точная причина или «нет»]
Границы
- Не используйте этот skill для создания или редактирования содержания навыков; для этого нужен
dobavlenie-navyka-v-biblioteku. - Не называйте skill способом собственной первичной установки: до появления skill в сессии входом служит документ подключения.
- Не используйте его как фоновую службу, планировщик или способ незаметно менять библиотеку без запроса пользователя.
- Не удаляйте локальные навыки, cache, config, marketplace или plugin по одному совпадению имени.
- Не переносите repo-scoped и системные навыки, даже если имя совпало: это отдельная задача с отдельным владельцем.
- Не меняйте Defender, Gatekeeper, антивирус, execution policy или настройки безопасности.
- Не выдавайте Git checkout, скачанные файлы,
INSTALLED_ON_DISKилиRESTART_PENDINGзаLIVE_VERIFIED. - Не делайте второй перезапуск и не повторяйте изменяющие команды после несовпадения; сначала покажите наблюдаемый факт.
Опрос После Использования
Опрос задаётся один раз — после LIVE_VERIFIED или явного блокирующего статуса, не между установкой и перезапуском. Если пользователь уже ответил «пропустить» в этой сессии, не переспрашивайте.
Опрос по навыку:
1. Что в работе этого навыка было полезно?
2. Что стоит доработать в процедуре или формате ответа?
Можно ответить коротко или написать "пропустить".
Если пользователь ответил, сохраните санированную карточку в ~/.codex/skill-runs/obnovlenie-biblioteki-navykov/usage-feedback.jsonl — лучше через bundled script:
python3 scripts/log_usage_feedback.py --liked "..." --improve "..." --outcome "..."
Script перед записью редактирует приватные пути, контакты и token-like строки и сохраняет в JSONL redaction_applied и redaction_types. Если запись невозможна из-за sandbox, прав или отсутствия tools, не делайте вид, что лог сохранён: скажите об этом и покажите короткую JSONL-карточку для ручного сохранения. Raw-ответы, контакты, пути и секреты не коммитить.
Логирование Сбоев
Перед выполнением прочитайте локальный known-exceptions.yaml как список уже известных случаев и применяйте подходящее do_next_time без нового поиска.
Если пользователь поправил skill, tool/API/browser упал, нарушен режим работы, пришлось искать workaround или skill сделал ложное предположение, запишите приватную карточку в ~/.codex/skill-runs/obnovlenie-biblioteki-navykov/exception-log.jsonl.
Пишите факты: что skill хотел сделать, что сделал, где сломался, какая предпосылка была ложной и что сделать в следующий раз. Если поле неизвестно, пишите unknown. Raw logs не коммитить.
Definition Of Done
- Выбран работоспособный официальный CLI для целевого Codex home; ошибка одного wrapper не выдана за недоступность всех кандидатов.
- До замены проверены копии конфигурации и установленного пакета; при локальном источнике или запросе сохранить расширение выполнена свежая сверка содержимого, исходный рабочий каталог не изменён.
- Установленный plugin с локальной регистрацией направлен в разрешённое переподключение; чужой источник не заменён.
- При отсутствующем plugin до чистой установки проверены точные legacy-признаки; найденные следы обработаны только через процедуру переподключения и проверку владения.
- Канонический Git marketplace обновлён или впервые подключён штатной CLI, а plugin повторно установлен.
codex plugin list --jsonпоказывает ровно одну включённую запись ожидаемого id, source и semver.- Перенесены только доказанные одноимённые личные копии; уникальные, неоднозначные, repo-scoped и системные навыки не изменены.
- Каждое перемещение имеет локальный manifest, хэши, атомарную проверку и путь восстановления; постоянного удаления нет.
- До перезапуска сохранена контрольная точка.
- Только новая сессия подтвердила контрольный канонический навык и отсутствие активного конфликта.
Пока точный пользовательский вызов не прошёл на реальной машине всю цепочку update → reinstall → quarantine → restart → new-session visibility, skill сохраняет статус experimental. CI и native smoke подтверждают пакет и команды доставки, но не доказывают срабатывание skill, перезапуск приложения или список навыков новой пользовательской сессии.
- Финальный статус —
LIVE_VERIFIED; любой более ранний статус честно назван промежуточным или блокирующим.