Các nhóm phần mềm đã dành nhiều thập kỷ để xây dựng tính xác định vào các toolchain của họ. Lockfile cho package manager. Pinned base image cho container. Reproducible build cho các artifact được biên dịch. Nguyên tắc được hiểu rõ: cùng đầu vào phải tạo ra cùng đầu ra, luôn luôn, trên bất kỳ máy nào, vào bất kỳ thời điểm nào.

Design handoff chưa bao giờ áp dụng nguyên tắc này. Mặc định, đó là một quá trình về cơ bản là con người và do đó không xác định. Một designer giải thích thiết kế cho developer. Developer diễn giải nó. Sự diễn giải thay đổi theo người, theo ngày, theo cách comment Zeplin được viết rõ ràng như thế nào. Bạn không thể phát lại điều đó. Bạn không thể kiểm tra nó. Bạn không thể diff nó.

Trong thế giới của AI coding agent, handoff không xác định hiện là vấn đề kỹ thuật hạng nhất. figmascope giải quyết nó bằng một context bundle di động, đóng băng.

Tại sao công cụ hiện tại không xác định cho agent

Zeplin và Avocode cung cấp cho bạn các con số được trích xuất từ Figma — kích thước layer, giá trị màu, cỡ chữ. Nhưng chúng phục vụ chúng như một UI có thể duyệt, không phải một artifact có thể đọc được bởi máy tính. Một agent được trỏ đến Zeplin phải điều hướng UI để tìm các giá trị, điều đó dễ bị hỏng, bị giới hạn tốc độ, và phụ thuộc vào cách các chú thích được viết.

Figma Dev Mode đi xa hơn: nó cho bạn các đoạn code được tạo ra inline từ thiết kế. Nhưng các đoạn code là stateless — được tái tạo theo yêu cầu, không có phiên bản. Không có bundle bạn có thể check in. Không có file bạn có thể diff. Nếu designer cập nhật thiết kế, chế độ xem Dev Mode cập nhật một cách thầm lặng. Bạn không biết khi nào thiết kế bên dưới thay đổi so với lần xuất cuối cùng của bạn.

Screenshot là trường hợp tệ nhất: dữ liệu pixel thuần túy, hoàn toàn không xác định để phân tích, mang lại suy luận cấu trúc khác nhau mỗi lần.

Kết nối MCP trực tiếp — các công cụ cung cấp cho agent quyền truy cập API thời gian thực vào file Figma — không xác định theo định nghĩa. File thay đổi trong khi agent đang đọc nó. Lần chạy lúc 9 giờ sáng và lần chạy lúc 2 giờ chiều thấy các đầu vào khác nhau. Bạn không thể tái tạo lần chạy 9 giờ sáng vì nguồn đã thay đổi.

Các agent là các hệ thống xác suất. Cung cấp cho chúng các đầu vào không xác định không chỉ tạo ra biến đổi — nó làm cho hệ thống không thể kiểm tra được. Bạn không thể biết liệu một output tệ là do model, prompt, hay thực tế là ai đó đã di chuyển một layer giữa các lần chạy.

Bundle như một đơn vị biên dịch

Mô hình tinh thần đúng cho một bản xuất figmascope là một artifact biên dịch. Giống như một compiler lấy source code và tạo ra một binary xác định — cùng source, cùng flag, cùng binary — figmascope lấy một trạng thái file Figma và tạo ra một bundle xác định: cùng trạng thái file, cùng bundle, mỗi lần.

Bundle là một snapshot đóng băng. Nó nắm bắt một phiên bản cụ thể của thiết kế và serialize mọi thuộc tính liên quan: layout không gian, danh tính component, ràng buộc token, nội dung chuỗi, hierarchy. Khi đã xuất, bundle là bất biến. File Figma có thể thay đổi; bundle thì không. Nếu bạn muốn kết hợp những thay đổi đó, bạn xuất lại và nhận được bundle mới.

Đây là mô hình đơn vị biên dịch. File thiết kế là source. Bundle là artifact. Các agent tiêu thụ artifact, không phải source.

Bốn thuộc tính của handoff xác định

Có thể snapshot. Artifact handoff phải đại diện cho một thời điểm cụ thể. Không phải "trạng thái hiện tại của file Figma" — một bản xuất được đặt tên, có phiên bản. Bundle figmascope mang một _meta.json với timestamp xuất và fingerprint về những gì đã được bao gồm. Bundle là snapshot, không phải chế độ xem trực tiếp.

Di động. Artifact phải tự chứa. Không phụ thuộc vào dịch vụ bên ngoài, API trực tiếp, hoặc phiên đăng nhập. Một bundle figmascope là một ZIP của các file đơn giản — JSON, Markdown, PNG. Bạn có thể sao chép nó, gửi email nó, check in vào git, đính kèm vào PR, trao cho developer junior hoặc coding agent mà không cần thiết lập.

Có thể kiểm tra. Một artifact xác định là vô dụng nếu bạn không thể xác minh nội dung của nó. Mọi file trong bundle có thể đọc được bởi con người. CONTEXT.md là Markdown. tokens.json là cấu trúc W3C-ish. Per-screen IR là JSON với tên trường rõ ràng. Một kỹ sư có thể mở bundle và kiểm tra chính xác những gì agent được biết. Điều này khác về mặt chất lượng so với "Tôi dán screenshot và nhận được một số code."

Có thể tái tạo. Cho cùng trạng thái file Figma, hai bản xuất riêng biệt phải tạo ra các bundle tương đương về mặt chức năng. Không giống byte (timestamps khác nhau), nhưng giống về mặt ngữ nghĩa: cùng cấu trúc node, cùng giá trị token, cùng component inventory. Nếu bạn xuất hai lần từ một file không thay đổi và các bundle khác nhau về mặt ngữ nghĩa, có gì đó sai. Thuộc tính này cho phép bạn xác nhận pipeline xuất của mình và phát hiện regression trong extractor.

