ПосібникІнструкція 03 · Claude Code v2.1.295 · оновлено 09.10.2026 · ~30 хв читання

Скіли у Claude Code

Як будувати скіли, навіщо вони потрібні і як працюють зсередини: формат SKILL.md, усі поля frontmatter, реальні приклади для Django/Vue, тестування, обмеження та безпека.

01

Що таке скіл

Інструкція, яку Claude завантажує лише тоді, коли вона потрібна

#

Скіл — це папка з файлом SKILL.md: зверху YAML frontmatter між рядками ---, нижче — Markdown-інструкції. Поруч можуть лежати довідники, шаблони та скрипти. Claude сам вирішує, коли скіл доречний, або ви запускаєте його вручну командою /назва-скілу.

Головна ідея — прогресивне розкриття (progressive disclosure). У контекст сесії завжди потрапляє лише назва й опис скілу. Тіло SKILL.md підвантажується в момент використання, а допоміжні файли — тільки якщо інструкція на них посилається і вони справді потрібні. Тому можна мати десятки скілів і великі довідники, не платячи за них токенами в кожному запиті.

РівеньКоли завантажуєтьсяВартістьЩо саме
1 · МетаданіЗавжди, на старті сесії~100 токенів на скілname + description (+ when_to_use)
2 · ІнструкціїКоли скіл викликаноБажано < 5 000 токенівТіло SKILL.md
3 · РесурсиЗа потреби0, доки не прочитаноДовідники читаються як файли; скрипти виконуються — у контекст іде лише їхній вивід
Команди = скіли
.claude/commands/deploy.md і .claude/skills/deploy/SKILL.md обидва створюють /deploy. Старі команди працюють далі, але скіл дає більше: папку з файлами, керування запуском через frontmatter, автозавантаження за контекстом. Якщо є і команда, і скіл з однаковою назвою — перемагає скіл.

Скіли — відкритий формат Agent Skills: той самий SKILL.md працює в Claude Code, у claude.ai (завантаження zip у Settings → Features) та через Claude API (/v1/skills). Але між цими поверхнями скіли не синхронізуються — див. розділ «Обмеження».

02

Навіщо потрібні скіли і коли їх обирати

Скіл проти CLAUDE.md, субагентів, hooks та MCP

#

Кожен раз, коли ви вдруге пояснюєте Claude одне й те саме — як у вас пишуться міграції, який формат комітів, як релізити, — це кандидат у скіл. Скіл перетворює «знання в голові сеньйора» на процедуру, яку Claude виконує однаково для всієї команди.

  • Повторювані процедури — реліз, коміт, code review, онбординг нового сервісу
  • Командні конвенції — API-стиль DRF, структура Vue-компонентів, правила міграцій
  • Довідкові знання — схема БД, внутрішні API, бізнес-правила, які Claude не може знати сам
  • Детерміновані кроки — скрипти валідації, генерації, перевірки, які надійніше запустити, ніж генерувати щоразу
  • Економія контексту — довгі інструкції не висять у кожній сесії, як у CLAUDE.md

Скіл чи щось інше?

