Интеграция OpenSpec и Beads в Cursor для структурированной разработки с ИИ | AiManual
AiManual Logo Ai / Manual.
07 Янв 2026 Гайд

OpenSpec + Beads + Cursor: как заставить ИИ помнить проект дольше пяти минут

Пошаговое руководство по интеграции OpenSpec и Beads в Cursor IDE. Решаем проблему потери контекста ИИ-ассистентами при долгой разработке.

Проблема: ИИ с памятью золотой рыбки

Вы открываете Cursor, начинаете новый проект. Первые промпты работают отлично. ИИ понимает архитектуру, пишет осмысленный код. Проходит час. Два. Вы возвращаетесь к задаче после перерыва. И спрашиваете: "А как там наша авторизация через OAuth2?".

Ответ: "Можете описать требования к авторизации?".

ИИ забыл. Снова. Он живет в вечном настоящем, где последние 20 строк кода — вся его вселенная. Это не его вина. Это ограничение контекстного окна. Но вы платите за эту амнезию временем и нервами.

Классическая ошибка: пытаться "напомнить" ИИ весь проект через промпт. Вы тратите 500 токенов на историю, которая забудется через следующие 500.

Решение: Spec-Driven Development с долгосрочной памятью

Вместо того чтобы пересказывать проект каждый раз, мы даем ИИ структуру. Два инструмента меняют правила игры:

  • OpenSpec — формализованные спецификации в YAML. Не просто "сделай авторизацию", а точное описание эндпоинтов, моделей, зависимостей. Как в статье про OpenSpec и амнезию ИИ, но с практической интеграцией.
  • Beads — граф задач. Каждая бусина (bead) это атомарная задача со статусом, зависимостями, контекстом. ИИ видит не только текущую задачу, но и всю цепочку.
  • Cursor — среда, где это все собирается. Не просто редактор с чатом, а управляемый процесс разработки.

Вместе они создают систему, где ИИ работает не как случайный генератор кода, а как младший коллега с доступом к документации проекта. Как в метафоре из ИИ как младший коллега, но с конкретной реализацией.

Настройка: от хаоса к структуре

1 Устанавливаем Beads и создаем граф

Beads работает через CLI. Ставим:

npm install -g @beads/cli
# или через yarn
# yarn global add @beads/cli

Инициализируем проект:

beads init my-project
cd my-project

В папке появится файл beads.yml. Это корень вашего графа задач. Не путайте с OpenSpec — здесь мы описываем не код, а процесс.

💡
Совет из практики: создавайте бусины не по фичам, а по изменениям в коде. "Добавить endpoint POST /api/auth" лучше чем "Сделать авторизацию". ИИ работает с конкретикой.

2 Пишем OpenSpec спецификации

Рядом с beads.yml создаем папку specs/. В ней будут жить YAML файлы с описанием компонентов системы.

Пример specs/auth.yaml:

openapi: 3.0.0
info:
  title: Authentication API
  version: 1.0.0
  description: JWT-based authentication with refresh tokens

paths:
  /api/auth/login:
    post:
      summary: User login
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  format: email
                password:
                  type: string
                  minLength: 8
      responses:
        '200':
          description: Successful login
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                  refresh_token:
                    type: string
                  expires_in:
                    type: integer
                    example: 3600

  /api/auth/refresh:
    post:
      summary: Refresh access token
      # ... остальная спецификация

Это не просто документация. Это контракт, который ИИ будет использовать для генерации кода. Подход похож на Spec-Driven Development из GitHub Spec Kit, но без привязки к конкретному инструменту.

3 Связываем Beads с OpenSpec

В beads.yml добавляем ссылки на спецификации:

beads:
  - id: auth-implementation
    title: Implement authentication endpoints
    status: todo
    spec_file: specs/auth.yaml  # Вот эта связь
    depends_on: []
    context: |
      Проект использует Express.js, MongoDB.
      Уже есть модель User в models/user.js
      Нужно реализовать endpoints из спецификации.
      Использовать библиотеку jsonwebtoken для JWT.
      
  - id: user-profile
    title: Add user profile endpoints
    status: backlog
    spec_file: specs/user.yaml
    depends_on: [auth-implementation]  # Зависимость от предыдущей задачи
    context: |
      После авторизации добавить CRUD для профиля.
      Только для аутентифицированных пользователей.

Теперь каждая бусина знает, какую спецификацию реализовывать. И видит зависимости.

Не делайте контекст слишком общим. "Реализовать логин" плохо. "Реализовать POST /api/auth/login по спецификации specs/auth.yaml с JWT и refresh token" хорошо.

4 Интеграция с Cursor: настройка промптов

Открываем Cursor. Создаем файл .cursor/rules/dev_with_spec.md. Это наши правила для ИИ.

# Правила разработки со спецификациями

## Контекст проекта
- Используй Beads граф задач из beads.yml
- Все спецификации в папке specs/
- Перед генерацией кода проверяй текущую бусину

## Работа с текущей задачей
1. Прочитай beads.yml
2. Найди бусину со статусом 'in_progress'
3. Если есть spec_file - открой и прочитай спецификацию
4. Учти depends_on - какие задачи уже выполнены
5. Генерируй код строго по спецификации

## Формат ответов
- Сначала краткое резюме по спецификации
- Потом код
- В конце проверь зависимости от других бусин

