Skip to content

Article

Code ↔ Canvas: Bidirectional Design Engineering with Figma and Agents

A practical workflow for treating Figma and the codebase as one review surface: write-to-canvas, Make into local code, Code Connect mappings, MCP skills, and a handoff that dissolves into structured review instead of a ticket dump.

Last reviewed4 Aug 2026

Reading time7 min read

Section 01

Handoff is dissolving into review

For years, design-to-code meant a one-way trip: frames in Figma, annotations in Dev Mode, tickets in the tracker, and a developer reconstructing the interface. Agents made that trip faster, but they did not remove the underlying mistake — treating canvas and code as two products that only meet at the end.

By mid-2026 the tooling finally supports the other direction as a first-class path. Figma's MCP server can write native frames, components, variables, and auto layout onto the canvas through the Plugin API. Make can land generated UI into a local codebase. Code Connect can tell an agent which React component a Figma node already maps to. The practical skill is no longer "export better." It is bidirectional design engineering: decide which side is the source of truth for this change, move structure intentionally, and review both surfaces against the same contract.

This article is for product designers and design engineers who already ship with agents and still feel the old handoff tax. The goal is a reusable loop where canvas and code stay legible to each other, and where "handoff" becomes a review packet rather than a dump of screenshots and hope.

Section 02

The mental model: two surfaces, one contract

Bidirectional work fails when teams ask which tool is the source of truth forever. The better question is which surface owns the next change. If the team is exploring layout, density, and visual variants with non-engineers in the room, the canvas often owns the pass. If the team is wiring real data, routing, accessibility states, and production components, the codebase owns the pass. Either way, the contract — tokens, component inventory, naming, and review gates — is shared.

Agents make the surfaces porous. A coding agent with Figma MCP can inspect a selection, call use_figma to create or edit native nodes, and pull Code Connect metadata so generated code prefers real components instead of invented markup. A designer can start in Make against local files, then refine the result on canvas. The risk is not that the tools are weak. The risk is silent drift: two plausible versions of the same screen that disagree on spacing, props, or ownership.

Treat every bidirectional session as a sync problem with an explicit direction, not as magic mirroring. Direction, evidence, and a human gate are the whole method.

diagramBidirectional design engineering loop
Step 1

Contract — DESIGN.md, tokens, Code Connect mappings

Step 2

Direction — code→canvas or canvas→code for this change

Step 3

Move — use_figma / Make / local codegen

Step 4

Evidence — canvas screenshot + local route screenshot

Step 5

Review gate — diffs, mappings, a11y, human decision

Step 6

Promote or discard — one surface wins; the other updates

feeds next cycle

Pick a direction, move structure with MCP or Make, map components with Code Connect, capture both surfaces, then review before the next move.

Section 03

What exists in Figma and agent tooling today

Write-to-canvas is the capability that changed the conversation. Through the remote Figma MCP server's use_figma tool, an agent executes JavaScript in a Figma file via the Plugin API. That means real auto layout, variables, components, and variants — not a pasted screenshot of generated UI. Figma documents the limits honestly: beta-quality output, response size caps, limited asset and custom-font support, and the expectation of manual cleanup. Those limits are features of a review culture, not reasons to avoid the path.

Code Connect is the missing vocabulary layer. Without it, canvas→code agents recreate visuals with ad-hoc markup. With it, the agent receives the import path, props, and custom instructions for the mapped component. Make and local-code workflows matter for the other direction: when exploration already happened in code, or when you want the first draft inside the repo's component library rather than in a disposable export.

Skills such as figma-use, prototype-to-figma, and library-generation workflows are how vendors package multi-step procedures around the primitive tools. Load the skill before write actions. Inspect the file's existing structure before creating new nodes. Prefer published library components over freehand rectangles that will never map back to code.

  • Remote MCP at mcp.figma.com is the broad feature path; desktop MCP remains for specific org cases.
  • use_figma writes native structure; it does not replace design judgment or production review.
  • Code Connect maps Figma nodes to real code so agents stop inventing parallel UI kits.
  • Make→local code is useful when the repo, not a blank frame, should receive the first draft.
  • Official Figma skills encode inspect-first and mapping-aware procedures around the primitives.

Section 04

Case study: settings page that started in code

