zip или Compress-Archive, текстовый редактор, аккаунт Claude с доступом к разделу Skills (проверьте наличие пункта в настройках), API-ключ Anthropic — если планируете вызывать навык через API.SKILL.md, ZIP-архив и работающий тест, где Claude сам подхватывает навык по описанию.Термины коротко. Skill (навык) — папка с инструкциями и файлами, которую Claude подгружает, когда задача совпадает с её описанием. Frontmatter — блок между двумя строками --- в начале markdown-файла, где задаются имя и описание. Progressive disclosure — принцип, по которому Claude сначала читает только имя и описание, а тело инструкции и вложенные файлы открывает лишь при необходимости.

zip: в Linux/macOS — zip -v, в Windows — powershell -Command "Get-Command Compress-Archive". Если команды нет, поставьте пакет: sudo apt install zip (Debian/Ubuntu).python3 --version. Минимальную поддерживаемую версию сверьте с документацией.ANTHROPIC_API_KEY.Проверка подготовки одной командой:
mkdir -p ~/skills && cd ~/skills && pwd && python3 --version && zip -v | head -n 2
Ожидаемый вывод: путь вида /home/<user>/skills, строка версии Python и баннер Zip 3.0 .... Если pwd вернул ошибку — папка не создалась, проверьте права на домашний каталог.
Что сделать: создайте папку навыка и три элемента внутри: SKILL.md (обязательный), scripts/ (исполняемые файлы, необязательно), references/ (справочники, необязательно).
Зачем: Claude ищет точку входа по имени файла SKILL.md; без него архив не распознается как навык. Разделение на scripts/ и references/ — это и есть progressive disclosure: тяжёлые файлы не попадают в контекст, пока модель их не запросит.
Пример: навык server-health-check, который проверяет состояние сервера по SSH.
mkdir -p ~/skills/server-health-check/scripts
mkdir -p ~/skills/server-health-check/references
cd ~/skills/server-health-check
touch SKILL.md scripts/check_disk.sh references/checklist.md
Как проверить: выведите дерево каталога.
find . -type f | sort
Ожидаемый вывод — ровно три строки:
./SKILL.md
./references/checklist.md
./scripts/check_disk.sh
Если файлов меньше — не сработал touch, проверьте, что вы находитесь в папке навыка (pwd).
Если навык должен опрашивать ваш собственный сервер, подготовьте доступы заранее: как поднять сам хост и сервисы, разобрано в гайде Как подключить ИИ к домашнему серверу.
Что сделать: напишите frontmatter и тело инструкции, затем соберите архив.
Зачем: имя и описание — единственное, что Claude видит до активации навыка. Именно по описанию он решает, включать навык или нет, поэтому в описании должны быть глаголы и триггеры («проверить», «посчитать», «сформировать отчёт»), а не общие слова вроде «полезный навык».
Пример: содержимое SKILL.md.
---
name: server-health-check
description: Проверяет доступность сервера по SSH, свободное место на диске и нагрузку. Используйте, когда пользователь просит проверить состояние сервера, узнать остаток диска или диагностировать зависший сервис.
---
# Проверка состояния сервера
## Когда применять
Запросы вида «сервер тормозит», «сколько места осталось», «жив ли сервис».
## Порядок действий
1. Запусти `scripts/check_disk.sh` через инструмент исполнения кода.
2. Сверь результат с `references/checklist.md`.
3. Верни отчёт в трёх строках: диск, память, статус сервиса.
## Ограничения

Не выполняй перезапуск сервисов. Только диагностика.
Правила frontmatter: name — строчные латинские буквы, цифры и дефисы, без пробелов; description — одно-два предложения с явными триггерами. Конкретные лимиты длины полей сверьте с документацией.
Как проверить YAML-валидность до упаковки:
python3 -c "import sys,yaml;t=open('SKILL.md').read().split('---')[1];print(yaml.safe_load(t))"
Ожидаемый вывод — словарь с ключами name и description:
{'name': 'server-health-check', 'description': 'Проверяет доступность сервера по SSH...'}
Если вместо этого yaml.scanner.ScannerError — в frontmatter лишняя кавычка или двоеточие в описании без кавычек.
Упаковка:
cd ~/skills/server-health-check
zip -r ../server-health-check.zip . -x ".*" -x "__MACOSX/*"
unzip -l ../server-health-check.zip
Ожидаемый вывод unzip -l: в списке есть SKILL.md в корне архива, а не внутри вложенной папки. Это критично: если после распаковки получается server-health-check/SKILL.md, навык не установится.
Загрузка: в интерфейсе Claude — Settings → раздел навыков → загрузка архива → выберите server-health-check.zip. Через API архив отправляется в эндпоинт управления навыками; точное имя поля и обязательный beta-заголовок сверьте с документацией:
curl https://api.anthropic.com/v1/skills \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: <beta-заголовок из документации>" \
-F "display_title=Server Health Check" \
-F "files[]=@server-health-check.zip"
Как проверить: ответ должен содержать идентификатор созданного навыка (поле вида id, например skill_...). Сохраните его — он нужен для вызовов из API. Код ответа 400 означает проблему с архивом, 401 — с ключом.

