Интерактивный курс · OpenSpec

Договорись с ИИ о коде
до того, как он его напишет

OpenSpec — это лёгкий слой соглашений между тобой и твоим ИИ-ассистентом. Ты записываешь, что должно делать изменение, ИИ расписывает детали, вы смотрите на один и тот же план — и только потом пишется код. Вся идея в пяти словах: договорись сначала, потом строй уверенно.

← К разделу OpenSpec на сайте
01

Что вообще происходит

Представь знакомую ситуацию: ты говоришь ИИ «добавь тёмную тему», а получаешь непонятно что. OpenSpec лечит именно это.

Ты строишь софт, объясняя ИИ-инструментам, чего хочешь, на человеческом языке. Часто ты сам не смотрел в код — и это нормально. Проблема: ИИ догадывается, и догадка бывает не той.

OpenSpec переворачивает подход. Вместо «напиши код» ты сначала описываешь изменение словами: зачем, что меняем, как проверим. ИИ превращает это в структурированный план. Ты читаешь план, поправляешь — и только потом код пишется по плану, который вы оба видели.

COMMAND
# ты говоришь ассистенту:
/opsx:propose add-dark-mode
 
# ИИ создаёт в openspec/changes/add-dark-mode/
proposal.md   # зачем и что
specs/        # что меняется (delta)
design.md     # как технически
tasks.md      # чек-лист шагов
ПО-РУССКИ

Ты просишь не «сделай тёмную тему», а «оформи предложение добавить тёмную тему».

ИИ не лезет сразу в код. Он создаёт папку с планом из четырёх документов.

«Зачем и что» — одно предложение о намерении изменения, без кода.

«Что меняется» — кусочек спецификации, описывающий только разницу.

«Как технически» — архитектурное решение и файлы, которые тронем.

«Чек-лист шагов» — по нему ИИ будет строить и отмечать сделанное.

Почему это тебе поможет: ты получаешь словарный запас ПО. Зная точные термины, ты яснее описываешь требования ИИ и ловишь его ошибки до того, как они попадут в код.
02

Два чемодана: что правда и что предлагают

Весь OpenSpec живёт в двух папках. Одна — что работает прямо сейчас. Другая — что ты предлагаешь изменить.

Спеки (specs) — это источник правды. Они описывают, как система ведёт себя сейчас, разложены по доменам (auth/, payments/, ui/). Спеку можно проверить: «делает ли система то, что в ней написано?»

Изменение (change) — это предложенное изменение. Одна папка в openspec/changes/ = одна фича или фикс. В ней лежат все документы про эту работу в одном месте.

openspec/
  • specs/ — источник правды (как работает сейчас)
  • auth/spec.md
  • ui/spec.md
  • changes/ — предложенные изменения
  • add-dark-mode/ ← одна фича, одна папка
  • proposal.md
  • design.md
  • tasks.md

Разделение — ключевое. Можно вести несколько изменений параллельно без конфликтов. Можно пересмотреть изменение, пока оно не коснулось основных спек. А когда архивируешь — его дельта чисто сливается в источник правды.

03

Дельта-спеки: описываем разницу, не весь мир

Внутри изменения ты не переписываешь всю спеку. Ты пишешь крошечную дельту: ADDED это, MODIFIED то, REMOVED другое.

Это фокус, который делает OpenSpec удобным для доработки существующих систем, а не только для проектов с нуля. Ты описываешь diff, а не пункт назначения.

DELTA SPEC
## ADDED Requirements
### Requirement: Dark Mode Toggle
The system SHALL provide a UI toggle
that switches between light and dark themes.
 
## MODIFIED Requirements
### Requirement: Default Theme
The system SHALL default to the OS preference
instead of always light. (was: always light)
 
## REMOVED Requirements
### Requirement: Hardcoded Light BG
Removed: theme is now configurable.
ПО-РУССКИ

ADDED — новое поведение, которого раньше не было (переключатель тем).

MODIFIED — поведение, что уже было и меняется. Пишешь полную новую версию + пометку, что изменилось.

На архиве ADDED добавится в основную спеку, MODIFIED заменит старую версию.

REMOVED — поведение уходит. На архиве выкинется из спеку.

Ты описываешь только разницу, а не переписываешь всю систему заново.

Ты добавляешь в проект переключатель избранного, которого раньше не существовало. Какую секцию дельты использовать?

Поведение «система всегда светлая» нужно заменить на «следует за ОС». Какую секцию дельты выбрать?

04

Жизненный цикл: от идеи до архива

В типичной настройке твой день выглядит так: подумал → предложил → применил → заархивировал.

Команды начинаются с /opsx: и вводятся в чат с ассистентом (это не терминальные команды). По желанию сначала думаешь вслух с ИИ, потом одна команда черновикует план, ты его читаешь, следующая строит, последняя убирает в архив.

1
explore
2
propose
3
apply
4
archive
Нажми «Далее»

Какая команда завершает изменение — сливает дельту в спеку и прячет папку в archive/?

05

Как читать спеку: требование + сценарий

Спека — это поведение, не код. Она сделана из требований (что система ДОЛЖНА) и сценариев (конкретных примеров).