МеханізмКоли в контекстіДля чогоОбирайте, якщо…
CLAUDE.mdЗавжди, кожна сесіяСтек, команди запуску, короткі конвенціїПравило потрібне майже в кожній задачі і вміщується в кілька рядків
.claude/rules/*.mdЗавжди (або за шляхами)Модульні правила, доповнення до CLAUDE.mdПравило стосується певної частини коду, але коротке
СкілОпис — завжди; тіло — за потребиПроцедури, довідники, скриптиІнструкція довга, потрібна епізодично або має супровідні файли
СубагентОкремий контекстІзольоване виконання, своя модель і інструментиЗадача «брудна» (багато читання) і потрібен лише підсумок
HookПоза моделлюГарантоване виконання на подіюПравило має спрацювати завжди, без розсуду моделі
MCP-серверСхеми інструментівДоступ до зовнішніх систем (Jira, GitLab, БД)Потрібна нова можливість, а не нове знання
Правило великого пальця
MCP дає Claude руки (нові інструменти), скіл — знання, як ними користуватись, hook — гарантію. Вони добре комбінуються: скіл «створи задачу в Jira за нашим шаблоном» використовує MCP-інструмент Jira і може реєструвати hook для перевірки.

Скільки це економить

Усе в CLAUDE.md
Конвенції API + міграції + реліз~12 000
Чеклист review~3 000
Схема БД~6 000
У КОЖНІЙ СЕСІЇ~21 000
Скіли
Список 8 скілів (назви + описи)~800
Короткий CLAUDE.md~1 500
1 скіл, викликаний у задачі~3 000
ТИПОВА СЕСІЯ~5 300

Приблизна оцінка для середнього Django/Vue-проєкту; реальні числа покаже /context.

03

Як скіл працює зсередини

Від старту сесії до виконання — покроково

#
Старт сесії ├─ Claude Code сканує всі розташування скілів ├─ Будує список скілів: назва + description (бюджет ≈1% контекстного вікна) └─ Список іде в системний промпт; тіла SKILL.md — ні Ваш запит ├─ /commit на початку повідомлення → скіл запускається напряму └─ «додай поле в модель Order» → Claude порівнює запит з описами → викликає інструмент Skill(django-migrations) Рендер скілу ├─ підставляються $ARGUMENTS, ${CLAUDE_SKILL_DIR} … ├─ виконуються вставки !`команда`, їхній вивід замінює плейсхолдер └─ готовий текст додається в розмову (один раз, файл більше не перечитується) Виконання ├─ Claude діє за інструкцією, читає reference-файли за потреби ├─ запускає скрипти — у контекст потрапляє лише їхній вивід └─ allowed-tools дозволені без підтвердження до вашого наступного повідомлення

Що відбувається з контекстом далі

  • Відрендерений скіл лишається в розмові на наступних ходах; повторний виклик того самого тексту додає лише коротку позначку «вже завантажено»
  • Зміни у файлі скілу підхоплюються «на льоту» для нових викликів — вже завантажений текст не оновлюється
  • При компактизації останній виклик кожного скілу повертається в контекст, але лише перші 5 000 токенів; усі повернуті скіли ділять спільний бюджет 25 000 токенів
  • Тому найважливіші правила пишіть на початку SKILL.md, а формулюйте їх як постійні («після кожної зміни запускай тести»), а не одноразові кроки
Важливо
Скіл — це промпт, а не програма. Claude застосовує його з розсудом. Якщо правило має виконуватися без винятків (форматування, заборона пушу в main) — винесіть його в hook, наприклад прямо у frontmatter скілу через поле hooks.
04

Де лежать скіли та хто їх бачить

Розташування, пріоритети, монорепо

#
РівеньШляхКому доступний
Enterprise.claude/skills/<name>/SKILL.md у каталозі managed settingsУсім на керованих машинах
Особистий~/.claude/skills/<name>/SKILL.mdВам, у всіх проєктах на цій машині
Проєкт.claude/skills/<name>/SKILL.mdУсім, хто працює з репозиторієм (комітиться в git)
Вкладений<subdir>/.claude/skills/<name>/SKILL.mdСесіям у цій підпапці (монорепо)
Плагін<plugin>/skills/<name>/SKILL.mdДе увімкнено плагін; виклик /plugin-name:skill-name
claude.ai~/.claude/skills/synced/Скіли, увімкнені у вашому акаунті claude.ai
  • Конфлікт назв: enterprise > особистий > проєкт. Скіл перекриває однойменну вбудовану команду і файл у .claude/commands/. Скіли плагінів не конфліктують — вони з префіксом
  • Монорепо: проєктні скіли збираються від стартової папки до кореня репозиторію; вкладені — коли Claude вперше читає чи редагує файл у тій підпапці. Однакові назви розводяться як /deploy і /apps/web:deploy
  • Worktree: пошук зупиняється на корені worktree; якщо там скілів немає — беруться скіли основного checkout
  • Зміни на льоту: правки в наявних папках скілів підхоплюються одразу; для нового каталогу skills/ виконайте /reload-skills
  • Cowork і cloud-сесії не читають ~/.claude/skills/ — лише скіли, увімкнені в акаунті claude.ai, і проєктні скіли з репозиторію
  • Папку скілу можна зробити симлінком — зручно для спільної бібліотеки скілів між проєктами
Порада
Командні скіли кладіть у .claude/skills/ і комітьте — так вони проходять code review разом з кодом. Особисті експерименти тримайте в ~/.claude/skills/. Коли скіл знадобиться кільком репозиторіям — запакуйте його в плагін.
05

Структура SKILL.md

Мінімальний робочий скіл за дві хвилини

#

Мінімум — один файл з описом. Збережіть як ~/.claude/skills/summarize-changes/SKILL.md:

~/.claude/skills/summarize-changes/SKILL.md
---
name: summarize-changes
description: Summarizes uncommitted changes and flags risks. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---

## Поточні зміни

!`git diff HEAD`

## Інструкція

Підсумуй зміни вище в 2–3 пунктах українською, потім перелічи ризики:
відсутня обробка помилок, захардкоджені значення, тести, які треба оновити.
Якщо diff порожній — так і скажи.

Тепер скіл спрацює і на /summarize-changes, і на звичайне «що я змінив?». Анатомія файлу:

  1. Frontmatter — YAML між ---, обов’язково з першого рядка файлу. Інакше весь файл вважається тілом, а метадані — порожніми
  2. Тіло — Markdown-інструкції. Пишіть як для досвідченого колеги: що зробити, в якому порядку, який результат. Не пояснюйте те, що Claude і так знає
  3. Динамічні вставки — !`команда` виконується до того, як Claude побачить текст
  4. Посилання на файли — [reference.md](reference.md), щоб Claude знав, що і коли дочитати
Мова
Тіло можна писати українською — Claude розуміє. Але description краще писати англійською або змішано з ключовими англійськими термінами (Django, migration, PR): саме за ним Claude зіставляє запит, а ваші запити часто містять англійські слова.
06

Frontmatter — усі поля

Рекомендоване лише description; невідомі поля мовчки ігноруються

#
ПолеЩо робить
nameНазва команди. За замовчуванням — назва папки. Лише малі латинські літери, цифри, дефіси; до 64 символів
descriptionЩо робить скіл і коли його вживати. Головне — на початку. Разом з when_to_use обрізається до 1 536 символів у списку
when_to_useДодаткові тригери / приклади запитів. Дописується до description і входить у той самий ліміт
argument-hintПідказка в автодоповненні, напр. [issue-number]
argumentsІменовані позиційні аргументи (рядок через пробіл або YAML-список) для підстановки $name
disable-model-invocationtrue — лише ручний виклик /name; опис навіть не потрапляє в контекст. Також не передзавантажується в субагенти і не запускається із запланованих задач
user-invocablefalse — сховати з меню /; Claude все одно може викликати сам. Для фонових знань
allowed-toolsІнструменти без запиту дозволу на поточний хід. Не обмежує інші інструменти
disallowed-toolsПрибирає інструменти, поки скіл активний
modelМодель для поточного ходу (з context: fork — модель субагента). inherit — поточна
effortlow · medium · high · xhigh · max
contextfork — виконати в окремому субагенті
agentТип субагента для fork: Explore, Plan, general-purpose (default) або ваш кастомний
backgroundДля fork: true за замовчуванням; false — чекати результат
hooksHooks, що реєструються при виклику скілу і діють до кінця сесії
pathsGlob-шаблони: автоматична активація лише при роботі з відповідними файлами
shellbash (default) або powershell для вставок !`…`
metadata, license, compatibilityПоля специфікації; Claude Code їх приймає, але не використовує
.claude/skills/release/SKILL.md
---
name: release
description: Prepares a release - bumps version, writes CHANGELOG, tags. Use when the user asks to cut, prepare or publish a release.
argument-hint: "[version]"
disable-model-invocation: true     # реліз — лише за явною командою
allowed-tools: Bash(git tag *) Bash(git log *) Bash(npm version *)
model: sonnet
effort: medium
---
Сумісність
Поза Claude Code (завантаження в claude.ai, Skills API) дозволені лише name, description, license, compatibility, metadata та allowed-tools — решта полів дає помилку. Там же description обмежений 1 024 символами, а name не може містити слів «anthropic» чи «claude». Якщо скіл має жити на кількох поверхнях — тримайтеся цього мінімуму.

Булеві поля приймають true/false, а також yes/no, on/off, 1/0. Якщо YAML не парситься, скіл завантажиться з порожніми метаданими: /name працюватиме, але автоматично Claude його не знайде. Перевірка — claude plugin validate .claude/skills або запуск з --debug.

07

Аргументи та динамічний контекст

Підстановки $ARGUMENTS і вставки !`команда`

#

Підстановки

ПлейсхолдерПідставляється
$ARGUMENTSУсі аргументи як введено. Якщо плейсхолдерів немає — Claude Code допише ARGUMENTS: … в кінець
$ARGUMENTS[N] / $NПозиційний аргумент з нуля: $0 — перший
$nameІменований аргумент з поля arguments
${CLAUDE_SKILL_DIR}Папка, де лежить SKILL.md — для шляхів до скриптів
${CLAUDE_PROJECT_DIR}Корінь проєкту
${CLAUDE_SESSION_ID}, ${CLAUDE_EFFORT}ID сесії, поточний рівень effort
${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}Лише для скілів плагіна
.claude/skills/release-notes/SKILL.md
---
name: release-notes
description: Writes release notes between two git tags. Use when the user asks for release notes or a changelog between versions.
arguments: [from, to]
argument-hint: "<from-tag> <to-tag>"
---

## Коміти між $from і $to

!`git log --oneline --no-merges $from..$to`

Згрупуй коміти за типом Conventional Commits (feat / fix / chore) і напиши
release notes українською для менеджерів: без хешів, людською мовою.

Виклик /release-notes v2.4.0 v2.5.0: спочатку підставляються аргументи, потім виконується git log, і Claude отримує вже готовий список комітів. Аргументи з пробілами беріть у лапки: /my-skill "hello world" second. Знак долара екрануйте: \$1.00.

Динамічні вставки

  • !`команда` — на початку рядка або після пробілу; KEY=!`cmd` лишається як є
  • Багаторядковий варіант — fenced-блок, що відкривається ```!
  • Вивід підставляється як є і повторно не сканується на плейсхолдери
  • Ненульовий код виходу скасовує весь виклик скілу (виняток — код 1 у пошукових/порівняльних командах). Для очікуваних збоїв додайте || true
  • Кожна команда має таймаут Bash — 2 хвилини
  • Команди проходять перевірку дозволів: deny-правило скасовує виклик; не дозволену команду треба передозволити через allowed-tools
allowed-tools для скрипта зі скілу
---
name: render-chart
description: Render a chart from a CSV file
allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/render.sh *)
---

Запусти `${CLAUDE_SKILL_DIR}/scripts/render.sh <csv-file>` і покажи шлях до PNG.
Безпека
Адміністратор може повністю вимкнути вставки в особистих, проєктних і плагінних скілах налаштуванням "disableSkillShellExecution": true — кожна команда тоді замінюється на [shell command execution disabled by policy].
08

Допоміжні файли та скрипти

Як тримати SKILL.md коротким, а знання — повними

#
.claude/skills/django-migrations/
django-migrations/
├── SKILL.md              # огляд і навігація — до 500 рядків
├── checklist.md          # читається, коли треба перевірити міграцію
├── reference/
│   ├── zero-downtime.md  # патерни без простою
│   └── data-migrations.md
└── scripts/
    └── check_migrations.sh   # виконується, код у контекст не потрапляє
  • SKILL.md — це зміст, а не енциклопедія. Тримайте до ~500 рядків, решту виносьте у файли
  • Посилання на один рівень: усі файли — прямо з SKILL.md. Ланцюжки «A → B → C» Claude може дочитати лише частково
  • Файли довші за ~100 рядків починайте зі змісту: навіть при частковому читанні Claude побачить, що в них є
  • Явно кажіть, що робити з файлом: «запусти scripts/check.sh» (виконати) чи «див. scripts/check.sh, як рахується…» (прочитати)
  • Скрипт надійніший за згенерований код: він детермінований, не витрачає токени на код, дає однаковий результат усім
  • Скрипти мають самі обробляти помилки і писати зрозумілі повідомлення («поле X не знайдено, доступні: …») — Claude виправить вхід за ними
  • Лише прямі слеші у шляхах (scripts/run.sh), описові назви файлів (zero-downtime.md, не doc2.md)
.claude/skills/django-migrations/SKILL.md (фрагмент)
## Перевірка міграції

1. Запусти `${CLAUDE_SKILL_DIR}/scripts/check_migrations.sh` — він покаже
   незастосовані та конфліктні міграції.
2. Якщо міграція змінює велику таблицю (> 1 млн рядків) — прочитай
   [reference/zero-downtime.md](reference/zero-downtime.md).
3. Для міграцій з даними — [reference/data-migrations.md](reference/data-migrations.md).
4. Перед завершенням пройди [checklist.md](checklist.md).
09

Хто і як запускає скіл

Ручний виклик, автоматичний, дозволи та видимість

#
FrontmatterВи (/name)Claude самОпис у контексті
(за замовчуванням)✓✓Завжди
disable-model-invocation: true✓—Ні
user-invocable: false—✓Завжди
  • Ручний: повідомлення має починатися з /name. Фраза «зроби /deploy» посеред тексту лише дозволяє Claude запустити скіл, але не запускає його напряму
  • Ланцюжок: /write-tests /fix-issue 123 — розгортається до шести скілів підряд (зупиняється на першому fork-скілі)
  • disable-model-invocation — для дій з наслідками: деплой, реліз, міграції на проді, розсилки
  • user-invocable: false — для фонових знань (конвенції API, схема БД), які не мають сенсу як команда

Дозволи на скіли

settings.json
{
  "permissions": {
    "allow": ["Skill(commit)", "Skill(review-pr *)"],
    "deny":  ["Skill(deploy *)"]          // "Skill" без дужок — заборонити всі
  },
  "skillOverrides": {
    "legacy-context": "name-only",        // у списку без опису — економить бюджет
    "deploy": "off"                       // повністю сховати
  }
}
skillOverridesClaude бачитьМеню /
"on" (default)Назву й опис✓
"name-only"Лише назву✓
"user-invocable-only"Нічого✓
"off"Нічого—

skillOverrides зручний для скілів у спільному репозиторії: можна приглушити чужий скіл локально, не редагуючи SKILL.md. Меню /skills записує ці значення в .claude/settings.local.json.

10

Скіл у субагенті — context: fork

Коли скіл має виконатися ізольовано

#

З context: fork текст скілу стає промптом нового субагента. Субагент не бачить історії розмови, працює у власному контексті й повертає лише підсумок. Ідеально для «брудних» задач: дослідження коду, аудиту, масового читання логів.

.claude/skills/deep-research/SKILL.md
---
name: deep-research
description: Researches a topic in the codebase thoroughly and reports findings with file references. Use when the user asks how something works across many files.
context: fork
agent: Explore          # read-only субагент
model: haiku            # дешево для масового читання
background: false       # чекати результат, а не працювати у фоні
---

Дослідж $ARGUMENTS:
1. Знайди релевантні файли через Glob і Grep
2. Прочитай і проаналізуй код
3. Поверни підсумок до 300 слів з посиланнями файл:рядок
  • За замовчуванням fork працює у фоні; background: false — чекати результат. У -p, SDK і запланованих задачах завжди чекає
  • Фоновий fork має вужчий набір інструментів; якщо їх бракує — background: false
  • Зміни файлів з фонового fork не відкочуються через /rewind
  • Потрібна конкретна задача: скіл з самими «правилами» без завдання у fork-режимі нічого не поверне
Скіл чи субагент?
Субагент (.claude/agents/*.md) — це «хто виконує»: роль, модель, інструменти. Скіл — «що і як робити». Fork-скіл поєднує обидва: процедура зі скілу, виконавець — субагент типу agent. А ще субагент може передзавантажити скіли через своє поле skills.
11

Як написати description, що спрацьовує

Найважливіші 1–3 речення скілу

#

Claude обирає скіл лише за описом — тіло він ще не бачив. Поганий опис = скіл, який ніколи не спрацює, або спрацьовує невчасно.

  1. Що робить + коли вживати. Перше речення — дія, друге — «Use when …» з тригерами
  2. Третя особа: «Generates…», а не «I can help…» чи «You can use…» — опис вбудовується в системний промпт
  3. Ключові слова, якими ви реально говорите: «міграція», «migration», «makemigrations», «models.py»
  4. Головне — на початку: при великій кількості скілів опис може обрізатися
  5. Конкретика замість загальників: не «Helps with documents», а «Fills PDF forms from JSON data»
погано → добре
# ✗ занадто загально — Claude не зрозуміє, коли це потрібно
description: Helps with Django

# ✗ перша особа, без тригерів
description: I can review your code

# ✓ дія + тригери + ключові слова
description: >
  Reviews Django migrations for data loss, locking and zero-downtime issues.
  Use when creating or editing files in */migrations/*, running makemigrations,
  or when the user asks whether a migration is safe to deploy.

Назва скілу

Коротка, конкретна, у дієслівній формі або як іменникова фраза: reviewing-migrations, release-notes, fix-bug. Уникайте helper, utils, tools, docs — і однакового стилю дотримуйтеся в усій бібліотеці скілів.

12

Реальні приклади з розбором

П’ять скілів для Django/Vue-команди і що відбувається при виклику

#

1. /commit — ручний скіл з динамічним контекстом

.claude/skills/commit/SKILL.md
---
name: commit
description: Creates a Conventional Commit from staged changes. Use when the user asks to commit.
disable-model-invocation: true
allowed-tools: Bash(git commit *) Bash(git status *)
model: haiku
effort: low
---

## Staged зміни

!`git diff --staged --stat`

!`git diff --staged`

## Правила

- Формат: `type(scope): опис` англійською, до 72 символів
- type: feat | fix | refactor | chore | docs | test
- scope — Django-апка або Vue-модуль (orders, billing, ui)
- Тіло коміту — що і навіщо, не як
- Якщо staged порожній — скажи про це і нічого не роби
- Ніколи не додавай файли самостійно і не пуш
що відбувається при /commit
> /commit
  1. Claude Code бачить /commit на початку → запускає скіл напряму
  2. Виконує git diff --staged --stat і git diff --staged → вивід у текст скілу
  3. Хід переходить на haiku з effort low — дешево для механічної задачі
  4. Claude пише повідомлення і викликає Bash(git commit -m "feat(orders): add discount field")
     → без запиту дозволу, бо команда в allowed-tools
  5. На вашому наступному повідомленні дозвіл знімається

2. Конвенції API — фонові знання, які Claude підтягує сам

.claude/skills/drf-api-conventions/SKILL.md
---
name: drf-api-conventions
description: Team conventions for Django REST Framework APIs - URL naming, serializers, pagination, error format, permissions. Use when creating or changing DRF views, serializers, urls or API tests.
user-invocable: false
paths: ["**/api/**", "**/serializers.py", "**/views.py", "**/urls.py"]
---

