Команди розробників десятиліттями вбудовували детермінізм у свої інструментальні ланцюжки. Lockfile для пакетних менеджерів. Закріплені базові образи для контейнерів. Відтворювані збірки для скомпільованих артефактів. Принцип добре зрозумілий: однакові вхідні дані мають виробляти однакові вихідні дані — завжди, на будь-якому комп'ютері, у будь-який час.

Передача дизайну ніколи не застосовувала цей принцип. За замовчуванням вона була принципово людським і тому недетермінованим процесом. Дизайнер пояснює дизайн розробнику. Розробник інтерпретує його. Інтерпретація варіюється залежно від людини, дня, наскільки чітко написаний коментар у Zeplin. Це не можна повторити. Це не можна перевірити. Це не можна порівняти через диф.

У світі AI-кодувальних агентів недетермінована передача тепер є першокласною інженерною проблемою. figmascope вирішує її за допомогою заморожeного, портативного контекстного бандлу.

Чому поточний інструментарій недетермінований для агентів

Zeplin та Avocode дають вам числа, витягнуті з Figma — розміри шарів, значення кольорів, розміри шрифтів. Але вони подають їх як UI для перегляду, а не як машиночитаний артефакт. Агент, спрямований на Zeplin, має навігувати по UI для пошуку значень, що крихко, з обмеженнями за частотою запитів і залежить від того, як написані анотації.

Figma Dev Mode йде далі: він дає вам фрагменти коду, генеровані вбудовано з дизайну. Але фрагменти не мають стану — вони регенеруються на вимогу, а не версіонуються. Немає бандлу, який можна закомітити. Немає файлу, який можна порівняти через диф. Якщо дизайнер оновлює дизайн, вигляд Dev Mode оновлюється мовчки. Ви не знаєте, коли базовий дизайн змінився відносно того, що ви востаннє експортували.

Скріншоти — найгірший випадок: чисті піксельні дані, цілком недетерміновані для парсингу, що дають різне виведення структури кожен раз.

Живі MCP-з'єднання — інструменти, що дають агентам доступ до Figma API у реальному часі — недетерміновані за визначенням. Файл змінюється, поки агент його читає. Запуск агента о 9:00 та о 14:00 бачать різні вхідні дані. Ви не можете відтворити запуск о 9:00, бо джерело змінилося.

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

Бандл як одиниця компіляції

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

Бандл — це заморожений знімок. Він фіксує конкретну версію дизайну та серіалізує кожну релевантну властивість: просторовий макет, ідентичність компонентів, прив'язки токенів, рядковий вміст, ієрархію. Після експорту бандл незмінний. Файл Figma може змінюватися; бандл — ні. Якщо ви хочете включити ці зміни, ви повторно експортуєте та отримуєте новий бандл.

Це модель одиниці компіляції. Файл дизайну — це вихідний код. Бандл — артефакт. Агенти споживають артефакти, а не вихідний код.

Чотири властивості детермінованої передачі

Знімкова. Артефакт передачі має представляти конкретний момент у часі. Не "поточний стан файлу Figma" — іменований, версіонований експорт. Бандли figmascope несуть _meta.json з часовою міткою експорту та відбитком того, що було включено. Бандл — це знімок, а не живий вигляд.

Портативна. Артефакт має бути самодостатнім. Без залежностей від зовнішніх сервісів, живих API або авторизованих сесій. Бандл figmascope — це ZIP простих файлів — JSON, Markdown, PNG. Ви можете скопіювати його, надіслати електронною поштою, закомітити в git, прикріпити до PR, передати молодшому розробнику або кодувальному агенту без жодного налаштування.

Інспектована. Детермінований артефакт марний, якщо ви не можете перевірити, що в ньому. Кожен файл у бандлі є людиночитаним. CONTEXT.md — Markdown. tokens.json — W3C-подібна структура. Покроковий IR — JSON з чіткими назвами полів. Інженер може відкрити бандл і перевірити точно, що було передано агенту. Це якісно відрізняється від "я вставив скріншот і отримав якийсь код."

