Скиллы (Skills)
Что такое скилл
Скилл — это каталог с файлом SKILL.md, в котором описана повторно используемая инструкция: как подготовить release notes, провести ревью, развернуть сервис. В отличие от правила, скилл не действует постоянно. Его применяет модель, когда считает подходящим, или вы — вызывая по имени командой /<name>.
Попросите агента: «Создай скилл для подготовки release notes по смёрженным PR». Он создаст каталог и SKILL.md с корректным frontmatter.
Где агент ищет скиллы
Скиллом считается любой каталог с SKILL.md внутри одного из корней ниже, на любой глубине вложенности. Символические ссылки не обходятся.
| Корень проекта | Глобальный корень |
|---|---|
<проект>/.veai/skills | ~/.veai/skills |
<проект>/.claude/skills | ~/.claude/skills |
<проект>/.agents/skills | ~/.agents/skills |
<проект>/.pi/skills | ~/.pi/agent/skills |
<проект>/.opencode/skills | ~/.config/opencode/skills |
<проект>/.kilo/skills | ~/.kilo/skills |
<проект>/.gemini/skills | ~/.gemini/skills |
<проект>/.cursor/skills | ~/.cursor/skills |
Каталоги других инструментов читаются, чтобы уже собранные коллекции скиллов работали без переноса. Приоритета между корнями нет. Новый скилл создавайте в <проект>/.veai/skills/<name>/SKILL.md или, для всех проектов, в ~/.veai/skills/<name>/SKILL.md.
Корень проекта — каталог, из которого запущен veai; родительские каталоги не просматриваются.
Встроенные скиллы
Вместе с Veai CLI поставляются собственные скиллы. В списке /skills у них источник builtin.
| Имя | Что делает |
|---|---|
code-review-orchestrated | согласует с вами параметры ревью, запускает независимых ревьюеров и публикует единый отчёт |
Встроенный скилл хранится внутри установленного продукта — не ищите и не правьте его там. Чтобы изменить его поведение, создайте в любом корне скилл с тем же name: он заменит встроенный. Отключается встроенный скилл так же, как любой другой.
Формат SKILL.md
Файл начинается с YAML-frontmatter, затем идёт Markdown-текст с инструкциями.
| Поле | Обязательное | Правило |
|---|---|---|
name | да | 1–64 символа: строчные латинские буквы, цифры и одиночные дефисы, например release-notes |
description | да | непустая строка, может занимать несколько строк |
when_to_use | нет | непустая строка; добавляется к описанию через - |
user-invocable | нет | логическое, по умолчанию true: скилл можно вызвать командой /<name> |
disable-model-invocation | нет | логическое, по умолчанию false: true скрывает скилл от модели |
Пример — <проект>/.veai/skills/release-notes/SKILL.md:
---
name: release-notes
description: Готовит release notes по смёрженным pull request
when_to_use: Используй, когда пользователь просит changelog или release notes
---
1. Собери pull request, смёрженные после последнего тега.
2. Сгруппируй их по областям, по одной строке на каждый.
3. Ломающие изменения поставь первыми.
Идентификатор скилла — поле name, а не имя каталога. Совпадение имени каталога и name не обязательно, но так скилл проще найти.
Если скилл недоступен
Скилл не загружается, если:
- frontmatter отсутствует, не разбирается или не является набором полей;
nameилиdescriptionнарушают правила из таблицы;- у необязательного поля неверный тип;
nameсовпадает с существующей командой, напримерmodel,compact,settings,rulesилиskills. Переименуйте скилл.
Если два файла SKILL.md объявляют одно и то же имя, недоступны оба. Исключение — замена встроенного скилла.
Неизвестные поля frontmatter игнорируются. Пустой текст скилла допустим.
Текст скилла читается в момент применения, поэтому правки инструкций действуют сразу. Добавление, переименование и удаление скилла действуют со следующего сообщения.
Посмотреть список скиллов
Команда /skills в терминале показывает все скиллы, их источник и состояние.
Отключить скилл
Добавьте имя скилла в skills.disabledSkills в settings.json:
{
"skills": {
"disabledSkills": ["release-notes"]
}
}
Имена сравниваются точно и с учётом регистра: "release-*" ничего не отключит. Имя, указанное на любом уровне, делает скилл недоступным и для модели, и для вас.
Чтобы скрыть скилл только от модели, но оставить его вызов через /<name>, укажите disable-model-invocation: true в его frontmatter.