Design System Generate
mohitagw15856/pm-claude-skills
Generate a complete, accessibility-checked design system from scratch — colour ramps, type scale, spacing, elevation, and exports for CSS, Tailwind, design tokens, Figma, VS Code and PowerPoint.
Rebuild an existing site's pages with byte-faithful content on a separately-defined donor design system — another live site, or local static HTML prototypes (Figma donors are contract-defined, not…
$ npx skills add adobe/skills --skill reskin -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install adobe/skills reskin --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/stardust/skills/reskin .claude/skills/reskin && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "reskin" agent skill from https://github.com/adobe/skills/tree/main/plugins/stardust/skills/reskin into .claude/skills/reskin/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "reskin", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/adobe/skills/tree/main/plugins/stardust/skills/reskinType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add adobe/skills --skill reskin -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install adobe/skills reskin --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/stardust/skills/reskin .agents/skills/reskin && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "reskin" agent skill from https://github.com/adobe/skills/tree/main/plugins/stardust/skills/reskin into .agents/skills/reskin/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "reskin", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adobe/skills --skill reskin -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install adobe/skills reskin --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/stardust/skills/reskin .cursor/skills/reskin && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "reskin" agent skill from https://github.com/adobe/skills/tree/main/plugins/stardust/skills/reskin into .cursor/skills/reskin/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "reskin", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/adobe/skills.git --path plugins/stardust/skills/reskin--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add adobe/skills --skill reskin -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install adobe/skills reskin --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/stardust/skills/reskin .gemini/skills/reskin && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "reskin" agent skill from https://github.com/adobe/skills/tree/main/plugins/stardust/skills/reskin into .gemini/skills/reskin/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "reskin", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install adobe/skills reskinInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add adobe/skills --skill reskin -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/stardust/skills/reskin .github/skills/reskin && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "reskin" agent skill from https://github.com/adobe/skills/tree/main/plugins/stardust/skills/reskin into .github/skills/reskin/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "reskin", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adobe/skills --skill reskin -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install adobe/skills reskin --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/stardust/skills/reskin .opencode/skills/reskin && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "reskin" agent skill from https://github.com/adobe/skills/tree/main/plugins/stardust/skills/reskin into .opencode/skills/reskin/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "reskin", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
reskinRebuild an existing site's pages with byte-faithful content on a separately-defined donor design system — another live site, or local static HTML prototypes (Figma donors are contract-defined, not…
Reskin is an agent skill from adobe/skills. Rebuild an existing site's pages with byte-faithful content on a separately-defined donor design system — another live site, or local static HTML prototypes (Figma donors are contract-defined, not yet implemented). Content fidelity is gated byte-level (text, ordered images, SEO metadata); design application is flexible (content re-laid-out onto donor modules). Use when the user says "reskin my site with this design", "apply this design system to my content", "restyle my site to look like <other site", "new…
Its SKILL.md is about 6.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including scripts (for example `reference/content-model.md`, `reference/donor-sources.md` and `reference/gates.md`). Compatibility notes: Requires Node 22+, Playwright with Chromium resolvable from the project, playwright-cli on PATH, and the impeccable skill (github.com/pbakaus/impeccable)…
It sits in Frontend & Design, covering Design systems and Brand strategy and identity. It works with Figma. The repository describes itself as: Adobe Skills for Agents. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 985c436. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 5 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodenpmpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires Node 22+, Playwright with Chromium resolvable from the project, playwright-cli on PATH, and the impeccable skill (github.com/pbakaus/impeccable) installed alongside stardust.
From compatibility in the SKILL.md frontmatter.
Reskin loads about 6.1k tokens when it runs. Until then it costs about 200 tokens; SKILL.md has 2,735 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from adobe/skills at commit 985c436, republished under its Apache-2.0 licence (© adobe). 2,735 words, ~6,069 tokens.
.claude/skills/reskin/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.The user has a site (the content source) and a design that already exists somewhere else (the donor: another live site, or a directory of static HTML prototypes; Figma is future scope). Reskin rebuilds the content site's pages so that every visible byte of content survives — text, ordered images, CTAs, SEO metadata — while the surface comes entirely from the donor's tokens and module vocabulary.
The two halves have different contracts:
The decisive rule, validated in the UC2-E1 experiment (a healthcare site × a fintech donor: 2281/2281 text bytes, 7/7 images, 47/47 slots, 13/13 metadata, 17/17 donor-token probe): the page is generated programmatically from the captured content model — content strings are never retyped. Byte fidelity then holds by construction and the content gate becomes a regression check instead of a debugging tool.
<content-url> — required. The site whose content is preserved.--donor <url> — a live site whose design system is adopted.--donor-dir <path> — a directory of local static HTML
prototypes (claude-design / Mobirise / Relume / Lovable / v0 /
hand-coded). Served on localhost and captured through the same
path — recipe in reference/donor-sources.md § Local prototypes.--donor-figma <url> — not yet implemented. The contract is
defined (reference/donor-sources.md § Figma) but the adapter is
future scope. Tell the user exactly this: "Figma donors are not
implemented yet. Export the frames as static HTML prototypes (or
point me at a live staging URL of the design) and re-run with
--donor-dir / --donor. The Figma adapter — variables→palette,
text styles→type, frame screenshots→vision references, provenance
class figma-mcp — is specced in
skills/reskin/reference/donor-sources.md and will land in a
later release." Do not improvise a partial Figma capture.--pages <slug,slug,...> — optional. Restrict the content capture
to specific pages. Default: the archetype set (one page per page
family; scale to siblings happens in Phase 6 via migrate).--scope <selectors> — optional. Pre-declare the content-root
scope for a single-page run (comma-separated, ! suffix keeps a
scope whole; see reference/content-model.md § Scope declaration).
Without it, run the scope-discovery procedure per page.../stardust/SKILL.md § Setup):
impeccable dep check, context loader, state read. Flow. Stamp
state.json.flow: "reskin" if unset
(../stardust/reference/state-machine.md § Flow keys); if another
flow is set, print it and the switch command
($stardust reskin --switch-flow) instead of running.../extract/SKILL.md § Setup:
node -e "import('playwright').then(()=>process.exit(0))" from the
project root; on failure
npm i -D playwright --no-save --legacy-peer-deps. Re-run the
probe at the start of every phase that renders — a --no-save
install is pruned by any later real npm i.import('playwright') from the script's directory and the plugin
tree ships no node_modules. Copy skills/reskin/scripts/* (all
five files — capture-content.mjs and dom-equality.mjs import
source-normalize.mjs as a sibling) byte-identical to
stardust/scripts/reskin/, and skills/diff/scripts/ live-session.mjs to stardust/scripts/diff/ — every reskin gate
script (capture-content, dom-equality, donor-probe, and
slot-coverage) imports it unconditionally at startup, regardless
of target type: without the copy each one exits 2 immediately,
even for --help or a local-file --rendered target. It supplies
ALL live-target hardening (real-Chrome UA + standard headers,
challenge detection, headed-stealth escalation), resolved from
../diff/ next to ../reskin/, so keep the two dirs siblings.
Run the copies.stardust/state.json records a different
site.originUrl, stop and ask before mixing sites, per
../extract/SKILL.md § Setup.The donor's design system is captured separately from the content
site, into stardust/canon-source/. Full recipes per donor type in
reference/donor-sources.md; summary:
--donor <url>): invoke
$stardust extract <content-url> --design-source <donor-url> — the
existing skill, unchanged. It lands in stardust/canon-source/: the
donor's pages/, assets/ (screenshots included),
_brand-extraction.json, _crawl-log.json, and a descriptive
DESIGN.md + DESIGN.json, and stamps
state.json.designSource = { url, capturedAt, path } — see
../extract/SKILL.md § Cross-site brand sources.--donor-dir <path>): serve the directory
on localhost (python3 -m http.server <port> --directory <path>)
and run the same --design-source capture path against the
localhost origin. Record the real provenance (localhost serve of
<path>) in canon-source/_crawl-log.json. Recipe details —
page listing, index-less directories, port hygiene — in
reference/donor-sources.md § Local prototypes.--donor-figma): FUTURE. Surface the exact message from
§ Inputs and stop.Then author two reskin-owned donor artifacts (contracts in
reference/donor-sources.md):
stardust/reskin/donor-tokens.json — the curated, probe-able
token sheet: palette roles, type ramp, layout metrics, button
specs, radii, shadows, motifs — every value a computed-style string
the Phase 5 probe can assert verbatim. Curated from
canon-source/DESIGN.json + _brand-extraction.json + the raw
computed styles; cites the donor page each value came from. On a
bounded donor capture (a single donor page, no full
--design-source run) there is no DESIGN.json,
_brand-extraction.json, or designSource stamp to curate from —
the token sheet is authored entirely from raw computed-style
sampling of the donor page, a first-class parallel path
(reference/donor-sources.md § Two first-class token-sourcing
paths).stardust/reskin/donor-modules.md — the enumerated module
vocabulary (M1..Mn): one row per donor module with where-seen
screenshot evidence and an anatomy description. This is the closed
set the Phase 3 mapping brief maps onto.The pin-one-reference-page rule (hard). Real donors run multiple
design systems concurrently — the experiment's donor served radius-4px
/ 1266px on its homepage and pill-radius / 1080px on older product
pages. Consolidating across them produces a chimera no live page ever
shipped, and the token probe then asserts against nothing. When donor
pages disagree on a token, pin ONE donor reference page per module
family, record it in donor-tokens.json (curatedFrom + a note
naming the reference page), and demote the other pages to
corroboration.
The new capability: a byte-oriented capture of each content page — distinct from extract's design-oriented capture. Run the ported capture script per page:
node stardust/scripts/reskin/capture-content.mjs \
--url <page-url> \
--scope '<sel1,sel2!,...>' \
--normalize stardust/reskin/normalize/<slug>.mjs \
--out stardust/reskin/content-model/<slug>/It writes stardust/reskin/content-model/<slug>/content-model.json
(full contract in reference/content-model.md): per section-slot —
headings with levels, eyebrows and other leftovers, body paragraphs,
list items, CTAs with absolute hrefs, ordered visible images
(currentSrc + alt), plus the ordered stream (ordered) — the
same content as kind-tagged nodes in document order with nesting and
separator flags, the render surface Phase 4 consumes; page-level —
full SEO metadata (title,
description, canonical, OG, Twitter, JSON-LD, lang, favicon), the
whitespace-normalized visible text of the scope (the content-gate
reference string), and a full-page screenshot.
Two declarations are mandatory per page, because they are the experiment's top two failure modes:
<header>, outside the obvious #content
root, and byte equality would have "passed" against the incomplete
reference. Never trust main or #content blind. Run the
scope-discovery procedure (reference/content-model.md
§ Scope discovery): compare the captured scope text against the
whole-body text and the page screenshot, verify the h1 is inside
the scope, widen with comma-separated multi-scope selectors until
everything visible in the screenshot that isn't declared chrome is
in the model. Chrome exclusions (nav, footer) are declared deltas
(D1-style), not silent omissions. The capture script prints a
coverage line (bodyTextLen / scopeTextLen / h1InScope) to make
the check mechanical.innerText;
clone slides duplicate it — rotating carousels break byte
determinism), and any page-specific cleanup live in a per-page
ledger module stardust/reskin/normalize/<slug>.mjs that extends
the shared default (scripts/source-normalize.mjs). The same
ledger file is passed verbatim to the capture and to every gate
(--normalize), so the gate measures exactly the normalization the
capture declared. The ledger is code, not prose. Format in
reference/content-model.md § Normalization ledger.Author stardust/reskin/mapping.md — the cross-origin mapping brief.
Full contract and entry schema in reference/mapping-brief.md. Per
every content slot in the content model:
donor-modules.md's closed
vocabulary) + a one-line rationale grounded in slot anatomy vs
module anatomy;{mapped, new-module, chrome, carried-invisible} —
the last for sr-only/visually-hidden content inside the byte scope
(carried verbatim into an equivalent hidden element, no donor
module; reference/mapping-brief.md § Status semantics).Gates before any rendering:
mapped onto named donor modules. Below
that, the donor vocabulary doesn't cover this content — stop and
surface (see § Stop conditions).new-module entry is explicitly composed from donor
tokens (name the tokens it borrows: input spec + primary button
spec, etc.) and listed in the brief's stats block. New modules are
never silently improvised mid-render.innerText
reflects text-transform, so captured text is rendered-case).
The underlying text stays byte-faithful; casing is applied via CSS
text-transform only, never by editing the string. Policy details
in reference/mapping-brief.md § Casing policy.Composite source sections (one wrapper div holding two logical regions) are split into atomic slots in the brief — section ≠ slot.
The decisive validated rule: the page is GENERATED from
content-model.json — never retyped by hand. Write a renderer
script per archetype (stardust/reskin/renderers/<archetype>.mjs,
modeled on the experiment's render-reskin.mjs) that:
content-model.json and interpolates every
visible string, href, and image URL from the model (HTML-escaped) —
if a string appears in the output HTML but not in the model, the
renderer is wrong;sections[].ordered, reference/content-model.md § The ordered
stream): kind-tagged nodes in document order, nesting preserved
(a CTA wrapping its heading and vice versa), sep flags marking
zero-separator inline joins. The stream is innerText-consistent
by construction (its text nodes are sliced from the parent's
rendered innerText — the byte-gate basis), so emitting it
verbatim is safe. Emit nodes in stream order; emit
sep: "" neighbours with no whitespace between them (inline);
never reorder, and never reconstruct order or separators from
visibleText —
the first field run did exactly that (per-type arrays matched
greedily against visibleText as an oracle) and burned three
debug rounds on duplicate identical strings, both directions of
CTA/container nesting, and zero-separator inline li runs, all
of which the stream now captures structurally;formControl nodes as equivalent controls, not text:
a <select> carrying the captured option texts verbatim, in
order; inputs/textareas carrying value/placeholder — restyled
with donor tokens (the new-module composition rules apply), never
flattened to prose and never dropped. A select's option text is
part of the source's innerText, so dropping the control fails
the byte gate with nothing structured to render from
(reference/content-model.md § Slot taxonomy, formControls);<head> (title,
description, canonical, OG, Twitter, JSON-LD — including source
garbage like broken JSON-LD URLs: fidelity over repair; flag
such items for the human in the run report, never silently fix or
silently keep);donor-tokens.json (emitted as
CSS custom properties) + the donor module patterns assigned in
mapping.md. Use the rendered-page conventions the Phase 5 probe
asserts against: content in <main>, .container for the measure,
.btn for the donor primary button (reference/gates.md
§ Rendered-page conventions);stardust/reskin/pages/<slug>.html, self-contained.Renderers may parse a single node's text apart (split a list-item row
into kicker/date/title) but must fail loudly (throw) when a parse
doesn't reproduce the node's text — a silent partial parse is a silent
content drop. A slot whose orderedVerified is false is inspected
before rendering, never trusted blind; when inspection shows stream
text genuinely absent from the slot's visibleText, the
sanctioned fallback is to drop that text before rendering and
record the drop in the model's provenance — filtering ghosts against
visibleText is the documented resolution, distinct from the
forbidden order-reconstruction move
(reference/content-model.md § When orderedVerified is false).
Three gate families per page; commands, pass bars, tolerances, and
failure modes in reference/gates.md. Serve or file://-address the
rendered page and run:
(a) CONTENT GATE — all three must pass:
node stardust/scripts/reskin/dom-equality.mjs \
--source <page-url> --source-scope '<declared scope>' \
--normalize stardust/reskin/normalize/<slug>.mjs \
--rendered stardust/reskin/pages/<slug>.html --rendered-scope main \
--report stardust/reskin/reports/<slug>-content-gate.md
node stardust/scripts/reskin/slot-coverage.mjs \
--model stardust/reskin/content-model/<slug>/content-model.json \
--rendered stardust/reskin/pages/<slug>.html \
--report stardust/reskin/reports/<slug>-slot-coverage.mddom-equality.mjs (vendored + adapted from github.com/aemcoder/skills,
Apache-2.0) gates on whitespace-normalized visible-text byte
equality and the ordered, URL-normalized visible-image set;
element count and tag sequence are reported but informational.
slot-coverage.mjs additionally proves every model slot present
(slot text substring, every CTA as a (text, absolute-href) pair,
every image) and asserts metadata carry-over field by field.
(b) DESIGN-ADOPTION GATE:
node stardust/scripts/reskin/donor-probe.mjs \
--tokens stardust/reskin/donor-tokens.json \
--rendered stardust/reskin/pages/<slug>.html \
--report stardust/reskin/reports/<slug>-donor-probe.mdComputed-style assertions of donor token values on the rendered page —
bg/fg, font-family token string, display weight, button spec,
container width, band palette, section rhythm. Tolerances (exact for
colors/radius/family; ±2px button padding; ±20px container; ±16px
section rhythm) documented in reference/gates.md § Tolerances.
Then the side-by-side judgment: open the rendered page next to the
donor reference-page screenshots (canon-source/assets/screenshots/)
and judge adoption with your eyes — the probe proves tokens, the
eyeball proves the page reads as the donor. Record the verdict.
(c) Sanity — no horizontal overflow at 1440 and 360 (donor-probe
runs this automatically; --widths to override).
One fix iteration per gate family — one for the content gate,
one for design-adoption/sanity. On a failure in a family, fix once,
re-run all gates (a fix for one gate can break another). Residual
failures after a family's iteration is spent are logged in
stardust/reskin/ledger.json under the page's residuals[] — never
silently absorbed, never looped on indefinitely. (Both field runs
support the budget: the validation experiment spent one iteration on
360px chrome; the smoke run spent exactly one per family — a
content-side separator emission fix and a sanity-side 360px chrome
fix. A single shared iteration would have forced a false residual;
per-family keeps the loop bounded without absorbing real failures.)
Reskin owns the archetype pages; scale and shipping are the existing pipeline, unchanged:
migrate skill (../migrate/SKILL.md) with the
donor-pinned target (the state.json.designSource stamp Phase 1
wrote is exactly what direct/migrate read for donor pinning;
a bounded donor capture wrote no stamp — record the donor origin
in the handoff instead, reference/donor-sources.md § Two
first-class token-sourcing paths).
Same-type sibling pages render at the sibling tier against the
gated archetype. Content rules are the ones reskin already
enforces — ../migrate/reference/content-preservation.md is
inherited wholesale.deploy and rollout skills, unchanged. Blocks
written for donor modules obey the Experience Workspace editability
contract (deploy SKILL.md § 8, EW1–EW10) and pass the EW gate
(block-roundtrip --ew) before they are done.Reskin writes its own state under stardust/reskin/ — ledger.json
holds per-page status (captured → mapped → rendered → gated), gate
results, and residuals. It makes no changes to the core state
machine (../stardust/reference/state-machine.md); the only
state.json touch is the designSource stamp that extract itself
writes in Phase 1.
donor-modules.md or an
explicit new-module entry in mapping.md.donor-tokens.json. Licensed donor fonts are adopted as the
family token string with local fallback, never rebundled.mapping.md, executable in the normalize module.| Path | Purpose |
|---|---|
stardust/canon-source/ | Donor capture + descriptive DESIGN.md/json (extract --design-source, unchanged) |
stardust/reskin/donor-tokens.json | Curated probe-able token sheet, pinned to one reference page |
stardust/reskin/donor-modules.md | Enumerated donor module vocabulary (M1..Mn) with screenshot evidence |
stardust/reskin/content-model/<slug>/content-model.json | Byte-oriented per-page content model (+ source screenshot) |
stardust/reskin/normalize/<slug>.mjs | Per-page executable normalization ledger (shared capture ↔ gates) |
stardust/reskin/mapping.md | The mapping brief: every slot → donor module, status, rationale |
stardust/reskin/renderers/<archetype>.mjs | Programmatic renderers (model in, HTML out) |
stardust/reskin/pages/<slug>.html | Rendered reskin pages |
stardust/reskin/reports/ | Per-page gate reports + screenshots |
stardust/reskin/ledger.json | Per-page status, gate results, residuals |
stardust/scripts/reskin/ | Project-local copies of the five skill scripts |
reference/donor-sources.md — the three donor types and their
capture recipes; pin-one-reference-page; donor-tokens.json and
donor-modules.md contracts; the Figma future contract.reference/content-model.md — the capture contract: slot taxonomy,
the ordered stream (the render surface), scope-discovery procedure,
normalization ledger format, provenance.reference/mapping-brief.md — entry schema, the ≥80% gate,
new-module composition rules, casing policy.reference/gates.md — both gates' commands, pass bars, tolerances,
failure modes, residual logging.../extract/SKILL.md § Cross-site brand sources — the
--design-source donor-capture path Phase 1 delegates to.../migrate/reference/content-preservation.md — the content rules
reskin inherits (and tightens to byte level).../diff/SKILL.md — the pixel + structural probes; reuse them as a
supplementary build-side check after Phase 6 deploy, --profile eds.© adobe, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (scripts) in plugins/stardust/skills/reskin of adobe/skills.
Open the folder on GitHubat commit 985c436
Reskin next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Reskin this skilladobe/skills | 196 | — | ~6.1k | Automated safety check: Pass | Apache-2.0 | |
| Design System Generatemohitagw15856/pm-claude-skills | 1.4k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Figma Design System Builderwarpdotdev/warp | 65k | 2 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 | |
| Figma use_figma Plugin API Ruleswarpdotdev/warp | 65k | 4 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 | |
| Figma Design System Rules Generatorwarpdotdev/warp | 65k | 3 repos | ~4.6k | Automated safety check: Pass | AGPL-3.0 | |
| Figma Code Connect Componentswarpdotdev/warp | 65k | 2 repos | ~4.2k | Automated safety check: Pass | AGPL-3.0 |
mohitagw15856/pm-claude-skills
Generate a complete, accessibility-checked design system from scratch — colour ramps, type scale, spacing, elevation, and exports for CSS, Tailwind, design tokens, Figma, VS Code and PowerPoint.
warpdotdev/warp
Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.
warpdotdev/warp
Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.
warpdotdev/warp
Creates project-specific design system rules from your codebase so coding agents implement Figma designs with your components, naming and tokens.
warpdotdev/warp
Maps published Figma components to their code implementations with Code Connect, using the Figma MCP suggestion and mapping tools.
Ohh-889/skyroc
Comprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations…
adobe/skills
Scaffolds, implements, deploys and debugs Adobe Runtime actions in App Builder projects, with templates for webhooks, events, database CRUD, sequences and Asset Compute workers.
adobe/skills
Launches Chrome with an unpacked extension over CDP, opens its sidepanel, popup or options page, and hands over to cdp-connect for clicks, typing and screenshots.
adobe/skills
Extracts icons, metadata, text, forms, videos and social links from any web page with playwright-cli, with SVG icon classification and cleanup.
adobe/skills
Detect all languages used on a webpage — both declared (html@lang, hreflang alternate links, nested lang= attributes, meta content-language) and actually present in the body text (Google CLD3 via…
adobe/skills
Prepare any webpage for clean interaction by detecting and removing disruptive overlays (cookie banners, GDPR consent, modals, popups, newsletter signups, paywalls, login walls).
adobe/skills
Reduce a webpage to a structural skeleton with semantic tokens.
Works with
Categories
Rebuild an existing site's pages with byte-faithful content on a separately-defined donor design system — another live site, or local static HTML prototypes (Figma donors are contract-defined, not…. Reskin is an agent skill from adobe/skills. Rebuild an existing site's pages with byte-faithful content on a separately-defined donor design system — another live site, or local static HTML prototypes (Figma donors are contract-defined, not yet implemented).
Reskin fits situations like: the user says reskin my site with this design; apply this design system to my content; restyle my site to look like <other site; rebrand my site using these prototypes.
Run `npx skills add adobe/skills --skill reskin -a claude-code`. Or copy the skill folder (plugins/stardust/skills/reskin in adobe/skills) into .claude/skills/reskin in your project. Claude Code loads it when a task matches its description.
Run `npx skills add adobe/skills --skill reskin -a codex`. Or copy the skill folder (plugins/stardust/skills/reskin in adobe/skills) into .agents/skills/reskin in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add adobe/skills --skill reskin -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/reskin, .gemini/skills/reskin, .github/skills/reskin and .opencode/skills/reskin in your project.
Going by SKILL.md and its folder, Reskin needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node, npm and python3). Our summary lists: Python 3; Node.js. Compatibility (from SKILL.md): Requires Node 22+, Playwright with Chromium resolvable from the project, playwright-cli on PATH, and the impeccable skill (github.com/pbakaus/impeccable) installed alongside stardust..
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Reskin is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.1k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Reskin: Design System Generate (mohitagw15856/pm-claude-skills, 1.4k stars), Figma Design System Builder (warpdotdev/warp, 65k stars), Figma use_figma Plugin API Rules (warpdotdev/warp, 65k stars) and Figma Design System Rules Generator (warpdotdev/warp, 65k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
adobe (a GitHub organization) maintains it in adobe/skills, which has 196 GitHub stars. The repository holds 65 skills in this directory. The repository was last updated on October 7, 2026.
Source: adobe/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.