framesmith 1.8: click the design, tell the agent Framesmith 1.8 introduces structured human feedback for AI-driven UI design, allowing users to click on elements and attach comments that are stored as git-diffable data. This closes the gap between machine and human critique, ensuring agent actions are grounded in specific design nodes. Open comments block design approval until resolved, giving human feedback priority over automated scores. framesmith 1.8: click the design, tell the agent “The third card — no, the other one. The one with the button. Yeah, make that blue.” If you’ve ever reviewed a design with someone over a screen share, you know that sentence. Now imagine the reviewer is you and the person on the other end is an AI agent that can’t see your cursor. Every note you type, it has to re-ground against the design by guessing which element you meant. That guessing is where feedback rounds go to die. That was the last unstructured gap in framesmith’s loop, and 1.8 closes it. Machine critique was structured. Human critique wasn’t. Quick recap for anyone new here: framesmith https://github.com/vicmaster/framesmith is an open-source MCP server that gives an AI agent a visual design canvas. The agent sketches a UI as a scene graph, framesmith renders it to real HTML/CSS and a screenshot, and you review it in the browser before any framework code gets written. For a while now, the machine’s side of critique has been fully structured. The evaluator returns scores, per-node issues, and a present-or-keep-working directive the agent can act on mechanically — that was the heart of the 1.7 release /blog/framesmith-1-7-knowing-when-a-design-is-done . The agent never has to guess what the evaluator meant, because the evaluator speaks in node ids. The human didn’t. Your feedback arrived as chat prose — “the subscribe button feels too loud” — and the agent had to map that sentence back onto the scene graph on its own. The tool knew exactly which node every pixel belonged to. You, the person actually approving the design, had no way to say so. So the most important feedback in the loop was the only feedback the agent had to interpret by guessing. Point and tell 1.8 gives the human the same structured channel the machine already had. Toggle Comment on any canvas in the viewer and every element becomes a target: crosshair cursor, hover outline, click to drop a note. A breadcrumb in the comment popover lets you re-scope the anchor — from the exact text you clicked, up to its card, its section, or the whole page — so the note lands at the level you actually mean. Clicking a label but meaning “this whole card”? Move the anchor up one level and say so. Under the hood, that comment isn’t chat. It’s structured data stored on the canvas’s own JSON metadata.feedback , carrying the anchor node id and a snapshot of the node at comment time. Two things fall out of that choice that matter more than they sound: Feedback is git-diffable. In a repo-bound workspace, your notes are checked in next to the design. A teammate’s git pull delivers your comments to their agent. Design review stops being an ephemeral chat log and becomes part of the repo history. A running server picks up new comments with no restart. You comment in the viewer, the agent sees it on its next look. No round-trip through a chat window. The agent gets two new tools. get feedback returns the open comments with their node context, so it can turn each note into an edit without extra lookups — including an orphaned flag when the anchored node no longer exists usually the concern still applies to whatever replaced it . resolve feedback closes an item with a one-line reply that shows up next to your comment in the viewer. That last part is the quietly nice one: you get a real, visible back-and-forth between reviewer and agent, not a black box that maybe did what you asked. Your note outranks the score Here’s the design decision I care most about. An open comment carries the same weight as the evaluator’s own findings: canvas evaluate ’s directive stays NOT READY while any feedback is open — even at a 99/100 score. canvas list rows show an open-comment count, and init reports the workspace total at the start of a session. In other words, the agent can’t present a design to you while your own note is sitting unresolved on it, no matter how highly the heuristics rate it. The human’s comment outranks the machine’s opinion. That’s the correct ordering — a quality score is a proxy for “someone would approve this,” and you’re the someone. I found a real bug dogfooding it I built 1.8 the way I try to build everything: by using it for real before shipping it. In the launch session, I clicked the Subscribe button on a test design and typed “can you change the color for the subscribe button.” The agent read the comment over MCP, recolored the button, and replied through resolve feedback . That part worked on the first try. The part that didn’t: that same session surfaced a cross-process bug. ensureFresh — the guard that stops the server from clobbering a canvas file that changed underneath it — covered bound repositories but not the global store. So a comment written by the standalone viewer could race a running server. Found it live, fixed it in the release. And fittingly, the viewer’s quality badge caught the agent trying to present that very test canvas below the quality bar, which it then had to polish up to 99/100 under its own operating contract before it was allowed to hand it back. Nothing teaches you where the seams are like being your own first user. Where this doesn’t help Being honest about the edges, same as last release. Point-and-tell makes feedback unambiguous ; it doesn’t make it good . If your note is “make it pop,” the agent now knows exactly which element you mean and still has to guess what “pop” means — anchoring fixes the where , not the what . And this only pays off when there’s a human in the review loop at all; if you’re letting an agent design fully unattended, structured human feedback is a channel you’re not using. It’s built for the case where a person actually reviews the work, which — for anything that ships to real users — should be most of the time. Get it npm i -g email protected or just: npx framesmith No breaking changes — existing canvases and tool calls work unchanged. If you run framesmith as an MCP server, restart it to load the two new tools and the comment UI. framesmith is open source MIT , renders to plain HTML/CSS, stores designs — and now your feedback on them — as open JSON you own in your repo, and works with any MCP-compatible client. Release notes here https://github.com/vicmaster/framesmith/releases/tag/v1.8.0 .