Экспорт навыка в Claude Custom Skills
Запуск Навыка
При явном вызове или однозначном смысловом совпадении применяйте навык сразу. Перед первым шагом покажите ровно одну короткую контекстную строку (не более 30 слов) и продолжайте работу в том же ответе, не ожидая реакции:
Применяю «Экспорт навыка в Claude Custom Skills»: <кратко назовите конкретную дополнительную процедуру или проверяемый результат для текущего запроса>; продолжаю без ожидания.
Не включайте в строку author_github, внутреннее имя папки или пересказ всего запроса. Не спрашивайте, применять ли навык.
Если одновременно подходят совместимые навыки, выберите минимальный набор и покажите одну общую строку. Если подходы ведут к несовместимым результатам и запрос не позволяет выбрать, спросите только о желаемом результате, не о разрешении применить навык.
Запуск навыка не расширяет полномочия. Выполните всю безопасную и уже разрешённую часть; запросите подтверждение только непосредственно перед ещё не разрешённым внешним или изменяющим действием. Не запрашивайте повторно уже данное разрешение и не дублируйте системное окно подтверждения.
Обзор
Skill переносит один существующий навык из командного или другого рабочего формата в минимальный пользовательский ZIP для загрузки через интерфейс Claude.ai или Cowork Custom Skills.
Смысловую адаптацию выполняет агент. Bundled script только проверяет уже подготовленную папку и упаковывает её стандартной библиотекой Python. Он не редактирует исходник, не решает, какие инструкции важны, и не обращается к сети или аккаунту Claude.
Claude Code не является целевой поверхностью этого workflow. Для него используйте существующий marketplace репозитория.
Естественные Входы
- «Выгрузи этот навык одним ZIP для загрузки в Claude».
- «Подготовь skill, чтобы я мог отдать один файл пользователю Claude».
- «Проверь, что в архиве нет лишних repo-файлов и всего хватает».
- «Сделай минимальный пакет Claude Custom Skills, но ничего не загружай».
Обязательный вход — существующая папка навыка. Каталог результата опционален. По умолчанию создавайте dist/<name>-claude-custom.zip относительно текущего проекта.
Процесс
- Прочитайте
known-exceptions.yamlэтого skill и примените подходящийdo_next_time. - Подтвердите целевую поверхность. Если запрос относится к Claude Code, остановите экспорт и направьте пользователя в существующий marketplace.
- Найдите исходную папку и прочитайте её
SKILL.md. Затем откройте только реально упомянутые или функционально необходимые файлы. Не считайте весь repo обязательной зависимостью. - Зафиксируйте исходный состав и создайте отдельный временный каталог. Все адаптации выполняйте только в этой копии; после сборки сравните исходный состав и содержимое с зафиксированным состоянием.
- Прочитайте
nameиdescription. Если имя нарушает ограничения ниже, не переименовывайте его молча: задайте один вопрос с предложенным допустимым именем и продолжайте только после ответа. - Перепишите
descriptionпо смыслу в одну строку длиной не более 200 символов: сохраните назначение и условия срабатывания. Не обрезайте строку механически. - Удалите из копии только зависимости исходного repo или Codex, которые не выполняют полезную функцию на целевой поверхности:
- инструкции про
~/.codex, локальный feedback-опрос и exception logging; - служебную карточку согласия, если она относится только к автоподключению командного skill;
- инструкции про каталог, manifest, marketplace, PR, CI и внутреннюю доставку repo;
- registry-файлы и примеры, которые не нужны для выполнения самого навыка.
- инструкции про
- Сохраните функциональные правила, ограничения, примеры внутри инструкции и только те файлы из
scripts/,references/,assets/иresources/, без которых workflow не работает. Не добавляйте автоматическиLICENSE.txt,README,skill.yaml,known-exceptions.yaml, папкуexamples/или любые файлы «на всякий случай». - Если необходимый script зависит от отсутствующей среды или требует переписывания между платформами, поставьте
BLOCKED. V1 не устанавливает пакеты и не переводит произвольный код между средами. - Передайте подготовленную папку bundled packager. Если каталог результата не задан, вычислите
dist/<name>-claude-custom.zip. Не выбирайте существующий путь: упаковщик не перезаписывает архивы.
python3 scripts/build_custom_skill_zip.py --source <prepared-skill-dir> --output <archive.zip>
- Проверьте stdout, повторно откройте готовый ZIP независимо от исходной папки и составьте финальный отчёт. Удалите временную копию только после того, как точный состав зафиксирован.
Проверки Упаковщика
Упаковщик обязан завершиться с BLOCKED, если обнаружено хотя бы одно условие:
- нет
SKILL.md, файл не читается как UTF-8 или frontmatter не содержит однострочныеnameиdescription; nameдлиннее 64 символов, содержит что-либо кроме lowercase letters, digits и hyphens либо включаетanthropicилиclaude;descriptionпуст или длиннее 200 символов;- общий объём файлов или итоговый ZIP превышает 30 МБ;
- найден symlink, скрытый служебный файл, небезопасный путь, очевидный secret или персональный абсолютный путь;
- путь из
scripts/,references/,assets/илиresources/, упомянутый вSKILL.md, отсутствует; - output уже существует или находится внутри исходной папки.
Успешный архив содержит ровно одну корневую папку с именем из frontmatter. Упаковщик повторно открывает ZIP, сверяет точный список записей и выполняет проверку целостности.
Формат Результата
Статус: STATIC_VALIDATED | BLOCKED
Архив: <путь или прочерк>
Состав: <точный список файлов>
Адаптации: <что изменено или удалено>
Загрузка в Claude: не выполнялась
STATIC_VALIDATED означает только то, что локальный архив прошёл перечисленные проверки. Он не доказывает, что Claude принял ZIP, включил навык или вызвал его на реальном запросе.
Границы
- Не изменяйте исходную папку и не подменяйте её временной копией.
- Не загружайте, не включайте и не отправляйте архив без отдельного действия пользователя.
- Не используйте наличие ZIP как доказательство загрузки в аккаунт.
- Не создавайте API-клиент, manifest, отдельный валидатор, uploader или новую подсистему доставки.
- Не добавляйте сеть в обычный экспорт. Если пользователь отдельно просит подтвердить актуальность требований прямо сейчас, повторно откройте Claude Help Center и Claude Platform, затем назовите дату проверки.
- Не обещайте совместимость произвольного исполняемого кода. Необходимые зависимости должны быть совместимы с целевой средой или результат остаётся
BLOCKED.
Definition Of Done
- исходная папка после выполнения байтово не изменилась;
- подготовленная копия содержит только функционально необходимые файлы;
- упаковщик вернул
STATIC_VALIDATEDи точный состав; - ZIP содержит одну корневую папку и повторно открылся без ошибок;
- отчёт перечисляет каждую смысловую адаптацию и всегда говорит
Загрузка в Claude: не выполнялась; - ни загрузка, ни включение навыка не выдаются за выполненные.
Опрос После Использования
Задайте опрос один раз после передачи ZIP и отчёта либо после явного BLOCKED, не во время подготовки и проверки. Если пользователь уже ответил «пропустить» в этой сессии, не переспрашивайте.
Опрос по навыку:
1. Что в работе этого навыка было полезно?
2. Что стоит доработать в процедуре или формате отчёта?
Можно ответить коротко или написать "пропустить".
Если пользователь ответил, сохраните санированную карточку в ~/.codex/skill-runs/upakovka-navyka-odnim-faylom/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/<skill-name>/exception-log.jsonl.
Пишите факты: что skill хотел сделать, что сделал, где сломался, какая предпосылка была ложной и что сделать в следующий раз. Если поле неизвестно, пишите unknown. Raw logs не коммитить.