A mid-size SaaS team needed a redesigned account settings page: profile, notification preferences, and billing summary. Engineering already had shadcn form primitives and a working /settings route with incomplete hierarchy. Design wanted a canvas review with product and support before committing to the denser layout.

They chose code→canvas for the first pass. The agent loaded the route, DESIGN.md, and Code Connect mappings, then used write-to-canvas to rebuild the page as auto-layout frames using the published library components rather than freehand boxes. Designers refined spacing and section order on canvas. A second pass ran canvas→code only for the approved hierarchy changes, constrained to the existing form components. Handoff was a review board: Figma selection links, local screenshots at 1280 and 390, Code Connect coverage notes, and three open product questions. No ticket said "implement the Figma." The ticket said "resolve these three questions and apply the approved delta."

What failed once is instructive. An early write-to-canvas run ignored the published Button and rebuilt a nearly identical control from rectangles and text. Visually fine; mapping dead. The fix was procedural: require library import by key before create, and fail review if new primitives appear without a mapping plan.

screenshotSettings page sync board
Review boardreference · implementation · state

Figma: settings desktop frame with auto layout

Figma: mobile stacked frame

Local: /settings at 1280px

Local: /settings at 390px

Code Connect coverage: Button, Input, Card, Switch

Open questions: billing CTA ownership, notification default copy

A bidirectional review board pairs canvas and local evidence so drift is visible before either side is promoted.

Section 05

Choose a direction before you move pixels

Most wasted bidirectional sessions start with curiosity instead of a direction decision. The matrix below is intentionally small. If both directions seem equally good, prefer the surface where the next reviewer already works.

tableDirection decision matrix
1Exploring layout with non-engineers

Prefer canvas ownership; sync approved structure to code later

2Wiring real data, routes, or a11y states

Prefer code ownership; push structure to canvas for review

3Design system already mapped via Code Connect

Either direction; require mapping coverage in the review packet

4No mappings and unstable tokens

Stop. Map or document tokens first, or you will sync noise

5Deadline is a production fix

Code only. Do not open a second surface mid-incident

Direction is a project choice for this change, not a permanent team religion.

Section 06

Project structure that keeps both surfaces honest

Bidirectional work needs files the agent can find without archaeology. Keep the design contract in the repo. Keep mapping status visible. Keep review evidence in a predictable folder so critique agents and humans look at the same packet.

You do not need a complex monorepo. You need boring paths and one owner for each artifact class.

Suggested sync packet layout
repo/
  DESIGN.md
  AGENTS.md
  design/
    code-connect/
      button.figma.ts
      input.figma.ts
      card.figma.ts
    reviews/
      2026-08-04-settings/
        brief.md
        figma-links.md
        screenshots/
          canvas-desktop.png
          canvas-mobile.png
          local-1280.png
          local-390.png
        findings.md
  src/app/settings/
  src/components/ui/

Section 07

Good vs bad bidirectional prompts

Weak prompts ask the agent to "sync Figma and code." Strong prompts name direction, allowed tools, mapping rules, and what must not change.

tableGood vs bad sync prompts
1Bad: sync this page with Figma

Good: code→canvas for /settings using published library components only

2Bad: make them match

Good: report spacing, hierarchy, and prop drift; do not edit until approved

3Bad: rebuild everything

Good: update section order and notification Switch row only

4Bad: invent missing components

Good: stop and list unmapped nodes that need Code Connect

Specific direction and constraints beat vague sync language every time.

Section 08

Write-to-canvas prompt template

Use a template that forces inspect-first behavior. Agents that create before reading will duplicate your library under new names and call it progress.

Code → canvas sync prompt
Direction: code → canvas

