$npx -y skills add fusengine/agents --skill design-methodCore design method — Register resolution (brand vs product), the Design Read one-liner + the 3 dials (DESIGN_VARIANCE/VISUAL_DENSITY/MOTION_INTENSITY), the Gate 0 brief lock, Absolute bans, the 2-level AI-slop test, and routing to a move (generate/critique/audit/bolder/quieter/di
| 1 | <!-- Grounding: grounding-corpus.md §A (impeccable anatomy — thin router, Register, dials, Absolute bans, 2-level slop test), §G (root-cause fix: template reproduction demoted, register-first), §H (kept anchors: Gate 0, Signature Dominance, Focal-Block Floor, Competitor Lift Test, MOTION_INTENSITY). --> |
| 2 | |
| 3 | # Design Method — The Core |
| 4 | |
| 5 | This is the one place the design pipeline is defined. The agent (`agents/design-expert.md`) |
| 6 | always loads this file before dispatching to a move; every `references/register/*.md` and |
| 7 | `references/moves/*.md` file assumes you've read this first and references it instead of |
| 8 | restating it — if a rule elsewhere contradicts this file, this file wins. |
| 9 | |
| 10 | ## Setup |
| 11 | |
| 12 | How this core gets loaded, every time, no exceptions: |
| 13 | |
| 14 | 1. Read this file once per task — not once per move, once per task. If a second move runs |
| 15 | later in the same task and nothing about the Register or the codebase changed, don't |
| 16 | re-read it. |
| 17 | 2. **Read `../design-system/SKILL.md`** — always, unconditionally, before anything else |
| 18 | below. It's a thin, pointer-only file, cheap to reload; this exact read is also the |
| 19 | harness's phase-1 trigger, so it happens even on a task that turns out to need no new |
| 20 | token. Existing `design-system.md` tokens still win over its defaults once resolved. |
| 21 | 3. Resolve **Register** (below), then write the **Design Read + 3 dials** one-liner. |
| 22 | 4. Pass **Gate 0 — Brief Lock** (below) before touching any HTML/CSS/tokens. |
| 23 | 5. Read the ONE matched `references/moves/<move>.md` from the Routing table — not two, not |
| 24 | a skim of several to "compare." The move file owns the how; this file only owns the gate |
| 25 | and the pointer. |
| 26 | 6. If the move builds or touches code, the Register also gates which |
| 27 | `references/register/{brand,product}.md` floors apply — read that file too, once. |
| 28 | |
| 29 | ## Register |
| 30 | |
| 31 | Resolve **before anything else downstream** — brand vs product gates every floor |
| 32 | (Signature Dominance, Focal-Block Floor, tone bounds, motion budget, the dial presets |
| 33 | below). Never default silently. |
| 34 | |
| 35 | - **brand** — one dominant, expressive message: marketing site, launch page, identity. |
| 36 | - **product** — dense, predictable, motion stays discreet: dashboard, SaaS tool, utility |
| 37 | screen. |
| 38 | |
| 39 | **Priority order (fixed, first match wins):** |
| 40 | 1. The owner states it explicitly. |
| 41 | 2. An existing `design-system.md`/`PRODUCT.md` already classifies it. |
| 42 | 3. Inferable from the concrete surface (dashboard/settings/internal tool → `product`; |
| 43 | landing/marketing/campaign/identity → `brand`). |
| 44 | 4. Still unclear → ask **ONE** question. Never guess past this point. |
| 45 | |
| 46 | Once resolved, load `references/register/brand.md` or `references/register/product.md` — |
| 47 | each carries the register-specific floors, tone bounds, and motion budget for that lane. |
| 48 | For copy/microcopy tone by register, load `references/register/copy.md` (used by |
| 49 | `ux-copy` and by any move that touches user-facing text, regardless of which move it is). |
| 50 | |
| 51 | ## Design Read + the 3 dials |
| 52 | |
| 53 | Before any palette/font/layout choice, state one line: |
| 54 | |
| 55 | ``` |
| 56 | Design Read: {page kind} for {audience}; vibe = {2-4 adjectives}; assets = {existing brand assets or "none"}; constraints = {quiet constraints or "none"}. |
| 57 | ``` |
| 58 | |
| 59 | Then set the 3 numeric dials it implies — **contractual inputs** for every step after this |
| 60 | one, not decoration: |
| 61 | |
| 62 | | Dial | 1 | 10 | |
| 63 | |------|---|----| |
| 64 | | `DESIGN_VARIANCE` | rigid, symmetrical, conventional | highly art-directed, asymmetric | |
| 65 | | `VISUAL_DENSITY` | airy, gallery-like, calm | packed, information-dense | |
| 66 | | `MOTION_INTENSITY` | static / near-still | cinematic, scroll-driven | |
| 67 | |
| 68 | Full preset-by-use-case table, partial-brief fallbacks, and `MOTION_INTENSITY` qualitative |
| 69 | bands (calm <4 / expressive 4–7 / cinematic >7): read |
| 70 | `../design-system/references/design-read-dials.md` — mechanics live there, don't restate |
| 71 | them here. The brief always overrides any default; an unresolvable dial uses the documented |
| 72 | fallback and says so in the Design Read line, never a silent guess. |
| 73 | |
| 74 | ## Gate 0 — Brief Lock |
| 75 | |
| 76 | Before routing to any target skill — before writing or modifying a single line of |
| 77 | HTML/CSS/tokens — four artefacts must exist **in writing**, not just in your head: |
| 78 | |
| 79 | 0. **Register** — resolved above, stated explicitly (not defaulted). |
| 80 | 1. |