## URL
- Множина, kebab-case: `/api/v1/order-items/`
- Вкладеність не глибше одного рівня

## Серіалізатори
- Окремі `*ReadSerializer` і `*WriteSerializer`, якщо поля відрізняються
- Ніколи `fields = "__all__"`

## Помилки
Формат: `{"error": {"code": "...", "message": "...", "fields": {...}}}`
Див. [errors.md](errors.md) для повного списку кодів.

Цей скіл не з’являється в меню /, але коли ви просите «додай ендпоінт для знижок», Claude працює з views.py, бачить відповідний опис і завантажує конвенції до того, як напише код. Поле paths не дає йому спрацьовувати на задачах у фронтенді.

3. Міграції — скіл зі скриптом і чеклистом

.claude/skills/django-migrations/SKILL.md
---
name: django-migrations
description: Creates and reviews Django migrations safely - zero-downtime patterns, data migrations, lock risks. Use when models.py changes, when running makemigrations, or when the user asks if a migration is safe.
allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/check_migrations.sh *) Bash(python manage.py makemigrations *)
---

## Порядок

1. `python manage.py makemigrations <app>` — ніколи без назви апки
2. Запусти `${CLAUDE_SKILL_DIR}/scripts/check_migrations.sh <app>`
3. Якщо скрипт показує `LARGE_TABLE` — прочитай [reference/zero-downtime.md](reference/zero-downtime.md)
   і розбий міграцію на кроки (nullable → backfill → constraint)
