Open a busy Figma file the week before a launch and the comment count looks like a small inbox. Three hundred comments across forty frames, half from the PM, a third from the engineering lead, the rest from stakeholders who joined a review and left a "love this" or a "are we shipping the old icon set or the new one?" Some of those comments are blockers. Most are not. The designer has to read every one to find out which is which, and the designer has work to do.
The cost of that triage is not the reading time. It is what falls through. A blocker buried on frame 27 gets surfaced two days late, the engineering ticket gets cut without the dependency, the release slips. The Figma comment thread and the engineering ticket are two different surfaces, and the link between them is human attention. This walkthrough covers an agent that watches comments across files, classifies them by intent, routes blockers to the right Slack channel, and turns the leftover ambiguity into a tracked decisions list.
What this agent does
Once an hour, the agent pulls the comment feed from every Figma file in the project via the REST API, classifies each new or modified comment by intent, identifies clusters of comments that touch the same component or frame and seem to disagree, and produces three outputs: a blocker queue posted to a design-and-eng Slack channel, a draft-reply queue in the designer's private channel, and a running open-decisions list that the PM and design lead review weekly.
It does not edit the Figma file. It does not resolve comment threads. It does not auto-reply. It does not move layers, change colors, or touch component properties. Figma stays a designer-only surface; the agent reads and reports.
If you have not seen the broader pattern, the read-classify-route loop is described in what an AI agent can actually do. The Slack-triage cousin to this agent lives at AI agent for Slack triage; this Figma version differs because the substance of design comments is qualitatively different from message-channel chatter.
Sources of truth
The Figma REST API is the only authoritative input. The agent reads:
- Comments endpoint. The
/v1/files/:key/commentsendpoint returns the comment list with author, timestamp, parent thread, file position, and resolved state. Documented at the Figma developers reference. - File metadata. The file name, last-modified date, frame structure, and component IDs. Used to map comments to context.
- Project structure. Which files belong to which project, which frames are flagged as the current sprint, which are reference material.
- Author roles. Membership and role on the team. A comment from a PM weighs differently from a comment from a stakeholder.
The agent does not read the design layers. It does not need pixel-level access. The classification work is comment text plus thread context plus author role. Keep the surface small; small surfaces have fewer ways to fail. For the broader principle, see how to give agent multiple tools.
The six comment intents
Every comment is classified into exactly one bucket. Confidence below threshold escalates to a human review queue rather than guessing.
- Blocker. The comment identifies something that prevents ship. "This component does not exist in the design system yet, eng cannot build it." Routes immediately.
- Decision-needed. The comment surfaces a genuine open question that requires a call. "Do we use the new icon set or the old one for this release?" Accumulates in the open-decisions list.
- Question. The comment asks for clarification, often answerable from the spec or prior discussion. "What is the empty state for this view?" Drafts a reply for the designer.
- Nit. A small stylistic preference. "Could the spacing be 4px tighter?" Logged but not surfaced unless it clusters.
- FYI. Context-share, no action requested. "We have a meeting Thursday to review this." Logged silently.
- Kudos. Recognition. "This is gorgeous, well done." Logged silently, optionally aggregated for the designer's morale digest.
The classifier is calibrated against real comment history from the team's prior projects. Generic intent models miss design-specific language: a designer's "could you" usually carries more weight than the literal verb suggests. The first month of operation, every classification ships with a confidence score and the designer corrects the misses; the corrections become training signal for the next iteration.
Decision-tracking output
The agent produces three durable artifacts that live outside Figma.
The blocker queue. A Slack channel called #design-blockers receives a structured message for every comment classified as a blocker, with confidence above threshold. The message includes the file name, the frame, the comment author, the comment text, and a deep link back to the Figma thread. The channel is where design, PM, and eng converge on what cannot be built yet.
The draft-reply queue. The designer's private channel receives a daily digest of comments classified as questions, each with a drafted reply pulled from prior discussion in the same file, the design spec if linked, and the project context. The designer reviews, edits, and posts the reply in Figma manually. The agent does not post.
The open decisions list. A weekly document, regenerated Monday morning, that lists every comment thread classified as decision-needed and still unresolved after five business days. Each row shows the file, the frame, the substance of the disagreement, who flagged it, and a suggested decision owner. The PM and design lead review the list in their Monday sync. The agent surfaces; humans decide.
The clustering layer sits underneath. If three or more comments across the file touch the same component or frame and share a classifier signal that they disagree on the same thing, the agent flags the cluster. Three independent comments about the same icon set is not a nit; it is a real argument that needs a call.
Routing rules
Routing is mechanical and documented; the agent does not invent destinations.
- Blocker, confidence above threshold. Posts to
#design-blockerswith @-mention of the file owner. - Blocker, confidence below threshold. Goes to the designer's review queue with a "is this a blocker?" prompt.
- Decision-needed. Accumulates in the open-decisions list. Does not Slack-ping unless the thread is older than 5 days.
- Question. Drafts a reply, sends to designer's daily digest.
- Nit. Silent log. Surfaces only if it clusters with other comments on the same element.
- FYI, Kudos. Silent log. Optional weekly digest for morale.
For Slack integration patterns generally, see how to connect agent to Slack. For monitoring the routing for false positives, see how to monitor agent activity.
Guardrails
- Read-only on Figma. The Figma access token has read scopes only. The agent cannot edit, resolve, or reply in Figma.
- No auto-reply on design comments. Drafts only. The designer posts. Design tone is too personal to delegate.
- Confidence threshold. Below threshold goes to human review, not silently classified.
- One Slack message per blocker per file. If the same blocker reappears across multiple frames, the agent links them in one thread; no spam.
- Human approval for cluster escalation. A cluster flag posts as a draft to the design lead; the design lead decides whether to escalate to the open-decisions list.
- Token scope review monthly. Verify the token still has read-only on the Figma side.
For the broader approval pattern, see how to add a human approval step. For agent safety generally, see AI agent safety and guardrails.
Common mistakes
- Treating nits as blockers. The classifier ships overly conservative and floods the blocker channel. Calibrate down. A blocker that turns out to be a nit costs nothing; a flood of nits trains the team to ignore the channel.
- Ignoring kudos. Kudos are not actionable but they are signal about morale and design quality. Aggregate, do not discard.
- Missing thread context. Classifying the latest reply in isolation rather than reading the full thread. A "no" in reply to a question reads differently from a "no" as a fresh comment.
- Treating the agent as a decision maker. The open-decisions list is a surfacing tool. If the agent starts suggesting outcomes, the design lead pushes back; trust erodes.
- Auto-reply on questions. Even with a good draft, posting in Figma without designer review is a category mistake. Design comments are a conversation surface, not a ticket queue.
Frequently asked questions
Does this agent edit my Figma file?
No. The agent reads comments through the Figma REST API and writes nothing back to the file. It does not resolve threads, does not auto-reply, does not move layers. Its outputs live outside Figma: a blocker queue in Slack, a draft reply queue for the designer, and a weekly open-decisions document. The Figma file stays a designer-only surface.
How does it tell a blocker from a nit?
Three signals. First, intent classification on the comment text: phrases like "we cannot ship until" or "this breaks the spec" read as blocker; "maybe a touch lighter" reads as nit. Second, author role: a comment from the PM or engineering lead weighs differently from a comment from a stakeholder. Third, thread state: a thread with three back-and-forths and no resolution reads as a real disagreement, not a nit. Confidence below threshold goes to a human review bucket.
What is the open decisions list?
A weekly digest of comment threads that the agent classified as decision-needed and that have remained unresolved for more than a configurable window, typically 5 business days. Each entry shows the file, frame, comment author, the substance of the disagreement, and a suggested decision owner. The list goes to the PM and design lead each Monday. The agent does not decide; it surfaces.
Can the agent draft replies for me?
Yes, but as drafts only. For each comment classified as a question, the agent drafts a reply based on prior conversations in the same file, the design spec if linked, and the project context. The draft lands in the designer's queue. The designer reviews, edits, and posts. Auto-posting replies is a hard-no even after months of calibration; design tone is too personal to delegate.
What if my file has 300 comments? Can it really sort all of them?
Yes. The agent processes the full comment list on first run, classifies each, and produces a triage report. Most files of this size have 10 to 20 real blockers, 30 to 50 questions, and the rest are nits, FYIs, or kudos. The triage cuts what the designer has to read by 80 percent. Subsequent runs only process new or modified comments since the last run.
Three takeaways before you close this tab
- Classify, do not summarise. Six labels, mechanical routing.
- Read-only on Figma, write outside. Slack for blockers, docs for decisions.
- Cluster signals are real arguments. Three comments on one thing is a call to make.
Sources
- Figma Developers, "REST API: Comments endpoint", retrieved 2026-05-12, figma.com/developers/api
- Figma, "DesignOps: scaling design teams" blog category, retrieved 2026-05-12, figma.com/blog
- Nielsen Norman Group, "Design Reviews: A Guide", retrieved 2026-05-12, nngroup.com/articles/design-critiques
- Aryan Agarwal, "Gravity design-comment agent guardrails", internal v1, May 2026, About