Картинка для привлечения внимания

Для тех, кому невтерпёж
«Ха! Мы шарим за AGENTS.md, Трин, мы же вайбкодеры!»
И я согласен, если речь про пет-проект или пару сервисов. А как быть, когда у тебя зоопарк из 40+ сервисов на четырёх разных языках?
Можно попробовать уместить все правила в один AGENTS.md. Можно завести свой AGENTS.md в каждом сервисе и бесконечно дублировать одни и те же инструкции. Оба варианта работают примерно до того момента, пока ты не начинаешь бояться собственного файла с правилами.
С приходом LLM в дивный мир разработки, программисты каждый день пытаются упростить себе жизнь: MCP-серверы, отдельные агенты для отдельных задач, скиллы и куча Memory-проектов/паттернов.
Сегодня поговорим про скиллы. Лично я начал серьёзно погружаться в них пару месяцев назад и пока нахожусь на стадии: «О боже, это панацея! Скиллы всем и всюду, почему моя микроволновка до сих пор не понимает скиллы?»
Небольшое уточнение: дальше под «скиллами» я имею в виду не только Claude Skills, а Agent Skills в более общем смысле.
Claude громче всех это популяризовал, но сам паттерн уже живёт шире: Codex, Cursor, OpenCode, OpenClaw и другие агенты постепенно начинают понимать скиллы. Правда, как обычно в нашем прекрасном мире, понимают они их чуть по-разному.
Душная краткая история
Промпты
Всё началось с контекста. Ещё во времена ChatGPT-3 нас начали «учить», что модели нужно знать подробности. И чем больше она их знает, тем лучше обработает твой запрос.
Пока Google учил нас получать информацию, кодируя запрос ключевыми словами, ChatGPT, наоборот, просил детально и подробно описать проблему, задачу или вопрос.
Я помню свои первые попытки писать код с ChatGPT, когда просто копируешь ему метод и говоришь: «Ебашь пиздато». Ну и получалось как в той прекрасной «Энциклопедии профессора Фортрана».

