Notes from building an AI design collaborator · part 5
I taught the AI to push designs into Figma. Then it quietly stopped.
· 3 min read
Most AI design tooling runs one way, from Figma into code. I wanted the other direction. My workflow builds working prototypes in code, and the rest of the team lives in Figma, so the prototypes had to land there too, as real editable layers and not flat pictures. Getting that to work turned into a runtime hunt. Twice, as it turned out.
Getting it working the first time
The capability existed. Point the tool at a Figma file, it captures your rendered prototype and drops it in as frames. Lovely, except it only worked in one specific place. Not the desktop app, not the cloud version, only a plain terminal session. It took me a shamefully long time to work out that the deciding factor was the runtime, not the Figma plugin like I first assumed.
The unlock was to stop fighting it. The main workflow can run wherever it likes, and when it's time to capture, it hands that one step off to a small terminal process spawned just for the job. Along the way I collected the unglamorous lessons. Capture one browser tab at a time or the background ones stall. Drive the prototype into the right state before you grab it. Mind the permissions. It worked, I shipped it, I moved on.
Then it started lying to me
A few weeks later the pushes started coming back wrong. Not broken, wrong. Instead of capturing the real screen, the AI was building a rough approximation of it and then telling me it had done the capture.
That's the dangerous kind of failure. If it had thrown an error I'd have caught it in a second. Instead it reported success and handed me something worse, and the only reason I noticed at all was that the result looked slightly off.
So I went hunting. Permissions? No. The model? Swapped it, same thing. Did the runtime change? Did the vendor pull the tool? Was I just holding it wrong? One by one, no.
The real answer was mean. Two integrations were both claiming the same slot, and the one that kept winning didn't carry the capture tool at all. So every single time, the AI reached for the slot, found the lesser tool sitting in it, and used that instead. Quietly. It genuinely believed it was doing the right thing.
The fix was to stop leaving it to chance. Pin the exact integration I wanted, and then check that the real tool is actually present before every run instead of assuming it's there.
What I took from it
Two things.
The first is that the last mile of an AI workflow is almost always a plumbing problem, not a model problem. The clever part worked on day one. It was the wiring that bit me, both times.
The second is the one I keep repeating to myself. An AI that quietly does the lesser thing is more dangerous than one that fails loudly. A crash you catch. A confident downgrade you ship. So now "did it actually use the right tool?" is a check the system runs on itself, not a thing I trust.
Part of a series on building an AI collaborator for our design team at Xflow. Each post stands on its own.
- ai
- figma
- prototyping
The rest of Notes from building an AI design collaborator
- 1. I stopped describing my product to AI. I just gave it the HTML.
- 2. I gave the AI my design process, not my design decisions
- 3. I turned my design process into a dozen small skills, not one giant prompt
- 4. I built a free tool that gives your AI your real product
- 6. We rebuilt our Figma design system out of the code, not the other way round
- 7. We ran our design process on itself, and it broke in useful ways
- 8. How do you teach an AI your taste?
- 9. It worked great on the smart model. Then I ran it on a cheaper one.
- 10. The AI told me our brand colour with total confidence, and it was wrong
- 11. A screen list lies. I found a whole feature I didn't know we shipped.
- 12. Our documentation updates itself, because updating it is the AI's job
- 13. I sat down to turn my workflow into a swarm of agents. Most of it refused.
- 14. Every modal in our app shared one URL. Our analytics couldn't tell them apart.
- 15. My AI's rules only worked because one tool bothered to read them
- 16. Six designers, one GitHub account, and a script that saves us from ourselves
- 17. "Out of scope" usually means "we'll repaint this in six months"