Перейти к содержимому
Прогресс курса
0 из 12 модулей

Модуль 5

Скиллы

Повторяемая процедура в SKILL.md: описания всегда в контексте, тело грузится под задачу, явный вызов @id и права на скиллы.

15 мин

Содержание модуля
  1. Скилл = папка с SKILL.md
  2. Как скилл попадает в контекст
  3. Где OpenCode ищет скиллы

Чему научишься

  • создавать скилл: папка с 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/Дока: скиллы
.opencode/skills/release/
├── SKILL.md
├── references/
│   └── release-policy.md
└── scripts/
    └── changelog.sh
Папка даёт скиллу личный каталог: скрипты, справочники и шаблоны лежат рядом, пути в SKILL.md пишутся относительно неё.

В frontmatter два поля для подбора: name — показное имя в списке, description — по нему модель решает, подходит ли скилл задаче; пиши в нём, когда скилл применять. Идентификатор определяется путём: папка release/SKILL.md даёт ID release, name на ID не влияет, регистр важен. Вспомогательные файлы в контекст не грузятся: агент читает их, когда инструкция скилла велит.

.opencode/skills/release/SKILL.mdДока: скиллы
---
name: Релиз
description: Чек-лист релиза orders-api: версия по semver, changelog, тег
---

1. Прочитай `references/release-policy.md`.
2. Собери коммиты с прошлого тега: `git log --oneline`.
3. Предложи новую версию по semver из политики и дождись подтверждения.
4. Обнови версию в package.json и CHANGELOG.md, поставь тег.
Шаг 3 держит человека в цикле: версию подтверждает тот, кто выпускает релиз.

Как скилл попадает в контекст

В контексте постоянно живут только описания: 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
Совпадение ID у двух источников разрешается в пользу проектного скилла.

Скиллы подчиняются permission skill, ресурс — ID. Правило deny прячет скилл от модели, ask спрашивает перед загрузкой. Правила работают и в permissions конкретного агента: ревьюеру из модуля 4 оставь только нужный скилл, остальное закрой deny.

opencode.jsonc, фрагмент permissionsДока: permissions
{
  "permissions": [
    { "action": "skill", "resource": "*", "effect": "deny" },
    { "action": "skill", "resource": "release", "effect": "allow" }
  ]
}
Модели виден только скилл release, остальные скрыты правилом deny.

Практика модуля

  1. Дока: скиллы
    ---
    name: Релиз
    description: Чек-лист релиза orders-api: версия по semver, changelog, тег
    ---
    
    1. Прочитай `references/release-policy.md`.
    2. Собери коммиты с прошлого тега: `git log --oneline`.
    3. Предложи новую версию по semver из политики и дождись подтверждения.
    4. Обнови версию в package.json и CHANGELOG.md, поставь тег.
  2. Собери релиз для orders-api
  3. Дока: скиллы
    @release собери релиз для orders-api

Отмечено 0 из 5

Проверь себя

Вопрос 1 из 4

Прогресс квиза
Чем скилл отличается от AGENTS.md?

Шпаргалка модуля

Свои скиллы

.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 агента