Теперь в чате Cursor пишем не "сделай авторизацию", а:

@dev_with_spec
Начни работу над бусиной auth-implementation. Сгенерируй код для POST /api/auth/login согласно specs/auth.yaml

ИИ откроет beads.yml, найдет нужную бусину, прочитает спецификацию, учтет зависимости. И выдаст код, который соответствует именно вашему проекту.

Рабочий процесс: день из жизни разработчика со структурой

Утро. Вы открываете проект. Вместо того чтобы вспоминать, на чем остановились, делаете:

beads status

Терминал показывает:

✅ auth-implementation (done)
🔵 user-profile (in_progress) - зависит от: auth-implementation
⏳ notifications (todo)

Отлично. Работаем над user-profile. В Cursor:

@dev_with_spec
Покажи контекст для user-profile и сгенерируй GET /api/user/profile

ИИ видит, что задача зависит от auth-implementation (которая уже сделана), открывает specs/user.yaml, читает спецификацию. И генерирует код, который уже знает про авторизацию, потому что она реализована в предыдущей бусине.

Через два часа перерыв. Возвращаетесь. Снова beads status. ИИ в Cursor все помнит, потому что контекст зафиксирован в beads.yml и спецификациях. Не нужно пересказывать.

💡
Этот подход убивает "неосознанный вайб-кодинг" из статьи про слепую веру в ИИ. Вместо туманных промптов вы даете точные инструкции со структурой.

Ошибки, которые сломают систему

Ошибка Почему ломается Как исправить
Слишком общие спецификации ИИ будет интерпретировать по-своему. Получите код, который технически соответствует spec, но не тому, что вы хотели. Детализируйте. Не "email: string", а "email: string, format: email, required: true".
Бусины-монстры Одна бусина "Сделать весь бэкенд". ИИ перегрузит контекстное окно, потеряет фокус. Дробите. Одна бусина = один endpoint или одна модель.
Игнорирование depends_on Начнете делать user-profile до auth-implementation. ИИ сгенерирует код, который не будет работать с несуществующей авторизацией. Всегда проверяйте beads status перед началом. Настраивайте CI, который проверяет зависимости.
Ручное обновление статусов Забыли обновить beads.yml. Граф устарел, ИИ работает с неактуальной информацией. Автоматизируйте. Скрипт, который меняет статус при коммите. Или привыкайте к дисциплине.

Продвинутые трюки: когда базового недостаточно

Динамический контекст в Cursor

Создайте скрипт, который перед запуском Cursor генерирует контекстный файл:

#!/usr/bin/env python3
# generate_context.py

import yaml
import sys

with open('beads.yml', 'r') as f:
    beads = yaml.safe_load(f)

current_bead = None
for bead in beads['beads']:
    if bead.get('status') == 'in_progress':
        current_bead = bead
        break

if current_bead:
    context = f"""
    Текущая задача: {current_bead['title']}
    ID: {current_bead['id']}
    
    Контекст задачи:
    {current_bead.get('context', 'Нет контекста')}
    
    Зависимости: {', '.join(current_bead.get('depends_on', []))}
    """
    
    with open('.cursor/current_context.md', 'w') as f:
        f.write(context)

Добавьте в правила Cursor:

Перед ответом прочитай текущий контекст из .cursor/current_context.md

Теперь ИИ всегда знает, над чем вы работаете. Без напоминаний.

Интеграция с Git

Хуки Git, которые обновляют статусы бусин:

#!/bin/bash
# .git/hooks/post-commit

BEAD_ID="auth-implementation"

# Если в коммите есть изменения в auth/...
if git diff-tree --no-commit-id --name-only -r HEAD | grep -q "^src/auth/" ; then
    beads update $BEAD_ID --status done
fi

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

Мультимодельный подход

Не зацикливайтесь на одной модели. Используйте разные ИИ для разных задач:

  • Claude для анализа сложных спецификаций
  • GPT-4 для генерации кода
  • Gemini для рефакторинга (он хорош в этом, как в советах по Gemini 3)

Настройте в Cursor разные правила для разных моделей. Или используйте GigaChat через n8n для специфических задач.

Что делать, когда все равно ломается

Система не идеальна. ИИ все равно будет иногда "забывать" или misinterpret'ить спецификации. План Б:

  1. Логируйте промпты и ответы. Cursor сохраняет историю чатов. Когда ИИ ошибся, посмотрите, что вы ему отправили. Может, проблема в формулировке?
  2. Регулярно ревьюьте beads.yml. Раз в день прогоняйте beads validate. Убедитесь, что граф не содержит противоречий.
  3. Создайте "скорую помощь" — отдельный промпт в Cursor для исправления ошибок. "ИИ ошибся в реализации, вот что нужно исправить: ...".
  4. Не бойтесь ручного контроля. Система должна помогать, а не заменять ваше мышление. Как в промптах для эффективного ИИ — вы остаетесь архитектором.

И последнее: эта система не для всех проектов. Для прототипа на выходные она overkill. Для шестимесячного проекта с командой — спасение.

Начните с одного модуля. Авторизации. Настройте beads.yml, specs/auth.yaml, простые правила в Cursor. Посмотрите, как изменится workflow. Потом масштабируйте.

И да, первые два дня вы потратите на настройку. На третий день поймете, что больше не тратите время на "напомни мне про...". Это окупается.