design-forge
Skill2 starsChanged 7 days agoMITView on GitHub
Plans UI design work with the user before any code is written. Reads the app, shows the current screens, deals three visual directions to choose from, and presents a plan with a design section, a responsive matrix and a gate that approve-plan and ship-plan carry through to a pull request. Covers new pages, app screens and components, redesigns, restyles and design reviews, user flows across screens, design-system cleanup, and native iOS and Android apps. Use when the user wants to design, redesign, review or polish a UI, improve a flow, make a page mobile friendly, tidy colours and sizes, or plan screens for a mobile app, before implementing it. For non-UI changes use forge.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- Xhiveee/skillstheir own version, first seen Nov 1, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- Xhiveee/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository18 other files it gives its agents.
- approve-planSkill
- check-impactSkill
- context-packSkill
- deslopSkill
- diagnose-bugSkill
- falsifySkill
- forgeSkill
- gap-analysisSkill
- interrogateSkill
- make-fixtureSkill
- micro-loopSkill
- phased-loopSkill
- pick-tierSkill
- ship-planSkill
- simple-loopSkill
- taste-testSkill
- unslopSkill
- wait-whatSkill
The file
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 7 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Do this before any question.
- Very specific: line 19
Run node --version. Taste needs Node 22 or later.
- Distinctive: line 20
Look for Chrome, Edge or Chromium.
- Very specific: line 23
Every taste script that opens Chrome gets --profile "${TMPDIR:-/tmp}/taste-profile-<task>".
- Distinctive: line 52
Read the app. Never edit its source.
- Distinctive: line 60
Run the steps in the mode file.
- Distinctive: line 66
Tier S: no page, no dialogue, no deal.
- Distinctive: line 71
Before screenshots with findings pinned.
- Distinctive: line 91
After the user picks:
- Very specific: line 101
Use forge's format. Add a ## Design section in this shape.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
<instructions>Plan a design change with the user. Do not write app code. Wait for approval.
This skill adds design to the forge skill. It does not replace it. Follow forge for the Record (Step 0), sizing with pick-tier (Step 0.5), the Socratic rules, lettered options, probing risky guesses, and the plan format with its length caps (Instructions 1-4). Do not copy forge's text here.
The visual work uses taste (the design-taste-frontend skill). Its commands are named below. Run them as node <taste>/scripts/<name>.mjs.
1. Prerequisites
Do this before any question.
- Find
<taste>: the folder the harness reports when it loads the design-taste-frontend skill (Claude Code shows it as the skill's base directory). If the harness reports none, use thedesign-taste-frontendfolder next to this skill's folder. - Run
node --version. Taste needs Node 22 or later. - Look for Chrome, Edge or Chromium.
- Taste or Node missing, or taste found without
scripts/start.mjsorscripts/consistency.mjs: say which one is missing, print "Update the design-taste-frontend skill to the latest release with the tool you installed it with.", and stop. - Chrome missing: planning goes on. Every Gate criterion becomes
manual:, with the reason. - Every taste script that opens Chrome gets
--profile "${TMPDIR:-/tmp}/taste-profile-<task>". This folder is outside the repo. - Native work also needs
xcrun simctl(iOS) andadb(Android). Each one missing makes that platform's capture criteriamanual:, with the reason.
2. Pick the mode
State the mode in one line with the reason. Then read only that mode's file.
| Signal in the request | Mode | File |
| New page, landing, site, hero; new dashboard, settings, queue, screen; one component | create | modes/create.md |
| Redesign, restyle, "looks dated" or "AI-made", review or audit a page, missing states, fix mobile | redesign | modes/redesign.md |
| Steps, clicks, funnel, onboarding, checkout, drop-off, a journey across screens | flow | modes/flow.md |
| Tokens, colours or sizes everywhere, tidy the design system, export to Figma | system | modes/system.md |
*.xcodeproj, Package.swift, pubspec.yaml, React Native (app.json and react-native), or the user names iOS or Android | native, with one mode above | modes/native.md |
- "Improve the design system" with no other signal: ask one chat question. A) Clean up the code (system mode). B) Export to Figma (system mode, hand-off only). Recommend A.
- Page or app screen is the first decision. Record it with the mode. A page also records taste's kind: software, gaming, tech, product, service or place.
- Mixed (a page plus the app behind it): one Look for both.
3. Responsive matrix
Applies to every mode.
- Name the target widths. Default
1440,1024,820,768,390. Mobile-first adds375, and the mock is shown at phone width first. - Native: name the simulator devices instead.
- The phone is its own layout. Decide each changed screen's phone layout now (pages: taste
references/layout-v4.md; app screens:modes/app.md).
4. Discover
Read the app. Never edit its source.
- Taste output goes only to
.plans/<task>/taste/:start.mjs:--history .plans/<task>/taste/history.json.deal.mjs:--history .plans/<task>/taste/layout-history.json.consistency.mjs,check.mjs,shoot.mjs:--out(or--shots).plans/<task>/taste/<before|mock|after>.
- Taste defaults to
.taste-skill/when you leave these out. Never write it. - Choose the task slug here. approve-plan reuses it.
- Run the steps in the mode file.
5. Decide on a lavish page
Load the lavish skill, else run npx -y lavish-axi --help. Put the page in .lavish/. Never run lavish-axi share: shares are public.
- Tier S: no page, no dialogue, no deal. A short plan in chat. Tier S has no Verify; Build runs the Gate line after the look loop.
- Tier M: the deal cards and any trade-off question on a page. The plan in chat.
- Tier L: the cards, then the mock (below), then the plan as a page.
What the page shows:
- Before screenshots with findings pinned.
- The deal cards (see Look source): 3 palettes with swatches, 3 type pairings with a specimen. The recommended ones are marked.
- The idea sentence and the competitor test.
- The flow map and the state table, when the mode makes them.
- Questions as lettered options, the recommended one marked.
Look source
Take the first that fits:
- System. The repo declares tokens (CSS custom properties, a Tailwind theme, token files): keep them. No deal.
Look: system. - Brand. The user gives brand colours, and maybe fonts:
node <taste>/scripts/start.mjs brand --page <kind> --bg ".." --ink ".." --accent ".." --type <id> --radius soft. A font outside taste's ids: take the nearest id fromstart.mjs types --page <kind>, then swap the--font-displayand--font-textlines by hand. Log the swap as an allowance. - Deal.
node <taste>/scripts/start.mjs deal --page <kind> --history <file>gives 3 palettes and 3 type pairings. Show them as cards on the lavish page. The user picks one of each. Thenstart.mjs css --page <kind> --palette <id> --type <id> --radius sharp|soft|round --history <file>prints the tokens. A page also runsnode <taste>/assets/layout/deal.mjs --type <software|product|place|service> --has <photo,ui,object,film> --history <file>for the hero. Hardware:--type product --kind tech. A game:--type software --kind gaming, and--hasmust name what the brief has (filmorphoto). A place's hero is printed, not dealt, and a place always usesstart.mjs brand.
Deal again only on request or for a stated reason: it contradicts the brand, it needs a missing asset, or the accent is violet (taste bans violet; a violet brand accent is an allowance with its reason).
A brand-new site takes taste's starter kit (<taste>/assets into the project, plus starter.html). An existing app takes only the :root tokens and font links, mapped into its own styling. Copy no kit into it.
The mock (tier L)
After the user picks:
- Pages: build the first screen from the kit's
starter.htmland the dealt hero into.lavish/<task>-mock/. Copy<taste>/assetsbeside it (lavish serves relative paths only). App screens: build it as static HTML from the tokens. - Capture it:
node <taste>/scripts/shoot.mjs --url .lavish/<task>-mock/index.html --w <width> --out .plans/<task>/taste/mock/<width>.png --profile <dir>, once per named width. - Show the screenshots on the page.
The mock is throwaway. It never becomes app code.
6. The plan
Use forge's format. Add a ## Design section in this shape. approve-plan copies it verbatim into design.md.
## Design
- Plan folder: .plans/<task>/
- Mode: <mode>[ + native] · kind: page|app|mixed|component
- Look: system|brand|deal · kind <kind> · palette <id> · type <id> · radius <r> · hero <id> (pages) · font swap <face> (or none) · history .plans/<task>/taste/
- Allowances: <check id — reason>… (or none)
- Idea: On this page, <thing of the subject> becomes <device>. Live thing: <…>
- Argument and copy outline: <one claim per section; headlines ≤ 2 lines; sample content flagged>
- Pictures: <exists | found with licence | drawn>…
- Widths: <list> · native devices: <list> · phone layout: <per screen>
- Frame (native only): <which parts follow the platform>
- Flow map: <current → proposed steps, or "n/a">
- States: <screen × empty|zero|loading|error|success|no-permission table>
- Tokens (system mode): .plans/<task>/taste/tokens.md
- Before: .plans/<task>/taste/before · FAIL <n> WARN <n>[ · rubric <n>/10 (app screens)]
- Gate (page): consistency.mjs exit 0 · check.mjs exit 0 · perf.mjs no FAIL row · at <widths>
- Gate (app): consistency.mjs app filter (modes/app.md) no FAIL · rubric after ≥ beforeThe Gate (page) commands. <w> are the named widths:
node <taste>/scripts/consistency.mjs <file> --widths <w> --profile <dir> --page <kind> --category "<what is sold>" --primary "<main action>" --out .plans/<task>/taste/<before|after>
node <taste>/assets/layout/check.mjs --url <file> --profile <dir> --sizes <WxH list> --shots .plans/<task>/taste/<before|after>/layout
node <taste>/scripts/perf.mjs <file> --profile <dir>Acceptance criteria always include the gate line. A criterion only a person or a real device can check is manual:.
</instructions>Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

