Модуль 5
Скиллы
Повторяемая процедура в SKILL.md: описания всегда в контексте, тело грузится под задачу, явный вызов @id и права на скиллы.
Чему научишься
- создавать скилл: папка с SKILL.md, frontmatter name и description, вспомогательные файлы рядом
- проверять, как скилл попадает в контекст: описания живут всегда, тело грузится под задачу
- вызывать скилл явно по @id и ограничивать скиллы правилами permissions
Одни и те же процедуры повторяются из недели в неделю: собрать релиз, прогнать регресс перед мерджем, подготовить окружение. Пересказывать шаги агенту в каждом диалоге дорого, и каждый раз выходит по-разному. У курса уже есть два механизма: AGENTS.md из модуля 3 держит правила проекта в контексте постоянно, команда /review запускается человеком по имени. Скилл закрывает третий случай: процедура записана один раз, а агент подтягивает её сам, когда задача подходит под описание.
Скилл — это папка с файлом SKILL.md внутри .opencode/skills/. Формат описывает открытый стандарт Agent Skills, его развивает Anthropic, поэтому OpenCode читает и .claude/skills, и .agents/skills: скиллы команды, работавшей в Claude Code или Codex, заработают без переноса.
Скилл = папка с SKILL.md
.opencode/skills/release/
├── SKILL.md
├── references/
│ └── release-policy.md
└── scripts/
└── changelog.shВ frontmatter два поля для подбора: name — показное имя в списке, description — по нему модель решает, подходит ли скилл задаче; пиши в нём, когда скилл применять. Идентификатор определяется путём: папка release/SKILL.md даёт ID release, name на ID не влияет, регистр важен. Вспомогательные файлы в контекст не грузятся: агент читает их, когда инструкция скилла велит.
---
name: Релиз
description: Чек-лист релиза orders-api: версия по semver, changelog, тег
---
1. Прочитай `references/release-policy.md`.
2. Собери коммиты с прошлого тега: `git log --oneline`.
3. Предложи новую версию по semver из политики и дождись подтверждения.
4. Обнови версию в package.json и CHANGELOG.md, поставь тег.Как скилл попадает в контекст
В контексте постоянно живут только описания: ID, имя и description каждого скилла, пара строк на штуку. Когда задача совпадает с описанием, агент загружает тело SKILL.md целиком и работает по шагам; справочники и скрипты читает сам, когда инструкция велит. Двадцать скиллов в покое стоят как двадцать строк текста, контекстом платишь только за используемый.
Собери релиз для orders-api
Загрузил скилл release: описание подошло под задачу. По шагам: коммиты с тега v1.0.0 — фикс валидации quantity в POST /api/orders. По release-policy.md исправление бага без нового API — патч, предлагаю 1.0.1. Подтверди версию, обновлю package.json и CHANGELOG.md и поставлю тег.
Явный вызов @release загружает скилл без оглядки на описание. Поле metadata: opencode/autoinvoke: false убирает скилл из списка у модели: описание больше не показывается, вызов @release продолжает работать. Так держат процедуры для редких задач, где авто-подбор мешает.
Где OpenCode ищет скиллы
| Источник | Пути |
|---|---|
| Проект | .opencode/skills, .claude/skills, .agents/skills |
| Глобальные | ~/.config/opencode/skills |
| Совместимость (глобально) | ~/.claude/skills, ~/.agents/skills |
Скиллы подчиняются permission skill, ресурс — ID. Правило deny прячет скилл от модели, ask спрашивает перед загрузкой. Правила работают и в permissions конкретного агента: ревьюеру из модуля 4 оставь только нужный скилл, остальное закрой deny.
{
"permissions": [
{ "action": "skill", "resource": "*", "effect": "deny" },
{ "action": "skill", "resource": "release", "effect": "allow" }
]
}Практика модуля
--- name: Релиз description: Чек-лист релиза orders-api: версия по semver, changelog, тег --- 1. Прочитай `references/release-policy.md`. 2. Собери коммиты с прошлого тега: `git log --oneline`. 3. Предложи новую версию по semver из политики и дождись подтверждения. 4. Обнови версию в package.json и CHANGELOG.md, поставь тег.Собери релиз для orders-api@release собери релиз для orders-api
Отмечено 0 из 5
Проверь себя
Вопрос 1 из 4
Шпаргалка модуля
Свои скиллы
- .opencode/skills/release/SKILL.md
- скилл с ID release; frontmatter name и description
- references/, scripts/
- справочники и скрипты рядом; пути относительно папки скилла
- description
- по нему модель подбирает скилл; пиши, когда применять
Механика
- описания всегда, тело под задачу
- в контексте ID+имя+description, полный текст — после подбора
- @release
- явный вызов скилла из диалога
- opencode/autoinvoke: false
- скрыть от модели, оставить явный вызов
Совместимость и права
- .claude/skills и .agents/skills
- скиллы команды из Claude Code и Codex читаются как родные
- ~/.config/opencode/skills
- глобальные скиллы на все проекты
- permissions skill
- allow/ask/deny по ID скилла, работает и в permissions агента