Запрос и перечисление доступных навыков
Что вы сможете сделать после изучения
- Использовать инструмент
get_available_skillsдля перечисления всех доступных навыков - Фильтровать определённые навыки с помощью поисковых запросов
- Точно находить навыки с помощью пространств имён (например,
project:skill-name) - Определять источники навыков и список исполняемых скриптов
Ваша текущая проблема
Вы хотите использовать определённый навык, но не помните его точное название. Возможно, вы знаете, что это навык в проекте, но не знаете, в каком пути обнаружения он находится. Или вы просто хотите быстро просмотреть, какие навыки доступны в текущем проекте.
Когда использовать этот метод
- Изучение нового проекта: при присоединении к новому проекту быстро узнайте, какие навыки доступны
- Неопределённость названия навыка: вы помните только часть названия или описание навыка, нужно нечёткое сопоставление
- Конфликт имён в нескольких пространствах: в проектном и пользовательском уровнях есть навыки с одинаковыми названиями, нужно явно указать, какой использовать
- Поиск скриптов: вы хотите узнать, какие автоматизированные скрипты доступны в каталоге навыка
Основная идея
Инструмент get_available_skills помогает вам просматривать все навыки, доступные в текущей сессии. Плагин автоматически сканирует навыки из 6 путей обнаружения:
Приоритет обнаружения навыков
.opencode/skills/(проектный уровень OpenCode).claude/skills/(проектный уровень Claude)~/.config/opencode/skills/(пользовательский уровень OpenCode)~/.claude/skills/(пользовательский уровень Claude)~/.claude/plugins/cache/(кэш плагинов)~/.claude/plugins/marketplaces/(установленные плагины)
Навыки с одинаковыми названиями сохраняются только по приоритету, первая найденная версия сохраняется, последующие игнорируются.
Информация, возвращаемая инструментом, включает:
- Название навыка
- Метку источника (project, user, claude-project и т. д.)
- Описание
- Список исполняемых скриптов (если есть)
Синтаксис пространства имён
Вы можете явно указать источник с помощью формата namespace:skill-name:
project:my-skill— использовать навык проектного уровня OpenCode (.opencode/skills/)claude-project:my-skill— использовать навык проектного уровня Claude (.claude/skills/)user:my-skill— использовать навык пользовательского уровня OpenCode (~/.config/opencode/skills/)claude-user:my-skill— использовать навык пользовательского уровня Claude (~/.claude/skills/)claude-plugins:my-skill— использовать навык из плагина Claude
Пошаговое руководство
Шаг 1: Перечисление всех доступных навыков
В OpenCode просто попросите ИИ перечислить навыки:
Ввод пользователя:
Перечислите все доступные навыки
Ответ системы:
skill-helper (project)
Помощник по операциям Git и управлению ветками [scripts: tools/branch.sh, tools/commit.sh]
test-helper (user)
Инструмент для модульного тестирования и анализа покрытия
docker-helper (project)
Руководство по контейнеризации и развёртыванию Docker [scripts: build.sh, deploy.sh]
claude-code-superpowers (claude-plugins)
Полный рабочий процесс разработки ПОЧто вы должны увидеть: список навыков, каждый навык отображает название, метку источника, описание и список скриптов.
Шаг 2: Использование поисковых запросов для фильтрации
Если вы помните только часть названия навыка:
Ввод пользователя:
Найдите навыки, содержащие "docker"
Ответ системы:
docker-helper (project)
Руководство по контейнеризации и развёртыванию Docker [scripts: build.sh, deploy.sh]Поиск сопоставляет ключевые слова в названиях и описаниях навыков, поддерживает подстановочный символ *:
Ввод пользователя:
Найдите навыки, начинающиеся с "test"
Ответ системы:
test-helper (user)
Инструмент для модульного тестирования и анализа покрытияЧто вы должны увидеть: отображаются только навыки, соответствующие условиям запроса.
Шаг 3: Испытание нечёткого сопоставления и предложений
Если вы ввели неправильное название навыка:
Ввод пользователя:
Я хочу использовать docker-asistant
Ответ системы:
No skills found matching "docker-asistant". Did you mean "docker-helper"?Плагин на основе расстояния Левенштейна рассчитывает сходство и автоматически предлагает название наиболее близкого навыка.
Что вы должны увидеть: сообщение об ошибке и правильное предложение навыка.
Шаг 4: Точное позиционирование с помощью пространства имён
Предположим, что на проектном и пользовательском уровнях есть навык с названием build-helper:
Ввод пользователя:
Перечислите подробную информацию о build-helper
Ответ системы:
build-helper (project)
Конфигурация сборки, специфичная для проекта, и оптимизация компиляции [scripts: build.sh, optimize.sh]Если пользователь хочет навык пользовательского уровня:
Ввод пользователя:
Используйте user:build-helper
Ответ системы:
build-helper (user)
Универсальный инструментарий сборки и конфигурация непрерывной интеграции [scripts: ci.sh, test.sh]Что вы должны увидеть: с помощью префикса пространства имён можно получать доступ к навыкам с одинаковыми названиями из разных источников.
Шаг 5: Проверка исполняемых скриптов
Просмотр скриптов в каталоге навыка:
Ввод пользователя:
Какие скрипты есть у docker-helper?
Ответ системы:
docker-helper (project)
Руководство по контейнеризации и развёртыванию Docker [scripts: build.sh, deploy.sh]Скрипты отображаются в квадратных скобках в информации о навыке, разделённые запятыми. Вы можете выполнить эти скрипты с помощью инструмента run_skill_script.
Что вы должны увидеть: после названия навыка идёт список в формате [scripts: путь_к_скрипту1, путь_к_скрипту2, ...].
Контрольная точка ✅
- [ ] Можете ли вы перечислить все доступные навыки?
- [ ] Можете ли вы фильтровать определённые навыки с помощью поисковых запросов?
- [ ] Понимаете ли вы значение меток источников навыков (project, user, claude-project и т. д.)?
- [ ] Можете ли вы объяснить роль и синтаксис пространств имён навыков?
- [ ] Можете ли вы определить список исполняемых скриптов из информации о навыке?
Предупреждения о подводных камнях
Ловушка 1: Перекрытие навыков с одинаковыми названиями
Если на проектном и пользовательском уровнях есть навыки с одинаковыми названиями, вы можете быть озадачены тем, почему загружается не тот навык, который вы ожидаете.
Причина: навыки обнаруживаются по приоритету, проектный уровень имеет приоритет над пользовательским, для одинаковых названий сохраняется только первый.
Решение: явно укажите пространство имён, например, user:my-skill, а не просто my-skill.
Ловушка 2: Чувствительность к регистру в поиске
Поисковые запросы используют регулярные выражения, но установлен флаг i, поэтому поиск не чувствителен к регистру.
# Эти поиски эквивалентны
get_available_skills(query="docker")
get_available_skills(query="DOCKER")
get_available_skills(query="Docker")Ловушка 3: Экранирование подстановочных символов
В поиске * автоматически преобразуется в регулярное выражение .*, ручное экранирование не требуется:
# Поиск навыков, начинающихся с "test"
get_available_skills(query="test*")
# Эквивалентно регулярному выражению /test.*/iИтог урока
get_available_skills — это инструмент для изучения экосистемы навыков, поддерживающий:
- Перечисление всех навыков: вызов без параметров
- Поиск и фильтрацию: сопоставление названий и описаний с помощью параметра
query - Пространства имён: точное позиционирование с помощью
namespace:skill-name - Предложения по нечёткому сопоставлению: автоматическое подсказывание правильного названия при орфографических ошибках
- Список скриптов: отображение исполняемых автоматизированных скриптов
Плагин автоматически внедряет список навыков при начале сессии, поэтому обычно вам не нужно вызывать этот инструмент вручную. Однако он полезен в следующих сценариях:
- Хотите быстро просмотреть доступные навыки
- Не помните точное название навыка
- Нужно различать одинаковые названия навыков из разных источников
- Хотите просмотреть список скриптов определённого навыка
Предварительный обзор следующего урока
В следующем уроке мы изучим Загрузка навыков в контекст сессии.
Вы узнаете:
- Использование инструмента use_skill для загрузки навыков в текущую сессию
- Понимание того, как содержимое навыков внедряется в контекст в формате XML
- Освоение механизма Synthetic Message Injection (внедрение синтетических сообщений)
- Узнайте, как навыки остаются доступными после сжатия сессии
Приложение: Справочник по исходному коду
Нажмите, чтобы просмотреть расположение исходного кода
Время обновления: 2026-01-24
| Функция | Путь к файлу | Номер строки |
|---|---|---|
| Определение инструмента GetAvailableSkills | src/tools.ts | 29-72 |
| Функция discoverAllSkills | src/skills.ts | 240-263 |
| Функция resolveSkill | src/skills.ts | 269-283 |
| Функция findClosestMatch | src/utils.ts | 88-125 |
Ключевые типы:
SkillLabel = "project" | "user" | "claude-project" | "claude-user" | "claude-plugins": перечисление меток источников навыков
Ключевые константы:
- Порог нечёткого сопоставления:
0.4(utils.ts:124) — если сходство ниже этого значения, предложения не возвращаются
Ключевые функции:
GetAvailableSkills(): возвращает форматированный список навыков, поддерживает фильтрацию по запросам и предложения по нечёткому сопоставлениюresolveSkill(skillName: string, skillsByName: Map<string, Skill>): поддерживает разбор навыков в форматеnamespace:skill-namefindClosestMatch(input: string, candidates: string[]): на основе нескольких стратегий сопоставления (префикс, включение, расстояние редактирования) рассчитывает лучшее совпадение
Бизнес-правила:
- Навыки с одинаковыми названиями дедуплицируются по порядку обнаружения, сохраняется только первый (
skills.ts:258) - Поисковые запросы поддерживают подстановочный символ
*, который автоматически преобразуется в регулярное выражение (tools.ts:43) - Предложения по нечёткому сопоставлению срабатывают только при наличии параметра запроса и отсутствии результатов (
tools.ts:49-57)