Cách điều này diễn ra trong thực tế

Một designer hoàn thành các màn hình của một sprint. Họ xuất một bundle. Bundle được commit vào repo cùng với ticket — hoặc đính kèm vào issue Jira, hoặc thả vào shared drive, tùy thuộc vào quy trình của bạn. Tại thời điểm này, artifact handoff được cố định. Agent (hoặc developer) làm việc từ bundle, không phải từ file Figma trực tiếp.

Giữa chừng triển khai, designer cập nhật ba màn hình. Không vấn đề gì: bundle làm việc của developer không thay đổi. Các màn hình mới nhận được bản xuất mới. Bây giờ bạn có hai bundle và bạn có thể diff chúng: những gì thay đổi giữa thiết kế mà developer bắt đầu và thiết kế hiện tại. Đây chính xác là loại hiển thị thay đổi không thể có với các quy trình làm việc dựa trên screenshot hoặc kết nối trực tiếp.

Trong một quy trình làm việc đa agent — một agent xây dựng thư viện component, một agent khác xây dựng layout màn hình, một agent thứ ba viết test — mỗi agent nhận cùng bundle như nguồn sự thật của nó. Tất cả đều làm việc từ cùng trạng thái thiết kế đóng băng. Output của chúng có thể kết hợp vì đầu vào của chúng được chia sẻ và cố định. Đây là điều kiện tiên quyết cho việc tạo UI đa agent thực sự đáng tin cậy.

Diffing các bundle

Vì bundle là các file đơn giản, nó diff như code. Hai bản xuất của cùng một file trên hai phiên bản Figma cho bạn một JSON diff chính xác những gì đã thay đổi:

Đây là khả năng hiển thị thay đổi thiết kế không tồn tại trong bất kỳ công cụ handoff nào hiện tại. Figma có lịch sử phiên bản riêng, nhưng nó trực quan và hướng đến designer. Một bundle diff có cấu trúc và hướng đến developer: dữ liệu thay đổi có thể đọc được bởi máy tính có thể thúc đẩy kiểm tra tự động, cập nhật changelog, hoặc kích hoạt quy trình CI.

CI/CD cho design handoff

Khi handoff có tính xác định, CI/CD tự nhiên theo sau. Bạn có thể viết test chạy đối với một bundle: "màn hình này phải bao gồm component Button/Primary," "token này phải được ràng buộc và không phải là giá trị hardcoded," "chuỗi này phải có khóa stringRef." Đây là các kiểm tra phân tích tĩnh đối với dữ liệu có cấu trúc. Chúng chạy trong mili giây. Chúng chạy trong pipeline.

Bạn cũng có thể xác nhận output của codegen agent đối với bundle được cung cấp. Agent có sử dụng token hay hardcode literal không? Nó có tạo ra đúng số lượng instance của component lặp lại không? Nó có sử dụng giá trị spacing đúng không? Những câu hỏi này có thể trả lời được khi nguồn sự thật là một file có cấu trúc, không phải PNG.

So sánh với MCP

Kết nối trực tiếp kiểu MCP với Figma đang ngày càng phổ biến. Sức hấp dẫn rõ ràng: agent luôn thấy thiết kế mới nhất, không cần bước xuất, không cần quản lý bundle thủ công. Nhưng kết nối trực tiếp đổi tính xác định lấy sự tiện lợi — và với AI agent, sự đổi đó là xấu.

Kết nối trực tiếp có nghĩa là: context của agent phụ thuộc vào thời điểm nó chạy. Một lần chạy lúc 9 giờ sáng và một lần chạy lúc 2 giờ chiều thấy dữ liệu khác nhau nếu designer làm việc trong ngày. Bạn không thể tái tạo lần chạy trước đó. Bạn không thể kiểm tra đối với đầu vào cố định. Bạn không thể kiểm tra những gì agent được biết. Nếu code được tạo ra là sai, bạn không thể phân biệt "model đưa ra suy luận sai" với "thiết kế thay đổi dưới agent."

Mô hình đúng là: kết nối trực tiếp cho khám phá và lặp lại thiết kế (nơi tính mới nhất quan trọng), bundle xác định cho handoff và tạo ra (nơi khả năng tái tạo quan trọng). Chúng không cạnh tranh — chúng hoạt động ở các điểm khác nhau trong quy trình.

Bàn giao cho developer junior

Các thuộc tính giống nhau làm cho bundle tốt cho AI agent cũng làm cho chúng tốt cho developer con người mới vào codebase. Một developer junior được trao một bundle có: thông số hoàn chỉnh trong CONTEXT.md, tất cả giá trị token trong tokens.json, mọi component được liệt kê với các thuộc tính của chúng, mọi chuỗi với danh tính của chúng. Họ không cần phải trong file Figma. Họ không cần tài khoản Figma. Họ không cần biết màn hình nào là màn hình có thẩm quyền.

Bundle là một lệnh làm việc hoàn chỉnh, tự chứa. Giống như agent sẽ nhận. Sự khác biệt duy nhất là con người đọc nó và agent xử lý nó theo chương trình — nhưng artifact là giống nhau.

Sự thống nhất đó — cùng artifact, người tiêu dùng là con người hay agent — chính là điểm mấu chốt. Bundle là đơn vị handoff. Mọi thứ khác là chi tiết triển khai.

Xem handoff xác định trong thực tế với Claude Code, Cursor, hoặc Aider. Tất cả đều bắt đầu từ cùng bản xuất figmascope.