AmigaОбучение ИИ
Модуль 1 · Навыки · урок 2 из 6

Создаём первый навык

11 мин чтения▶ есть видеоверсия

Теория из прошлого урока сводится к одному файлу. В этом уроке мы его напишем: навык, который собирает релиз-ноты по шаблону команды. По дороге разберём, как формулировать описание, как передавать аргументы и как убедиться, что навык срабатывает, когда нужно.

Шаг 1. Договоримся, что навык должен делать

Прежде чем писать файл, сформулируйте задачу так, как поставили бы её коллеге. Для релиз-нот в нашей команде это выглядит так:

  • Вход: номер версии.
  • Источник: коммиты с последнего тега и номера задач в них.
  • Выход: markdown по шаблону — заголовок с версией и датой, разделы «Новое», «Исправлено», «Изменено», в каждом пункте ссылка на задачу.
  • Ограничения: служебные коммиты не включать; не выдумывать изменения, которых нет в коммитах.

Если вы не можете описать задачу в пять строк, навык получится расплывчатым. Лучше сузить.

Шаг 2. Создаём папку и файл

Навык для команды кладём в проект:

bash
mkdir -p .claude/skills/release-notes

Имя папки — это имя команды: навык будет вызываться как /release-notes. Строчные буквы и дефисы. Внутри — файл SKILL.md, именно с таким именем и в таком регистре.

Можно попросить Claude Code создать навык: «Создай в .claude/skills/ навык release-notes, который…» — он знает формат. Но для первого раза полезно написать руками, чтобы увидеть, из чего файл состоит.

Шаг 3. Пишем SKILL.md

markdown
---
name: release-notes
description: Собирает релиз-ноты по шаблону команды из коммитов и задач. Используй, когда просят подготовить релиз-ноты, changelog, описание релиза или список изменений для версии.
argument-hint: [версия]
---

Подготовь релиз-ноты для версии $ARGUMENTS.

## Источник данных
1. Найди последний тег: `git describe --tags --abbrev=0`.
2. Возьми коммиты от него до HEAD: `git log <тег>..HEAD --oneline`.
3. Из каждого сообщения вытащи номер задачи вида PROJ-123, если есть.

## Правила
- Пропускай служебные коммиты: merge, bump version, lint, formatting.
- Одно изменение — одна строка в прошедшем времени, без технических
  деталей реализации.
- Не добавляй изменений, которых нет в коммитах. Если коммитов
  с прошлого тега нет — так и напиши, релиз-ноты не выдумывай.
- Если номер версии не передан, спроси его, а не угадывай.

## Шаблон
# Версия $ARGUMENTS — {дата в формате ДД.ММ.ГГГГ}

