Первые скилы получаются крошечными: пара триггеров в описании и три-четыре шага текстом. Ассистент читает инструкцию и делает. Красиво. Но рано или поздно тебе нужен скил посложнее - такой, где есть параметры, разные режимы и обработка сбоев. И вот тут аккуратный текстовый скил начинает разваливаться.
Возьмём живой пример: скил, который скачивает видео по ссылке. Казалось бы, мелочь. Но в реальности это уже не “сделай раз-два-три”. Видео или только звук? Какое качество? Куда сохранять и под каким именем? А если сеть моргнула на середине - повторить или упасть? Если всё это запихать в текст инструкции, SKILL.md распухает в простыню, которую ассистент читает по-разному от раза к разу. Поправил один шаг - поехало в другом. Скил становится хрупким и неповторяемым.
Знакомое ощущение: вроде описал подробно, а результат каждый раз чуть-чуть другой. Проблема не в ассистенте. Проблема в том, что логику пытаются держать словами там, где её место - в коде.
В чём идея
Скил - это два разных слоя, и их полезно не смешивать. Первый слой: когда меня звать и что в итоге отдать пользователю. Второй слой: как именно всё посчитать и обработать ошибки. Первый - это инструкция, она должна быть короткой. Второй - это логика, и её место в скрипте.
Приём называется просто: вынеси логику в tools/. Внутри папки скила заводишь подпапку tools/ и кладёшь туда скрипт. Вся механика - разбор параметров, шаблон имени файла, повторные попытки при сбое - живёт в скрипте. А SKILL.md остаётся тонким: он только разбирает запрос (вот ссылка, вот формат, вот качество) и запускает скрипт с нужными параметрами. Скил = инструкция плюс код, а не инструкция вместо кода.
Почему так лучше? Во-первых, текст инструкции перестаёт пухнуть и ломаться: ассистенту незачем держать в голове десять условий, он просто зовёт скрипт. Во-вторых, код переиспользуется и правится в одном месте - захотел поменять поведение, поправил скрипт, инструкцию не трогаешь. В-третьих, сложные вещи вроде ретраев при сбое сети надёжно делаются кодом, а не уговорами в тексте.
В нашем примере скрипт - это тонкая обёртка над готовой утилитой yt-dlp (она и про YouTube, и про VK, и про Rutube, а ffmpeg под капотом склеит видео со звуком). Оговорюсь честно: YouTube в РФ заблокирован - для него нужен VPN или прокси; VK и Rutube работают без этого. И сами площадки периодически меняют отдачу, особенно YouTube - иногда нужен свежий yt-dlp, JS-рантайм или cookies, а приватные ролики за логином скрипт не возьмёт. Как раз поэтому в обёртке есть ретраи: витрины капризны. Сама обёртка добавляет ровно то, чего не хватает: понятные параметры (ссылка, формат, качество), вменяемое имя файла и повтор попытки, если что-то сорвалось. Это и есть суть приёма: берёшь мощный инструмент и заворачиваешь его в предсказуемый скрипт, которым удобно управлять из скила.
Граница простая. Если в скиле появляются параметры, ветвления и обработка ошибок - это сигнал вынести логику в tools/. Если скил по-прежнему укладывается в три коротких шага без условий - оставь один файл, не усложняй.
Как себе сделать
Не пиши ни скил, ни скрипт руками. Отдай задачу своему ассистенту - Claude Code, Codex, Cursor, Gemini, любому. Он сам разложит файлы по местам и напишет код. Просто скопируй промпт:
Создай мне скил, который скачивает видео или звук по ссылке (YouTube, VK, Rutube).
Срабатывай на просьбы вроде "скачай это видео", "забери ролик по ссылке", "вытащи звук", "скачай в 1080p".
Главное требование по устройству: НЕ держи логику в тексте инструкции.
Вынеси её в отдельный скрипт в папке tools/ - это тонкая обёртка над утилитой yt-dlp.
Скрипт должен принимать ссылку, формат (видео или только звук) и качество,
задавать понятный шаблон имени файла и повторять попытку при сбое сети (ретраи).
Сам файл инструкции оставь коротким: разобрать запрос и запустить скрипт с нужными параметрами,
а потом вернуть путь к сохранённому файлу.
Перед проверкой убедись, что yt-dlp и ffmpeg установлены (brew install yt-dlp ffmpeg или pip install yt-dlp), иначе упрёшься в command not found. Как понять, что заработало: попроси ассистента “скачай вот это видео в 720p” и дай ссылку. Если он сам подхватил скил, запустил скрипт и вернул путь к файлу - связка инструкция плюс код собралась. Теперь попроси “вытащи звук из этого ролика”: тот же скрипт, другой параметр, на выходе аудио. Один скрипт обслуживает оба сценария - это и есть переиспользование.
И главное, что стоит унести с собой: как только скил перерастает пару строк, не раздувай инструкцию - выноси логику в tools/. Текст пусть отвечает за то, когда звать и что отдать, а весь сложный код живёт в скрипте, который легко править и переиспользовать.
Смотреть полностью
- YouTube: https://www.youtube.com/watch?v=FM2UKaC3AYw
- VK Видео: https://vk.com/video-233222565_456239041
- Rutube: https://rutube.ru/video/0da1176ac28bf60a358bb086aa22b6b8/
Коротко
- YouTube Shorts: https://www.youtube.com/shorts/txhKUnRu1z0
- VK Клипы: https://vk.com/clip-233222565_456239044
- Rutube: https://rutube.ru/video/9e1df58864f2e8d8f026e775ad908ba8/
- Telegram: https://t.me/chernovdev/2126