4. Пройди [checklist.md](checklist.md) і відпиши результат по кожному пункту

## Заборонено
- `RunSQL` без `reverse_sql`
- Перейменування колонки однією міграцією на таблицях > 1 млн рядків
«додай поле discount у модель Order»
1. Claude редагує orders/models.py
2. Запит і файл збігаються з описом → Skill(django-migrations)
3. makemigrations orders → check_migrations.sh orders
     вивід скрипта: LARGE_TABLE orders_order (4.2M rows)
4. Читає лише reference/zero-downtime.md (data-migrations.md не потрібен — 0 токенів)
5. Розбиває на 3 міграції, проходить checklist.md, звітує по кожному пункту

4. Vue-компоненти — скіл з власним hook

.claude/skills/vue-component/SKILL.md
---
name: vue-component
description: Creates Vue 3 components following team structure - script setup, TypeScript props, Pinia, tests. Use when creating or refactoring .vue files.
hooks:
  PostToolUse:
    - matcher: "Edit|Write"
      hooks:
        - type: command
          command: "jq -r '.tool_input.file_path' | grep -E '[.]vue$' | xargs -r npx eslint --fix"
---

- `<script setup lang="ts">`, props через `defineProps<{...}>()`
- Стан між сторінками — лише Pinia store, не provide/inject
- Поруч з компонентом — `ComponentName.spec.ts` (Vitest + Testing Library)
- Шаблон структури — [template.vue](template.vue)