Відтворювана. За того самого стану файлу Figma два окремих експорти мають виробляти функціонально еквівалентні бандли. Не ідентичні побайтово (часові мітки відрізняються), але семантично ідентичні: ті самі структури вузлів, ті самі значення токенів, той самий інвентар компонентів. Ця властивість дозволяє валідувати ваш пайплайн експорту та виявляти регресії в самому екстракторі.

Як це відбувається на практиці

Дизайнер завершує набір екранів за спринт. Вони експортують бандл. Бандл комітується в репо поряд з тікетом — або прикріплюється до задачі в Jira, або скидається у спільний диск, залежно від вашого процесу. З цього моменту артефакт передачі зафіксований. Агент (або розробник) працює з бандлом, а не з живим файлом Figma.

Посередині реалізації дизайнер оновлює три екрани. Без проблем: робочий бандл розробника незмінений. Нові екрани отримують новий експорт. Тепер у вас два бандли, і ви можете порівняти їх через диф: що змінилося між дизайном, з яким розробник почав, і поточним дизайном. Це саме той вид видимості змін, який неможливий при підходах на основі скріншотів або живих з'єднань.

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

Диф бандлів

Оскільки бандл — це прості файли, він дифається як код. Два експорти того самого файлу через дві версії Figma дають вам JSON-диф, що показує точно, що змінилося:

Це видимість змін дизайну, якої не існує в жодному поточному інструменті передачі. Figma має власну історію версій, але вона візуальна і орієнтована на дизайнерів. Диф бандлу структурований і орієнтований на розробників: машиночитані дані про зміни, що можуть керувати автоматизованими тестами, оновлювати журнали змін або запускати CI-процеси.

CI/CD для передачі дизайну

Як тільки передача детермінована, CI/CD слідує природно. Ви можете писати тести, що запускаються відносно бандлу: "цей екран має включати компонент Button/Primary", "цей токен має бути прив'язаний, а не захардкодованим значенням", "цей рядок має мати ключ stringRef". Це статичний аналіз структурованих даних. Він виконується за мілісекунди. Він запускається в пайплайні.

Ви також можете валідувати вивід кодогенеруючого агента відносно бандлу, який йому дали. Чи використовував агент токени або захардкодував літерали? Чи згенерував правильну кількість екземплярів повторюваного компонента? Чи використав правильні значення відступів? Ці питання мають відповіді, коли джерело правди — структурований файл, а не PNG.

Порівняння з MCP

MCP-подібні живі з'єднання з Figma набирають популярність. Привабливість очевидна: агент завжди бачить останній дизайн, немає кроку експорту, немає ручного управління бандлами. Але живі з'єднання торгують детермінізмом заради зручності — і для AI-агентів цей обмін поганий.

Живі з'єднання означають: контекст агента залежить від того, коли він запускається. Запуск о 9:00 і запуск о 14:00 бачать різні дані, якщо дизайнер працював протягом дня. Ви не можете відтворити попередній запуск. Ви не можете перевірити відносно фіксованого вводу. Ви не можете перевірити, що було передано агенту. Якщо згенерований код неправильний, ви не можете відрізнити "модель зробила погане виведення" від "дизайн змінився під агентом."

Правильна модель: живі з'єднання для дослідження дизайну та ітерацій (де важлива актуальність), детерміновані бандли для передачі та генерації (де важлива відтворюваність). Вони не конкурують — вони діють у різних точках процесу.

Передача молодшому розробнику

Ті самі властивості, що роблять бандли корисними для AI-агентів, роблять їх корисними для людей-розробників, які новачки в кодовій базі. Молодший розробник, якому передали бандл, має: повну специфікацію в CONTEXT.md, всі значення токенів в tokens.json, кожен компонент перерахований з його властивостями, кожен рядок з його ідентичністю. Їм не потрібно бути у файлі Figma. Їм не потрібен аккаунт Figma.

Бандл — це повний, самодостатній робочий наряд. Такий самий, як отримав би агент. Єдина відмінність у тому, що людина читає його, а агент обробляє програмно — але артефакт ідентичний.

Це об'єднання — той самий артефакт, людина або агент-споживач — і є суть. Бандл — це одиниця передачі. Все інше — деталь реалізації.

Подивіться на детерміновану передачу на практиці з Claude Code, Cursor або Aider. Всі починаються з того самого експорту figmascope.