Figma authoring constraints
Skill jajupmochi/agent-harness/skills/figma-authoring-constraints
Use when a designer asks how to structure a Figma file so it produces clean code, when a design keeps yielding pixel-snapshot output, or when get_variable_defs comes back empty — the 20 Figma-side authoring constraints that make a design cleanly code-able via the Figma MCP.From its SKILL.md
npx -y skills add jajupmochi/agent-harness --skill figma-authoring-constraintsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.1 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
/figma-authoring-constraints
Figma-side rules that make a design clean and code-able before it reaches an agent. These are the design
half of the pipeline: the figma-design-fetch skill fetches + implements + verifies; this is what makes the
fetch worth anything. If a design breaks these, get_design_context degrades to a rigid pixel snapshot and
get_variable_defs comes back empty — no amount of agent effort fixes a design authored as a flat mockup.
Authoritative source: Figma's Structure your Figma file for better code.
Each rule is one executable sentence + a reference. Give this to designers; the figma-design-fetch
pre-fetch lint enforces a subset (unbound colors · default names · raster nodes · absolute positioning) as
a hard gate.
Master TOC
- Variables / tokens (1–5)
- Auto layout (6–9)
- Components / variants (10–12)
- Naming (13–15)
- Dev Mode / Code Connect readiness (16–18)
- Don't use raster placeholders (19–20)
- How these map to the MCP gotchas
- Companion
- Provenance
Variables / tokens (1–5)
- Bind every color, spacing, radius, and font size to a Figma variable — never a bare literal. This is
exactly what
get_variable_defsreturns; unbound values force the agent to eyeball hex. (Figma, variables guide) - Build two token tiers: primitive → semantic. Primitives hold raw values (color ramps / spacing steps); semantics alias them by UI role (page background / primary action / danger text). (zeroheight)
- Name semantic tokens by intent, not appearance —
text/subdued(survives dark mode), nottext/gray(breaks the moment a mode is added). - Prefer variables over styles for anything tokenizable (variables carry modes/themes, scoping, and code-syntax handoff); reserve styles for what variables can't express — gradients / compound fills / shadows. (Figma)
- Set a "code syntax" on variables so handoff / MCP emits the real code-side token name, not the Figma label.
Auto layout (6–9)
- Every container uses auto layout — no absolute positioning. Auto layout is what tells the agent the responsive intent, and it maps cleanly to flexbox. (Figma, auto layout guide)
- Set padding / gap / direction / alignment in the auto-layout panel, don't hand-nudge — they map directly
to
padding/gap/flex-direction/ alignment. - Use hug vs fill deliberately (buttons/cards hug = content-sized; sections fill =
flex-grow:1); don't mix fill children under a hug parent. - Nest auto-layout frames to express the real DOM hierarchy (header + content each with its own padding/gap).
Components / variants (10–12)
- Componentize anything reused (button / card / input / nav item).
- States of one thing = variants; genuinely different things = different components; organize by named properties (Size / State). (variants)
- Make every interactive state a variant (default / hover / active / focus / disabled) so the agent has an implementable state to build.
Naming (13–15)
- Replace default names with intent names:
Frame1268/Group5→CardContainer/ProductImage/CTA_Button. - Match component names to what developers call them in code, encoding hierarchy with
/(Button/Primary/Default); write the convention down before the first component. (LogRocket) - Give pages / sections / frames clear, navigable names — think about how a developer or agent finds this frame. (Dev Mode guide)
Dev Mode / Code Connect readiness (16–18)
- Use Code Connect to link Figma components to real code — Figma calls it the first path to consistent
code-side reuse; without it the model can only guess. (Needs Org/Enterprise; without it, use the markdown
Need→Tokencontract from #2/#13.) - Use annotations + dev resources to convey intent visuals can't (behavior / alignment / responsiveness; link to the real component / doc).
- Select small frames (one Card, one Header), not big heavy frames — small selections keep the MCP context controllable and the output predictable. (custom rules)
Don't use raster placeholders (19–20)
- Never hand the agent a flattened / rasterized mockup or a pure-image frame — an image has no semantics, so the model only produces a pixel snapshot that drifts from the design system. Build with real layers + variables + components. (LogRocket)
- Avoid unnamed / deeply-nested layers mixed with tokens (the inverse of #13/#2).
How these map to the MCP gotchas
- Empty
get_variable_defs= the design bound no variables (not an MCP bug). #1–#5 are the fix; thefigma-design-fetchpre-fetch lint makes "variables bound" a gate before code-gen. get_design_contextquality tracks structure — auto layout / componentization / semantic names / Code Connect are exactly what make it emit componentized code instead of a div-soup.- Low-fidelity mockup → pixel snapshot = breaking #19; the fix is entirely on the design side.
- Code Connect paywall (needs Dev/Full seat + Org/Enterprise): when you lack it, #2/#13's markdown
Need→Tokentable + component barrel is the substitute mapping contract.
Companion
figma-design-fetch— the agent-side pipeline that consumes a design authored to these rules; its pre-fetch lint enforces #1 / #6 / #13 / #19 as a gate.
Provenance
The Figma-side (Part B) half of the Figma→code pipeline, distilled from Figma's official "structure your file" guidance + the aliafsahnoudeh reference project. Kept as a standalone designer-facing spec so the design and the agent-side pipeline evolve together.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most design frontend skills give in ~1.8k tokens
Counted across 1,179 of the 2,086 authors here whose files we hold, read 2026-09-06
- Commit to a bold aesthetic directionin 31 of 1179, across 24 files
- Prefer component composition over inheritancein 28 of 1179, across 14 files
- Animate only transform and opacity propertiesin 27 of 1179, across 22 files
- Memoize expensive computations with useMemoin 26 of 1179, across 13 files
- Use semantic HTML elementsin 24 of 1179, across 23 files
- Virtualize long lists for performancein 21 of 1179, across 10 files
- Use CSS variables for design tokensin 20 of 1179, across 14 files
- Implement loading, empty, and error statesin 20 of 1179
- Lazy load heavy components with Suspensein 19 of 1179, across 8 files
- Respect prefers-reduced-motion media queriesin 18 of 1179, across 10 files
- Prioritize CSS-only animations for HTMLin 18 of 1179, across 16 files
- Use compound components for related UI elementsin 18 of 1179, across 7 files
Said here and by no other author read
- Bind every property to a Figma variable
- Name semantic tokens by intent
- Prefer variables over styles for tokenizable elements
- Set code syntax on variables
- Componentize all reused elements
- Make every interactive state a variant
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.