/reskin
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
$ npx -y skills add adobe/skills --skill reskin --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/reskin
Context preview
The summary Claude sees to decide when to auto-load this skill.
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
SKILL.md
reskin.SKILL.mdname: reskin
description: 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 design, same content", "rebrand my site using these prototypes", or names a content site plus a design donor. NOT for redesigning from intent (that's the stardust core extract/direct/prototype chain) and NOT for keeping the current design while migrating (that's the replica flow).
license: Apache-2.0
stardust:reskin — same content, donor design
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:
- **Content is non-negotiable.** The gate is byte equality of
whitespace-normalized visible text, the ordered visible-image set, and full metadata carry-over. Not "close" — equal, after an explicitly declared, executable normalization ledger.
- **Design is flexible.** Content is re-laid-out onto donor modules; a
carousel may become a static card grid, a sidebar may become a band. Structure (element counts, tag sequences) is informational, never gating — a reskin re-structures markup by design.
The decisive rule, validated in the UC2-E1 experiment (hirslanden × stripe: 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.
Inputs
- `<content-url>` — required. The site whose content is preserved.
- Donor, exactly one of:
- `--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.
Setup
1. Run the master skill's setup (`../stardust/SKILL.md` § Setup): impeccable dep check, context loader, state read. 2. **Playwright import-resolvability probe** — same contract as `../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`. 3. **Copy the scripts into the project.** ESM resolves `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. 4. **Origin collision** — if `stardust/state.json` records a different `site.originUrl`, stop and ask before mixing sites, per `../extract/SKILL.md` § Setup.
Procedure
Phase 1 — INGEST DONOR
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:
- **Live URL** (`--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 = { ur
Read more
name: reskin description: 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 design, same content", "rebrand my site using these prototypes", or names a content site plus a design donor. NOT for redesigning from intent (that's the stardust core extract/direct/prototype chain) and NOT for keeping the current design while migrating (that's the replica flow). license: Apache-2.0
stardust:reskin — same content, donor design
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:
- **Content is non-negotiable.** The gate is byte equality of
whitespace-normalized visible text, the ordered visible-image set, and full metadata carry-over. Not "close" — equal, after an explicitly declared, executable normalization ledger.
- **Design is flexible.** Content is re-laid-out onto donor modules; a
carousel may become a static card grid, a sidebar may become a band. Structure (element counts, tag sequences) is informational, never gating — a reskin re-structures markup by design.
The decisive rule, validated in the UC2-E1 experiment (hirslanden × stripe: 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.
Inputs
- `<content-url>` — required. The site whose content is preserved.
- Donor, exactly one of:
- `--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.
Setup
1. Run the master skill's setup (`../stardust/SKILL.md` § Setup): impeccable dep check, context loader, state read. 2. **Playwright import-resolvability probe** — same contract as `../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`. 3. **Copy the scripts into the project.** ESM resolves `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. 4. **Origin collision** — if `stardust/state.json` records a different `site.originUrl`, stop and ask before mixing sites, per `../extract/SKILL.md` § Setup.
Procedure
Phase 1 — INGEST DONOR
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:
- **Live URL** (`--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 = { ur
Repo: adobe/skills
Other skills on adobe-skills.
- /aa-conversion-funnel-analysis
Analyzes a multi-step conversion funnel to find where visitors drop off and which steps have the worst leakage. Use this skill when someone describes a journey and asks about conversion rates, drop-off, fallout, or step completion. Trigger for "analyze our checkout funnel,"
Open skill - /aa-executive-briefing
Generates a concise, executive-ready performance summary covering key metrics, trends, and what's driving movement. Use this skill when someone needs to produce a briefing, executive summary, performance narrative, or stakeholder readout — for example, "write an exec summary of
Open skill - /aa-kpi-pulse
Produces a compact KPI digest showing how key metrics changed over a period and what's driving the movement. Use this skill when someone asks for a performance summary, a weekly recap, a morning briefing, a KPI update, or any variation of "how did we do this week/month." Also
Open skill - /aa-segment-performance-comparator
Compares the performance of two or more audience segments across key metrics side by side. Use this skill when someone wants to compare audiences or visitor groups — for example, "how do mobile visitors compare to desktop on conversion," "compare new vs. returning visitors,"
Open skill - /aa-top-movers-watchlist
Identifies which items (pages, campaigns, products, channels, regions) had the biggest increases or decreases for a key metric between two time periods. Use this skill when someone asks "what's up and what's down," "which campaigns moved the most," "top gainers and losers,"
Open skill - /cja-dimension-analysis
Comprehensive dimension analysis and reporting for CJA. Use this skill whenever the user wants to analyze one or more dimensions — including cardinality, distribution/skew, trends, anomalies, data quality errors, comparisons, and forecasting. Also trigger when someone asks "what
Open skill