Source of truth for this pass:
- src/app/settings/page.tsx
- DESIGN.md
- design/code-connect/*

Figma target:
- [file URL or selection link]

Rules:
1. Load the figma-use skill before any use_figma call.
2. Inspect existing pages, components, variables, and naming first.
3. Prefer importComponentByKeyAsync / published library components.
4. Do not create parallel Buttons, Inputs, or Cards if mappings exist.
5. Use auto layout. No absolute-positioned demo layouts.
6. After writing, return:
   - created/updated node IDs
   - components reused vs created
   - unmapped nodes
   - questions for human review

Do not edit local code in this pass.

Section 09

Make and local code without orphaning the canvas

Make→local code is useful when the team wants the first draft inside the repository's conventions. The failure mode is leaving Figma as a mood board while production evolves only in git. If Make lands code, schedule a canvas update or an explicit decision that the route is code-owned until the next exploration cycle.

When pulling canvas→code, constrain the agent to Code Connect components and existing routes. A pretty export that introduces a second card primitive is not acceleration; it is design-system debt with a short demo half-life. Pair every canvas→code PR with screenshots of both surfaces and a mapping coverage note.

  • Make into a branch, not main, and run the same gates as any UI PR.
  • Require Code Connect or an explicit new-component proposal for unmapped nodes.
  • Update or deprecate the canvas frame after production diverges intentionally.
  • Never treat a Make draft as production-ready because it compiled once.

Section 10

Risks, limits, and review gates

Write-to-canvas is beta-quality by vendor admission. Expect cleanup. Custom fonts and assets may not round-trip. Response size limits mean large libraries need staged writes. Code Connect only helps if components are published and mappings are maintained. Agents will happily invent near-duplicates when mappings are stale.

Organizational risk matters as much as tool risk. If design and engineering keep separate "final" files, bidirectional tooling becomes a faster way to disagree. Name an owner for the contract files. Put mapping freshness on a weekly checklist. Fail closed when review evidence is missing.

  • Gate: no PR merge without local screenshots for changed routes.
  • Gate: no canvas promotion without listing unmapped nodes.
  • Gate: no new primitive without DESIGN.md and Code Connect plan.
  • Gate: human approves product questions before the agent "finishes" the page.
  • Limit: visual similarity is not behavioral parity — test states in code.

Section 11

Reusable bidirectional workflow

Run this workflow whenever a screen must stay coherent across Figma and the repository. It is slower than a single export demo and faster than weeks of silent drift.

Bidirectional design engineering checklist
1. Update the contract
   - DESIGN.md / tokens current?
   - Code Connect mappings published?

2. Choose direction for THIS change
   - code→canvas OR canvas→code
   - name the owner surface

3. Move structure
   - load required Figma skills
   - inspect before write
   - prefer mapped components

4. Capture evidence
   - canvas desktop + mobile
   - local desktop + mobile
   - mapping coverage note

5. Review
   - hierarchy, spacing, props, a11y states
   - approve delta only

6. Promote
   - apply approved changes to the non-owner surface
   - close or update the review packet
   - record open product questions separately

Sources

Sources & further reading

Related articles

Keep reading on Bidirectional design.

35

Multi-CLI Literacy for Designers

Design teams will not standardize on one coding agent. This field note covers the shared literacy across Claude Code, Cursor, Codex, and Gemini-class CLIs: instruction files, skills, MCP, permissions, and verification habits that travel when the binary changes.

Reviewed
30 Jul 2026
Reading time
3 min
Read article
34

Agent FinOps for Design Orgs

A field note on keeping design-agent spend under control: where critique fleets burn tokens, how to budget capture and judge lanes, and a lightweight cost review ritual that does not require a finance degree.

Reviewed
28 Jul 2026
Reading time
3 min
Read article
33

Authorship, Disclosure, and Studio Governance for Agentic Design

A practical governance kit for design studios and campus programs: when to disclose agent assistance, how to keep critique logs that assign accountability, and why verification rituals matter more than generation speed when work carries a human signature.

Reviewed
8 Aug 2026
Reading time
5 min
Read article
Newsletter

Get the next bidirectional workflow checklist and Figma MCP field notes by email.

The newsletter is the update channel for article revisions, tool changes, and field-tested workflows.

Processed by Buttondown. You can unsubscribe from any email.

Further reading

For deeper reading, explore the books behind the Agentic Design School curriculum.

The Agentic Designer cover
Curriculum

The Agentic Designer

How AI agents are transforming product design.

The operating model for product designers, design leads, and builders who need to understand what changes when agents join design work.

Claude Code for Designers cover
Curriculum

Claude Code for Designers

A designer's guide to AI-assisted workflows.

A practical guide for designers who want to work directly with coding agents without turning it into a programming manual.

Open Design cover
Curriculum

Open Design

Local-First, Agent-Native Design-as-Code — The Open-Source AI Design Alternative

A practical field guide to running local-first, agent-native design-as-code workflows without surrendering brand quality or vendor independence.