Как агент вроде Claude Code узнаёт о сотне инструкций, но держит в контексте только нужную. Что такое SKILL.md, как модель решает его загрузить, что при этом попадает в разговор и как написать скил, который срабатывает.
Листайте стрелками ← →, свайпом или кнопками внизу. В схемах нажимайте кнопки и двигайте ползунки.
Модель не «помнит» ничего между вызовами. Агент — это программа, которая каждый раз отправляет модели весь разговор, получает ответ, выполняет запрошенный инструмент и дописывает результат в разговор.
У команды десятки регламентов: как писать миграции, как оформлять релиз, как разбирать инцидент. Положить их все в системный промпт или CLAUDE.md — значит платить за них на каждом шаге и размывать внимание модели посторонним текстом.
Обязателен один файл, SKILL.md: YAML-фронтматтер с именем и описанием и markdown-инструкции. Рядом — что угодно: справочники, шаблоны, скрипты. Агент читает их с диска сам, когда инструкции на них ссылаются.
pdf-forms/
├── SKILL.md # метаданные + инструкции
├── forms.md # читается по ссылке
├── reference.md # 600 строк про pdfplumber
├── assets/
│ └── w9-fields.json
└── scripts/
├── analyze_form.py # запускается
└── fill_form.py
Стандарт (agentskills.io) советует папки scripts/, references/, assets/, но не требует их.
---
name: pdf-forms
description: Заполняет PDF-формы и извлекает
из PDF текст и таблицы. Используй, когда
пользователь упоминает PDF, анкету, бланк
или форму, даже без слова «PDF».
---
# PDF: формы и извлечение
## Извлечь текст
Используй pdfplumber:
with pdfplumber.open(path) as pdf:
text = pdf.pages[0].extract_text()
## Заполнить форму
1. `python scripts/analyze_form.py in.pdf`
→ JSON с полями формы
2. Сопоставь поля с данными пользователя.
3. `python scripts/fill_form.py in.pdf f.json out.pdf`
Подводные камни — в [forms.md](forms.md).
a-z, 0-9, дефис; совпадает с именем папкиAPI и claude.ai: name и description обязательны, без XML-тегов, имя не может содержать «anthropic» и «claude».
true — только ручной вызов /имя, описание не попадает в контекстfalse — скрыть из меню /, вызывает только модель$nameВ Claude Code все поля необязательны: имя по умолчанию — имя папки. Неизвестные поля молча игнорируются.
Скил грузится в контекст по уровням, и каждый следующий — только если нужен.
SKILL.md, рекомендуют до 5 тыс. токенов и 500 строк: читается, когда скил выбран.Выберите запрос и проходите по шагам. Следите, какие файлы остаются на диске.
Из-за уровней стоимость скила, который не используют, — только его описание. Поэтому скилов можно держать десятки, а регламентов в системном промпте — нет.
Двигайте ползунки и сравните, сколько контекста занимают те же знания в двух подходах.
Описания всё же не бесплатны: Claude Code отводит списку скилов около 1% окна и при переполнении выбрасывает описания у редко вызываемых скилов — остаются одни имена. Посмотреть стоимость: /context и /skill-doctor.
Ни роутера, ни эмбеддингов, ни поиска по словам. Список описаний лежит в контексте, и модель сама решает, подходит ли какое-то к задаче. Описание — всё, что она знает о скиле до загрузки.
В проекте 60 скилов. Вы добавили deploy-staging с описанием «Деплой». На просьбу «выкати ветку на стенд» агент запускает kubectl наугад и скил не трогает. Что поможет вернее всего?
/context. Если скил нужен только по команде — disable-model-invocation: true и вызов /deploy-staging.В Claude Code у модели есть инструмент Skill. Вызов с именем скила подставляет содержимое SKILL.md в разговор отдельным сообщением, и оно остаётся там до конца сессии. Через API и в claude.ai отдельного инструмента нет: модель читает файл командой cat в контейнере.
Выберите способ вызова и листайте сообщения. Справа — сколько токенов добавил каждый шаг.
До того как текст скила попадёт к модели, Claude Code его рендерит: подставляет аргументы и выполняет команды из !`…`. Модель видит уже результат — вывод git, а не просьбу его запустить.
$ARGUMENTS — вся строка, $0, $1… — по позиции (с нуля).ARGUMENTS: … в конец.|| true.Отсортировать список, проверить 40 полей формы, посчитать контрольную сумму — это дёшево и надёжно сделать кодом и дорого и ненадёжно — генерацией токенов. Скрипт в скиле пишут один раз и тестируют; модель его только запускает.
SKILL.md — одно сообщение в разговоре. Claude Code не перечитывает файл: правки вступят в силу при следующем вызове.Скил на 12 000 токенов, в самом конце — «никогда не правь файлы в migrations/». Через час работы контекст сжали, и агент поправил миграцию. Почему?
migrations/ надёжнее сделать хуком PreToolUse: хук срабатывает на каждой правке, следует модель скилу или нет. Можно и просто вызвать скил ещё раз.Механизмы не соперничают, а дополняют друг друга. Различаются тем, когда текст попадает в контекст и кто решает его применить. Выберите задачу.
~/.claude/skills/<имя>/ личные, во всех проектах.claude/skills/<имя>/ проектные, коммитятся в репозиторийsub/.claude/skills/ вложенные: подгружаются, когда агент заходит в sub/<плагин>/skills/ из плагина, вызов /плагин:имяПри совпадении имён: корпоративный > личный > проектный. Изменения в папках подхватываются без перезапуска.
/v1/skills, доступны всему workspace; в запросе — container.skills (до 20) и code execution toolpptx, xlsx, docx, pdf — в API и claude.ai, в Claude Code их нетПоверхности не синхронизируются. Исключение из свежих версий Claude Code: при входе через аккаунт claude.ai его скилы скачиваются в ~/.claude/skills/synced/ — только в одну сторону.
Формат придумали в Anthropic (октябрь 2025) и в декабре 2025 опубликовали как открытый стандарт на agentskills.io.
Поддерживают: OpenAI Codex, Cursor, Gemini CLI, GitHub Copilot и VS Code, JetBrains Junie, OpenCode, Goose, Amp, Roo Code, Kiro, OpenHands и другие.
Общая часть — папка, SKILL.md, name и description. Пути, способ вызова и дополнительные поля у каждого агента свои.
Чужой скил — то же самое, что чужой пакет из npm с post-install-скриптом, только инструкции к нему читает модель с вашими правами. Документация Anthropic: ставить только из доверенных источников, остальное — читать целиком перед установкой.
Найдите в скиле всё подозрительное: нажимайте на строки.
allowed-tools в Claude Code — это разрешение без вопроса, пока выполняется вызвавший скил ход. Других инструментов оно не ограничивает.disallowed-tools.Skill(имя); все скилы — запретить Skill.disableSkillShellExecution отключает команды !`…` в скилах.allowed-tools экспериментальное: другие агенты могут понимать его иначе или игнорировать.В скиле allowed-tools: Read Grep. По его инструкции модель хочет выполнить rm -rf build/. Что сделает Claude Code в обычном режиме?
allowed-tools — список «можно без вопроса», а не белый список. Bash остаётся доступным и проходит обычную проверку разрешений: в интерактивном режиме — вопрос пользователю. Чтобы скил не мог запускать Bash вовсе, нужен disallowed-tools: Bash или запрещающее правило в настройках.processing-pdfs, чем helper.Правьте описание или выберите пример — проверка идёт по правилам стандарта и рекомендациям Anthropic.
SKILL.md; у длинных справочников — оглавление.SKILL.md → a.md → b.md. Агент может прочитать вложенный файл частично (head)\ и магические константы без объяснения.Пример из документации Claude Code: скил, который сам смотрит git diff и описывает изменения. Имени в фронтматтере нет — возьмётся имя папки.
---
description: Summarizes uncommitted changes and flags
anything risky. Use when the user asks what changed,
wants a commit message, or asks to review their diff.
---
## Current changes
!`git diff HEAD`
## Instructions
Summarize the changes above in two or three bullet
points, then list any risks you notice. If the diff
is empty, say there are no uncommitted changes.
# 1. папка и файл (слева)
mkdir -p ~/.claude/skills/summarize-changes
$EDITOR ~/.claude/skills/summarize-changes/SKILL.md
# 2. проверить в Claude Code
/skills # есть ли в списке
What did I change? # должен сработать сам
/summarize-changes # явный вызов
# 3. если не срабатывает
claude --debug # ошибка разбора YAML
claude plugin validate ~/.claude/skills
/context # размер списка скилов
/skill-doctor # цена и неиспользуемые
# стандарт: валидатор для любого агента
skills-ref validate ./summarize-changes
SKILL.md. В контексте всегда только имя и описание; тело — когда скил выбран; файлы и скрипты — по мере надобности.Skill или /имя, рендерится с аргументами и выводом команд и остаётся в разговоре.Хороший скил похож на памятку для нового сотрудника: коротко, по делу и со ссылками на подробности.