--- pr: 112 title: feat(skills): add repo-readme skill and create-readme tool --- ## Что сделано Создана тулза `create-readme` (`.opencode/tools/create-readme.ts`, TS-плагин) с двумя режимами: - `create` — генерирует стандартизированный двуязычный README.md по шаблону с разделителями `` и ``, Support & Contact блоком, Quick Start, language switcher. Поддерживает `custom_sections_en/ru`, `tier` (flagship/utility), `demo_gif`, `telegram`. Локальный режим (`fs.writeFileSync` в `file_path`) и удалённый (`gh api repos/{owner}/{repo}/contents/README.md` PUT с base64 + SHA). - `validate` — проверяет существующий README на 6 критериев: наличие обоих EN/RU разделителей, непустой контент между ними, ссылку slaid098.dev/support, секции Quick Start (EN) + Быстрый старт (RU), language switcher. Создан скилл `repo-readme` (`.opencode/skills/repo-readme/SKILL.md`): когда использовать create vs validate, tier system, GitHub metadata как отдельный шаг, workflow (create → ручные правки → validate), зачем разделители (парсинг витриной slaid098.dev), шаблон README как reference, независимость от repo-init, краткий список параметров тулзы. Проверки: `tsc --noEmit` чисто; `check-permissions.py` OK (тулза вызывает `gh api` через `spawnSync` внутри плагина — не bash-команда агента, не требует allow-rule). ## Почему Структура README критична для витрины slaid098.dev — она скачивает raw README и извлекает фрагмент между разделителями. Тулза обеспечивает детерминированную генерацию структуры, скилл даёт контекст агенту (когда вызывать, tier, metadata). Ручная генерация README агентом через Write рискует нарушить разделители. ## Pending — ## Watch out Handoff/ADR файлы названы `pr-0-*` (placeholder) — номер PR подставится после create-pr и отдельного коммита `docs(handoff): set PR number`. Тулза регистрации в `opencode.json` не требует (плагины авто-дискаверятся из `.opencode/tools/*.ts`, как `tunnel.ts`). `tier`/`file_path` реализованы через `.optional()` + fallback в handler (не `.default()`), консистентно с существующими тулзами (commit.ts, create-issue.ts не используют zod `.default()`).