Зачем спека, если есть промпт
Почему ad-hoc промпты разваливаются на втором-третьем запросе: агент достраивает пробелы своими догадками, а у Cursor и Claude Code нет общего источника правды. Что такое spec-first и цикл Constitution → Specify → Plan → Tasks → Implement. Заводим репозиторий pet-проекта, папку /specs и первый CLAUDE.md (или rules в Cursor) как постоянный контекст.
Зачем спека, если есть промпт
Открываете новый чат в Claude Code, пишете развёрнутый промпт — и агент генерирует отличный стартер. Закрываете сессию. На следующий день открываете новую и просите добавить авторизацию. Агент уверенно предлагает хранить сессии в Redis — хотя вчера вы обсуждали JWT и договорились обойтись без сессий. Через два запроса он пишет fetchUser() рядом с уже существующей getUserById().
Это не глюк — это предсказуемое следствие одного факта: промпт исчезает вместе с сессией.
Почему агент достраивает пробелы
У Cursor и Claude Code нет долгосрочной памяти о проекте между сессиями. При старте каждого нового чата агент видит только то, что лежит у него в контексте прямо сейчас. Нет ничего — значит, пробелы заполняются лучшими догадками.
Три симптома, которые появляются уже на третьем-четвёртом запросе:
- Дрейф решений — агент забывает про договорённости по стеку и предлагает альтернативы «потому что так проще».
- Дубли с вариацией — похожая функция пишется заново под другим именем, потому что агент не знает, что такая уже есть.
- Молчаливые допущения — вы не описали edge-case, агент придумал что-то сам, и это «что-то» меняется от сессии к сессии.
Промпт — отличный инструмент для одного шага. На проект целиком он не масштабируется.
Spec-first: один источник правды
Идея SDD простая: решения фиксируются в текстовых файлах в репозитории до того, как агент начинает писать код. Эти файлы становятся общим источником правды — для вас, для продакта или аналитика и для агента.
Когда агент стартует новую задачу, вы кладёте ему в контекст не только промпт, но и спеку. Теперь у него есть «память» — не в голове, а в файловой системе проекта.
Вместо того чтобы каждый раз объяснять контекст заново, вы поддерживаете один актуальный документ. Правки в тексте — дёшево. Правки в готовом коде — дорого.
Цикл SDD: от конституции до кода
В SDD пять этапов, которые идут по кругу:
flowchart TD
C["Constitution<br/>CLAUDE.md / .cursor/rules"] --> S["Specify<br/>спека в /specs/"]
S --> P["Plan<br/>план реализации"]
P --> T["Tasks<br/>tasks.md"]
T --> I["Implement<br/>агент пишет код"]
I --> A{"Приёмка<br/>по спеке"}
A -->|"принято"| D["Done"]
A -->|"дрейф / новое"| S
style C fill:#4a4f8a,color:#fff
style D fill:#2d6a4f,color:#fff- Constitution («конституция») — файл
CLAUDE.md(для Claude Code) или.cursor/rules/project.mdc(для Cursor). Описывает стек, соглашения по коду и неизменные принципы проекта. Агент читает его при каждом запуске автоматически. - Specify — спека конкретной фичи: что должна делать, каковы граничные случаи, что считается «готово». Живёт в
/specs/feature-name.md. - Plan — агент превращает спеку в план реализации. Вы проверяете и корректируете.
- Tasks — план разбивается на плоский список в
tasks.md. Каждую задачу можно выполнить и проверить отдельно. - Implement — агент реализует задачи одну за другой, держась в рамках спеки.
В следующих подмодулях мы разберём каждый этап детально. Сейчас главное — понять структуру цикла и сразу завести нужные файлы.
Промпт или спека? Проверьте интуицию
Заводим структуру прямо сейчас
Минимальная структура pet-проекта на старте:
my-project/
├── CLAUDE.md # конституция (Claude Code читает автоматически)
├── specs/
│ └── README.md # «здесь живут спеки фич»
└── tasks.md # появится позже, на этапе декомпозицииПервый CLAUDE.md — не роман. Достаточно трёх блоков:
# [Название проекта]
## Что это
[Одна строка: что делает проект и для кого]
## Стек
- [Язык / фреймворк]
- [База данных и ORM]
- [Что явно НЕ используем]
## Соглашения
- [Именование файлов и папок]
- [Паттерны, которым следуем]Для Cursor — создайте .cursor/rules/project.mdc с тем же содержимым плюс frontmatter:
---
alwaysApply: true
---alwaysApply: true означает, что правило применяется ко всем файлам проекта. Claude Code читает CLAUDE.md из корня при каждом запуске — никаких дополнительных настроек не нужно.
Три шага прямо сейчас
1. Создайте репозиторий для pet-проекта.
2. Создайте CLAUDE.md в корне — заполните три блока: «Что это», «Стек», «Соглашения». Не думайте над ним дольше 10 минут: это живой документ, он будет обновляться.
3. Создайте specs/README.md с одной строкой: «Здесь живут спеки фич».
В следующем подмодуле — анатомия рабочей спеки: что обязательно, что лишнее, и почему «требования» и «дизайн» лучше держать в разных секциях.
Самопроверка
- Почему агент предлагает Redis для хранения сессий, хотя в предыдущей сессии вы обсудили JWT и договорились об этом подходе?
- Какова основная цель хранения CLAUDE.md в репозитории проекта?
- Статья выделяет три симптома проблемы с промптами: дрейф решений, дубли с вариацией и молчаливые допущения. Что их объединяет?
- Согласно циклу SDD, если спека говорит «использовать JWT для авторизации», а план агента предлагает «хранить сессии в Redis», что нужно сделать?
- Чем структура с CLAUDE.md, /specs/ и tasks.md принципиально отличается от подхода, когда вы просто пишете развёрнутый промпт агенту?
- Почему CLAUDE.md читается агентом автоматически, а файлы из /specs/ надо вручную добавлять в контекст для каждой задачи?
- Какой вывод поддерживает статья фразой «Правки в тексте — дёшево. Правки в готовом коде — дорого»?
- На каком этапе цикла SDD агент превращает спеку конкретной фичи в план её реализации?
Домашние задания
Инициализируй pet-проект с SDDarchive
Создай CLAUDE.md в корне своего pet-проекта — это файл, который будет напоминать агенту твои решения при каждой новой сессии. Напиши три раздела: что делает проект в одну строку, какой стек и что явно не используешь, два-три соглашения по коду. Создай папку /specs с README.md, где одна строка про назначение папки. Архивируй всё и загрузи.
CLAUDE.md в корне с тремя разделами: описание проекта (одна строка), стек (минимум две технологии + что не используется), соглашения (минимум два конкретных правила). /specs/README.md существует и описывает назначение папки. Архив распаковывается без ошибок.
Напиши спеку для фичиdocument
Выбери простую фичу для своего проекта. Спека — это требования и граничные случаи, без деталей про реализацию. Напиши её в /specs/feature-name.md (используй реальное имя фичи): что делает, как используют (примеры), какие граничные случаи, когда готова. Агент должен понять задачу с первого чтения.
Спека в /specs/feature-name.md содержит: описание фичи (одно-два предложения без реализации), минимум три примера использования, минимум два граничных случая, criteria готовности (acceptance criteria). Нет деталей реализации или архитектуры.
Сдача и проверка заданий — в приложении Learn (Almost) Anything.
