Claude Code — потужний агент для написання коду. Якщо передати йому скриншот Figma-екрану, він видасть щось приблизно схоже. Якщо ж передати структурований контекстний бандл — типізовані дизайн-токени, layout IR, референсні рендери і машиночитану специфікацію — він виробляє код, який можна реально шипити.

figmascope генерує цей бандл на стороні клієнта, повністю у вашому браузері. Без бекенду, без завантаження файлів, без посередницького сервісу з доступом до ваших Figma-файлів. Цей посібник описує повний процес Figma → figmascope → Claude Code з реальними прикладами CLI. Якщо ви використовуєте Cursor замість Claude Code — дивіться Figma до Cursor.

Передумови

Експортуйте контекстний бандл з figmascope

Відкрийте figmascope.dev, вставте URL Figma-файлу та токен, натисніть Export Context Bundle. Ви отримаєте zip на кшталт figmascope-ABC123.zip.

Розпакуйте його в директорію design/ у вашому проєкті:

unzip figmascope-ABC123.zip -d design/

Результуюча структура:

design/
├── CONTEXT.md
├── tokens.json
├── _meta.json
├── components/
│   └── inventory.json
├── screens/
│   ├── Home.json
│   ├── Home.png
│   ├── Settings.json
│   └── Settings.png
└── strings.json

Закомітьте це в систему контролю версій. Маніфест _meta.json фіксує мітку часу експорту та ключ Figma-файлу, щоб команда завжди знала, якій версії дизайну відповідає бандл.

Як Claude Code читає контекстний бандл

CONTEXT.md — це точка входу. Це структурований специфікаційний документ, який повідомляє агенту:

Claude Code читає файли перед тим, як діяти. Початок сесії з CONTEXT.md орієнтує агента ще до того, як він відкриває будь-який JSON екрану.

Запуск сесії Claude Code

Найпростіший підхід — запустити claude у корені проєкту і спрямувати його на директорію дизайну:

claude

Потім в інтерактивній сесії:

Read design/CONTEXT.md, then implement the Home screen as a React component.

Use:
- design/tokens.json for all design token values
- design/screens/Home.json for the layout tree
- design/screens/Home.png as visual reference
- design/strings.json for all copy (use dot-notation keys as i18n identifiers)

Constraints:
- Tailwind CSS for styles, mapping token values to theme config
- TypeScript
- No hardcoded color or spacing values — all values must come from tokens

Claude Code послідовно прочитає файли, розв'яже посилання на токени з IR і згенерує компонент, що відображає вашу реальну дизайн-систему, а не її загальне наближення.

Одноразові запити з --print

Для CI-пайплайнів або скриптованої генерації коду використовуйте неінтерактивний режим --print:

claude --print "$(cat <<'EOF'
Read design/CONTEXT.md. Then implement design/screens/Home.json as
src/screens/Home.tsx (React + Tailwind + TypeScript).
- All tokens from design/tokens.json
- All strings from design/strings.json using dot-notation keys
- Visual reference: design/screens/Home.png
- Component names from design/components/inventory.json
EOF
)"

Heredoc зберігає запит читабельним у shell-скриптах. --print виводить відповідь Claude у stdout, щоб ви могли передати її по пайпу або зберегти за потреби.

Claude Code найефективніший, коли ви даєте йому один екран за раз. Layout IR для одного екрану вже достатньо насичений; зберігайте сесії зосередженими.

Багатоекранні проєкти — розумний підхід

Для файлів з багатьма фреймами опрацьовуйте їх поступово. Цикл по файлах екранів:

