0.9.0-beta.22Beta

Released

Added

  • Comments, in the file. Press C (or the new Comment button after Text in the toolbar) and click anything on the canvas to leave a comment on it; Ctrl+click pins it to the deepest layer and Alt+click to the page. Each thread is a file in the project's own comments/ folder, so comments open offline, travel with the folder and need no account.

    • Pins show every open thread on the page, with the author's initial or an agent's spark, a dot for what is new since you looked on this PC, and a count that merges pins too close together. A pin stays on its layer through moves, scaling and rotation, and stays where it was if the layer is deleted. Drag one in comment mode to move it. Shift+C, or View → Comments on the Canvas, hides or shows them.
    • A thread opens beside its pin: reply (Enter sends), resolve and reopen (a reply reopens a resolved thread), and edit or delete your own messages, with Undo in the toast. Agents' messages say whose agent they are. Text is always shown as plain text.
    • The Comments tab joins Design and Prototype in the right panel (Inspect · Comments in Dev Mode): Open and Resolved, this page or every page, filter by who started a thread, and search every message.
    • A comment never changes the design: Ctrl+Z on the canvas never removes one, and you can comment in view only and Dev Mode.

    Save a Copy for Sharing and polyform query --comments come next. (#211)

  • Agents can read and answer your comments. Two new agent tools, 30 in all: get_comments reads the threads (by page, by layer and what's inside it, open or resolved, by who started them, or only what changed since last time), and comment starts a thread, replies, resolves, reopens, and edits or deletes the agent's own messages, never yours.

    • A new Comments permission in Agent → Agent Connection, on by default, in a COMMENT group of its own: the presets don't change it, and it stays on in view only, since a comment changes no pixel. Turn it off and both tools are refused.
    • Whose comment it is comes from Polyform, not from the agent: its client's name, its session, and "agent, for" your name.
    • When an agent fixes what a comment asked, it resolves the thread naming its change. The thread then reads "Resolved by" the agent with See the change, which now opens the Changes tab on that exact step, as the current row, with its outlines on the canvas. If the change is no longer in the file's history, the thread says so instead.
    • Roll that change back, or undo it, and the thread reopens ("Reopened: its change was rolled back"), and the agent is told on its next call. Restore it (or redo it, or undo the rollback) and the thread is resolved again, unless someone has written in it since.
    • Each step in the Changes tab says which comments it resolved ("Resolved Maya’s comment: “The button corners l…”"), or reopened when rolled back; click the line to open the thread.
    • An agent can start at most about 30 threads a minute and 200 a session, so a runaway agent can't cover your file in pins. Replies and resolves aren't limited.
    • Hold pauses an agent's comments like its edits; your own drag doesn't hold them up. Through polyform mcp serve, agents can read comments but not write them yet. The agent guide has a new topic, polyform://guide/comments, and the skill is at 1.21.0.

    (#211)

Changed

  • Clearer words when Polyform won't save a project somewhere. The box that refuses a place already taken now says what Polyform did before why ("Polyform doesn't save over another project: its design and history would be lost."), suggests saving inside a folder that already holds files, explains why a file of that name is in the way, uses typographic apostrophes throughout, and its button reads Choose another place… when the place must be outside a project. (#262)

  • The Agent connection window asks what the agent may do first, then offers Start, as the website's Connect steps do: choose, start, paste. The start card keeps every state, and scrolls into view when the state changes, so Hold and Stop stay one click away. (#270)

  • The Changes tab's waiting messages read more naturally. When a rollback that waited finds something new building on it, the box says so in one sentence ("The history changed while this waited: 1 more step builds on it now, and you edited 2 of its layers."). A session's timeout line says "it" rather than "the agent", and an agent with no name reads "an agent" mid-sentence. (#262)

  • An agent's script that forgets to wait for Polyform is told so, at the line. Every call a run_script script makes returns a promise. In the first real-agent run of scripts, 7 of 13 scripts used one as if it were the answer and failed with "cannot read property 'length' of undefined". Now:

    • Reading a call's promise as its answer stops the script at that line with "polyform.getNode(…) gives a promise, not its answer: await it". Nothing it did is kept, as before.
    • Any other error says which calls were never awaited.
    • When a script finishes without waiting for some of its calls, they still finish, and the reply names them. If one of them failed, the script never heard, so the run fails and keeps nothing.
    • The tool's description, the scripts topic of the guide, the instructions and the skill (1.20.0) now say plainly, with an example, that every call must be awaited.

    (#260)

Fixed

  • A step you rolled back and restored couldn't be rolled back again. Its row offered Roll back…, and every choice but Also roll back my edits said "nothing can go back: everything it changed was changed again since", because your own Roll back and Restore counted as later edits. Now a rollback and the restore that undid it cancel out: the step rolls back again at once, as one undo step, as often as you like, and a comment its change resolved reopens and resolves again each time. A real edit of yours since still stays, as before. (F-351)
  • Rolling back steps one at a time, newest first, stopped at the second. Rolling back an agent's last step and then the one before it, when both changed the same thing, was refused the same way. Now a step you rolled back no longer counts as building on the steps before it. (F-352)
  • The Changes tab said "Corner radius set → set". A corner radius now reads as the Inspector shows it ("0 → 12 (+12)", or "12 · 12 · 0 · 0" when the corners differ), and so do per-side strokes; a material shows its shader, and no other value reads "set" any more. (F-350)
  • An agent reading a layer with hundreds of children could lose the reply. get_node on a 500-child frame returned 400 children, 57,087 characters, which is more than Claude Code accepts in one tool result. The agent never saw it. A reply now stops at about 32 KB and says where the rest start, as get_document already did. The same frame now reads in three calls. (F-347)