## Новое
- {описание} ([PROJ-123](https://tracker.example/browse/PROJ-123))

## Исправлено
- …

## Изменено
- …

Пустые разделы удаляй. Разделов, которых нет в шаблоне, не добавляй.

Разберём, что здесь и почему.

Первая строка файла — ---. Это обязательно. Если перед шапкой окажется пустая строка или комментарий, Claude Code прочитает весь файл как тело без метаданных: команда /release-notes будет работать, а автоматически навык не сработает никогда, потому что описания у него нет.

Description — условие срабатывания. Первая половина говорит, что навык делает, вторая — при каких словах его звать. Мы перечислили формулировки, которыми в команде реально просят: «релиз-ноты», «changelog», «описание релиза», «список изменений». Чем ближе описание к живой речи, тем надёжнее срабатывание. Слишком общее описание — «работа с релизами» — будет цеплять и просьбы «выкати релиз», для которых навык не предназначен.

$ARGUMENTS. Всё, что вы напишете после /release-notes, подставится вместо этого слова. Есть и позиционные аргументы: $0, $1, а в шапке можно объявить именованные через поле arguments. Для одного аргумента хватает $ARGUMENTS. Если аргументы переданы, а плейсхолдера в теле нет, Claude Code допишет их в конец текста — вы их не потеряете.

argument-hint. Подсказка, которая покажется в автодополнении при наборе /release-notes. Необязательно, но помогает коллегам.

Правила против выдумывания. Строки «не добавляй изменений, которых нет в коммитах» и «если версия не передана — спроси» кажутся лишними, но именно они отличают навык, которому доверяют, от навыка, за которым надо перепроверять. Модель охотно заполняет пробелы правдоподобным текстом; инструкция должна это прямо запрещать.

Шаг 4. Проверяем, что навык виден

Спросите Claude Code: «Какие навыки тебе доступны?» В ответе должен быть release-notes с вашим описанием. Если описание пустое — скорее всего, сломана шапка: проверьте, что --- стоит в первой строке и что в YAML нет незакрытых кавычек.

Начните набирать /rel — в автодополнении появится навык с подсказкой [версия].

Шаг 5. Проверяем оба способа вызова

Сначала ручной: /release-notes 2.4. Claude должен выполнить git describe, git log, собрать список и выдать markdown по шаблону. Посмотрите на результат критично: есть ли лишние разделы, попали ли служебные коммиты, все ли ссылки на задачи корректны.

Потом автоматический. В новой сессии напишите обычной фразой: «Подготовь описание релиза для 2.4». Если Claude загрузил навык — вы увидите тот же шаблон. Если нет — попробуйте перефразировать ближе к описанию («подготовь релиз-ноты 2.4»). Сработало во втором случае, но не в первом? Добавьте формулировку из первого в описание. Это нормальный цикл: описание дорабатывается по реальным просьбам.

Шаг 6. Дорабатываем по результату

Первая версия навыка почти никогда не окончательная. Типичные правки после первых прогонов:

  • Claude включил коммит «update deps» — добавьте его в список служебных.
  • Claude написал «исправлена критическая ошибка» там, где в коммите было «fix typo» — уточните правило «без преувеличений».
  • Ссылки на задачи ведут не туда — вынесите адрес трекера в отдельную строку и проверьте.

Файл подхватывается при следующем вызове, перезапускать Claude Code не нужно. Для проектного навыка изменения проходят через обычный merge request — как код.

Второй пример для тренировки

Тот же подход годится для навыка проверки доступности вёрстки: описание «проверяет доступность разметки по WCAG; используй, когда просят проверить a11y, доступность, контраст, клавиатурную навигацию или подписи у полей», в теле — чек-лист и формат отчёта. У него нет аргумента-версии, зато есть длинный справочник критериев, который лучше вынести в отдельный файл. Как это сделать — в следующем уроке.

Попробуйте сами

10–15 мин на рабочем месте
  1. Создайте навык release-notes из этого урока в учебном или рабочем проекте. Подставьте адрес своего трекера. Вызовите /release-notes с номером версии и оцените результат.
  2. В новой сессии попросите то же самое тремя разными фразами, не упоминая слово «навык». Запишите, какие фразы сработали. Дополните описание теми, что не сработали.
  3. Намеренно сломайте шапку: поставьте пустую строку перед первым ---. Спросите список навыков и посмотрите, что стало с описанием. Верните как было.

Коротко

  • Сформулируйте задачу навыка в пять строк до того, как писать файл.
  • Папка .claude/skills/<имя>/SKILL.md; имя папки — имя команды.
  • Первая строка файла — ---, иначе шапка не прочитается и описания не будет.
  • Описание — условие срабатывания: перечислите слова, которыми просят на самом деле.
  • $ARGUMENTS подставляет всё после имени команды; argument-hint — подсказка в автодополнении.
  • Проверяйте оба вызова — /имя и обычную фразу; дорабатывайте описание по реальным просьбам.

Видеоверсия

Сценарий озвучки · 486 слов, ≈ 4 мин

В прошлом уроке была теория. Сегодня — файл. Сделаем навык, который собирает релиз-ноты по шаблону команды, и по дороге разберём, как формулировать описание и проверять, что навык срабатывает.

Шаг первый — договориться, что навык делает. Сформулируйте задачу так, как поставили бы коллеге. Вход: номер версии. Источник: коммиты с последнего тега и номера задач в них. Выход: markdown по шаблону — заголовок с версией и датой, разделы «Новое», «Исправлено», «Изменено», в каждом пункте ссылка на задачу. Ограничения: служебные коммиты не включать, изменений не выдумывать. Если задачу не получается описать в пять строк, навык выйдет расплывчатым — сужайте.

Шаг второй — папка и файл. В проекте создаём папку точка-клод, скиллс, релиз-ноутс. Имя папки — это имя команды: навык будет вызываться через слэш релиз-ноутс. Внутри — файл скилл-эм-дэ, именно с таким именем, заглавными буквами.

Шаг третий — содержимое. В шапке — имя, описание и подсказка для аргумента. В теле — инструкция: найди последний тег, возьми коммиты от него до текущего состояния, вытащи номера задач, пропусти служебные коммиты, оформи по шаблону.

Три детали, на которые стоит обратить внимание. Первая: самая первая строка файла — три дефиса. Если перед шапкой окажется пустая строка, Claude Code прочитает весь файл как тело без метаданных. Команда будет работать, а автоматически навык не сработает никогда, потому что описания у него нет.

Вторая: описание — это условие срабатывания. Мы перечислили слова, которыми в команде реально просят: релиз-ноты, changelog, описание релиза, список изменений. Чем ближе к живой речи, тем надёжнее. А слишком общее описание вроде «работа с релизами» будет цеплять и просьбу «выкати релиз», для которой навык не предназначен.

Третья: аргументы. Всё, что вы напишете после имени команды, подставится вместо слова «аргументс» в теле навыка. Для одного аргумента этого достаточно, для нескольких есть позиционные и именованные.

И правила против выдумывания. Строчки «не добавляй изменений, которых нет в коммитах» и «если версия не передана — спроси, а не угадывай» кажутся лишними. Но именно они отличают навык, которому доверяют, от навыка, за которым надо перепроверять. Модель охотно заполняет пробелы правдоподобным текстом, и инструкция должна это прямо запрещать.

Шаг четвёртый — проверить, что навык виден. Спросите Claude Code: «какие навыки тебе доступны?» В списке должен быть ваш с описанием. Если описание пустое — сломана шапка.

Шаг пятый — проверить оба способа вызова. Сначала руками: слэш релиз-ноутс и номер версии. Смотрите критично: нет ли лишних разделов, не попали ли служебные коммиты, верны ли ссылки. Потом в новой сессии — обычной фразой: «подготовь описание релиза для версии два-четыре». Сработало — отлично. Не сработало — перефразируйте ближе к описанию. Если вторая фраза сработала, а первая нет, добавьте первую в описание. Это нормальный цикл: описание дорабатывается по реальным просьбам.

Шаг шестой — доработка. Первая версия почти никогда не окончательная. Claude включил коммит про обновление зависимостей — добавьте его в служебные. Написал «исправлена критическая ошибка» там, где была опечатка, — уточните правило про преувеличения. Файл подхватывается при следующем вызове, перезапуск не нужен. А для проектного навыка изменения идут через обычный merge request — как код.

Тот же подход годится для проверки доступности вёрстки. Но там длинный справочник критериев, который лучше вынести в отдельный файл. Как — в следующем уроке.

Отметка хранится только в вашем браузере