# Proposal: OpenSpec в DSH Issue: #42 (роадмап порта — #48). Источники: - `dsh/PORT.md`, разделы 1 (таблица слоёв: «Gitea, OpenSpec — CLI + skills, 1:1»), 3 (deferred), 8 (next phases); - спайк 24.10.2026 в temp-проекте: `openspec init --tools agents` + полный цикл CLI без Claude Code; - ответы владельца 24.10.2026: скиллы — в проект, слэш-команда не нужна. ## Why В Claude Code архитектурная задача идёт через OpenSpec: `openspec/changes//` — proposal, дельта спеки, design, tasks; `openspec validate` и `openspec archive` держат спеки в правде. В DSH этот слой сейчас отсутствует: CLI работает, но скиллов нет, и агент либо правит спеку руками, либо не заводит change вовсе. `dsh/PORT.md` при этом обещает «CLI + skills 1:1» — обещание не выполнено. Роль dev уже требует спеки в `openspec/changes//` для архитектурных задач. Пока скиллов нет, это требование в DSH-сессии выполняется только «на память модели»: формат proposal/дельты и порядок команд ничем не закреплены. ## What Changes - **Скиллы OpenSpec в проекте.** `openspec init --tools agents` создаёт `.agents/skills/openspec-{propose,apply-change,archive-change,explore,sync-specs,update-change}/SKILL.md` — ровно тот формат, который DSH читает как проектные скиллы. В репозиторий обвязки эти шесть скиллов добавляются (dogfooding: обвязка сама ведёт спеки через OpenSpec). Скиллы остаются генератором openspec: `openspec update` обновляет их под версию CLI проекта. - **Глобальной копии нет.** В `~/.dsh/skills` скиллы OpenSpec не ставятся: копия стареет относительно CLI проекта, а в проектах с собственным `.agents/skills` появляются два скилла с одним именем. - **`dsh/install.sh`:** `--check` сообщает версию CLI `openspec` и наличие agents-скиллов в репозитории обвязки; новая опция `--openspec` добавляет agents-адаптер в текущий проект (`openspec init --tools agents`), только если `openspec/` уже существует, — идемпотентно, `.claude/` не трогает. - **`dsh/PORT.md` и `dsh/README.md`:** раздел про OpenSpec, путь `.agents/skills`, цикл проверки, снятие пункта из «Next phases». - **`dsh/tests/openspec.test.mjs`:** проверки без DSH runtime — наличие и frontmatter скиллов в репозитории, поведение `--check` и `--openspec` с подставным бинарём `openspec` в `PATH`. - **Слэш-команд нет.** В Claude Code есть `/opsx:*`; в DSH вход — скиллы, которые модель вызывает по фразе «openspec propose» / «openspec archive». `/role` и bootstrap не меняются. ## Capabilities ### New Capabilities - `dsh-openspec`: как DSH-адаптер обвязки ставит и проверяет скиллы OpenSpec, чем отличается от Claude Code и что обязано работать без Claude Code. ### Modified Capabilities ## Impact - Claude Code не меняется: `.claude/skills/openspec-*` и `.claude/commands/opsx/*` остаются как есть; `roles/`, `hooks/`, `global/`, корневой `install.sh` не трогаются. - В репозитории появляется `.agents/skills/` (6 каталогов + `.openspec-target`). Дублирование с `.claude/skills/` — цена поддержки двух клиентов одним генератором; расхождение версий ловится `openspec update`. - `dsh/install.sh --openspec` получает право вызывать внешний CLI; в тестах он подменяется, в живом прогоне требуется установленный `openspec` ≥ 1.13. - Роль dev не меняется: строка про `openspec/changes//` уже есть; в DSH она начинает работать, потому что скиллы появились в проекте.