Design UI pages in Subframe with AI-generated variations, then implement with code.
Works with
Create new pages or redesign existing UI with multiple design variations to explore options before committing to code
Use design_page for new designs and edit_page for targeted changes to existing Subframe pages
Generates production-ready React/Tailwind code that matches your design system; refine visually in the Subframe editor before implementation
Update project theme globally with edit_theme to
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versiondesignExecute the skills CLI command in your project's root directory to begin installation:
Fetches design from subframeapp/subframe and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate design. Access via /design in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
0
total installs
0
this week
381
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
381
stars
Design pages using the design_page and edit_page MCP tools. design_page creates AI-generated design variations that the user can preview and select. edit_page applies targeted changes directly to an existing Subframe page. Both produce designs the user can refine visually in the Subframe editor and then implement in code. Update the theme for the entire project using edit_theme.
Don't write UI code directly. Subframe generates production-ready React/Tailwind code that matches the design system. Design first, then implement with /subframe:develop.
Use /subframe:design when the user:
The key value: /subframe:design and /subframe:develop bridge coding and design. They work in both directions — create designs while coding and then ensure your code exactly reflects your design.
If you cannot find the design_page tool (or any Subframe MCP tools), the MCP server likely needs to be authenticated. Ask the user to authenticate the Subframe MCP server. If the user is using Claude Code, instruct them to run /mcp to view and authenticate their MCP servers, and then say "done" when they're finished.
Subframe knows about the design system and theme. Your job is to provide context from the user's codebase.
You do not have to run /subframe:setup before designing. The design_page MCP tool works independently — it only needs a projectId and an authenticated MCP server. Local project setup (.subframe/ folder, synced components, Tailwind config) is not required to design pages.
.subframe/sync.json if it exists. If there is no .subframe/sync.json or no projectId found, call list_projects to get the available projects. Each project includes a projectId, name, teamId, and teamName.
teamName to disambiguate. If the user already mentioned a specific team or project name, match it against the teamName and name fields — but still confirm before proceeding. Never silently pick a project when multiple exist.design_page or edit_page? Then call the respective MCP tool:
design_page → Creating something new, exploring multiple directions, or redesigning existing UI where the user wants options to choose fromedit_page → Making targeted changes to a Subframe page that was just created in this session (via design_page) or that the user provided via an MCP linkdesign_page — New Pages & RedesignsUse design_page when:
design_page when the user wants to explore new design directions or add new featuresHow much context to gather and how many variations to generate depends on the task:
| Task | Context | Variations |
|---|---|---|
| New page (open-ended) | Data types (codeContext) |
4 — explore the design space |
| New page (with reference pages) | Reference pages (additionalPages if in Subframe, codeContext if not), data types (codeContext) |
1-2 — stay close to the reference pages |
| Redesigning existing UI | The current page (additionalPages if in Subframe, codeContext if not; note what to keep vs change in the description) |
2-4 — depending on how open-ended |
| Recreating an existing UI | The current page's exact markup and styles (codeContext) |
1 - recreate the UI from code exactly |
Always include when available:
additionalPages for Subframe pages — pass the pageId returned by design_page, or the page ID from a pasted MCP link. Use codeContext for pages that only exist in the codebase.codeContext)codeContext)When including code in codeContext, distinguish between Subframe components and non-Subframe components:
.subframe/sync.json — typically @/ui or src/ui) or from @subframe/core. Include these as-is — Subframe understands its own components.codeContext. If the expanded markup uses Subframe components internally, keep those Subframe references intact.For example, if a page uses <LoginForm /> and it's not from the Subframe directory, expand it into the form's JSX markup (inputs, buttons, layout, Tailwind classes) rather than passing <LoginForm />.
Each variation is a prompt that drives a unique design direction.
When you have reference pages (additionalPages), use fewer variations (1-2) and keep them grounded in the reference. The variations should refine or extend the existing design, not diverge from it. For example:
When starting from scratch (no additionalPages), use more variations (4) to explore the design space:
More variations = more exploration. Fewer = more focused. Default to fewer when strong context exists.
When designing multiple related pages (flows, CRUD, etc.):
additionalPages as contextflowName to group related pages togetheredit_page — Targeted Edits to an Existing PageUse edit_page for targeted changes to a specific Subframe page. Provide a page identifier and a description of the changes — Subframe handles the rest.
description: Describe what to change. You can include code snippets for precision, but it's not required.id, name, or url. Use list_pages to find existing pages if needed.The edit is applied immediately. Present the returned pageUrl to the user so they can view the updated page in Subframe.
edit_page vs design_pageedit_page: Targeted changes to an existing Subframe page. Fast and precise.design_page: New pages, redesigns, or exploring multiple design directions.When NOT to use edit_page: If the user has existing UI in their codebase but no corresponding Subframe page, or if they want to explore multiple design options, use design_page instead.
For design_page, present the reviewUrl as a clickable markdown link. The user will:
From there, the user may continue refining in Subframe or return here and ask you to implement the design in code. Do NOT ask the user which variation they prefer or present variation options as a multiple choice in chat. Variation selection happens in the Subframe editor, not here. Simply present the review URL and let them know they can ask you to implement the design once they're ready.
For edit_page, the edit is applied immediately. Present the returned pageUrl as a clickable markdown link so the user can view the updated page in Subframe. The user can undo the edit in the editor if needed.
Internally track the pageId from the response — you'll need it for /subframe:develop, additionalPages for future designs, or edit_page for future edits — but don't mention it to the user.
Do NOT proactively call get_variations after design_page. The user reviews and selects variations in the Subframe editor, not in chat. Only call get_variations when the user comes back and explicitly asks to iterate on or combine designs — for example, "I like the layout from variation 1 but the color scheme from variation 3", or "keep the header from the current page but use the card layout from variation 2."
get_variations returns:
currentPageCode — The current page code if the user has already accepted a variation for this page, or null if no variation has been accepted yet. This reflects the live state of the page, including any edits the user made in the Subframe editor.variations — The generated design variations from the most recent design_page call.Important: The variations can be very token-heavy. After calling get_variations, extract currentPageCode from the response first — it determines your next step.
currentPageCode exists — The user already has a page. Use edit_page with a description incorporating ideas from the variations or the user's feedback. You don't need to deeply analyze every variation — just reference the ones the user mentions.currentPageCode is null — The user hasn't accepted any variation yet. Use design_page to iterate, passing the relevant variation code via codeContext along with the user's feedback in the description. Note: this creates a new pageId — use it for subsequent get_variations calls.If the user indicates an issue with their theme and requests changes, use the edit_theme tool to update the theme in Subframe. The designs in Subframe will then reflect those changes. edit_theme is able to update color, border, corner, and shadow tokens as well as typography. Use get_theme to understand the current theme before formulating your changes.
The description parameter should describe what changes you want to make to the theme. It can include exact token values if needed.
If you are currently working on a page with the user, you should pass that page information into the edit_theme tool call.
If a page is provided, the tool will return a URL where the user can review and apply the theme changes. If no page is provided, the tool will return a URL where the user can see the updated project theme. The user cannot review the theme changes prior to application in this case, so it is best to provide a page identifier if any is available.
Important: The theme affects all pages in the project, so always make the user confirm that they want to update the whole project before using edit_theme. If the user only wants to update a particular page, you should use edit_page instead.
Prerequisites
Time Estimate
15-45 minutes depending on use case complexity
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
anthropics/claude-code
sickn33/antigravity-awesome-skills
leonxlnx/taste-skill
erichowens/some_claude_skills
hyperb1iss/hyperskills
omer-metin/skills-for-antigravity
Useful defaults in design — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
design fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
We added design from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
design reduced setup friction for our internal harness; good balance of opinion and flexibility.
design has been reliable in day-to-day use. Documentation quality is above average for community skills.
design reduced setup friction for our internal harness; good balance of opinion and flexibility.
design is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Useful defaults in design — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
We added design from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
Solid pick for teams standardizing on skills: design is focused, and the summary matches what you get after install.
showing 1-10 of 25