
I stopped letting claude grade its own figma screens. build passes a pixel diff and a linter or it isn't done
every AI design setup i've tried has the same shape: the model generates, the model looks at what it generated, the model says done. figma make does it. the figma mcp does it. every console-style bridge does it. the screenshot goes back to the same model that made the mistake, and claude always thinks it looks right.
the standard fix is more context. design system, references, hardened prompt. i did all of it, and it helps, but it shapes what gets generated. it doesn't tell you when this particular screen came out wrong. i still got builds with the right tokens and the right components where the padding had drifted and a whole section was quietly missing. rules all followed, screen still wrong.
and with metered pricing that's not a small annoyance. run 4 comes out broken, you prompt again, that's more tokens. as someone put it in the figma make thread, while we pay for tokens instead of results, sloppy output is the business model working.
you can't make the model deterministic. you can make the acceptance deterministic. so i built that part: claude builds in figma through a plugin, the plugin screenshots what actually landed on the canvas, and the screenshot doesn't go back to claude. it goes to a pixel diff against your reference, plus a linter with hardcoded rules walking the real layers. swapped icons, drifted padding, placeholder rectangles. fail either and the screen can't be marked done, claude gets the defect list and keeps working. and every caught defect lands in a shared ledger, so a mistake anyone's session made last month becomes a rule everyone's gate enforces now.
the model is still a slot machine. it just lost the right to say "done."