Інструкції про стиль Claude застосовує з розсудом, а от eslint --fix після кожного редагування .vue виконує hook — гарантовано, з моменту виклику скілу до кінця сесії.

5. Дослідження у форку — /deep-research

Скіл з розділу context: fork: /deep-research як рахується знижка в checkout запускає read-only субагента на Haiku. Він може прочитати 40 файлів, а в основну розмову повернеться лише стислий звіт з посиланнями — ваш контекст лишається чистим.

13

Тестування та налагодження

Як переконатися, що скіл спрацьовує і робить що треба

#

Розробка від оцінок (eval-first)

  1. Виконайте задачу без скілу і запишіть, де Claude помилився або чого не знав
  2. Складіть 3+ сценарії, що перевіряють саме ці прогалини
  3. Напишіть мінімальний скіл, який закриває прогалини, — не більше
  4. Порівняйте з базою і доопрацюйте. Тестуйте в свіжій сесії — залишковий контекст маскує дірки в інструкціях
  5. Перевірте на всіх моделях, які використовуєте: що достатньо для Opus, може бути замало для Haiku

Найпростіший спосіб — «Claude A пише, Claude B тестує»: в одній сесії разом з Claude формулюєте скіл, у новій сесії даєте реальну задачу і спостерігаєте, що B пропустив; повертаєтесь до A з конкретикою.

