Проектная лаборатория
Собственный Claude Code
Этап 07 · Навыки
Объявление навыков для модели
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите поиск навыков на диске и объявление их доступности для LLM.
Навыки
Навык — это папка с инструкциями, которые можно загружать в контекст модели по мере необходимости. Claude Code поставляется с навыками для проверки pull request, написания сообщений коммитов и других задач, а также позволяет добавлять собственные.
Навыки находятся в каталоге проекта .claude/skills/. Каждый навык — папка с файлом SKILL.md:
.claude/
└── skills/
├── apple/
│ └── SKILL.md
└── grape/
└── SKILL.mdФайл SKILL.md состоит из двух частей: frontmatter (метаданные между маркерами ---) и основного текста (всё после них):
---
name: apple
description: Deploys the apple service to production.
---
Run the deploy script and report the version that was deployed.Метаданные объясняют программе назначение навыка.
Поэтапная загрузка
Самый очевидный способ сообщить модели о навыке — вставить весь SKILL.md в запрос. Но такой подход не масштабируется: десять навыков по двести строк заполнят окно контекста ещё до первого вопроса пользователя.
Навыки решают эту проблему поэтапной загрузкой. Сначала Claude загружает только метаданные, а основной текст и остальные зависимости — при вызове навыка. В стандарте Agent Skills определены три уровня:
| Уровень | Что загружается | Примерный объём | Когда |
|---|---|---|---|
| 1 | Название, описание и другие поля | ~100 токенов на навык | Всегда |
| 2 | Основной текст SKILL.md |
Менее 5 000 токенов | При использовании навыка |
| 3 | Скрипты и справочные файлы навыка | Не ограничен | Когда на них ссылается основной текст |
На этом этапе реализуйте только первый уровень.
Объявление навыков
Разберём, как объявить навык:
- Просмотрите
.claude/skills/, переберите папки навыков, разберите метаданные каждогоSKILL.md, извлекитеnameиdescriptionи добавьте их в системный запрос. Не включайте основной текст навыков.
Например, для двух навыков apple и grape системный запрос будет выглядеть так:
You have access to the following skills:
- apple: Deploys the apple service to production.
- grape: Runs the grape test suite and reports failures.- Начальная история разговора уже есть — массив
messagesс запросом пользователя. Добавьте запросsystemв начало массиваmessages.
messages = [
+ { "role": "system", "content": "You have access to the following skills:\n\n- apple: ..." },
{ "role": "user", "content": prompt }
]Проверки
Тестирующая система создаст случайное количество папок навыков, опишет задачу из описания одного из них и спросит, какой навык подходит:
$ ./your_program.sh -p "Which skill would help me deploy the apple service? Respond with only the skill name."
appleПримечания
- На этом этапе рекомендуем реализовать полноценный YAML-парсер: он пригодится дальше.
- Стандарт Agent Skills требует, чтобы поле
nameв метаданных совпадало с именем папки. Можно читать любое из них; на следующих этапах навыки вызываются по имени папки.
Для проверки этого проекта нужен ключ OpenRouter в переменной CODECRAFTERS_SECRET_OPENROUTER_API_KEY. Запросы к модели могут быть платными. Ключ задаётся только в вашем терминале и не отправляется в GraphLMS.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init claude-code ./my-claude-code --language go2. Откройте папку в IDE
cd ./my-claude-codeРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage vh1 --allow-paid-apiЗапускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.