← Вайбкодинг · Вайбкодинг с OpenCode EN FR Курс 30/70 →

Модуль 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 подключён или обоснованно отклонён.