Інструменти

ІнструментДля чого
What skills are available?Перевірити, що скіл видно Claude
/contextСкільки токенів займає список скілів
/doctorОцінка вартості списку скілів і найбільші «споживачі»
/skill-doctorЗнайти скіли, якими не користуються, — кандидати на вимкнення
claude plugin validate .claude/skillsЗнайти SKILL.md з битим frontmatter
claude --debugПомилки парсингу YAML, попередження про переповнення бюджету
плагін skill-creatorГенерує eval-кейси, порівнює з/без скілу, тюнить description
claude plugin evalДля скілів у плагінах: прогін промптів з/без плагіна, можна в CI

Типові проблеми

СимптомЩо робити
Скіл не спрацьовуєДодайте в description слова, якими ви формулюєте запит; перевірте, що скіл у списку; перевірте YAML
Спрацьовує занадто частоЗвузьте опис, додайте paths або disable-model-invocation: true
Перестав виконувати правило після кількох ходівПравило «на кожен раз» → у hook. Правило з розсудом → сформулюйте як постійне
Після компактизації забув деталіВикличте скіл повторно; важливе — на початок SKILL.md
Описи обрізаютьсяЗабагато скілів: skillOverrides: "name-only" для рідкісних, скоротіть описи або збільште skillListingBudgetFraction
Зникли особисті скілиПодивіться в ~/.claude/skills/.trash/ — там зберігаються 30 днів
14

