/pastiche-setup
Use when bootstrapping pastiche for first-time adoption (post-`/pastiche-init`) — fills `KNOWLEDGE.md` and seeds `[GENERAL]` `WISDOM.md` rules section by section. Resumable across sessions; re-invoke to continue.
Claude Code
$ npx -y skills add retz8/pastiche --skill pastiche-setup --agent claude-code
Codex
$ npx skills add retz8/pastiche --skill pastiche-setup -a codex -y
Cursor
$ npx skills add retz8/pastiche --skill pastiche-setup -a cursor -y
Gemini CLI
$ npx skills add retz8/pastiche --skill pastiche-setup -a gemini-cli -y
GitHub Copilot
$ npx skills add retz8/pastiche --skill pastiche-setup -a github-copilot -y
OpenCode
$ npx skills add retz8/pastiche --skill pastiche-setup -a opencode -y
Windsurf
$ npx skills add retz8/pastiche --skill pastiche-setup -a windsurf -y
SKILL.md
pastiche-setup.SKILL.mdname: pastiche-setup
description: Use when bootstrapping pastiche for first-time adoption (post-`/pastiche-init`) — fills `KNOWLEDGE.md` and seeds `[GENERAL]` `WISDOM.md` rules section by section. Resumable across sessions; re-invoke to continue.
Pastiche — setup
Resumes from `setup_progress` in `pastiche/config.yaml`. Unit of work is one section per turn; within a section, draft candidates as a numbered list, confirm in natural language, write once after agreement.
Preflight
1. Read `pastiche/config.yaml`. On parse failure: print the parser error verbatim and stop — *"Fix the YAML and re-invoke."* 2. Read `pastiche/FACT.md`. If empty or missing, stop: *"`pastiche/FACT.md` is empty or missing. Run `/pastiche-sync` (or re-run `/pastiche-init`) and re-invoke."* 3. **Re-derive `setup_progress` from files** (the file is the source of truth; config is the cache). For each KNOWLEDGE section: marker still present → `stub`, otherwise `done`. For `general-wisdom`: any `[GENERAL]` bullet present in `pastiche/WISDOM.md` → `done`, otherwise `stub`. Update config silently.
Lint
Every lint call below: shell `pastiche-lint` (on PATH via plugin `bin/` — do not search for it), cwd = repo root. Forward stdout; on non-zero exit, also forward stderr. Don't revert; don't abort.
First run vs. returning run
If every `setup_progress` entry is `stub`, this is a first run.
**First run:**
1. Greet (two lines): *"Let's set up pastiche — we'll fill `KNOWLEDGE.md` with how your DS gets used, and seed a few system-wide rules in `WISDOM.md`. You can pause any time; I'll resume where we left off."* 2. **DESIGN.md handshake.** If `design_md_reference` is set in config, skip. Otherwise scan repo root for `DESIGN.md`:
- **Found** → ask: *"I found `./DESIGN.md`. Want me to use it as reference? I'll draft candidates from it so you mostly review."*
- Yes → validate the path (resolve absolute, in-repo, readable, ≤200KB). On any failure, warn and proceed as if declined. On pass, write `design_md_reference: ./DESIGN.md` to config. Scan the body for `^## Overview` or `^## Brand & Style`; if either is present, copy that section's body into KNOWLEDGE.md's `## Brand Identity` (replacing the placeholder).
- No → leave `design_md_reference: null`.
- **Not found** → one line: *"No `DESIGN.md` at repo root — we'll go through this from scratch."*
3. Start with Brand Identity (below).
**Returning run:** skip greet and handshake. Print: *"Picking up where we left off — `<X>` of 13 done. Next up: `<next stub>`. Continue?"* Then resume.
Section loop
Pick the next section: lowest stub in canonical order, or `--section <name>` if provided.
After each section, prompt: *"Next section: `<next stub in canonical order>`. Continue / switch / pause?"*
- Continue → next stub in canonical order.
- Switch → ask which section; jump.
- Pause → stop; adopter resumes by re-invoking.
If `--all` was passed, skip this prompt. Stop only when every stub is `done` (then run **Wrap**).
Brand Identity
**Auto-ported case** (the placeholder was replaced from DESIGN.md): show the ported prose verbatim. Offer `keep / edit / rewrite`.
- `keep` → write + flip + lint.
- `edit` → take natural-language patches, re-show, loop until `keep`.
- `rewrite` → fall through to the freeform case.
**Freeform case** (no auto-port, or adopter chose `rewrite`): prompt:
> *"Write or paste your Brand Identity prose — voice, posture, density, restraint, anything that matters for downstream design decisions. Length is your call; round-1 reads this in full on every task.* > > *Not sure where to start? Say "guide me" and I'll walk you through 4–5 prompts to draft it together."*
- If the adopter pastes prose, take it as-is, read back for confirmation, loop on natural-language edits until `yes`.
- If they say "guide me" (or equivalent), ask 4–5 prompts in sequence: brand voice in 1–2 adjectives; density posture (dense vs. spacious, why); restraint signal (when the DS pulls back); the one rule that makes a screen feel off-brand; optional anti-example. Draft a prose paragraph from the answers, read back, loop.
Write the final prose into `## Brand Identity` (replacing whatever was there). Flip `setup_progress.brand-identity: done`. Run lint.
Scenario sections (11)
Canonical order: Action buttons, Forms & input collection, Feedback & status, Overlays, Navigation & wayfinding, Content display, Layout & page structure, Date & time selection, Iconography, Visual hierarchy, Domain-specific patterns.
Per section:
1. **Draft candidates** as a numbered list, blending two sources:
- **DESIGN.md** (if `design_md_reference` is set): mine narrative for scenarios in this section's territory.
- **Canonical seeds** (always; see **Seed scenarios** below).
Adapt to the adopter's FACT: drop seeds whose atoms aren't in FACT; add candidates suggested by FACT atoms that no canonical seed covered. Atom names backticked (FACT entries verbatim); prop expressions bare. Example: `` → `Button` variant="primary" ``. Soft target 5–8; no hard cap, no padding.
2. **Confirm.** Show the list. *"Accept all, or tell me what to change (accept some / reject some / edit some / add new)?"* Loop on natural-language responses until the adopter accepts.
3. **Write.** Replace the section's `_(empty — …)_` marker with the confirmed scenarios. Each scenario: one or more prose framing lines, then one or more `→ <atom expression>` lines.
4. **Flip + lint.** Set `setup_progress.<section>: done` in config. Run lint.
5. **Cadence prompt** (unless `--all`).
`[GENERAL]` WISDOM phase (last)
Runs only when every KNOWLEDGE stub is `done`. Same shape as a scenario section; writes to `pastiche/WISDOM.md`; the unit is a tagged rule.
1. **Draft candidates**, blending:
- **DESIGN.md** (if set): mine posture / invariants, especially any "Do's and Don'ts"-shaped content.
- **Canonical seeds (4):**
- *Tokens-only* — never raw hex / px; always reference DS toke
Read more
name: pastiche-setup description: Use when bootstrapping pastiche for first-time adoption (post-`/pastiche-init`) — fills `KNOWLEDGE.md` and seeds `[GENERAL]` `WISDOM.md` rules section by section. Resumable across sessions; re-invoke to continue.
Pastiche — setup
Resumes from `setup_progress` in `pastiche/config.yaml`. Unit of work is one section per turn; within a section, draft candidates as a numbered list, confirm in natural language, write once after agreement.
Preflight
1. Read `pastiche/config.yaml`. On parse failure: print the parser error verbatim and stop — *"Fix the YAML and re-invoke."* 2. Read `pastiche/FACT.md`. If empty or missing, stop: *"`pastiche/FACT.md` is empty or missing. Run `/pastiche-sync` (or re-run `/pastiche-init`) and re-invoke."* 3. **Re-derive `setup_progress` from files** (the file is the source of truth; config is the cache). For each KNOWLEDGE section: marker still present → `stub`, otherwise `done`. For `general-wisdom`: any `[GENERAL]` bullet present in `pastiche/WISDOM.md` → `done`, otherwise `stub`. Update config silently.
Lint
Every lint call below: shell `pastiche-lint` (on PATH via plugin `bin/` — do not search for it), cwd = repo root. Forward stdout; on non-zero exit, also forward stderr. Don't revert; don't abort.
First run vs. returning run
If every `setup_progress` entry is `stub`, this is a first run.
**First run:**
1. Greet (two lines): *"Let's set up pastiche — we'll fill `KNOWLEDGE.md` with how your DS gets used, and seed a few system-wide rules in `WISDOM.md`. You can pause any time; I'll resume where we left off."* 2. **DESIGN.md handshake.** If `design_md_reference` is set in config, skip. Otherwise scan repo root for `DESIGN.md`:
- **Found** → ask: *"I found `./DESIGN.md`. Want me to use it as reference? I'll draft candidates from it so you mostly review."*
- Yes → validate the path (resolve absolute, in-repo, readable, ≤200KB). On any failure, warn and proceed as if declined. On pass, write `design_md_reference: ./DESIGN.md` to config. Scan the body for `^## Overview` or `^## Brand & Style`; if either is present, copy that section's body into KNOWLEDGE.md's `## Brand Identity` (replacing the placeholder).
- No → leave `design_md_reference: null`.
- **Not found** → one line: *"No `DESIGN.md` at repo root — we'll go through this from scratch."*
3. Start with Brand Identity (below).
**Returning run:** skip greet and handshake. Print: *"Picking up where we left off — `<X>` of 13 done. Next up: `<next stub>`. Continue?"* Then resume.
Section loop
Pick the next section: lowest stub in canonical order, or `--section <name>` if provided.
After each section, prompt: *"Next section: `<next stub in canonical order>`. Continue / switch / pause?"*
- Continue → next stub in canonical order.
- Switch → ask which section; jump.
- Pause → stop; adopter resumes by re-invoking.
If `--all` was passed, skip this prompt. Stop only when every stub is `done` (then run **Wrap**).
Brand Identity
**Auto-ported case** (the placeholder was replaced from DESIGN.md): show the ported prose verbatim. Offer `keep / edit / rewrite`.
- `keep` → write + flip + lint.
- `edit` → take natural-language patches, re-show, loop until `keep`.
- `rewrite` → fall through to the freeform case.
**Freeform case** (no auto-port, or adopter chose `rewrite`): prompt:
> *"Write or paste your Brand Identity prose — voice, posture, density, restraint, anything that matters for downstream design decisions. Length is your call; round-1 reads this in full on every task.* > > *Not sure where to start? Say "guide me" and I'll walk you through 4–5 prompts to draft it together."*
- If the adopter pastes prose, take it as-is, read back for confirmation, loop on natural-language edits until `yes`.
- If they say "guide me" (or equivalent), ask 4–5 prompts in sequence: brand voice in 1–2 adjectives; density posture (dense vs. spacious, why); restraint signal (when the DS pulls back); the one rule that makes a screen feel off-brand; optional anti-example. Draft a prose paragraph from the answers, read back, loop.
Write the final prose into `## Brand Identity` (replacing whatever was there). Flip `setup_progress.brand-identity: done`. Run lint.
Scenario sections (11)
Canonical order: Action buttons, Forms & input collection, Feedback & status, Overlays, Navigation & wayfinding, Content display, Layout & page structure, Date & time selection, Iconography, Visual hierarchy, Domain-specific patterns.
Per section:
1. **Draft candidates** as a numbered list, blending two sources:
- **DESIGN.md** (if `design_md_reference` is set): mine narrative for scenarios in this section's territory.
- **Canonical seeds** (always; see **Seed scenarios** below).
Adapt to the adopter's FACT: drop seeds whose atoms aren't in FACT; add candidates suggested by FACT atoms that no canonical seed covered. Atom names backticked (FACT entries verbatim); prop expressions bare. Example: `` → `Button` variant="primary" ``. Soft target 5–8; no hard cap, no padding.
2. **Confirm.** Show the list. *"Accept all, or tell me what to change (accept some / reject some / edit some / add new)?"* Loop on natural-language responses until the adopter accepts.
3. **Write.** Replace the section's `_(empty — …)_` marker with the confirmed scenarios. Each scenario: one or more prose framing lines, then one or more `→ <atom expression>` lines.
4. **Flip + lint.** Set `setup_progress.<section>: done` in config. Run lint.
5. **Cadence prompt** (unless `--all`).
`[GENERAL]` WISDOM phase (last)
Runs only when every KNOWLEDGE stub is `done`. Same shape as a scenario section; writes to `pastiche/WISDOM.md`; the unit is a tagged rule.
1. **Draft candidates**, blending:
- **DESIGN.md** (if set): mine posture / invariants, especially any "Do's and Don'ts"-shaped content.
- **Canonical seeds (4):**
- *Tokens-only* — never raw hex / px; always reference DS toke
Pastiche is a Claude Code plugin for Frontend UI implementation. Given a frontend task, it produces code that follows your established design system and component library — not by inventing, but by faithfully executing within the vocabulary your team already
Other skills on pastiche.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about pastiche-setup.
- Which coding agents can use pastiche-setup?
- pastiche-setup installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

