Основные понятия
В этом руководстве объясняются основные идеи OpenSpec и их взаимосвязь. Практические сведения см. в разделах Начало работы и Рабочие процессы.
Философия
Заголовок раздела «Философия»В основе OpenSpec лежат четыре принципа:
гибкость, а не жёсткость — нет обязательных этапов, работайте над тем, что нужноитерации, а не каскадная модель — узнавайте новое в ходе работы и уточняйте решенияпростота, а не сложность — лёгкая настройка, минимум формальностейприоритет существующим системам — работает с готовыми кодовыми базами, а не только с новымиПочему эти принципы важны
Заголовок раздела «Почему эти принципы важны»Гибкость, а не жёсткость. Традиционные системы спецификаций привязывают вас к этапам: сначала планирование, затем реализация, после чего работа считается завершённой. OpenSpec гибче — артефакты можно создавать в любом порядке, подходящем для вашей задачи.
Итерации, а не каскадная модель. Требования меняются, понимание задачи углубляется. Подход, казавшийся удачным вначале, может не подойти после изучения кодовой базы. OpenSpec учитывает эту реальность.
Простота, а не сложность. Некоторые платформы для спецификаций требуют длительной настройки, жёстких форматов и тяжеловесных процессов. OpenSpec не мешает работе: инициализация занимает секунды, после неё можно сразу начинать, а настройка нужна только при необходимости.
Приоритет существующим системам. Большинство задач разработки — это не создание с нуля, а изменение работающих систем. Дельта-подход OpenSpec упрощает описание изменений существующего поведения, а не только новых систем.
Общая картина
Заголовок раздела «Общая картина»OpenSpec разделяет работу на две основные области:
┌────────────────────────────────────────────────────────────────────┐│ openspec/ ││ ││ ┌─────────────────────┐ ┌───────────────────────────────┐ ││ │ specs/ │ │ changes/ │ ││ │ │ │ │ ││ │ Источник истины │◄─────│ Предлагаемые изменения │ ││ │ Текущее поведение │ слияние│ Одно изменение = одна папка │ ││ │ вашей системы │ │ Артефакты и дельты │ ││ │ │ │ │ ││ └─────────────────────┘ └───────────────────────────────┘ ││ │└────────────────────────────────────────────────────────────────────┘Спецификации — источник истины; они описывают текущее поведение системы.
Изменения — предлагаемые модификации; они хранятся в отдельных папках до момента слияния.
Такое разделение принципиально важно. Можно параллельно работать над несколькими изменениями, не создавая конфликтов, и проверить изменение до того, как оно затронет основные спецификации. При архивации его дельты аккуратно объединяются с источником истины.
Спецификации
Заголовок раздела «Спецификации»Спецификации описывают поведение системы с помощью структурированных требований и сценариев.
Структура
Заголовок раздела «Структура»openspec/specs/├── auth/│ └── spec.md # Поведение аутентификации├── payments/│ └── spec.md # Обработка платежей├── notifications/│ └── spec.md # Система уведомлений└── ui/ └── spec.md # Поведение интерфейса и темыГруппируйте спецификации по областям — логическим частям системы. Распространённые варианты:
- По функциональной области:
auth/,payments/,search/ - По компоненту:
api/,frontend/,workers/ - По ограниченному контексту:
ordering/,fulfillment/,inventory/
Формат спецификации
Заголовок раздела «Формат спецификации»Спецификация содержит требования, а каждое требование — сценарии:
# Спецификация аутентификации
## PurposeАутентификация и управление сеансами приложения.
## Requirements
### Требование: аутентификация пользователяПосле успешного входа система SHALL выдавать токен JWT.
#### Сценарий: действительные учётные данные- GIVEN: пользователь вводит действительные учётные данные- WHEN: пользователь отправляет форму входа- THEN: возвращается токен JWT- AND: пользователь перенаправляется на панель управления
#### Сценарий: недействительные учётные данные- GIVEN: введены недействительные учётные данные- WHEN: пользователь отправляет форму входа- THEN: отображается сообщение об ошибке- AND: токен не выдаётся
### Требование: завершение сеансаСистема MUST завершать сеансы после 30 минут бездействия.
#### Сценарий: завершение неактивного сеанса- GIVEN: сеанс пользователя аутентифицирован- WHEN: проходит 30 минут бездействия- THEN: сеанс аннулируется- AND: пользователь должен пройти аутентификацию повторноОсновные элементы:
| Элемент | Назначение |
|---|---|
## Purpose |
Краткое описание области этой спецификации |
### Requirement: |
Конкретное поведение, обязательное для системы |
#### Scenario: |
Конкретный пример выполнения требования |
| SHALL/MUST/SHOULD | Ключевые слова RFC 2119, задающие обязательность требования |
Почему спецификации устроены именно так
Заголовок раздела «Почему спецификации устроены именно так»Требования описывают «что» — что должна делать система, без указания реализации.
Сценарии описывают «когда» — это конкретные, проверяемые примеры. Хорошие сценарии:
- можно проверить (для них можно написать автоматизированный тест);
- охватывают успешное выполнение и граничные случаи;
- используют формат Given/When/Then или похожую структуру.
Ключевые слова RFC 2119 (SHALL, MUST, SHOULD, MAY) передают степень обязательности:
- MUST/SHALL — безусловное требование;
- SHOULD — рекомендация, допускающая исключения;
- MAY — необязательное условие.
Чем является спецификация (и чем не является)
Заголовок раздела «Чем является спецификация (и чем не является)»Спецификация — это контракт поведения, а не план реализации.
Что следует включать в спецификацию:
- наблюдаемое поведение, от которого зависят пользователи и последующие системы;
- входные и выходные данные, а также условия ошибок;
- внешние ограничения (безопасность, конфиденциальность, надёжность, совместимость);
- сценарии, которые можно протестировать или явно проверить.
Чего следует избегать в спецификациях:
- названий внутренних классов и функций;
- выбора библиотек и фреймворков;
- пошаговых деталей реализации;
- подробных планов выполнения (они относятся к
design.mdилиtasks.md).
Быстрая проверка:
- если реализацию можно изменить, не меняя внешне наблюдаемого поведения, скорее всего, ей не место в спецификации.
Лёгкий подход: постепенное повышение строгости
Заголовок раздела «Лёгкий подход: постепенное повышение строгости»OpenSpec помогает избежать бюрократии. Используйте минимальный уровень строгости, который всё ещё позволяет проверить изменение.
Облегчённая спецификация (по умолчанию):
- краткие требования, ориентированные на поведение;
- ясная область работ и явно исключённые задачи;
- несколько конкретных критериев приёмки.
Полная спецификация (для более рискованных изменений):
- изменения между командами или репозиториями;
- изменения API/контрактов, миграции, вопросы безопасности и конфиденциальности;
- изменения, в которых неоднозначность может привести к дорогостоящей переработке.
Большинство изменений должны оставаться в облегчённом режиме.
Совместная работа человека и агента
Заголовок раздела «Совместная работа человека и агента»Во многих командах люди исследуют задачу, а агенты составляют черновики артефактов. Рекомендуемый цикл:
- Человек задаёт цель, контекст и ограничения.
- Агент преобразует их в требования и сценарии, ориентированные на поведение.
- Агент описывает детали реализации в
design.mdиtasks.md, а не вspec.md. - Перед реализацией проверка подтверждает корректность структуры и ясность.
Так спецификации остаются понятными людям и последовательными для агентов.
Изменения
Заголовок раздела «Изменения»Изменение — это предлагаемая модификация системы, оформленная в отдельную папку со всем необходимым для понимания и реализации.
Структура изменения
Заголовок раздела «Структура изменения»openspec/changes/add-dark-mode/├── proposal.md # Зачем и что├── design.md # Как (технический подход)├── tasks.md # Контрольный список реализации├── .openspec.yaml # Метаданные изменения (необязательно): schema, created, skip_specs, retire_capabilities└── specs/ # Дельта-спецификации └── ui/ └── spec.md # Что меняется в ui/spec.mdКаждое изменение самодостаточно. Оно включает:
- Артефакты — документы, описывающие цель, проектное решение и задачи;
- Дельта-спецификации — спецификации того, что добавляется, меняется или удаляется;
- Метаданные — необязательная конфигурация конкретного изменения.
Почему изменения оформляются в папки
Заголовок раздела «Почему изменения оформляются в папки»Оформление изменения в виде папки имеет несколько преимуществ:
-
Всё в одном месте. Предложение, проектное решение, задачи и спецификации собраны вместе. Не нужно искать их в разных каталогах.
-
Параллельная работа. Несколько изменений могут существовать одновременно и не конфликтовать. Работайте над
add-dark-mode, пока выполняетсяfix-auth-bug. -
Понятная история. При архивации изменения перемещаются в
changes/archive/со всем контекстом. Позже можно выяснить не только, что изменилось, но и почему. -
Удобство проверки. Папку изменения легко проверить: откройте её, прочитайте предложение, изучите проектное решение и дельты спецификаций.
Артефакты
Заголовок раздела «Артефакты»Артефакты — документы внутри изменения, направляющие работу.
Последовательность артефактов
Заголовок раздела «Последовательность артефактов»proposal ──────► specs ──────► design ──────► tasks ──────► implement │ │ │ │ зачем что как шаги + область меняется подход работыАртефакты создаются один на основе другого. Каждый предоставляет контекст для следующего.
Artifact Types
Заголовок раздела «Artifact Types»Предложение (proposal.md)
Заголовок раздела «Предложение (proposal.md)»В предложении в общих чертах описываются цель, область работ и подход.
# Предложение: добавить тёмную тему
## IntentПользователи попросили добавить тёмную тему, чтобы уменьшить нагрузкуна глаза при использовании приложения ночью и учитывать системные настройки.
## Область работВходит в область:- переключатель темы в настройках;- определение системных предпочтений;- сохранение предпочтения в localStorage.
Не входит в область:- пользовательские цветовые темы (будущая работа);- переопределение темы для отдельных страниц.
## ПодходИспользовать пользовательские свойства CSS для тем и контекст Reactдля управления состоянием. При первой загрузке определять системныепредпочтения и разрешать ручное переопределение.Когда следует обновить предложение:
- меняется область работ (сужается или расширяется);
- уточняется цель (проблема стала понятнее);
- существенно меняется подход.
Спецификации (дельта-спецификации в specs/)
Заголовок раздела «Спецификации (дельта-спецификации в specs/)»Дельта-спецификации описывают, что меняется по сравнению с текущими спецификациями. См. раздел Дельта-спецификации ниже.
Проектное решение (design.md)
Заголовок раздела «Проектное решение (design.md)»Проектное решение описывает технический подход и архитектурные решения.
# Проектное решение: добавить тёмную тему
## Технический подходСостояние темы управляется через React Context, чтобы избежать передачисвойств через промежуточные компоненты. Пользовательские свойства CSSпозволяют переключать тему во время выполнения без переключения классов.
## Архитектурные решения
### Решение: Context вместо ReduxДля состояния темы используется React Context, поскольку:- состояние простое и двоичное (светлая/тёмная тема);- сложных переходов между состояниями нет;- не нужно добавлять зависимость Redux.
### Решение: пользовательские свойства CSSИспользуются переменные CSS вместо CSS-in-JS, потому что:- они работают с существующими таблицами стилей;- не добавляют накладных расходов во время выполнения;- это встроенный в браузер механизм.
## Поток данных```ThemeProvider (контекст) │ ▼ThemeToggle ◄──► localStorage │ ▼Переменные CSS (применяются к :root)```
## Изменения файлов- `src/contexts/ThemeContext.tsx` (новый файл)- `src/components/ThemeToggle.tsx` (новый файл)- `src/styles/globals.css` (изменён)Когда следует обновить проектное решение:
- при реализации выяснилось, что подход не сработает;
- найдено более удачное решение;
- изменились зависимости или ограничения.
Задачи (tasks.md)
Заголовок раздела «Задачи (tasks.md)»Задачи — это контрольный список реализации с конкретными шагами и флажками.
# Задачи
## 1. Инфраструктура тем- [ ] 1.1 Создать ThemeContext с состояниями светлой и тёмной темы- [ ] 1.2 Добавить пользовательские свойства CSS для цветов- [ ] 1.3 Реализовать сохранение в localStorage- [ ] 1.4 Добавить определение системных предпочтений
## 2. Компоненты интерфейса- [ ] 2.1 Создать компонент ThemeToggle- [ ] 2.2 Добавить переключатель на страницу настроек- [ ] 2.3 Обновить Header, добавив быстрый переключатель
## 3. Стилизация- [ ] 3.1 Определить цветовую палитру тёмной темы- [ ] 3.2 Обновить компоненты для использования переменных CSS- [ ] 3.3 Проверить контрастность для обеспечения доступностиРекомендации по задачам:
- объединяйте связанные задачи в группы под заголовками;
- используйте иерархическую нумерацию (1.1, 1.2 и т. д.);
- делайте задачи достаточно небольшими, чтобы выполнить их за один сеанс;
- указывайте способ проверки каждой задачи (тест, команда или наблюдаемый результат);
- добавляйте тесты и документацию для каждой группы задач в саму эту группу, а не в заключительную группу «наверстать упущенное»;
- отмечайте задачи по мере выполнения.
Дельта-спецификации
Заголовок раздела «Дельта-спецификации»Дельта-спецификации — ключевое понятие, позволяющее использовать OpenSpec при доработке существующих систем. Они описывают, что меняется, а не повторяют спецификацию целиком.
# Дельта для аутентификации
## ADDED Requirements
### Требование: двухфакторная аутентификацияСистема MUST поддерживать двухфакторную аутентификацию на основе TOTP.
#### Сценарий: подключение двухфакторной аутентификации- GIVEN: пользователь ещё не включил двухфакторную аутентификацию- WHEN: пользователь включает её в настройках- THEN: отображается QR-код для настройки приложения-аутентификатора- AND: перед активацией пользователь должен подтвердить действие кодом
#### Сценарий: вход с двухфакторной аутентификацией- GIVEN: у пользователя включена двухфакторная аутентификация- WHEN: пользователь отправляет действительные учётные данные- THEN: отображается запрос одноразового пароля- AND: вход завершается только после ввода правильного одноразового пароля
## MODIFIED Requirements
### Требование: завершение сеансаСистема MUST завершать сеансы после 15 минут бездействия.(Ранее: 30 минут.)
#### Сценарий: завершение неактивного сеанса- GIVEN: сеанс пользователя аутентифицирован- WHEN: проходит 15 минут бездействия- THEN: сеанс аннулируется
## REMOVED Requirements
### Требование: запоминание входа(Устарело и заменено двухфакторной аутентификацией. Пользователи должны проходить аутентификацию при каждом сеансе.)Разделы дельты
Заголовок раздела «Разделы дельты»| Раздел | Значение | Действие при архивации |
|---|---|---|
## ADDED Requirements |
Новое поведение | Добавляется в основную спецификацию |
## MODIFIED Requirements |
Изменённое поведение | Заменяет существующее требование |
## REMOVED Requirements |
Устаревшее поведение | Удаляется из основной спецификации; удаление последнего требования выводит возможность из эксплуатации и удаляет её файл спецификации, если изменение объявляет retire_capabilities: true |
## Purpose |
Назначение новой возможности | Используется как Purpose создаваемой основной спецификации; игнорируется, если спецификация уже существует |
Почему используются дельты, а не полные спецификации
Заголовок раздела «Почему используются дельты, а не полные спецификации»Ясность. Дельта точно показывает, что меняется. Читая полную спецификацию, вам пришлось бы самостоятельно сравнивать её с текущей версией.
Предотвращение конфликтов. Два изменения могут затрагивать один файл спецификации, не конфликтуя, если меняют разные требования.
Эффективность проверки. Проверяющие видят изменение, а не неизменившийся контекст, и могут сосредоточиться на важном.
Подходит для существующих систем. Большинство задач меняют уже существующее поведение. Дельты позволяют считать такие изменения основным сценарием, а не исключением.
Схемы определяют типы артефактов и их зависимости в рабочем процессе.
Как работают схемы
Заголовок раздела «Как работают схемы»name: spec-drivenartifacts: - id: proposal generates: proposal.md requires: [] # Нет зависимостей, создаётся первым
- id: specs generates: specs/**/*.md requires: [proposal] # Перед созданием требуется proposal
- id: design generates: design.md requires: [proposal] # Можно создать параллельно со specs
- id: tasks generates: tasks.md requires: [specs, design] # Сначала нужны и specs, и designАртефакты образуют граф зависимостей:
proposal (корневой узел) │ ┌─────────────┴─────────────┐ │ │ ▼ ▼ specs design (требуется: (требуется: proposal) proposal) │ │ └─────────────┬─────────────┘ │ ▼ tasks (требуется: specs, design)Зависимости — опоры, а не обязательные этапы. Они показывают, что можно создать, а не что обязательно создавать следующим. Если проектное решение не требуется, этап design можно пропустить. Спецификации можно создать до или после design — и те и другие зависят только от proposal.
Встроенные схемы
Заголовок раздела «Встроенные схемы»spec-driven (по умолчанию)
Стандартный рабочий процесс разработки на основе спецификаций:
proposal → specs → design → tasks → implementЛучше всего подходит для: большинства функциональных изменений, в которых нужно согласовать спецификации до реализации.
Пользовательские схемы
Заголовок раздела «Пользовательские схемы»Создавайте пользовательские схемы для рабочего процесса своей команды:
# Создать с нуляopenspec schema init research-first
# Или скопировать существующуюopenspec schema fork spec-driven research-firstПример пользовательской схемы:
name: research-firstartifacts: - id: research generates: research.md requires: [] # Сначала исследование
- id: proposal generates: proposal.md requires: [research] # Предложение учитывает результаты исследования
- id: tasks generates: tasks.md requires: [proposal] # Пропустить specs/design и сразу перейти к задачамПодробные сведения о создании и использовании пользовательских схем см. в разделе Настройка.
Архивация
Заголовок раздела «Архивация»Архивация завершает изменение: его дельта-спецификации объединяются с основными, а само изменение сохраняется в истории.
Что происходит при архивации
Заголовок раздела «Что происходит при архивации»До архивации:
openspec/├── specs/│ └── auth/│ └── spec.md ◄────────────────┐└── changes/ │ └── add-2fa/ │ ├── proposal.md │ ├── design.md │ объединение ├── tasks.md │ └── specs/ │ └── auth/ │ └── spec.md ─────────┘
После архивации:
openspec/├── specs/│ └── auth/│ └── spec.md # Теперь включает требования для двухфакторной аутентификации└── changes/ └── archive/ └── 2025-01-24-add-2fa/ # Сохранено в истории ├── proposal.md ├── design.md ├── tasks.md └── specs/ └── auth/ └── spec.mdПроцесс архивации
Заголовок раздела «Процесс архивации»-
Объединение дельт. Каждый раздел дельта-спецификации (ADDED/MODIFIED/REMOVED) применяется к соответствующей основной спецификации.
-
Перемещение в архив. Папка изменения переносится в
changes/archive/с префиксом даты для хронологической сортировки. -
Сохранение контекста. Все артефакты сохраняются в архиве без изменений. В любой момент можно узнать, почему было сделано изменение.
Почему архивация важна
Заголовок раздела «Почему архивация важна»Чистое состояние. В списке активных изменений (changes/) отображается только незавершённая работа. Завершённые изменения перемещаются в архив.
Журнал изменений. В архиве сохраняется полный контекст каждого изменения: не только что изменилось, но и предложение с объяснением «зачем», проектное решение с объяснением «как» и задачи, отражающие выполненную работу.
Развитие спецификаций. Спецификации естественным образом расширяются по мере архивации изменений. Каждая архивация объединяет дельты, постепенно создавая полную спецификацию.
Как всё взаимосвязано
Заголовок раздела «Как всё взаимосвязано»┌──────────────────────────────────────────────────────────────────────────────┐│ РАБОЧИЙ ПРОЦЕСС OPENSPEC ││ ││ ┌────────────────┐ ││ │ 1. НАЧНИТЕ │ /opsx:propose (core) или /opsx:new (expanded) ││ │ ИЗМЕНЕНИЕ │ ││ └───────┬────────┘ ││ │ ││ ▼ ││ ┌────────────────┐ ││ │ 2. СОЗДАЙТЕ │ /opsx:ff или /opsx:continue (расширенный процесс) ││ │ АРТЕФАКТЫ │ Создаёт proposal → specs → design → tasks ││ │ │ (с учётом зависимостей схемы) ││ └───────┬────────┘ ││ │ ││ ▼ ││ ┌────────────────┐ ││ │ 3. ВЫПОЛНИТЕ │ /opsx:apply ││ │ ЗАДАЧИ │ Выполняйте задачи и отмечайте их ││ │ │◄──── Уточняйте артефакты по мере работы ││ └───────┬────────┘ ││ │ ││ ▼ ││ ┌────────────────┐ ││ │ 4. ПРОВЕРЬТЕ │ /opsx:verify (необязательно) ││ │ РЕЗУЛЬТАТ │ Проверьте соответствие реализации спецификациям ││ └───────┬────────┘ ││ │ ││ ▼ ││ ┌────────────────┐ ┌──────────────────────────────────────────────┐ ││ │ 5. АРХИВИРУЙТЕ│────►│ Дельты объединяются с основными спецификациями│ ││ │ ИЗМЕНЕНИЕ │ │ Папка изменения перемещается в archive/ │ ││ └────────────────┘ │ Спецификации обновляются │ ││ └──────────────────────────────────────────────┘ ││ │└──────────────────────────────────────────────────────────────────────────────┘Полезный цикл:
- Спецификации описывают текущее поведение.
- Изменения предлагают модификации в виде дельт.
- Реализация воплощает изменения.
- Архивация объединяет дельты со спецификациями.
- Спецификации теперь описывают новое поведение.
- Следующее изменение опирается на обновлённые спецификации.
Глоссарий
Заголовок раздела «Глоссарий»| Термин | Определение |
|---|---|
| Артефакт | Документ внутри изменения (предложение, проектное решение, задачи или дельта-спецификации) |
| Архивация | Завершение изменения и объединение его дельт с основными спецификациями |
| Изменение | Предлагаемая модификация системы, оформленная в папку с артефактами |
| Дельта-спецификация | Спецификация изменений (ADDED/MODIFIED/REMOVED) относительно текущих спецификаций |
| Область | Логическая группа спецификаций (например, auth/, payments/) |
| Требование | Конкретное поведение, которое должна обеспечивать система |
| Сценарий | Конкретный пример выполнения требования, обычно в формате Given/When/Then |
| Схема | Определение типов артефактов и их зависимостей |
| Спецификация | Описание поведения системы, содержащее требования и сценарии |
| Источник истины | Каталог openspec/specs/, содержащий актуальное согласованное описание поведения |
Следующие шаги
Заголовок раздела «Следующие шаги»- Начало работы — первые практические шаги
- Рабочие процессы — распространённые шаблоны и их применение
- Команды — полный справочник команд
- Настройка — создание пользовательских схем и конфигурация проекта
HagiCode
HagiCode — агентная среда разработки со структурированными процессами, параллельным выполнением несколькими агентами и интерфейсами Hero Dungeon.
Превращайте идеи в полезное ПО с более умным, быстрым и увлекательным агентным рабочим процессом.

- SmartСтруктурированные процессы превращают намерение в исполнимый путь от идеи до готового изменения.
- EfficientМультиагентные процессы параллельно продвигают исследование, реализацию и проверку.
- FunHero Dungeon делает длительную совместную разработку наглядной и увлекательной.
Сайты экосистемы
Быстрые ссылки
Сообщество
© 2026 HagiCode