Composer у Cursor може написати багато UI-коду. Але він не може читати ваш файл Figma. Вставте скріншот — він здогадується: неправильні відступи, вигадані значення кольорів, назви компонентів, яких немає у вашій кодовій базі. Проблема не в моделі. В ній немає структурованого контексту.

figmascope вирішує це. Він експортує ваш файл Figma як zip-бандл: дизайн-токени, дерева макетів по кожному екрану, рендери 2×, інвентар компонентів та UI-рядки — все, що потрібно агенту Cursor для генерації точного коду, а не правдоподібно виглядаючого коду.

Цей покроковий огляд охоплює повний пайплайн: URL Figma → контекстний бандл → промпт Cursor → перевірений вивід.

Що в бандлі

Коли figmascope експортує ваш файл, zip містить:

Бандл залишається на вашому комп'ютері. Він ніколи нікуди не завантажується повторно.

Крок 1: Генерація бандлу

Перейдіть на figmascope і вставте URL вашого файлу Figma у поле введення. Експортер працює у вашому браузері через Figma REST API — вам знадобиться особистий токен доступу вперше (зберігається в localStorage, ніколи не надсилається на сервери figmascope).

Натисніть Export Agent Context. Сторінка обробляє кожен фрейм, розв'язує токени, будує IR, потім завантажує context-bundle.zip на ваш комп'ютер.

Якщо у вашому файлі багато фреймів, включаються лише фрейми верхнього рівня, що не є компонентами або мініатюрами. _meta.json показує точно, які фрейми були експортовані та будь-які попередження.

Крок 2: Розпакування у ваш проєкт

Помістіть бандл туди, де Cursor може його бачити — директорія design/ в корені репо є найчистішим патерном.

# з кореня вашого проєкту
unzip ~/Downloads/context-bundle.zip -d ./design/

# перевірте структуру
ls design/
# CONTEXT.md  _meta.json  components/  screens/  strings.json  tokens.json

Додайте design/ до .gitignore, якщо не хочете комітити бандл. Або закомітьте — він детермінований; той самий файл Figma у тому самому стані завжди виробляє той самий бандл, тому дифи значущі.

Крок 3: Додавання сніпету .cursorrules

Cursor читає .cursorrules в корені репо і додає його до кожного контексту чату. Тут ви прив'язуєте агента до бандлу.

# .cursorrules

When building UI screens:
1. Read ./design/CONTEXT.md first. It specifies the target framework and constraints.
2. Use tokens from ./design/tokens.json for all spacing, color, radius, and typography values.
3. Reference ./design/screens/<name>.json for layout structure and node hierarchy.
4. Match ./design/screens/<name>.png for visual confirmation — use it as a sanity check, not the source of truth.
5. Use string keys from ./design/strings.json rather than hardcoding UI copy.
6. Do not invent token values. If a value isn't in tokens.json, flag it.

Цей єдиний блок запобігає трьом найпоширенішим джерелам зміщення: вигаданим кольорам, захардкодженим рядкам та здогадуванню про макет зі скріншота.

Крок 4: Відкриття Cursor Composer та реалізація екрана

Відкрийте Composer (Cmd+I на macOS). Закріпіть файли перед промптом: натисніть іконку скріпки та додайте design/CONTEXT.md, design/tokens.json та design/screens/home.json. Потім напишіть промпт:

Implement the home screen from ./design/screens/home.json.

Constraints:
- Target framework and component conventions are in ./design/CONTEXT.md
- All spacing, color, and radius values must come from ./design/tokens.json
- UI strings must use keys from ./design/strings.json
- The root node is a stack (vertical). Children are declared in order in the JSON.
- Do not invent any values not present in the token or IR files.

Cursor прочитає закріплені файли, відобразить вузли IR на примітиви вашого фреймворку та згенерує реалізацію. Вивід посилається на токени — якщо ви перевірите згенерований код, кожне значення відступу має відстежуватися до ключа в tokens.json.

Крок 5: Перегляд та ітерація

Відкрийте design/screens/home.png поряд з відрендереним виводом. PNG — це експорт 2× з Figma; він показує точно, як має виглядати дизайн. Відмінності значущі: вони вказують або на прогалини в маппінгу IR, або на незастосовані значення токенів.

Поширені проблеми та подальші промпти:

Зміщення токенів — агент використав захардкоджений hex замість токена:

Compare every color value in the generated component against ./design/tokens.json.
List any colors that don't match a token key. Replace them with the correct token reference.

Відсутній компонент — IR посилається на ID компонента, який агент не вирішив:

The IR references componentId "btn-primary-01". Check ./design/components/inventory.json
for its name and type, then implement a placeholder with that name and the correct token values.

Невірний макет — відступи або вирівнювання не відповідають PNG:

The vertical gap between the header and the card list should be spacing.24 from tokens.json (24dp).
Your output uses 16px. Fix it.

Що працює, що ні

Працює добре: плоскі екрани з макетами стеків, відступи та кольори на основі токенів, текст з посиланнями на рядки, прості патерни карток та списків. Cursor добре справляється з цим, як тільки IR у контексті — він припиняє здогадуватися та починає маппінг.

Працює гірше: складні абсолютно позиційовані overlay (Cursor іноді неправильно читає координати зміщення), градієнтні заливки (позначені як попередження в _meta.json — Cursor апроксимуватиме), векторні іконки (IR зберігає лише референсний ID, а не дані шляху).

Лише скріншот проти бандлу: використання лише скріншота швидше на початку, але недетерміновано. Кожна сесія починається знову. Модель може точно вгадати відступи один раз і промахнутися в наступному ході. Бандл придатний для посилань протягом усієї сесії — Cursor може перевіряти власний вивід відносно файлу токенів у будь-який момент без повторного завантаження чогось.

Підказка: перевіряйте попередження _meta.json перед промптом

Перед першим промптом реалізації прочитайте design/_meta.json. Масив warnings перераховує все, що експортер не міг повністю обробити. Додайте нотатку про них до вашого промпту, щоб агент не намагався реалізувати їх і не повертався мовчки до захардкоджених значень.

cat design/_meta.json | python3 -m json.tool | grep -A 20 '"warnings"'

Якщо вивід показує "gradientFill: not fully supported" для конкретного вузла, скажіть Cursor пропустити фон цього вузла і залишити натомість коментар // TODO: gradient.

Підсумок

Підхід такий: експортуйте один раз, посилайтеся скрізь. Бандл — це стабільна, машиночитана специфікація, на яку Cursor може спиратися через кілька ходів без повторної обробки дизайну. Ви отримуєте точний за токенами, з посиланнями на рядки, коректний за макетом код замість наближення зі скріншота — і коли щось зміщується, ви можете в одному рядку вказати агента назад до джерела правди.

Спробуйте самостійно на figmascope.dev — вставте URL Figma, натисніть Export Agent Context, і розпакуйте бандл у ваш робочий простір Cursor менш ніж за дві хвилини.