За три года мы уже привыкли, что вполне можно задавать вопросы в формате:
«Я хочу подарить знакомой подарок на день рождения, но так, чтобы явно обратить на себя внимание. Она увлекается космосом, я видел у неё приложение с картой звёздного неба, а ещё она любит походы. Работает в издательстве дизайнером и обожает кофе».
А не как раньше в Google:
«сиськи порно видео без регистрации и смс».
Однако когда задача чуть больше, чем на один тик, уместить в промпте все аспекты бывает сложно.
AGENTS.md, Cursor Rules и прочие локальные инструкции
С появлением агентов моделям стало не нужно кормить свой код огромными ложками: они научились читать файлы с твоего диска. Однако проблема инструкций никуда не делась.
AGENTS.md сейчас позиционируется как «README для агентов»: предсказуемое место, где кодинг-агент может найти команды сборки, правила проекта и ожидания по работе с репозиторием. У OpenAI Codex есть отдельная документация по AGENTS.md, а сам формат описан на agents.md. Cursor, в свою очередь, развивал Project Rules и .cursor/rules, где правила можно подключать по релевантности, вручную или по паттернам файлов. Anthropic позже оформила скиллы как папки с инструкциями, скриптами и ресурсами, которые Claude подгружает динамически под конкретную задачу.
Осенью 2025 года Anthropic громко выкатила Agent Skills и сформулировала идею так: вместо того чтобы плодить отдельных агентов под каждый сценарий, можно давать агенту переиспользуемые навыки.
Skills or die!
Сперва я вообще не понял, зачем мне скиллы, когда у меня есть богоподобные .cursor/rules/*.mdc.
И несмотря на то, что я уже давно не сидел на Cursor, предпочитая 5.3 Codex на OpenCode, постепенно я начал смотреть в сторону Claude Code и скиллов. С появлением Opus 4.6 я решил попробовать посидеть на нём плотнее и поизучать скиллы подробнее.
Я понимал скиллы как те же Cursor Rules, только с какими-то непонятными скриптами, строгой документацией на MD-файлы и прочим церемониалом. Однако довольно быстро скиллы захватили все мои мысли.
И я бы не сказал, что «познал дзен». Мне кажется, я до сих пор каждый день переоткрываю для себя скиллы. Но уже тогда я думал: «Вау, а что ещё надо-то?» После этого «а что ещё надо?» экосистема вокруг скиллов начала быстро обрастать новыми практиками: eval’ами, оптимизацией description, запуском в отдельных контекстах и прочими радостями человека, который хотел просто не забывать тесты перед деплоем.
Что такое Skill
Если совсем просто, skill — это инструкция.
Но важная разница в том, что это не инструкция из чата, которую агент забудет через три сообщения. Это отдельный модуль поведения: с названием, описанием, правилами применения, шаблонами, скриптами и файлами, которые агент может подтянуть только тогда, когда они реально нужны.
Вы пишете скилл: «Каждый раз перед деплоем мы запускаем тесты». И каждый раз, когда агент думает, что пора деплоить, он запускает тесты.
Модель, пока «думает» (thinking), что всё доделала и надо задеплоить, «вспоминает», что у неё есть навык «запускать тесты перед деплоем». По контексту это очень похоже на то, что надо сделать перед деплоем, который она собралась запускать. Поэтому она открывает скилл и читает инструкции: что именно надо запустить, какой результат ожидать и что делать дальше при успехе или неудаче.
При этом каким бы подробным ни был скилл — с примерами, тестами под разные языки программирования и так далее — модели не нужно хранить его в своём контексте всегда. Ей достаточно хранить что-то вроде:
skill
run-test, description: «запускать тесты перед деплоем».
И всё.
SKILL.md
Минимальный скилл — это директория с файлом SKILL.md.
my-skill/
├── SKILL.md
├── scripts/
├── references/
└── assets/
Внутри SKILL.md лежит YAML-frontmatter с обязательными name и description, а ниже — обычные markdown-инструкции.
---
name: run-tests-before-deploy
description: Use when preparing a deployment and validating changes before release.
---
## Что делать
1. Определить, какие тесты относятся к изменению.
2. Дописать тесты для нового функционала.
3. Запустить нужные тесты через `go test ./...`.
4. Если тесты упали — не деплоить.
5. Если тесты прошли — продолжить деплой.
Рядом могут лежать scripts/, references/, templates/ и любые другие файлы, которые агент подтянет по необходимости. В этом и смысл: агент не обязан держать весь скилл в контексте всегда, он может сначала увидеть только описание, а потом открыть нужные инструкции и файлы.
Скиллы размещаются в "родительской директории" для скиллов (.claude/skills, .codex/skills, .cursor/skills, .agents/skills и так далее). Ну и, логично, агенты читают эти директории перед каждой новой сессией, добавляя себе в контекст name+description ваших скиллов.
description как крючок для агента
Как я уже говорил выше, во frontmatter самое главное — это description.
Фактически это короткие инструкции-триггеры: когда агенту следует читать скилл целиком и начинать выполнять его инструкции.
Тут важно держать баланс. Короткий description будет «ускальзывать» от агента, слишком длинный — жрать контекст и ловить ложные срабатывания. Зафиксируем, что именно description один из самых важных аспектов скиллов, т.к. именно на него «клюёт» агент.
Скрипты, шаблоны, reference-файлы
Но не инструкциями едиными славятся скиллы.
Постепенно используя скиллы всё чаще и чаще, я сталкивался с тем, что формат выдачи результата разный, а если надо выполнить какие-то скрипты, то скрипты модель тоже пишет каждый раз по-разному.
Тут-то до меня и дошло, что я могу прописать в скиллах шаблоны ответов и разместить рядом готовые скрипты. Зачем модели лишняя работа в виде генерации шаблона или скрипта, если она может сделать это один раз, а дальше просто запускать то же самое?
Очередной раз прозрел. Холодный пот выступил на моём лбу от осознания, как сильно я сейчас всё заоптимизирую. Настолько сильно, что никто потом не разоптимизирует обратно.
Почему Skill — это не просто Markdown
В тот момент у меня был в работе скилл e2e-тестирования вебхуков.
Вебхуки на моём проекте проходят довольно долгий путь: событие, которое попадает в очередь, оттуда в воркер, оттуда в retry-джобу и так далее. Всё как у взрослых.
Тестировать всю эту схему обычными тестами через моки/fake и подобные техники не круто. А тут как будто сам Дарио Амодеи вложил мне в руки скиллы и сказал: «Трин, иди и пиши крутые тесты».
Скилл по простому промпту «тестируем хуки на деве» задавал пару вопросов по инструкции и приступал к работе:
- Проверял по шаблонам, что там в dev-базе.
- Смотрел, есть ли подписки на события у конкретных пользователей.
- Поднимал в dev-кубе pod с Python-вебсервером по шаблону.
- Поднятый вебсервер часть запросов принимал 200-м ответом, часть — 500-м или таймаутил.
- Параллельно запускал API-запросы, генерировал события и ждал, пока они пройдут очереди и попадут в воркеры и джобы.
- Собирал статистику с вебсервера.
- Готовил summary: «так и так, всё пашет» или «так и так, не пашет, и вот почему».
При этом сам скилл был довольно короткий, потому что:
- шаблоны summary лежали в отдельных файлах;
- Python-вебсервер — отдельно;
- Kubernetes-темплейты — отдельно;
- возможные проблемы и «в чём может быть дело» — отдельно.
Например, если проблем не было, скилл не подключал troubleshooting.md, экономя контекст. А если проблемы были, он не подключал файл шаблона финального summary.
Ниже я показываю нейтральную структуру скилла, а не конкретный путь установки. В реальности путь зависит от агента: у Claude это один каталог, у Codex другой, у Cursor третий, а OpenCode вообще умеет читать несколько совместимых вариантов.
skills/webhook-test
├── references
│ ├── k8s-test-server.yaml
│ ├── server.py
│ ├── tinker
│ │ ├── bootstrap.php
│ │ ├── check-readiness.php
│ │ ├── cleanup.php
│ │ ├── create-models.php
│ │ ├── create-subscriptions.php
│ │ ├── dispatch-events.php
│ │ ├── reload.php
│ │ ├── show-samples.php
│ │ ├── switch-to-retry.php
│ │ └── verify-results.php
│ └── troubleshooting.md
└── SKILL.md

В данном примере server.py лежит в references, а не в scripts, где его в целом ожидаемо увидеть. Но тут прикол в том, что это именно шаблон скрипта, а не скрипт для запуска агентом.
Почему скиллы доминируют
Конечно, всё зависит от задач. На самом деле скиллы не всегда «доминируют». Ну не вот прям «доминируют». Однако в большинстве прикладных задач они наиболее понятны пользователям и просты в освоении.
Против памяти
Я не могу сказать, что тестировал прям все проекты по памяти для агентов. Тем более откуда бы у меня было время, если всё свободное время я посвящаю скиллам.
Но я успел потрогать несколько подходов: от простых WikiMemory-паттернов до отдельных memory-слоёв вроде Mem0, MemPalace и AgentMemory. Все они по-своему решают важную задачу: дают агенту долговременную память, помогают помнить предпочтения пользователя, факты из прошлых диалогов, историю решений и контекст между сессиями.
Но это не совсем то, что я жду от процедурной работы агента.
Память хороша для фактов:
- «пользователь пишет на Laravel»;
- «в этом проекте используется Pest»;
- «мы уже выбирали такой-то Go-пакет для Redis»;
- «пользователь не любит длинные отчёты».
Скилл хорош для процесса:
- как именно писать тест;
- какие команды запускать;
- в каком порядке проверять результат;
- что делать при ошибке;
- какой шаблон ответа вернуть пользователю.
Память — это «я где-то слышал». Скилл — это «у меня есть инструкция, чеклист и готовые инструменты».
Против MCP
С MCP всё интереснее, потому что MCP — не враг скиллов. Это вообще другой слой.
MCP даёт агенту доступ к внешнему миру: GitHub, файловой системе, браузеру, базам, CRM, внутренним API и прочим штукам, до которых модель сама не дотянется. Anthropic описывает MCP как открытый протокол для подключения моделей к внешним источникам данных и инструментам; позже MCP передали в Agentic AI Foundation под Linux Foundation.
Но MCP сам по себе не объясняет агенту, как именно работать.
Он может дать инструмент github.search_issues, но не скажет:
- когда его вызывать;
- какие issue считать релевантными;
- как отличать баг от фичи;
- как оформить итоговый отчёт;
- что делать, если найдено три похожих issue;
- когда надо остановиться и спросить пользователя.
Вот здесь и появляется скилл.
MCP даёт агенту руки. Скилл объясняет, что этими руками делать, чтобы не получилось «я подключил 18 инструментов и теперь уверенно ковыряю прод отвёрткой».
Против огромных rules-файлов
Огромные AGENTS.md, как и MCP, — это пожиратели контекста, которые ещё и модифицировать тяжело.
Сначала там лежит:
Перед PR запускай тесты.
Потом:
Перед PR запускай тесты, но не все, а только unit.
Через неделю:
Перед PR запускай тесты, кроме фронта, если менялся только бэк,
но если менялся contracts/, то запусти ещё генерацию типов.
Через месяц им можно вызвать демона:
Перед PR запускай тесты, кроме фронта, если менялся только бэк,
но если менялся contracts/, то запусти ещё генерацию типов.
ВАЖНО: пункт выше не применять к legacy-api, кроме случаев,
когда пользователь явно попросил проверить webhooks-v2.
ВАЖНО: тесты запускаем через docker compose команду.
ОЧЕНЬ ВАЖНО: ЕСЛИ ПОЛЬЗОВАТЕЛЬ ПОПРОСИЛ НЕ ЗАПУСКАТЬ ТЕСТЫ -- НЕ ЗАПУСКАЕМ ТЕСТЫ

Проблема не в том, что rules плохие. Проблема в том, что общий файл слишком легко превращается в свалку процедур, исключений и исторических травм.
Не вместо всего, а поверх всего
Самая прелесть скиллов, конечно, в том, что у тебя может быть много MCP-серверов и огромные MD-файлы, но использовать их ты можешь с помощью скиллов только в нужный момент.
То есть тот же скилл может выполнять инструкции:
- «подключись к MCP»;
- «прочитай этот огромный старый вонючий MD-файл».
И да, в такие моменты вашему контексту конец. Но только в эти моменты. Во все остальные скиллы позволяют дёшево держать их смысл в памяти и вызывать их только по необходимости.
Всё это лирика. Давайте уже переходить к примерам.
Пример №1: маленькие скиллы, которые агент сам цепляет по смыслу
В качестве первого примера я хочу показать немного магии, которая лично меня заставляет шевелить волосами в носу.
Фактически это первое, что пришло в голову. Простая задача.
Вводные: PHP, Laravel. Пишу два скилла.
skills/model/SKILL.md:
---
name: model
description: |
Создание Eloquent-моделей для Laravel.
---
## Что спросить у пользователя (если не указано)
1. **Имя модели** (PascalCase, единственное число): `User`, `Order`, `Post`.
2. **`$fillable`** — список атрибутов для массового присваивания.
3. **`$casts`** — опционально, мапа `атрибут => тип` (`int`, `bool`,
`array`, `datetime`, `decimal:2`, enum-класс и т.п.).
4. **SoftDeletes** — по умолчанию **ВКЛЮЧЁН**. Выключать только при явной
инструкции пользователя.
Если атрибуты уже даны в сообщении — не переспрашивать, генерировать сразу.
## Скелет модели (по умолчанию, с SoftDeletes)
...
## Без SoftDeletes (если пользователь явно отказался)
Убрать `use SoftDeletes;` и `use Illuminate\Database\Eloquent\SoftDeletes;`.
skills/migration/SKILL.md:
---
name: migration
description: |
Создание Laravel-миграций по существующей Eloquent-модели.
Всегда создавать миграцию для новых моделей, если её нет.
---
## Алгоритм
1. **Найти модель** (обычно `app/Models/{Name}.php`). Если путь не дан —
спросить или поискать по имени класса.
2. **Прочитать**:
- `$fillable` — список колонок.
- `$casts` — мапа `колонка => тип` для вывода типов.
- наличие `use SoftDeletes;` — нужен `deleted_at`.
- наличие `public $timestamps = false;` — отключить `timestamps()`.
- кастомные `$table`, `$primaryKey` — учесть.
3. **Сгенерировать миграцию** в `database/migrations/` с именем вида
`YYYY_MM_DD_HHMMSS_create_{table}_table.php` (текущая дата/время).
...
## Правила
- Колонки в миграции — строго в порядке из `$fillable`.
- `id()` первым, `timestamps()` в конце, `softDeletes()` после `timestamps()`.
- Если в модели `$timestamps = false` — не добавлять `timestamps()`.
- `nullable()` ставить только если пользователь явно сказал или каст предполагает (`?type` в PHP 8). По умолчанию NOT NULL.
- Для FK-колонок (`*_id`) — `foreignId('user_id')->constrained()`, если понятно, на какую таблицу ссылается, иначе `unsignedBigInteger('user_id')`.
- Индексы (`unique`, `index`) — не добавлять без явной просьбы.
- Имя файла: `date('Y_m_d_His')` + `_create_{table}_table.php`.
Важный момент: эти два скилла не обязаны знать друг о друге напрямую. model отвечает за модель, migration — за миграцию. Связка появляется на уровне задачи: агент создал новую модель, увидел правило про миграции и подтянул второй skill уже в процессе работы.
Далее простой промпт:
Создай мне модель User с полями name, surname, berhday_at и sex
И результат:
Skill(model)
⎿ Successfully loaded skill
⎿ Allowed by auto mode classifier
Listed 2 directories (ctrl+o to expand)
⏺ Пустой каталог. Создам app/Models/User.php + миграцию (правило skill'а: новая модель → миграция).
⏺ Write(app/Models/User.php)
⎿ Wrote 22 lines to app/Models/User.php
⏺ Skill(migration)
⎿ Successfully loaded skill
⎿ Allowed by auto mode classifier
⏺ Bash(date +%Y_%m_%d_%H%M%S)
⎿ 2026_05_14_042553
⏺ Write(database/migrations/2026_05_14_042553_create_users_table.php)
⎿ Wrote 26 lines to database/migrations/2026_05_14_042553_create_users_table.php
⏺ Готово.
- app/Models/User.php — User с SoftDeletes, $fillable = name/surname/birthday_at/sex, $casts['birthday_at'] = 'date'.
- database/migrations/2026_05_14_042553_create_users_table.php — таблица users, поля в порядке $fillable, timestamps() + softDeletes().
Заметка: berhday_at трактовал как опечатку → birthday_at. sex оставил string (cast не указан). Если нужен enum / nullable / unique — скажи.
✻ Crunched for 42s
! tree ./
⎿ ./
├── app
│ └── Models
│ └── User.php
└── database
└── migrations
└── 2026_05_14_042553_create_users_table.php
5 directories, 2 files
Раньше я пытался предусмотреть все эти «а ещё создай миграцию», «а ещё напиши тесты» и прочее в одном скилле. Теперь же стараюсь разделять скиллы на небольшие атомарные скиллы, которые могут быть независимыми. Гораздо удобнее дорабатывать скиллы, когда они умеют делать что-то одно, но делают это хорошо.
В данных примерах я специально сильно упростил сами скиллы. Фактически они умеют только «создавать». Боевые же скиллы умеют модифицировать те же модели, держать их актуальными, делать update-миграции и так далее.
Я специально привёл лог работы агента, где видно, что он вызывает скилл миграций уже после создания модели.
В этом и кроется магия скиллов: агент умеет подтягивать их в процессе своих рассуждений. Аналогично на промпты вроде «надо исправить функционал этого экшена/сервиса/контроллера» агент подтягивает анализ изменений, ревьюит решение, «помнит», что новый функционал надо покрыть тестами, не сломать старое и не нарушить обратную совместимость.
На выходе простой промпт по доработке какого-то функционала или новой фичи, при должном количестве скиллов, агент без проблем делает ровно тот порядок действий, который бы ты сделал сам.
С одной лишь разницей: у агента меньше шансов ошибиться или чего-то забыть. Как и в данном примере berhday_at сразу же исправлен на birthday_at.
Ну и надо ли говорить, что эти скиллы я не писал руками. Я просто сказал: «Создай такой-то скилл». Единственное, что я исправил, — нарочно упростил description и убрал примеры и лишнюю логику из скиллов.
Для наглядности положил проект на GitHub.
Пример №2: news-skill для OpenClaw
Окей, что насчёт более реального примера?
Тут не столько магия, сколько силушка скильная.
У меня крутится OpenClaw на локальном сервере, где запущено несколько агентов: мой личный и парочка для родственников/друзей.
Во-первых, общаться с современными моделями удобно через Telegram, тем более что ChatGPT позволяет это делать через подписку, а не через API. Во-вторых, OpenClaw пока «побеждает» по простоте и доступности у других, в том числе проприетарных решений. Тут мы получаем уже не просто чатик с моделью, но и долговременную память, локальные знания, шедулер и так далее.
Для себя я набросал скилл, который собирает мне новости.
Идея была простая: я тону в новостях про нейросети. Они развиваются слишком быстро, хочется быть в курсе событий, но понятие «новостей» размывается.
Ты либо следишь только за официальными блогами фронтиров, либо каждый день получаешь одни и те же новости типа «Вышел ChatGPT 5.5!» из разных источников.
И ты либо сам разгребаешь все эти тонны новостей, фильтруя то, что неинтересно или что уже читал, но от другого автора. Либо доверяешь это LLM, которая легко улавливает смысл новостей и может ранжировать их под тебя по заданным параметрам, плюс исключать то, что уже тебе показывалось именно по смыслу.
Ну разве не лапочка?
Однако я быстро пришёл к тому, что данный скилл нужен не только мне, но и друзьям. Они видят, как это работает у меня, и просят: «Вау, а сделай нам так же, но другие источники и темы».
Недолго думая, я попросил агента переписать скилл так, чтобы он не знал ничего о моих темах, имел настройки тем/важности/источников, а все настройки хранил непосредственно в workspace конкретного агента, а не в себе.
У себя скилл хранит только шаблоны настроек, шаблоны отображения новостей и так далее.
skills/news-digest
├── SKILL.md # основной файл скилла
├── templates/
│ ├── item.md # шаблон одного элемента новости
│ ├── digest.md # шаблон обёртки дайджеста
│ ├── empty.md # используется, когда ничего не подошло
│ ├── scheduling-prompt.md # шаблон промпта для внешних планировщиков
├── defaults/
│ ├── settings.yaml # дефолтные настройки для свежей установки
└── README.md # этот файл
Скилл имеет инструкции в SKILL.md, а также templates и дефолтный конфиг. При первом запуске у пользователя, происходит onboarding, скилл опрашивает пользователя, что он хочет читать, из каких источников и так далее. Наверно, стоит вынести onboarding в отдельный reference, чтобы не держать его в теле скилла, но мне лень.
Сам скилл ничего не знает о выбранных темах/источниках и всё хранит в пользовательском workspace конкретного пользователя OpenClaw:
.openclaw/workspace-trin/news-digest-data/
├── 2026-04-26
│ └── evening.md
├── 2026-04-27
│ ├── evening.md
│ ├── manual-063455.md
│ ├── morning.md
│ └── raw
├── ...
├── feedback.jsonl
├── README.md
├── seen.jsonl
├── settings.yaml
├── source-notes.md
├── source-stats.jsonl
└── templates
├── digest.md
├── empty.md
├── item.md
└── scheduling-prompt.md
26 directories, 55 files
И по шедулеру отдаёт новости типа:
Новостной дайджест — 2026-05-13 · morning
Слот: morning · Таймзона: Europe/Moscow · Собрано: 2026-05-13 10:00 MSK
Утром без повторов: главный новый сигнал — Google обновил линейку Gemini,
а Claude Code после большого agent-view релиза закрыл несколько практических регрессий.
## Frontier LLMs
### Claude Code v2.1.140
🛠️ 2026-05-12 · Anthropic / Claude Code changelog · important
Коротко: релиз в основном эксплуатационный — фиксы `/goal`, background-сервиса,
hot-reload настроек и нескольких проблем вокруг managed settings.
Почему важно: это стабилизация именно агентных workflow. Меньше зависаний,
меньше ложных хуков, понятнее поведение в managed/enterprise-настройках.
## Не вошло
- OpenClaw: свежий релиз повторял кластер изменений, уже разобранный вчера.
- GitHub / agent devtools: несколько материалов всплывали снова, но уже были в seen.
- Laravel, Expo/React Native и Yandex Cloud: новых релизов выше порога important не нашлось.
Главное здесь не в том, что скилл умеет читать RSS. RSS умеет читать любой скрипт на коленке за вечер.
Главное в другом: скилл объединяет процедуру, настройки, локальное состояние и семантическую фильтрацию.
Обычный скрипт помнит ссылки.
Агент со скиллом помнит смысл.

Если пользователь уже видел первоисточник про релиз модели, скилл может не тащить ему ещё пять пересказов той же новости с разными заголовками. Он может сгруппировать их, выкинуть повторы или оставить как дополнительные источники. И вот это уже не RSS-читалка, а маленький редактор новостей, который постепенно понимает, что именно ты считаешь новостью.
Как обуздать скиллы и с чего начать
1. Ставьте глобально только базу
Для начала стоит понять, что скиллы могут быть как глобальными в системе и распространяться на всех агентов, так и локальными в конкретном проекте.
В глобальные скиллы я настоятельно рекомендую сразу установить официальные скиллы от Anthropic. Пусть вас не смущает, что это именно Anthropic скиллы, они прекрасно работают и с другими агентами.
Это условно «базовые» скиллы: как работать с PDF, XLSX, DOCX, презентациями и так далее. Помимо этих базовых скиллов там есть великолепный скилл skill-creator, который будет создавать скиллы за вас в правильном формате — и не только.
Также для себя я глобально установил скилл agent-browser и его дочерний скилл dogfood для тестирования веб-проектов.
По структуре и best practices можно смотреть AgentSkills.io, официальный репозиторий anthropics/skills и документацию Claude по frontmatter для Skills.
У разных агентов могут быть свои дополнительные поля frontmatter: модель, permissions, режим запуска, совместимость, ограничения инструментов и так далее. Но переносимым минимумом остаются name, description и инструкции.
2. Проектные скиллы держите рядом с проектом
В конкретных проектах стоит держать скиллы, специфичные для проекта: как делать ревью, как устроена архитектура, как создавать классы, где что хранить и прочие паттерны. Примеры с model/migration, пусть и очень простые, я уже описывал выше.
3. Пишите маленькие атомарные скиллы
Главная ошибка — пытаться сразу написать mega-laravel-skill, который умеет всё: модели, миграции, тесты, контроллеры, OpenAPI, деплой, кофе и массаж.
Такой скилл быстро превращается в тот же AGENTS.md, только в новой директории.
Лучше дробить:
model— создаёт и обновляет модели;migration— создаёт и проверяет миграции;pest-tests— пишет и обновляет тесты;api-resource— следит за форматом API-ответов;changelog— оформляет изменения.
Маленький скилл проще отладить, проще переиспользовать и проще улучшать. А главное — агент может собрать нужную цепочку сам, как в примере с моделью и миграцией.
4. Используйте skill-creator, но не верьте ему вслепую
Великолепие skill-creator не просто позволит создать скилл по всем стандартам, но также позволит оптимизировать скилл: убрать лишнее или, наоборот, добавить новых инструкций.
То есть буквально промпт:
«С помощью
skill-creatorпроверь мой такой-то скилл. Мне кажется, он плохо работает в таких и таких случаях».
У skill-creator есть отдельная ценность: он не только создаёт скилл по формату, но и помогает его отладить. В моём случае он мог прогонять набор тестовых промптов, сравнивать, когда скилл срабатывает и когда молчит, а потом предлагать более точный description.
То есть это не просто генератор директории с SKILL.md, а маленький редактор процедур: убирает лишнее, уточняет триггеры, предлагает вынести тяжёлые куски в references/ или scripts/.
Это всё тоже может работать «как магия», если докинуть немного контекста вроде:
«С помощью
skill-creatorоптимизируй мой скиллmodel. Он должен не только создавать модели, но и уметь модифицировать их».
5. Оформляйте документацию как скилл
Отдельное открытие: документацию по проектным паттернам тоже можно оформлять как скилл.
Сначала я просто переносил туда куски из AGENTS.md: почему мы используем outbox pattern, как он устроен, где лежат обработчики, какие ошибки уже были и чего делать нельзя.
А потом оказалось, что это полезно не только пользователю. Модель сама может триггерить такой скилл в процессе работы: например, когда меняет код, связанный с outbox, и ей надо вспомнить, почему мы делаем именно так.
То есть скилл становится не справкой «для человека», а справкой «для мышления агента».
Это просто вау.
6. Давайте скиллам эволюционировать
Раньше я добавлял в каждый скилл отдельный раздел «Эволюция» и писал туда инструкции вроде:
«Если пользователь делает заметки по работе скилла, предложи обновить его. Веди
CHANGELOG.md: что поменяли, зачем и почему».
Потом упростил до одного правила:
«Если пользователь недоволен результатом или явно уточняет процесс, предложи обновить скилл».
Этого оказалось достаточно. Если структура нормальная, агент сам понимает, куда внести изменение: в description, основной алгоритм, references/, шаблон ответа или troubleshooting.
Хороший пример тут — глобальный скилл go-packages.
Помимо инструкций о том, как и что мы устанавливаем, он имеет:
references/recommended.md
references/banned.md
Там список пакетов, которые я предпочитаю другим. При установке того или иного пакета скилл подтягивается и по инструкциям предлагает мне выбор между альтернативами: приводит ссылки на них, количество звёзд, последнее обновление с GitHub и так далее. Также он «запоминает» мой выбор.
Используя один стек, мы всегда подтягиваем ровно те пакеты, которые уже проверены в других проектах. Скилл отлично сам себя дописывает, и мне даже не нужно его «дёргать». Я просто промпчу:
«Делаем такой-то Go-сервис, он будет общаться с ClickHouse и Redis».
А агент сам подтягивает скилл, и тот сам говорит, какие пакеты мы для этого используем, либо предлагает выбор, показывая альтернативы.
Так и просится цитата Джони Айва: «Итс ЭМЭЙЗИНГ»
7. Не качайте всё подряд из awesome-репозиториев
Я могу ошибаться, но создавать свои скиллы обычно полезнее, чем скачать тысячу готовых и пытаться прикрутить их к своей жизни.
Смотреть чужие решения — отлично. Брать идеи, структуру, хорошие description, шаблоны, troubleshooting — тоже. Но ставить всё подряд глобально я бы не советовал.
Во-первых, чужой скилл почти всегда написан под чужой workflow.
Во-вторых, если внутри есть скрипты, это уже весьма неприятная дыра безопасности, пусть и небольшая. Как и сам факт, что вы вообще чужому тексту даёте доступ к своему агенту.
В-третьих, чем больше глобальных скиллов, тем больше шума при выборе релевантного.
Глобально я готов ставить только базу: официальные скиллы Anthropic, agent-browser, может пару реально ежедневных инструментов. Всё остальное лучше писать под себя и под конкретный проект.
8. Хороший скилл должен работать даже на слабой модели
Для себя я использую простой тест: если слабая модель стабильно проходит скилл без лишних вопросов и самодеятельности, значит скилл написан нормально.
Если же для работы нужен только Opus на максимальном thinking, значит я, скорее всего, не написал скилл. Я просто спрятал промпт в файл и надеюсь, что дорогая модель вывезет мою лень.
То есть если скилл хорошо структурирован, если он имеет пошаговую инструкцию, шаблоны команд, шаблоны ответов и скрипты везде, где нужно делать внешние вызовы, — даже слабая модель имеет минимальный шанс ошибиться при работе с ним.
Свои тяжёлые скиллы, в основном долгие e2e-тесты, я стремлюсь оптимизировать именно под работу слабых моделей.
Во-первых, токены не бесконечны. Если верить tokscale, я «сжёг» уже 11 миллиардов токенов за последние три месяца, и даже Max-подписка в Claude порой упирается в лимиты.

Во-вторых, они тупо выполняются быстрее.
Что по агентам? Claude, Codex, OpenCode, Cursor, OpenClaw и другие.
В этой статье я специально говорю про скиллы как про общий паттерн: папка, SKILL.md, description, инструкции, скрипты, reference-файлы итп. Однако стоит помнить, что это лишь «спецификация» и каждый агент «понимает» скиллы по-своему.
Да, базово все агенты понимают SKILL.md, читают его frontmatter и не грузят целиком, пока description не покажется агенту слишком подходящим для текущей задачи, однако есть и много отличий. Стоит помнить, что одинаковый скилл может совершенно по-разному отработать в разных агентах. Опять же, хорошо написанный скилл будет работать хорошо и одинаково в любом агенте, но всё же разница вполне может быть. Это как с вёрсткой сайтов в нулевых и десятых. Свидетели IE6 поймут о чём я ;)
Домашние директории
Основным отличием среди агентов, конечно, является «домашняя директория» для скиллов. Выше я уже указывал.
.claude/skills-> Claude code.codex/skills-> Codex.cursor/skills-> Cursor IDE.agents/skills-> OpenClaw и другие агенты
особняком тут идёт OpenCode, из официальной документации следует, что OpenCode умеет читать скиллы сразу из нескольких директорий, что, конечно, удобно:
.opencode/skills-> свои «родные» скиллы.claude/skills-> скиллы Claude code.agents/skills-> скиллы для прочих агентов
Однако, не забывайте про силу AGENTS.md. Никто не запрещает вам промптить в нём:
Читай скиллы из следующих директорий:
- ~/.claude/skills
- ~/.codex/skills
- ~/.cursor/skills
- ~/.agents/skills
- ~/.ultra-new-agent/skills
- ~/.kill-all-humans/skills
Расширенный frontmatter
Все агенты читают name и description, о чём я говорил уже много раз. Помимо этого разные агенты читают дополнительные метаданные. Официальная спецификация говорит и о других полях:
licenseлицензия на скиллcompatibilityуказатель на необходимые системные пакеты и их версииmetadatakey-value хранилище «прочих» настроекallowed-toolsразрешённые тулзы
Claude code позволяет явно задавать конкретную модель, что будет выполнять скилл, «умность» модели, режим запуска скилла как subagent и другое.
А тот же OpenCode прямо говорит, что все неизвестные поля заголовка будут игнорироваться.
Ну и как нам быть?
Во-первых, ничего не бояться. Все эти мелочи страшные только на бумаге. В 99% случаев скиллы буквально состоят из description + instruction.
Во-вторых, я для себя избрал простой путь: симлинки.
У меня есть одна «родительская» директория .agents/skills и в неё ссылаются .claude/skills и .codex/skills, мне хватает. Соответственно, если же вы используете какие-то другие кастомные агенты, вы так же можете иметь одну директорию со скиллами и просто симлинки на неё из других специфических мест.
Аналогично, кстати, я поступаю и с AGENTS.md. У меня есть AGENTS.md и симлинк на него из CLAUDE.md. Просто, доступно, универсально.
Няня, я у них поел!
Если вы всё ещё читаете и до сих пор не поняли, что вам сейчас делать, — просто начните с малого.
Возьмите свой AGENTS.md, CLAUDE.md или папку с заметками по проекту и попросите skill-creator разложить это на несколько маленьких скиллов. Не «один скилл на всё», а отдельные навыки под конкретные действия: ревью, тесты, миграции, деплой, работу с API, оформление changelog.
Потом попробуйте автоматизировать одну рутину, которая бесит вас чаще всего. Не самую сложную. Самую повторяющуюся.
Потому что в этом, кажется, и есть главный смысл:
AGENTS.md говорит агенту, где он.
MCP даёт ему руки.
Память даёт прошлое.
А скиллы дают профессию. Профессию джуна, который будет работать вместо меня, ахахаха (или как говоря в Бразилии: kkkkk).
Ну а если вы уже в теме — продолжайте обмазываться скиллами, и ваши волосы будут мягкими и шелковистыми.
Буду благодарен за любые ваши открытия про скиллы в комментариях. Особенно за практику, критику и мемы.
Полезные ссылки
📚 Стандарт и базовые объяснения
- Agent Skills Overview — общий формат Agent Skills:
SKILL.md,name,description, scripts, references, assets. - Anthropic: Equipping agents for the real world with Agent Skills — инженерный пост Anthropic про идею скиллов, progressive disclosure («постепенное раскрытие информации», чтение сначала только frontmatter и потом уже всего скилла) и выполнение скриптов.
- Claude Agent Skills docs — официальная документация Anthropic по Agent Skills.
- Claude Code Skills docs — документация по скиллам именно в Claude Code.
- OpenAI Codex Agent Skills — как Codex использует skills, progressive disclosure и
$skill-creator. - Cursor Agent Skills — скиллы в Cursor.
- OpenCode Agent Skills — скиллы в OpenCode.
📜 Контекст, rules и AGENTS.md
- AGENTS.md — формат “README для агентов”.
- OpenAI Codex: custom instructions with AGENTS.md — как Codex читает
AGENTS.md. - Cursor Rules — правила Cursor.
- OpenCode Rules —
AGENTS.md, глобальные инструкции и совместимость с Claude Code. - Model Context Protocol — MCP как способ подключать агента к внешним системам.
🗂️ Коллекции skills и примеры
- Anthropic Skills — официальный репозиторий с примерами скиллов.
- VoltAgent/awesome-agent-skills — большая подборка agent skills, есть чему поучиться.
- ComposioHQ/awesome-codex-skills — подборка скиллов для Codex.
- ComposioHQ/awesome-claude-skills — подборка скиллов для Claude.
- VoltAgent/awesome-openclaw-skills — подборка OpenClaw скиллов.
- Awesome Skills — маркетплейс/каталог open-source скиллов.
Повторю, что подобные ресурсы правильно использовать больше для обучения и подглядывания, а не для «я установил 100 лучших скиллов и теперь нихуя не понимаю»
🧑🔬 Мои примеры из статьи
- vas3k-example-skill — пример с Laravel model/migration скиллов.
- news-digest-skill — пример news скилла для OpenClaw.
🛡️ Безопасность
От промпт-инжектов никто не застрахован, вскользь я говорил об этом. На самом деле эти ссылки я посмотрел по диагонали, их нашёл chatgpt по просьбе «ну и найди пару ссылок популярных работ на тему безопасности скиллов» ;) может тут не прям топовые статьи по безопасности, но они отлично дают понять всю опасность бездумно устанавливать чужие скиллы своим агентам.
- Under the Hood of SKILL.md: Semantic Supply-chain Attacks on AI Agent Skill Registry — свежая работа про то, как
SKILL.mdможет быть атакующей поверхностью. - Malicious Or Not: Adding Repository Context to Agent Skill Classification — исследование про классификацию вредоносных skills и контекст репозитория.


Из своего опыта. Claude Code упорно нарушал несколько соглашений в коде (типа локальных импортов). Я писал в CLAUDE.md, в спеках, в скиллах, в памяти проекта, в глобальной памяти. Ничего не помогало. Сработали только хуки, которые на Stop запускают линтеры и падают, если нашли ошибки.
Материал интересный, но после нескольких недель вайб-кодинга по ночам, а потом пары внезапных ночей сна по 8-10 часов, пришёл инсайт, что ночами спать всё же лучше. :)
Респект за проделанный труд! Очень хороший и подробный материал получился, репостнул у себя на канале https://t.me/the_ai_architect/309
Интересно, появились ли уже какие-то фундаментальные труды по построению скиллов и архитектурным паттернам агентских фреймворков в целом, вроде GoF для ООП?
Спасибо за труд! Каждое чтиво от Тринчика — праздник!
Только вкатываюсь в эти дела и пока сижу на курсоре. Разработкой не занимаюсь. Основная цель: упрощать себе жизнь. Делаю агента по личным финансам, аналитика по работе с Bigquery и всякое такое.
После прочтения остался вопрос: есть ли разница в скилах при работе с клодом и при работе с курсором?
Добавлю только одно: Клоду абсолютно наплевать на любые скиллы. Он из будет рандомно использовать, или не использовать, или использовать наполовину. Помогает (не на 100%) явно вызывать соответсвующие скиллы.
Кодекс почти в 100% автоматом подгружает релевантные скиллы в зависимости от задачи.
@trin4ik подскажи, может ли агент в процессе исполнения скилла вызывать другой скилл, если тот понадобился?
https://github.com/obra/superpowers
Удивлён что нет этого плагина в подборке. По сути маст хэв штука которая должна устанавливаться в агента первым делом.
Плагин - это на набор скиллов, основной скилл там это брейншторминг, с ним можно брейнштормить любые задачи, не только кодерские (но кодерские он решает прям на ура). В том числе - его можно и нужно использовать для написания своих скиллов.
Особенно если у вас не так уж много опыта и понимания - лучше доверится машине, разложить всё на этапе брейшторминга по целям и задачам, собрать план реализации, реализовать и протестировать. Весь этот флоу уже вшит в этот плагин.
Спасибо, очень хорошо пишешь!
Спасибо, очень познавательно. Я пока только осваиваюсь с агентами и прочитав этот пост и потренировавшись на реальном проекте, могу констатировать: создание как глобального, так и проектных AGENTS.md для Codex реально качественно улучшило дело.
Вчера ночью прочитал, сегодня утром применил. Охуительно работает. Я пользовался скиллами и ранее, но как то до твоих юзкейсов не додумался. Сейчас все летит прям. Спасибо.
Спасибо!
У меня ток один вопрос, все агенты по умолчанию смотрят во все скиллы? А agents надо промптить на всякий случай? Или надо помнить про свои скиллы и указывать каждый раз, какой лучше применить?
Ну то есть три вопроса, но как бы один!
@timurkhakhalev @trin4ik спасибо, вы лучшие
Отличный гайд! Добавлю от себя, что промптить агента читать скиллы из других директорий – не самый оптимальный подход.
Потому что это ломает стандартный подход к skill disclosure, когда в контексте автоматически подсовываются descriptions скиллов. Вместо этого агент может пойти и смотреть только на названия скиллов, или наоборот полезть читать весь контент.
У меня лучше всего работает подход, когда есть просто
~/.agents/skills, а потом я симлинкаю нужные скиллы или даже всю папку в~/.<agent_name>/skillsТоп-контент, спасибо!
У кого-нибудь есть опыт использования каких-нибудь фреймворков промптов, памяти для агентской разработки на больших и серьезных кодовых базах greenfield/brownfield? Вроде SDD или чего-то похожего? Было бы интересно обсудить.
Статья как раз в тему: я собираюсь начать добавлять скилы к своей упаковке https://github.com/vadimche/ai-agent-rails-pack
Еще можно навайбкодить линтер, который будет форсить ваши предпочтения по написанию кода, и отдавать агенту промпт для исправления. Самое интересное что линтер не обязательно должен быть точным, на спорных моментах он может задавать вопросы на подумать для агента