Зачем это нужно
Пользовательские инструкции применяются широко ко всей работе. Они отлично подходят для общих стандартов кодирования или предпочтений стиля, но не идеальны для специфичных workflow вроде “обработка PDF файлов” или “генерация API документации”. Навыки решают это: Создай навык для обработки PDF, и Harvi Code загрузит эти инструкции только когда ты действительно попросишь работать с PDF. Это держит системный промпт сфокусированным и даёт Harvi Code глубокую экспертизу в конкретных областях без влияния на несвязанные задачи. Ты не можешь упаковать связанные ресурсы (скрипты, шаблоны, справочники) с пользовательскими инструкциями. Навыки позволяют хранить связанные файлы рядом с инструкциями, создавая самодостаточные пакеты workflow.Что позволяют навыки
- Экспертиза для конкретных задач: Упаковывай детальные инструкции для специализированных workflow (обработка данных, генерация документации, паттерны миграции кода)
- Связанные ресурсы: Включай вспомогательные скрипты, шаблоны или справочные файлы рядом с инструкциями
- Таргетинг по режимам: Создавай навыки, которые активируются только в конкретных режимах (например, навыки рефакторинга только в режиме Code)
- Командная работа: Храни навыки проекта в
.harvi/skills/под контролем версий для консистентных workflow команды - Личная библиотека: Создай глобальную библиотеку навыков в
~/.harvi/skills/, которая работает во всех проектах - Контроль переопределения: Навыки проекта переопределяют глобальные, специфичные для режима переопределяют общие
Как работают навыки
Навыки используют прогрессивное раскрытие для эффективной загрузки контента только когда нужно: Уровень 1: Обнаружение — Harvi Code читает каждый файлSKILL.md и парсит его frontmatter для извлечения name и description. Только эти метаданные хранятся для сопоставления — полное содержимое не держится в памяти до необходимости.
Уровень 2: Инструкции — Когда твой запрос соответствует описанию навыка, Harvi Code использует read_file для загрузки полных инструкций SKILL.md в контекст.
Уровень 3: Ресурсы — Промпт сообщает Harvi Code, что могут быть доступны связанные файлы (скрипты, шаблоны, справочники) рядом с навыком. Нет отдельного манифеста ресурсов — Harvi Code обнаруживает эти файлы по требованию, когда инструкции ссылаются на них.
Эта архитектура означает, что навыки остаются неактивными до активации — они не раздувают твой базовый промпт. Можешь установить много навыков, и Harvi Code загрузит только релевантные для каждой задачи.
Создание первого навыка
1. Выбери расположение
Глобальные навыки (доступны во всех проектах):2. Создай директорию и файл навыка
3. Напиши файл SKILL.md
Файл требует frontmatter сname и description:
- Поле
nameдолжно точно совпадать с именем директории (или именем символической ссылки) - Имена должны быть 1–64 символа, только строчные буквы/цифры/дефисы
- Без начальных/конечных дефисов, без последовательных дефисов (например,
my--skillнедопустимо) - Оба поля
nameиdescriptionобязательны - Описания должны быть 1–1024 символа (обрезаются)
- Описание сообщает Harvi Code, когда использовать этот навык — будь конкретным
4. Протестируй навык
Спроси Harvi Code что-то, соответствующее описанию:Структура директорий
Базовая структура
Навыки для конкретных режимов
Создавай навыки, которые активируются только в определённых режимах:- Паттерны рефакторинга кода (только режим Code)
- Шаблоны системного дизайна (только режим Architect)
- Стандарты документации (специфичны для режима написания документации)
Приоритет переопределения
Когда навыки с одинаковым именем существуют в нескольких местах, применяется такой приоритет:- Проект, специфичный для режима (
.harvi/skills-code/my-skill/) - Проект, общий (
.harvi/skills/my-skill/) - Глобальный, специфичный для режима (
~/.harvi/skills-code/my-skill/) - Глобальный, общий (
~/.harvi/skills/my-skill/)
- Устанавливать глобальные стандарты, работающие везде
- Переопределять их для конкретного проекта при необходимости
- Специализировать навыки для конкретных режимов внутри каждого расположения
Обнаружение навыков
Harvi Code автоматически обнаруживает навыки:- При запуске: Все навыки индексируются чтением и парсингом каждого SKILL.md
- Во время разработки: Наблюдатели файлов обнаруживают изменения в файлах SKILL.md
- Фильтрация по режимам: Доступны только навыки, релевантные текущему режиму
Поддержка символических ссылок
Навыки поддерживают символические ссылки для совместного использования библиотек навыков между проектами:name в frontmatter должно точно совпадать с этим именем — нельзя создавать алиасы с разными именами, указывающими на один навык.
Решение проблем
Навык не загружается
Симптом: Harvi Code не использует твой навык, даже когда ты запрашиваешь что-то, соответствующее описанию. Причины и решения:- Несовпадение имён: Поле
nameв frontmatter должно точно совпадать с именем директории - Отсутствуют обязательные поля: Оба поля
nameиdescriptionобязательны в frontmatter - Неправильный режим: Если навык в
skills-code/, но ты в режиме Architect, он не загрузится - Слишком расплывчатое описание: Делай описания конкретными, чтобы Harvi Code мог сопоставить их с запросами
Навык загружается, но не помогает
Симптом: Harvi Code читает навык, но не следует инструкциям. Причина: Инструкции могут быть слишком общими или не хватает критических деталей. Решение: Делай инструкции действенными:- Включай конкретные имена функций или выбор библиотек
- Предоставляй шаблоны кода
- Перечисляй частые крайние случаи и как их обрабатывать
- Добавляй руководство по решению проблем для конкретной задачи
Конфликт нескольких навыков
Симптом: Неясно, какой навык Harvi Code будет использовать, когда несколько могут подойти. Причина: Пересекающиеся описания или конфигурации режимов. Профилактика:- Делай описания различными и конкретными
- Используй директории для конкретных режимов для разделения задач
- Полагайся на приоритет переопределения — навыки проекта переопределяют глобальные
Навыки vs Пользовательские инструкции vs Slash-команды
| Функция | Навыки | Пользовательские инструкции | Slash-команды |
|---|---|---|---|
| Когда загружаются | По требованию (когда запрос соответствует) | Всегда (часть базового промпта) | По требованию (при вызове) |
| Лучше для | Специфичных для задачи workflow | Общих стандартов кодирования | Получения предварительно написанного контента |
| Могут включать файлы | Да | Нет | Нет |
| Таргетинг по режимам | Да (skills-{режим} директории) | Да (rules-{режим} директории) | Нет |
| Приоритет переопределения | Проект > Глобальный, Режим > Общий | Проект > Глобальный | Проект > Глобальный |
| Формат | SKILL.md с frontmatter | Любой текстовый файл | JSON метаданные + контент |
| Обнаружение | Автоматическое (сканирование директорий) | Автоматическое (сканирование директорий) | Автоматическое (сканирование директорий) |
- Навыки: “Генерировать API документацию по спецификации OpenAPI” → Детальные инструкции обработки OpenAPI загружаются только когда нужно
- Пользовательские инструкции: “Всегда использовать TypeScript strict mode” → Применяется ко всей работе с TypeScript
- Slash-команды:
/init→ Возвращает стандартизированные инструкции настройки проекта