velt-customize plugin reads your design from Figma, plans the customization surface by surface, builds it in your app, and verifies each result against the design in a real browser, or honestly reports what the Velt SDK can’t do yet.
Cursor Plugin
velt-js/velt-figma-plugin-cursor
Claude Code Plugin
velt-js/velt-figma-plugin-claude
When to Use
- You have a Figma design for how Velt comments or notifications should look in your product
- You want your AI agent to build the customization for you (CSS, wireframes, or primitives) instead of hand-writing it
- You want every result verified against the design in a live browser, not just generated and hoped for
This plugin customizes Velt’s UI on an app where Velt is already installed and working. If you haven’t set up Velt yet, start with the Installation Plugin or Quickstart first.
Prerequisites
- Node.js 18+
- A React app with
@veltdev/reactinstalled, authenticated, and rendering Velt’s default UI - A Figma design of your desired Velt UI, plus a Figma personal access token (figma.com → Settings → Security → Personal access tokens)
- Chrome with the Claude in Chrome extension (Claude Code), or Cursor’s built-in browser, to verify results against the design
playwright-core(Cursor install step below) for device-resolution screenshot capture
Quickstart
- Cursor
- Claude Code
- Clone the plugin repository and install it:
~/.cursor/. Fully restart Cursor afterwards. If you later move the repo or pull updates, run npm run all again.- Store your Figma token (kept in your OS keychain, never in a file):
- Install the one screenshot dependency:
- Open your app’s repo in Cursor (not the plugin repo), make sure the app is running, and start a run:
<app-url> is the exact page where Velt renders in your running app (e.g. http://localhost:3000/inline-comments?documentId=my-run-1). Include a run-unique documentId so runs never pollute each other’s comment data.A Loop is just a Figma section or frame that groups the design frames you want built, in order. The Figma URL must point at one Loop node in your file (right-click the Loop → Copy link), not the whole file. Keep a Loop to 8 frames or fewer; split bigger designs into several Loops and run them one at a time. The app URL is required too; without it the run halts and asks for it. Preflight verifies that Velt actually renders at that URL.
A full customization run can take up to about 4 hours, depending on Loop size,
--budget, and how many fix iterations the verification agent (the Judge) needs. Plan to leave the editor and app running until the handoff report finishes.Run Options
What’s Included
Available Commands
How It Works
Each run follows a plan → approve → two-phase build → verify loop:- Plan structure: reads your Figma Loop via the Figma REST API, recognizes which Velt component each design element is, and picks the cheapest viable approach per surface
- Approach gate: shows you a per-surface coverage matrix with a recommendation and waits for your confirmation before building anything
- Structure build: mounts a bare wireframe skeleton (no cosmetic CSS) family by family
- DOM snapshot → style plan → style build: snapshots the real rendered DOM, maps the design’s exact values onto real selectors, then applies styles
- Judge → fix: an independent fresh-context Judge (
velt-judge-2) verifies the whole design in a live browser with screenshot evidence. Each defect is fixed and re-measured until it’s clean, or documented as a blocker or SDK gap - Report: coverage achieved, screenshots, any SDK gaps, and the generated code under
components/velt/ui-customization/
- Cursor
- Claude Code
/velt-customize-replay (Cursor) or /velt-customize:replay (Claude Code) opens a session-replay player over every stage, measurement, and fix, with screenshots, so you can scrub to where something drifted.
Troubleshooting
The run halts at preflight
Preflight checks every prerequisite (Figma token, browser, target app URL, Node version) and halts with the exact fix if any is missing. Follow the printed instruction and re-run the command.”No Figma token” error
Design intake uses the Figma REST API and requires a token. There is no Figma desktop fallback. Store one withfigma-extract.mjs token set, or set the FIGMA_TOKEN environment variable in CI/cloud environments. Verify with figma-extract.mjs token status.
Commands don’t appear after install
Restart your editor fully. Cursor loads plugin files from~/.cursor/ (re-run npm run all after moving or updating the repo), and Claude Code registers plugin commands at startup (or use /reload-plugins).
App URL doesn’t render Velt
Pass the exact page where Velt comments or notifications are mounted, not just the app origin. Preflight verifies that URL; if Velt isn’t there, fix the URL and re-run. Include a uniquedocumentId query param so concurrent runs don’t share comment data.
Next Steps
- UI Customization: the customization guide the plugin agents read on every run
- Installation Plugin: Velt SDK knowledge, skills, and MCP servers for your editor
- Quickstart: set up Velt in your app first

