Модуль 09 — Практика: свой инструментарий
Время: 160 минут · Артефакт: labs/09-custom/
Задание 1. Command (30 мин)
Создайте в opencode.jsonc команду /check-fix:
{
"commands": {
"check-fix": {
"description": "Прогнать проверки и исправить причины падений",
"template": "Запусти ./scripts/check.sh. Если упало — исправь причину, не отключая проверки. Повторяй максимум 3 раза. В конце покажи дифф и объясни в 2 строках."
}
}
}
Проверьте вызов /check-fix на сломанном тесте.
Приёмка: команда работает, тест снова зелёный, дифф просмотрен.
Задание 2. Skill (40 мин)
Создайте навык .opencode/skills/migrations/SKILL.md:
---
name: migrations
description: Правила создания и применения миграций БД в этом проекте
---
1. Файл миграции: `migrations/YYYYMMDD_описание.sql`
2. Всегда обратная миграция
3. Запрещено: DROP COLUMN без бэкапа
4. После создания: `alembic upgrade head` в dev, `pytest -q`
Проверьте: в новой сессии попросите «добавь миграцию» — агент должен сослаться на правила.
Приёмка: навык подхватывается; в отчёте — цитата из ответа агента.
Задание 3. Subagent-ревьюер (40 мин)
{
"agents": {
"reviewer": {
"description": "Строгое ревью диффа, без правок",
"mode": "subagent",
"permissions": [
{ "action": "edit", "resource": "*", "effect": "deny" },
{ "action": "shell", "resource": "git diff *", "effect": "allow" },
{ "action": "shell", "resource": "*", "effect": "deny" }
]
}
}
}
Дайте ему дифф из модуля 07.
Приёмка: субагент вернул список проблем, файлы не изменены (git status чистый).
Задание 4. Модель под задачу (25 мин)
Настройте две конфигурации:
{
"agents": {
"fast": { "mode": "primary", "model": "<дешёвая>" },
"think": { "mode": "primary", "model": "<reasoning>" }
}
}
Сравните на одной задаче.
Приёмка: таблица «задача / агент / стоимость / качество».
Задание 5. MCP или обоснованный отказ (25 мин)
Проверьте список доступных MCP-серверов:
opencode mcp list
Если нужен внешний инструмент — подключите read-only и опишите риск. Если не нужен — напишите в отчёт 3 причины, почему нет (лишняя поверхность атаки, не решает задачу, есть более простой путь).
Приёмка: либо работающий read-only MCP, либо аргументированный отказ.
Критерии сдачи
- Команда
/check-fixработает. - Skill подхватывается агентом.
- Субагент-ревьюер не имеет прав на правки.
- Есть сравнение моделей по агентам.
- MCP подключён или обоснованно отклонён.