Требование пишут со словом SHALL (или MUST) — это жёстко, без вариантов. Хорошее требование — одно поведение, сформулированное так, что посторонний сможет проверить. Сценарий — это дано/когда/тогда, из которого можно собрать автотест.

SPEC
### Requirement: Session Timeout
The system SHALL expire a session after
30 minutes of inactivity.
 
#### Scenario: Idle timeout
- GIVEN an authenticated session
- WHEN 30 minutes pass with no activity
- THEN session invalidated, re-auth needed
ПО-РУССКИ

Требование названо понятно: «тайм-аут сессии».

SHALL = жёсткое правило. «После 30 минут бездействия сессия истекает».

Сценарий — конкретный случай, а не пересказ требования.

GIVEN — исходное состояние (залогинен).

WHEN — триггер (прошло 30 мин тишины).

THEN — результат (сессия сброшена, просят залогиниться снова).

Найди слабое место: какое требование хуже — и почему?

AThe system SHALL handle large uploads gracefully.
BThe system SHALL show an error banner when the upload exceeds 10 MB.
06

Словарик и как применить к своему проекту

Несколько терминов, чтобы дальше читать доки быстрее. А потом — как это запустить у себя.

Spec

Документ, как часть системы ведёт себя. В openspec/specs/, по доменам. Ответ на вопрос «что делает софт?»

Change

Одна единица работы = папка в openspec/changes/. Внутри: proposal, design, tasks, delta spec.

Delta spec

Спека внутри изменения: только ADDED / MODIFIED / REMOVED. Описывает разницу, не весь мир.

Artifact

Документ внутри изменения (proposal, delta spec, design, tasks). Создаются в порядке зависимости.

Archive

Завершение изменения: дельта сливается в specs, папка уходит в changes/archive/ДАТА-имя/.

OPSX

Стандартный воркфлоу OpenSpec. Команды со слэшем: /opsx:explore, propose, apply, archive.

Как начать: инициализируй OpenSpec в проекте (openspec init через CLI), скажи ассистенту «преврати это в предложение» — и используй /opsx:explore, когда идея туманна, а /opsx:propose, когда уже понятно.

Этот самый сайт (AI-Disrupt PDLC Coach) разрабатывался через OpenSpec: каждое добавление — публикация, модалка контактов, этот курс — прошло цикл propose → review → apply → archive.

07

Архив на практике: что реально происходит

Команда /opsx:archive — это «закрытие цикла». Разберём по шагам, что она делает с твоими файлами.

Пока изменение живёт в openspec/changes/<имя>/, его дельта — это только предложение. Спеки в openspec/specs/ ещё не знают о новом поведении. Когда ты архивируешь:

  • ADDED требования дописываются в конец соответствующей спецки в openspec/specs/<capability>/spec.md.
  • MODIFIED требования заменяют старую версию в спецке один-в-один.
  • REMOVED требования выкидываются — если это было последнее требование способности, папка спецки удаляется (способность «уходит на пенсию»).
  • Сама папка изменения переезжает в openspec/changes/archive/2026-08-19-<имя>/ — с датой, чтобы история была читаемой.

После архива openspec/specs/ описывает новую реальность, а ты готов к следующему изменению. Цикл замкнулся.

BEFORE ARCHIVE
# openspec/specs/ui/spec.md (источник правды)
### Requirement: Default Theme
The system SHALL always render light theme.
 
# openspec/changes/persist-theme/ (предложение)
## MODIFIED Requirements
### Requirement: Default Theme
The system SHALL follow OS preference.
ПОСЛЕ ARCHIVE

Папка changes/persist-theme/ уехала в archive/2026-08-19-persist-theme/.

В specs/ui/spec.md старая строка «always light» заменена на «follow OS preference».

Источник правды теперь отражает то, что реально работает.

Изменение с MODIFIED-требованием «Default Theme» архивировано. Что с этим требованием в openspec/specs/?

08

Пиши хорошие сценарии, а не «обработай аккуратно»

Самая частая ошибка спецификации — туманное требование. Хороший сценарий конкретен и проверяем посторонним.

Плохое требование: «Система должна аккуратно обрабатывать большие загрузки». Что значит «аккуратно»? Как проверить? Посторонний не поймёт, прошло ли оно.

Хорошее требование со словом SHALL + сценарий в GIVEN/WHEN/THEN, из которого можно собрать автотест:

BAD vs GOOD
# ПЛОХО
### Requirement: Large uploads
The system SHALL handle large uploads gracefully.
 
# ХОРОШО
### Requirement: Upload size limit
The system SHALL show an error banner
when an upload exceeds 10 MB.
 
#### Scenario: Oversized file rejected
GIVEN an authenticated user
WHEN they upload a 25 MB file
THEN an error banner appears, upload blocked
ПО-РУССКИ

«Gracefully» — не проверяемо. Замени на измеримое: лимит 10 МБ + баннер ошибки.

Сценарий назван конкретно («Oversized file rejected»), а не «Test 2».

GIVEN/WHEN/THEN можно прямо переложить в автотест.

Какое требование лучше — его легче всего проверить независимому ревьюеру?