for screen_json in design/screens/*.json; do
  screen=$(basename "$screen_json" .json)
  echo "Implementing $screen..."
  claude --print "$(cat <

Інструкція «не перереалізовувати компоненти, що вже існують» важлива, коли інвентар компонентів спільний. Claude Code може прочитати design/components/inventory.json, щоб з'ясувати, які компоненти вже реалізовані, та імпортувати їх замість перегенерації.

Підключення дизайн-токенів

tokens.json, що експортується figmascope, використовує вкладену структуру у стилі W3C з полями $value і $type:

{
  "color": {
    "surface":    { "$value": "#f6f2ea", "$type": "color" },
    "ink":        { "$value": "#1f1d1a", "$type": "color" },
    "accent":     { "$value": "#d96a3a", "$type": "color" }
  },
  "spacing": {
    "1": { "$value": "4px",  "$type": "dimension" },
    "2": { "$value": "8px",  "$type": "dimension" },
    "4": { "$value": "16px", "$type": "dimension" },
    "8": { "$value": "32px", "$type": "dimension" }
  },
  "typography": {
    "body": {
      "fontFamily": { "$value": "Inter",  "$type": "fontFamily" },
      "fontSize":   { "$value": "14px",   "$type": "dimension" },
      "lineHeight": { "$value": 1.45,     "$type": "number" }
    }
  }
}

Попросіть Claude Code згенерувати блок розширення теми tailwind.config.ts з цього файлу першим кроком, перед реалізацією будь-яких екранів. Так всі наступні реалізації зможуть послідовно використовувати псевдоніми токенів Tailwind:

claude --print "Read design/tokens.json and generate a tailwind.config.ts
theme.extend block. Map color tokens to theme.extend.colors,
spacing tokens to theme.extend.spacing, and typography to
theme.extend.fontFamily / fontSize. Output only the config object."

Детальний огляд формату токенів і резервного виведення за частотою — у статті Експорт дизайн-токенів для AI-агентів.

Робота з шаром рядків

Кожен текстовий вузол у Figma-файлі отримує слот у strings.json. Ключі використовують dot-нотацію, виведену з ієрархії фреймів:

{
  "home.hero.title":        "Everything you need",
  "home.hero.subtitle":    "Ship faster with structured context",
  "home.cta.primary":      "Get started",
  "settings.account.heading": "Account settings"
}

Дайте Claude Code інструкцію використовувати ці ключі як i18n-ідентифікатори. Замість хардкоду рядка "Everything you need" в JSX, згенерований компонент викликатиме t('home.hero.title') (або еквівалент у вашій i18n-бібліотеці). Файл ресурсів вже є в strings.json — потрібно лише його імпортувати або підключити до вашого i18n-налаштування.

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

Інтеграція з CLAUDE.md

Якщо ви використовуєте файл контексту проєкту CLAUDE.md, додайте короткий розділ, що спрямовує агента на директорію дизайну. Це добре поєднується з підходом, описаним у статті AI Design Handoff, і доповнює опис того, чим figmascope відрізняється від плагінів-інспекторів Figma.

Додайте розділ про дизайн ось так:

## Design context

Design tokens, layout IR, reference renders, and strings live in `design/`.
Always read `design/CONTEXT.md` before implementing any screen.
Token values are in `design/tokens.json` — never hardcode color or spacing.
Component canonical names are in `design/components/inventory.json`.

Це означає, що кожна сесія Claude Code у проєкті автоматично матиме контекст дизайну як частину своїх робочих знань, без необхідності повторювати це в кожному запиті.

Що агент справді виконує правильно

За наявності структурованого контексту Claude Code надійно відтворює:

  • Значення відступів — тому що вони є в tokens.json як spacing.4 → 16px, а не візуально оцінені зі скриншоту
  • Кольори — точні hex-значення, а не «схоже на теплий помаранчевий»
  • Типографіку — сімейство шрифтів, розмір, насиченість, міжрядковий інтервал — все типізовано
  • Напрямок розмітки — вузли stack мають явне поле direction і gap
  • Іменування компонентів — inventory.json є канонічним джерелом, тому немає вигаданих назв
  • Текстовий вміст — strings.json не дає агенту перефразовувати або вигадувати текст-замінник

Що все ще потребує перевірки людиною: інтерактивні стани (hover, focus, active), які не видно в статичних Figma-фреймах, тайминги анімацій та адаптивні точки розриву, що не були явно задизайнені у файлі. IR фіксує статичну розмітку; динамічна поведінка виходить за рамки охоплення.

Використання --dangerously-skip-permissions у контрольованих середовищах

Для автоматизованих пайплайнів, де ви хочете, щоб Claude Code працював без інтерактивних запитів на підтвердження — наприклад, у CI-кроці, що генерує заготовки компонентів після оновлення дизайну — можна використовувати --dangerously-skip-permissions. Підходить лише для ізольованих середовищ без виробничих облікових даних.

claude --dangerously-skip-permissions --print "$(cat <<'EOF'
Read design/CONTEXT.md. Generate component stub files for any components
in design/components/inventory.json that don't already exist in src/components/.
Use TypeScript + React functional component format. Include a TODO comment
for each component referencing the relevant screen JSON.
EOF
)"

У робочих процесах розробників у продакшені залишайте дозволи інтерактивними. Запити існують з поважної причини — Claude Code може і буде писати файли, і вам варто знати, які саме, перш ніж він це зробить.

Перевірка попереджень експорту перед запитом

figmascope записує попередження до _meta.json для умов, що можуть вплинути на якість результату. Перевіряйте їх перед початком сесії Claude Code:

python3 -c "
import json
meta = json.load(open('design/_meta.json'))
for w in meta.get('warnings', []):
    print(f\"{w['code']}: {w['message']}\")
print(f\"Frames exported: {meta['frameCount']}\")
print(f\"Tokens source: {meta.get('tokensSource', 'variables')}\")
"

Два попередження, на які варто звертати увагу:

  • layout-mode-none-inferred — фрейм без auto-layout. figmascope вивів розмітку з абсолютних позицій дочірніх вузлів, що менш надійно. Зазначте це у вашому запиті: «This screen uses absolute positioning; generate accordingly.»
  • strings-collision — два текстових вузли дали однаковий ключ ресурсу. figmascope додає числовий суфікс для усунення неоднозначності, але вам варто переконатися, що рядки в strings.json коректні перед тим, як агент генеруватиме i18n-виклики.

Процеси для Android та iOS

Claude Code не обмежений веб-фреймворками. Контекстний бандл не прив'язаний до фреймворку — layout IR і токени є даними, а не CSS. Для Jetpack Compose:

claude --print "$(cat <<'EOF'
Read design/CONTEXT.md and design/tokens.json.

Implement design/screens/Home.json as a Jetpack Compose screen.
- Map color tokens to a MaterialTheme ColorScheme
- Map spacing tokens to Dp values (strip 'px' suffix, use .dp)
- Map typography tokens to MaterialTheme.typography
- Use the component names from design/components/inventory.json as Composable names
- Reference design/screens/Home.png for visual accuracy
EOF
)"

Вузли stack в IR природно відображаються на Column (direction: vertical) і Row (direction: horizontal) у Compose. Вузли leaf з type: "text" стають composable-функціями Text; type: "image" стає Image або заповнювачем. Повний патерн — у статті Jetpack Compose from Figma.

Версіонування бандлу дизайну

Ставтеся до директорії design/ як до будь-якої іншої залежності проєкту. Коли дизайн суттєво змінюється — перееекспортуйте з figmascope.dev, закомітьте та зазначте зміну в PR:

# Check when the bundle was last exported vs when Figma file was last modified
python3 -c "
import json
from datetime import datetime
meta = json.load(open('design/_meta.json'))
exported = datetime.fromisoformat(meta['exportedAt'].replace('Z', '+00:00'))
modified = datetime.fromisoformat(meta['figmaLastModified'].replace('Z', '+00:00'))
delta = modified - exported
if delta.total_seconds() > 0:
    print(f'WARNING: Figma file was modified {delta} after last export')
else:
    print('Bundle is current')
"

Застарілий бандл означає, що агент працює з неактуальним дизайном. Перевірка мітки часу виявляє це ще до того, як ви витратите час на сесію генерації коду на основі застарілих специфікацій.