Что сделать: задайте в чате вопрос, который совпадает с описанием, и убедитесь, что Claude открыл SKILL.md. Затем повторите вопрос, который с навыком не связан.
Зачем: навык бесполезен, если модель его не выбирает. Проверка на «горячем» и «холодном» запросе показывает, что срабатывает именно описание, а не случайность.
Пример горячего запроса: «Проверь сервер, сколько осталось места на диске».
Признаки успеха на экране: Claude упоминает использование навыка (строка вида «Using skill: server-health-check» в интерфейсе или блок tool_use с именем навыка в ответе API), а ответ содержит три запрошенные строки — диск, память, статус сервиса.
Пример холодного запроса: «Напиши хайку про осень». Навык не должен активироваться.
Как проверить через API: передайте идентификатор навыка в запросе к модели.
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: <beta-заголовок из документации>" \
-H "content-type: application/json" \
-d '{
"model": "<актуальная модель из документации>",
"max_tokens": 1024,
"container": {"skills": [{"type": "custom", "skill_id": "<skill_...>", "version": "latest"}]},
"messages": [{"role": "user", "content": "Проверь сервер, сколько осталось места на диске"}]
}'
Ожидаемый результат: в JSON-ответе есть content с текстом отчёта, а в логах — обращение к скрипту навыка. Почему это работает: контейнер исполнения кода получает папку навыка целиком, поэтому scripts/check_disk.sh доступен по относительному пути.
Чек-лист приёмки:
SKILL.md лежит в корне ZIP.Проблема. Архив загружается, но навык не появляется в списке
Invalid skill package: SKILL.md not found at archive root (формулировка зависит от клиента, сверьтесь с документацией).zip -r из родительского каталога, и SKILL.md оказался внутри вложенной папки.cd ~/skills/server-health-check && zip -r ../server-health-check.zip . && unzip -l ../server-health-check.zip | grep SKILL.md
В выводе должна быть строка SKILL.md без префикса-каталога.
Проблема. Навык не активируется на профильные запросы
description, добавив глаголы и синонимы запросов, затем загрузите новую версию архива и повторите горячий тест:description: Проверяет доступность сервера по SSH, свободное место на диске и нагрузку. Используйте, когда просят проверить состояние сервера, узнать остаток диска, диагностировать зависший сервис или «сервер тормозит».
Проблема. Скрипт навыка падает при запуске
Permission denied или bash: ./scripts/check_disk.sh: /bin/bash^M: bad interpreter: No such file or directory.chmod +x scripts/check_disk.sh
sed -i 's/\r$//' scripts/check_disk.sh
После правок пересоберите ZIP — изменения в уже загруженный архив не подтягиваются автоматически.
Навык — это папка с SKILL.md, корректным frontmatter и, при необходимости, скриптами, упакованная так, чтобы файл инструкции лежал в корне архива. Дальше добавьте второй навык под повторяющуюся задачу и свяжите его с мониторингом по гайду Как настроить мониторинг VPS через Telegram-бота с Mini App.
Чем Skill отличается от обычного промпта?
Промпт вы вставляете в каждый диалог вручную, а навык хранится отдельно и подключается автоматически, когда описание совпало с задачей; внутрь навыка можно положить скрипты и справочники.
Нужен ли API-ключ, чтобы создать навык?
Нет, если вы работаете в интерфейсе Claude и загружаете ZIP вручную. Ключ нужен только для загрузки и вызова навыка программно.
Обязательно ли класть в навык скрипты?
Нет. Минимальный рабочий навык — один SKILL.md с инструкцией и критериями применения; scripts/ и references/ добавляют, когда нужны вычисления или большие справочники.
Что делать, если после правки файлов навык работает по-старому?
Загрузите архив заново: правки в локальной папке не синхронизируются с уже установленной версией. Перед повторной загрузкой проверьте unzip -l, что в архиве новые файлы.