Обмеження та підводні камені

Що варто знати до того, як покладатися на скіли

#
ОбмеженняЗначенняНаслідок
Бюджет списку скілів≈1% контекстного вікнаПри переповненні описи найрідше вживаних скілів відкидаються — лишаються лише назви. Налаштовується skillListingBudgetFraction або SLASH_COMMAND_TOOL_CHAR_BUDGET
description + when_to_use1 536 символівРешта обрізається в списку (skillListingMaxDescChars)
Розмір SKILL.md~500 рядків (рекомендація)Тіло — постійна вартість після виклику; великі довідники — у файли
Після компактизації5 000 токенів на скіл, 25 000 разомХвіст довгого скілу губиться
Ланцюжок скілівДо 6Далі не розгортаються
Вставки !`cmd`Таймаут 2 хв, ненульовий exit скасовує викликПовільні або «крихкі» команди ламають скіл
name / description в API та claude.ai64 / 1 024 символиІнші поля frontmatter там — помилка

Поведінкові обмеження

  • Скіл не гарантує виконання. Це інструкція для моделі: Claude може не обрати скіл або відійти від нього в довгій сесії. Для обов’язкових правил — hooks і permissions
  • allowed-tools не обмежує інструменти — лише знімає запит дозволу, і лише до вашого наступного повідомлення. Обмежує — disallowed-tools
  • Файл не перечитується: зміна SKILL.md посеред сесії не впливає на вже завантажений текст
  • Fork не бачить розмову: усе потрібне треба передати через аргументи або вставки
  • Фоновий fork: вужчий набір інструментів, і його зміни не відкочуються через /rewind
  • Без синхронізації між поверхнями: скіли Claude Code, claude.ai і API живуть окремо; у claude.ai кастомні скіли — особисті, без централізованого керування
  • Cowork і cloud-сесії не бачать ~/.claude/skills/
  • Середовище: у Claude Code скіл має повний доступ до мережі та системи; в API — без мережі і без встановлення пакетів. Глобально ставити пакети зі скілу не варто
  • Не пишіть дати-«терміни придатності» («до серпня використовуй старий API») — скіл застаріє непомітно. Застарілі способи — в окремий розділ «Old patterns»
Пам’ятайте
Скіл з назвою verify або simplify, доступний моделі, Claude запускатиме перед кожним комітом (крім змін лише в документації чи тестах). Не називайте так скіли випадково.
15

Безпека та командна робота

Скіл = код, який виконується з вашими правами

#

Скіл може наказати Claude запускати команди, читати файли й ходити в мережу. Шкідливий або просто неакуратний скіл — це ризик витоку даних і небажаних змін. Ставтеся до скілів як до залежностей.

✓
Беріть скіли лише з довірених джерел — свої, командні, від Anthropic. Чужі — повний аудит усіх файлів, включно зі скриптами
✓
Рев’юйте allowed-tools у скілах репозиторію: workspace trust його не блокує, тож відкритий чужий репозиторій може передозволити команди
✓
Проєктні скіли — через code review, як і код: вони комітяться в .claude/skills/
✓
Дії з наслідками (deploy, міграції на проді, розсилки) — лише з disable-model-invocation: true
✗
Не завантажуйте інструкції з зовнішніх URL у скілі — вміст може змінитися і містити prompt injection
✗
Не кладіть секрети в SKILL.md чи скрипти — використовуйте змінні середовища

Керування на рівні компанії

НалаштуванняЕфект
disableSkillShellExecution: trueВимикає вставки !`…` в особистих, проєктних і плагінних скілах
allowManagedPermissionRulesOnly: trueallowed-tools з проєктних і особистих скілів ігнорується
disableBundledSkills: trueВимикає вбудовані скіли Claude Code
Enterprise-скілиРозкладаються через managed settings, мають найвищий пріоритет
Плагіни + маркетплейсВерсіоноване поширення скілів між командами й репозиторіями
∎

Чекліст перед тим, як ділитися скілом

#
✓
description — що робить + «Use when …», третя особа, ключові слова, головне на початку
✓
name — коротка, конкретна, малі літери і дефіси
✓
Ручний чи автоматичний — дії з наслідками під disable-model-invocation, фонові знання під user-invocable: false
✓
SKILL.md до ~500 рядків, найважливіше — на початку, деталі — у файлах на один рівень
✓
Скрипти для детермінованих кроків, з обробкою помилок і зрозумілим виводом
✓
Обов’язкові правила — у hooks, а не лише текстом
✓
allowed-tools — мінімально необхідні, з конкретними шаблонами
✓
Перевірено в свіжій сесії на 3+ реальних запитах і на тих моделях, якими користуєтесь
✓
Немає секретів, дат «придатності» і Windows-шляхів
✓
Закомічено в .claude/skills/ і пройшло code review

Корисні посилання