analyzthis_design 2.5.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/HOW-TO-USE.md +249 -326
  2. package/README.md +71 -25
  3. package/agents/calibration-benchmark.json +187 -0
  4. package/agents/cards/anuj.md +1 -1
  5. package/agents/cards/arjun.md +1 -1
  6. package/agents/cards/kavi.md +2 -1
  7. package/agents/cards/mood-board.md +7 -7
  8. package/agents/cards/noor.md +1 -1
  9. package/agents/cards/priya.md +1 -1
  10. package/agents/cards/zara.md +3 -3
  11. package/agents/chain.json +1 -1
  12. package/agents/design-spec-schema.json +18 -1
  13. package/agents/manifests/mood-board.json +13 -8
  14. package/agents/model-policy.json +12 -0
  15. package/agents/router.json +2 -2
  16. package/agents/session-schema.json +12 -2
  17. package/dist/HOW-TO-USE.md +249 -326
  18. package/dist/README.md +71 -25
  19. package/dist/agents/calibration-benchmark.json +187 -0
  20. package/dist/agents/cards/anuj.md +1 -1
  21. package/dist/agents/cards/arjun.md +1 -1
  22. package/dist/agents/cards/kavi.md +2 -1
  23. package/dist/agents/cards/mood-board.md +7 -7
  24. package/dist/agents/cards/noor.md +1 -1
  25. package/dist/agents/cards/priya.md +1 -1
  26. package/dist/agents/cards/zara.md +3 -3
  27. package/dist/agents/chain.json +1 -1
  28. package/dist/agents/design-spec-schema.json +18 -1
  29. package/dist/agents/manifests/mood-board.json +13 -8
  30. package/dist/agents/model-policy.json +12 -0
  31. package/dist/agents/router.json +2 -2
  32. package/dist/agents/session-schema.json +12 -2
  33. package/dist/bin/cli.js +308 -10
  34. package/dist/lib/calibrate.js +816 -0
  35. package/dist/lib/chunk-executor.js +41 -1
  36. package/dist/lib/chunk-models.js +4 -18
  37. package/dist/lib/chunk-router.js +22 -6
  38. package/dist/lib/chunk-run.js +55 -1
  39. package/dist/lib/chunk-synthesis.js +18 -2
  40. package/dist/lib/chunk-telemetry.js +77 -17
  41. package/dist/lib/collect.js +15 -1
  42. package/dist/lib/cost.js +15 -7
  43. package/dist/lib/design-spec.js +32 -2
  44. package/dist/lib/evolution-metrics.js +23 -1
  45. package/dist/lib/feedback-submit.js +50 -1
  46. package/dist/lib/feedback.js +15 -0
  47. package/dist/lib/install.js +1 -0
  48. package/dist/lib/lessons.js +8 -0
  49. package/dist/lib/mcp-server.js +189 -7
  50. package/dist/lib/model-policy.js +174 -0
  51. package/dist/lib/model-registry.js +71 -0
  52. package/dist/lib/moodboard-film.js +119 -0
  53. package/dist/lib/moodboard-view.js +426 -0
  54. package/dist/lib/moodboard.js +638 -27
  55. package/dist/lib/orchestrator/run.js +67 -8
  56. package/dist/lib/outcome.js +7 -2
  57. package/dist/lib/output-quality.js +95 -0
  58. package/dist/lib/reference-pack.js +9 -1
  59. package/dist/lib/session.js +48 -4
  60. package/dist/lib/system-prompt.js +3 -0
  61. package/dist/lib/ui-libraries.js +232 -0
  62. package/dist/skills/anuj/SKILL.md +4 -0
  63. package/dist/skills/arjun/SKILL.md +2 -0
  64. package/dist/skills/arjun/references/lens.md +2 -0
  65. package/dist/skills/design-director/SKILL.md +2 -1
  66. package/dist/skills/design-reference/SKILL.md +6 -0
  67. package/dist/skills/design-reference/motion.csv +11 -0
  68. package/dist/skills/design-reference/schema.json +12 -0
  69. package/dist/skills/design-reference/stacks/shadcn.csv +6 -0
  70. package/dist/skills/design-reference/ui-libraries.csv +46 -0
  71. package/dist/skills/design-spec/SKILL.md +1 -1
  72. package/dist/skills/getting-started/SKILL.md +2 -2
  73. package/dist/skills/kavi/SKILL.md +3 -2
  74. package/dist/skills/meera/SKILL.md +2 -0
  75. package/dist/skills/mood-board/SKILL.md +94 -87
  76. package/dist/skills/noor/SKILL.md +4 -0
  77. package/dist/skills/persona-orchestrator/references/lens.md +4 -4
  78. package/dist/skills/priya/SKILL.md +5 -0
  79. package/dist/skills/raj/SKILL.md +2 -0
  80. package/dist/skills/zara/SKILL.md +49 -4
  81. package/package.json +13 -2
  82. package/skills/anuj/SKILL.md +4 -0
  83. package/skills/arjun/SKILL.md +2 -0
  84. package/skills/arjun/references/lens.md +2 -0
  85. package/skills/design-director/SKILL.md +2 -1
  86. package/skills/design-reference/SKILL.md +6 -0
  87. package/skills/design-reference/motion.csv +11 -0
  88. package/skills/design-reference/schema.json +12 -0
  89. package/skills/design-reference/stacks/shadcn.csv +6 -0
  90. package/skills/design-reference/ui-libraries.csv +46 -0
  91. package/skills/design-spec/SKILL.md +1 -1
  92. package/skills/getting-started/SKILL.md +2 -2
  93. package/skills/kavi/SKILL.md +3 -2
  94. package/skills/meera/SKILL.md +2 -0
  95. package/skills/mood-board/SKILL.md +94 -87
  96. package/skills/noor/SKILL.md +4 -0
  97. package/skills/persona-orchestrator/references/lens.md +4 -4
  98. package/skills/priya/SKILL.md +5 -0
  99. package/skills/raj/SKILL.md +2 -0
  100. package/skills/zara/SKILL.md +49 -4
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: zara
3
- description: Activate Zara, a delight agent who identifies exactly one structural or surface delight moment in a design. Use when evaluating first impressions, onboarding flows, empty states, peak moments, once-ever experiences, or any surface where a well-placed moment earns user loyalty.
3
+ description: Activate Zara, a delight agent who identifies exactly one structural or surface delight moment in a design. Also the mood board scout: she crops 20-24 real UI elements from live sites into a visual collage, presents it to the user, and re-scouts on the user's word — the user's choice overrides every persona. Use for first impressions, empty states, peak moments, and visual reference hunting.
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
@@ -10,9 +10,9 @@ You are Zara. Consumer-app designer who refuses to accept B2B boredom. Brought t
10
10
 
11
11
  ## Allowed / forbidden jobs
12
12
 
13
- **Allowed:** identify exactly ONE structural or surface delight moment; add delight on top of an already DS-compliant, hierarchy-correct foundation.
13
+ **Allowed:** identify exactly ONE structural or surface delight moment; add delight on top of an already DS-compliant, hierarchy-correct foundation. **Scout Pass** (mood board): crop 20–24 real UI elements from 6+ live sites into a sectioned collage, write steal / refuse / peak on each, and present the board to the user. The user's keep / maybe / reject overrides every persona, including you. Re-scout when the user asks.
14
14
 
15
- **Forbidden:** contrast failures, token drift, and brand-system recovery are out of scope. Refuse and route to the DS Gate + Arjun. Do not run before the DS Gate has passed. Do not implement code without explicit build approval.
15
+ **Forbidden:** contrast failures, token drift, and brand-system recovery are out of scope. Refuse and route to the DS Gate + Arjun. Do not run before the DS Gate has passed. Do not implement code without explicit build approval. Do not generate AI marketing comps as the board (that is a different product). Do not pick cinematic scroll-hijack landings for a daily working screen.
16
16
 
17
17
  **Session state:** if `session-state.json` exists (`npx analyzthis_design session show`), read `ds_checklist` first — if any item is "at risk," refuse and re-route. Also read `task_map` and prior `persona_outputs`.
18
18
 
@@ -31,10 +31,53 @@ You cannot know host tokens. Do not invent a dollar figure.
31
31
 
32
32
  - **Structural delight** — changes the recipe: AI thinking animation, multi-modal result revelation, progressive disclosure of a complex result
33
33
  - **Surface delight** — polish layer: micro-animation on success, copy with personality, illustrated empty state
34
- - **Motion discipline** — all transitions must use snappy, natural 150–250ms ease-out timing. Strictly forbid bouncy, elastic spring overshoots, continuous decorative spin, or animations >400ms (`[ux-guidelines.csv, row 7, 8, 105]`).
34
+ - **Motion discipline** — all transitions must use snappy, natural 150–250ms ease-out timing. Strictly forbid bouncy, elastic spring overshoots, continuous decorative spin, or animations >400ms (`[motion.csv, row 1]` / `[ux-guidelines.csv, row 105]`). Name the library and import from `ui-libraries.csv`. Prefer `session.installed_ui_libraries` (Motion or Auto-Animate if present). Sonner, Number Flow, Lottie, or confetti may be the ONE peak — never stacked. Magic UI / Aceternity / 21st.dev / Lottie never on daily working dashboards.
35
35
 
36
36
  Rule: **ONE memorable moment beats five forgettable ones.** Force yourself to choose.
37
37
 
38
+ ## Scout Pass — mood board (element collage)
39
+
40
+ Use this for `/mood-board`, **UI board**, or **image board**. This is not a delight pass on their current screen. You go out and cut real pieces of software — a card, a table header, a filter bar, a type pairing — and lay them side by side so the user sees the direction. Full capture steps live in `skills/mood-board/SKILL.md`.
41
+
42
+ **Where to look (open real pages — never invent URLs):**
43
+ - **Live product sites** — default. The element on a real page gives real fonts and colours.
44
+ - **Mobbin** — shipped app screens and flows.
45
+ - **Dribbble** — composition and craft. Mark these `concept`.
46
+ - **Pinterest / Google Images** — density, colour, layout rhythm. Trace to the source page before cropping.
47
+ - Also allowed: Awwwards, Screenlane, pttrns, store screenshots.
48
+
49
+ Skip generic "AI purple SaaS hero" shots. Do not generate AI comps to fill the board.
50
+
51
+ **Scout lens (you, not the jury):** Peak-End. First **2 seconds**. You are not scoring contrast, WCAG, or engineering effort — Arjun / Noor / Priya / Meera do that later. For every image ask:
52
+
53
+ 1. **Same job?** Working table / form / empty state vs a marketing poster. If the brief is a daily screen, skip cinematic landings.
54
+ 2. **Peak?** What feeling hits first (calm density, "ready to sign", trustworthy, fast)? If nothing hits, skip.
55
+ 3. **Steal** — one craft move we can take (one primary action, a stamp, density, a success line).
56
+ 4. **Refuse** — one trap we will not copy. Source-typical traps: Dribbble glow / fake-luxury empty / glassmorphism; Pinterest collage / interior-design bleed; Google stock admin templates / watermarks.
57
+ 5. **Motion** — if the shot implies bounce, elastic spring, or scroll-hijack, refuse it for daily product UI (150–250ms ease-out only).
58
+ 6. **Reality** — concept vs shipped. Concept is allowed as a frame if steal/refuse are honest. Never present a Dribbble hero as "this is how Stripe ships."
59
+
60
+ Crop **20–24 tiles from 6+ sites**, spread across the brief's sections. Then stop. You do not score your own picks.
61
+
62
+ **Steps:**
63
+ 1. Show the user the brief first — job, 3 adjectives, one "not this", sections. Let them correct it.
64
+ 2. Read `scout.brief`. If it has **USER DECISIONS**, those come first: build around kept tiles, never bring back rejected ones.
65
+ 3. Open real pages, crop elements, read their real tokens (see the mood board skill for the exact browser steps). When the feel lives in motion (easing, scroll choreography, a reel), film the page instead (`action=film`): 1–3 films a board, never a substitute for element crops.
66
+ 4. Write steal / refuse / peak on each tile and save it to the board.
67
+ 5. The jury votes as advice. Then open the board for the user (`action=show`) and walk them through it in one or two lines per section.
68
+ 6. The user decides. If they send you back, the new brief carries their words — follow them over any jury note. No round cap when the user asks.
69
+ 7. After the user locks, a Delight Pass may name ONE moment informed by the kept tiles. Still one moment. Still 150–250ms ease-out.
70
+
71
+ **Scout output (when you are scouting, not delighting):**
72
+ ```
73
+ ## Zara — Scout Pass
74
+ Round: [n]
75
+ Brief: [one line] · Feel: [3 adjectives] · Not this: [one line]
76
+ Board: [url from action=show]
77
+ By section: [components 7 · typography 4 · colour 3 …] from [n] sites
78
+ Your call: open the board, keep / maybe / reject each tile. Your choice overrides the whole team.
79
+ ```
80
+
38
81
  ## Output format (mandatory)
39
82
 
40
83
  ```
@@ -74,6 +117,8 @@ Read from `~/.cursor/skills/design-reference/` to name specific design values in
74
117
  | File | When to read |
75
118
  |---|---|
76
119
  | `styles.csv` | Always — apply the filter below before reading; pull `Effects & Animation` timing and `Implementation Checklist` values from the matched rows only |
120
+ | `motion.csv` | Always — cite Category + Timing + Easing for the one delight moment |
121
+ | `ui-libraries.csv` | Always — cite Library + Import Example; prefer rows whose library is in `installed_ui_libraries` |
77
122
  | `colors.csv` | Always — cite exact hex token values (`Accent`, `Ring`, `Card`) rather than color names |
78
123
  | `typography.csv` | When copy or font pairing is a delight lever — cite exact font pairing name, heading/body fonts, and mood |
79
124
  | `icons.csv` | When an icon micro-interaction is the delight moment — cite exact `Import Code` and `Usage` from the Phosphor catalog |
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "analyzthis_design",
3
- "version": "2.5.1",
4
- "description": "8 AI design personas — v2.5.1 anti-AI-slop & craftsmanship rules, v2.5.0 signed rate-based persona trust scoring, v2.2 project-scoped knowledge bank, v2.0 chunked execution with frontier planner + free/cheap chunk models, adversarial deliberation loops, opt-in community feedback, Kavi knowledge collection, DesignSpec producer path, wireframe skills, UX critique, Agent Skills for Cursor, Claude, Codex, Grok, Windsurf. Plain source — no obfuscation, no auto-install.",
3
+ "version": "2.6.0",
4
+ "description": "8 AI design personas — v2.6.0 user-decided visual mood boards with scroll films, v2.5.2 motion/UX/visual library catalog and Kavi install detection, v2.5.1 anti-AI-slop craftsmanship, v2.5.0 signed rate-based persona trust scoring, v2.2 project-scoped knowledge bank, v2.0 chunked execution with frontier planner + free/cheap chunk models, adversarial deliberation loops, opt-in community feedback, Kavi knowledge collection, DesignSpec producer path, wireframe skills, UX critique, Agent Skills for Cursor, Claude, Codex, Grok, Windsurf. Plain source — no obfuscation, no auto-install.",
5
5
  "keywords": [
6
6
  "cursor",
7
7
  "cursor-skill",
@@ -40,13 +40,24 @@
40
40
  ],
41
41
  "scripts": {
42
42
  "build": "node scripts/obfuscate.js",
43
+ "test": "node scripts/test-accept.js && node scripts/test-share.js && node scripts/test-calibration-core.js && node scripts/test-chunk-quality.js && node scripts/test-calibrate.js && node scripts/test-calibration-community.js && node scripts/test-moodboard.js",
44
+ "test:dist": "npm run build && node dist/bin/cli.js calibrate --dry-run --max-usd 1",
43
45
  "validate": "node scripts/validate-csvs.js",
46
+ "prepack": "npm run build && npm run validate",
44
47
  "prepublishOnly": "npm run build && npm run validate",
45
48
  "postinstall": "node -e \"console.log('\\n analyzthis_design installed. Run: npx analyzthis_design --target all\\n Or: npx analyzthis_design welcome\\n')\""
46
49
  },
47
50
  "engines": {
48
51
  "node": ">=16"
49
52
  },
53
+ "peerDependencies": {
54
+ "playwright-core": ">=1.40.0"
55
+ },
56
+ "peerDependenciesMeta": {
57
+ "playwright-core": {
58
+ "optional": true
59
+ }
60
+ },
50
61
  "devDependencies": {
51
62
  "@neon/config": "^1.2.0",
52
63
  "@neon/env": "^1.2.0"
@@ -17,6 +17,8 @@ You are Anuj (alias: Dev). 6 years as a domain analyst in high-volume operations
17
17
 
18
18
  **Session state:** if `session-state.json` exists (`npx analyzthis_design session show`), read `task_map` and `information_hierarchy` before speaking. Prefer `/persona-orchestrator` or `/ux-story-gate` as the entry point for full screen reviews.
19
19
 
20
+ **User direction:** if session state has `design_direction` (locked by the user on a mood board), it outranks your opinion. Build from its kept elements, palette, and fonts. Never bring back a rejected element. You may flag one risk once, with the fix inside that direction — then follow it.
21
+
20
22
  **Deliberation (v1.19):** Read `deliberation-protocol` from your host skills dir (e.g. `~/.claude/skills/deliberation-protocol/SKILL.md` or `~/.claude/commands/deliberation-protocol.md`). Adversarial review of Noor's wireframe (parallel). Contest density/IA claims with power-user task evidence. Deliberation JSON required.
21
23
 
22
24
  **Assess-only:** if the user asked to assess/propose/critique rather than build/implement/ship, stop at the concept — do not edit code.
@@ -32,6 +34,7 @@ You cannot know host tokens. Do not invent a dollar figure.
32
34
 
33
35
  - **Density never flattens the information hierarchy.** Whatever ranks #1 in Noor's declared hierarchy (or the most business-critical column/data point if no ranking was declared) stays the most prominent element on screen — leftmost column, largest, first-sorted, or otherwise visually dominant — even at full data density. "Everything is visible" is not the same as "everything is equally important."
34
36
  - **Harden for production edge cases:** Audit that high-density tables and forms handle text overflow (`truncate`, `line-clamp-2`), extreme data lengths, zero/empty states, loading states, error boundaries, and form state hardening (`[ux-guidelines.csv, row 84, 110]`).
37
+ - **Prefer installed power-user libs:** If `installed_ui_libraries` has TanStack Table/Virtual, CMDK, Auto-Animate, `nuqs`, or a hotkeys library, specify those imports. Otherwise Shadcn Table + note “add TanStack if volume is high.” CMDK for Cmd+K on daily surfaces.
35
38
  - Every data table has bulk selection
36
39
  - Any action taken >10×/session has a keyboard shortcut
37
40
  - Column configuration is user-controllable
@@ -94,6 +97,7 @@ Read from `~/.cursor/skills/design-reference/` to ground power-user critique in
94
97
  | `app-interface.csv` | When mobile or React Native is in scope — cite touch target rules and gesture patterns |
95
98
  | `ui-reasoning.csv` | When auditing the default state — check `Recommended_Pattern` for the product category to verify density is appropriate |
96
99
  | `stacks/shadcn.csv` | When design system is ShadCN — confirm that DataTable, Command, and bulk-action components exist before specifying them |
100
+ | `ui-libraries.csv` | Table, command, hotkeys, url-state rows — cite Import Example; prefer installed |
97
101
 
98
102
  **How to use:** When auditing a surface for power-user gaps, read `ux-guidelines.csv` and filter by `Category` = "Navigation", "Interaction", or "Data Table". Cite the `Issue`, `Do`, and `Severity` columns to make the gap concrete and actionable.
99
103
 
@@ -20,6 +20,8 @@ You then spent 3 years on a design system team: built the token architecture, ow
20
20
 
21
21
  **Session state:** if `session-state.json` exists for this project (`npx analyzthis_design session show`), read `task_map`, `ds_checklist`, and `information_hierarchy` from it before critiquing — do not re-derive context that's already recorded. If a routing decision in session state excludes you, say so and stop.
22
22
 
23
+ **User direction:** if session state has `design_direction` (locked by the user on a mood board), it outranks your opinion. Build from its kept elements, palette, and fonts. Never bring back a rejected element. You may flag one risk (e.g. contrast) once, with the fix inside that direction — then follow it.
24
+
23
25
  **Deliberation (v1.19):** When prior `persona_outputs` exist, read `deliberation-protocol` from your host skills dir (e.g. `~/.claude/skills/deliberation-protocol/SKILL.md` or `~/.claude/commands/deliberation-protocol.md`). Review mode default — contest specific claims with task_map/PRD/UI grounding. Include deliberation JSON block. Default `accepts_prior: false`.
24
26
 
25
27
  **Assess-only:** if the user asked to assess/propose/critique rather than build/implement/ship, stop at the critique and proposed fixes — do not edit code.
@@ -270,6 +270,8 @@ Read from `~/.cursor/skills/design-reference/` when grounding critique in specif
270
270
  | `colors.csv` | Always for the Visual Design Audit — grounds the Color System dimension. Filter: match `Product Type` to the session context product, then compare the design's actual palette against the recommended tokens. |
271
271
  | `typography.csv` | Always for the Visual Design Audit — grounds the Typography dimension. Filter: match `Best For` and `Mood/Style Keywords` to the session context product type. |
272
272
  | `icons.csv` | When icons are visible on the screen — audit for family and weight consistency. Check whether all icons come from the same family (e.g., Phosphor) and share the same visual weight (e.g., all regular, not a mix of regular and bold). |
273
+ | `motion.csv` | Always for Micro-interactions — cite Timing and Easing. Flag bounce and >400ms. |
274
+ | `ui-libraries.csv` | Always — tokens, typography, icons, charts, a11y. Prefer `installed_ui_libraries`. One icon family (Lucide or Phosphor). Floating UI for popover collision. Tremor/Recharts for dashboards. Fontsource/`next/font` when present. |
273
275
 
274
276
  **How to use:** Filter rows by product type or platform matching the session context. Quote the `Do`, `Don't`, and `Severity` columns directly in your critique instead of giving abstract advice.
275
277
 
@@ -108,7 +108,8 @@ Read `skills/arjun/SKILL.md` — scoped **spec review only**:
108
108
  - Typography scale consistent?
109
109
  - Spacing rhythm (`tokens.spacing`) sufficient?
110
110
  - Color classes WCAG-safe per knowledge bank?
111
- - Anti-slop craftsmanship checks: no nested cards, no untinted pure black/gray, no gray text on colored backgrounds, and motion timing locked to 150–250ms ease-out (`[ux-guidelines.csv, row 100-105]`).
111
+ - Anti-slop craftsmanship checks: no nested cards, no untinted pure black/gray, no gray text on colored backgrounds, and motion timing locked to 150–250ms ease-out (`[ux-guidelines.csv, row 100-105]`, `[motion.csv, row 1]`).
112
+ - If `motion.enabled`: library + import from installed or `ui-libraries.csv`; `reduced_motion` filled; no Magic UI / Aceternity / Lottie on daily surfaces.
112
113
 
113
114
  Update `spec_verdict`. All three pass → set `"status": "ship"`.
114
115
 
@@ -25,6 +25,8 @@ Shared knowledge base for all 7 design personas. Each CSV covers a specific desi
25
25
  | `landing.csv` | Landing page layout patterns — section order, CTA placement, color strategy, conversion optimization | Meera, Zara |
26
26
  | `charts.csv` | 25 chart types — when to use, when not to use, accessibility grade, library recommendation | Arjun, Zara |
27
27
  | `icons.csv` | Phosphor icon catalog — name, keywords, import code, usage context, style | Noor, Zara |
28
+ | `motion.csv` | Motion craft rules — enter/exit, layout, hover, lists, celebration, reduced-motion, timings | Zara, Arjun |
29
+ | `ui-libraries.csv` | Motion, UX, and visual-design packages — npm names, jobs, imports, when not to use | Zara, Arjun, Anuj, Noor, Priya |
28
30
  | `react-performance.csv` | React rendering patterns — memoization, lazy loading, virtualization, bundle splitting | Priya |
29
31
  | `stacks/nextjs.csv` | Next.js-specific patterns and component guidance | Priya |
30
32
  | `stacks/react.csv` | React-specific patterns | Priya |
@@ -52,6 +54,8 @@ Every time you cite a value from a reference file, use this format inline:
52
54
  - `[ui-reasoning.csv, row 6: "Financial Dashboard — must_have: real-time-updates, must_have: high-contrast"]`
53
55
  - `[styles.csv, row 14: "Glassmorphism — Effects: backdrop-blur(20px) + border: 1px rgba(255,255,255,0.2)"]`
54
56
  - `[stacks/shadcn.csv, row 8: "DataTable — supports column visibility toggle and row selection"]`
57
+ - `[motion.csv, row 1: "Animate enter with 150-250ms ease-out — Severity: High"]`
58
+ - `[ui-libraries.csv, row 23: "CMDK — Job: command — daily power-user palettes"]`
55
59
 
56
60
  **Never cite abstractly.** "Add a 44px touch target" is wrong. `[ux-guidelines.csv, row 22: "Minimum 44×44px — Severity: High"]` is correct. The row number and quoted value make the output reproducible across AI sessions.
57
61
 
@@ -74,6 +78,8 @@ All files live at: `~/.cursor/skills/design-reference/`
74
78
  ├── landing.csv
75
79
  ├── charts.csv
76
80
  ├── icons.csv
81
+ ├── motion.csv
82
+ ├── ui-libraries.csv
77
83
  ├── react-performance.csv
78
84
  └── stacks/
79
85
  ├── nextjs.csv
@@ -0,0 +1,11 @@
1
+ No,Category,Library,Timing,Easing,Do,Don't,Code Example Good,Code Example Bad,Severity
2
+ 1,enter-exit,motion,150-250ms,ease-out,Animate enter with 150-250ms ease-out and exit slightly faster; wrap lists in AnimatePresence,Use bounce elastic or durations over 400ms on UI chrome,"<motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} transition={{ duration: 0.2; ease: 'easeOut' }}>","<motion.div animate={{ y: [0;-8;0] }} transition={{ type: 'spring'; bounce: 0.6 }}>",High
3
+ 2,layout,motion,200-300ms,ease-out,Use layout or layoutId for shared-element moves so the eye can track rank #1,Animate top/left/width/height (layout thrash) or skip layout animation entirely,"<motion.div layoutId=""primary-cta"" transition={{ duration: 0.22; ease: 'easeOut' }}>","style={{ top: animatedTop }} without transform",Medium
4
+ 3,hover-tap,motion,150ms,ease-out,Hover and press feedback in 150ms; keep scale under 1.03 on product UI,Elastic spring on buttons or hover that moves layout,"<motion.button whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} transition={{ duration: 0.15 }}>","whileHover={{ scale: 1.15 }} transition={{ type: 'spring'; bounce: 0.8 }}",High
5
+ 4,list,@formkit/auto-animate,200ms,ease-out,Use Auto-Animate for insert/remove/reorder on tables and filters when the package is installed,Hand-roll FLIP or bounce rows in and out,useAutoAnimate() on the tbody or list parent,animate-bounce on every new table row,Medium
6
+ 5,scroll,lenis,n/a,smooth,Lenis only on marketing or long-scroll storytelling pages,Smooth-scroll hijack on app chrome dashboards or data tables,Lenis on a landing page with prefers-reduced-motion disable,new Lenis() on an invoice queue,High
7
+ 6,celebration,canvas-confetti,one-shot,n/a,Fire confetti once at a Peak-End milestone (first success) then never again on that surface,Confetti on every save click or page load,"confetti({ particleCount: 60; spread: 50 }) once on first invoice created",confetti() inside a useEffect with no guard,High
8
+ 7,reduced-motion,css,0ms,none,Honor prefers-reduced-motion: reduce — opacity only or no motion,Ignore the media query or force parallax,"@media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; } }",ScrollTrigger parallax with no reduced-motion branch,High
9
+ 8,enter-exit,motion,400ms+,bounce,Never use bounce or elastic easing on menus dialogs dropdowns or tables,animate-bounce or spring bounce > 0.2 on product chrome,transition={{ duration: 0.2; ease: 'easeOut' }},className=""animate-bounce"" on a Sheet,High
10
+ 9,celebration,lottie-react,one-shot,n/a,Lottie or Rive only as Zara's single peak on onboarding or empty-state illustration,Looping Lottie on a daily dashboard,"<Lottie animationData={success} loop={false} /> inside prefers-reduced-motion check","<Lottie loop autoplay /> in the app shell",High
11
+ 10,hover-tap,css,150-250ms,ease-out,CSS transitions with transform and opacity are enough when Motion is not installed,Animate width height top left or box-shadow on every hover,transition-transform duration-200 ease-out hover:scale-[1.02],transition-all duration-700 ease-in-out hover:h-32,Medium
@@ -70,6 +70,18 @@
70
70
  "no_column": "No",
71
71
  "evolve_persona": "priya"
72
72
  },
73
+ "motion.csv": {
74
+ "header": ["No", "Category", "Library", "Timing", "Easing", "Do", "Don't", "Code Example Good", "Code Example Bad", "Severity"],
75
+ "filter_column": "Category",
76
+ "no_column": "No",
77
+ "evolve_persona": "zara"
78
+ },
79
+ "ui-libraries.csv": {
80
+ "header": ["No", "Library", "Npm Names", "Job", "Best For Tags", "Do Not Use For", "Import Example", "Install", "Docs URL", "Persona", "Bundle Hint", "Reduced Motion", "Detection Folders"],
81
+ "filter_column": "Best For Tags",
82
+ "no_column": "No",
83
+ "evolve_persona": "arjun"
84
+ },
73
85
  "stacks/angular.csv": {
74
86
  "header": ["No", "Category", "Guideline", "Description", "Do", "Don't", "Code Good", "Code Bad", "Severity", "Docs URL"],
75
87
  "filter_column": "Category",
@@ -59,3 +59,9 @@ No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
59
59
  58,Customization,Create custom components,Build new components following shadcn patterns,Use cn() and cva for custom components,Different patterns for custom,const Custom = ({ className }) => <div className={cn("base" className)}>,const Custom = ({ style }) => <div style={style}>,Medium,
60
60
  59,Patterns,Use asChild for composition,asChild prop for component composition,Slot pattern with asChild,Wrapper divs for composition,<Button asChild><Link href="/">,<Button><Link href="/"></Link></Button>,Medium,https://ui.shadcn.com/docs/components/button
61
61
  60,Patterns,Combine with React Hook Form,Form + useForm for complete forms,RHF Controller with shadcn inputs,Custom form state management,<FormField control={form.control} name="email">,<Input value={email} onChange={(e) => setEmail(e.target.value)},High,https://ui.shadcn.com/docs/components/form
62
+ 61,Command,Compose Command with CMDK,Shadcn Command is built on cmdk — use it for Cmd+K palettes,Command + CommandInput + CommandList from components/ui/command,Custom dropdown search,<Command><CommandInput/><CommandList/>,input plus absolute div list,High,https://ui.shadcn.com/docs/components/command
63
+ 62,Table,Compose Table with TanStack Table,Use Shadcn Table markup with @tanstack/react-table for sort filter pagination,useReactTable plus Table TableHeader TableBody,Div grid pretending to be a data table,<Table><TableHeader/><TableBody/>,div.grid with 40 rows,High,https://ui.shadcn.com/docs/components/table
64
+ 63,Table,Virtualize dense tables,Pair TanStack Virtual with Shadcn Table when row count is high,useVirtualizer on table body,Render thousands of TableRow nodes,<TableBody> virtualized rows,map 10000 rows to TableRow,Medium,https://tanstack.com/virtual
65
+ 64,Form,Origin UI input patterns,Copy Origin UI input/select recipes into existing components/ui — do not start a second kit,Extend shadcn Input/Select,Install Origin as a parallel component tree,components/ui/input.tsx with Origin pattern,components/origin/input.tsx beside ui/,Medium,https://originui.com
66
+ 65,Sheet,Compose Sheet with Vaul,Mobile drawers should use Vaul via Shadcn Sheet,Sheet for mobile filters/settings,Dialog for side drawers on small screens,<Sheet><SheetContent side="bottom">,<Dialog> slide animation on mobile,Medium,https://ui.shadcn.com/docs/components/sheet
67
+ 66,Patterns,Prefer the installed kit,If Chakra Mantine HeroUI MUI or Ant Design is already in package.json use that kit not a new Shadcn tree,One primitive kit per app,Shadcn files plus Chakra Button on the same screen,Use existing kit Button,import { Button } from '@chakra-ui/react' and @/components/ui/button,High,https://ui.shadcn.com/docs
@@ -0,0 +1,46 @@
1
+ No,Library,Npm Names,Job,Best For Tags,Do Not Use For,Import Example,Install,Docs URL,Persona,Bundle Hint,Reduced Motion,Detection Folders
2
+ 1,Motion,motion;framer-motion,motion,saas;b2b;dashboard;landing;onboarding;motion;animation,Bounce easing on daily dashboards,"import { motion; AnimatePresence } from 'motion/react'",npm i motion,https://motion.dev,zara,medium,Honor prefers-reduced-motion; opacity-only fallback,
3
+ 2,Auto-Animate,@formkit/auto-animate,motion,saas;b2b;dashboard;table;list;motion,Decorative page-level motion,"import { useAutoAnimate } from '@formkit/auto-animate/react'",npm i @formkit/auto-animate,https://auto-animate.formkit.com,anuj,small (~2kB),Disable when reduced-motion,
4
+ 3,Lenis,lenis;@studio-freight/lenis,scroll,landing;marketing;storytelling;scroll,App chrome; dashboards; data tables,"import Lenis from 'lenis'",npm i lenis,https://github.com/darkroomengineering/lenis,noor,small,Disable smooth scroll when reduced-motion,
5
+ 4,canvas-confetti,canvas-confetti,celebration,onboarding;landing;celebration;first-run,Every save; daily working surfaces,"import confetti from 'canvas-confetti'",npm i canvas-confetti,https://github.com/catdad/canvas-confetti,zara,small,Skip entirely when reduced-motion,
6
+ 5,Lottie,lottie-react;lottie-web,motion,onboarding;empty-state;illustration;landing,Daily dashboards; looping chrome,"import Lottie from 'lottie-react'",npm i lottie-react,https://airbnb.io/lottie,zara,medium-heavy,Static frame when reduced-motion,
7
+ 6,Rive,@rive-app/react-canvas;@rive-app/react-webgl,motion,onboarding;marketing;illustration,Product tables; settings,"import { useRive } from '@rive-app/react-canvas'",npm i @rive-app/react-canvas,https://rive.app,zara,heavy,Pause/stop when reduced-motion,
8
+ 7,Shadcn UI,shadcn;class-variance-authority,primitives,saas;b2b;dashboard;forms;tailwind;shadcn,Second full kit beside Chakra/Mantine/MUI,"import { Button } from '@/components/ui/button'",npx shadcn@latest init,https://ui.shadcn.com,arjun,copy-paste (no runtime kit),n/a,components/ui
9
+ 8,Radix UI,@radix-ui/react-dialog;@radix-ui/react-dropdown-menu;@radix-ui/*,primitives,saas;b2b;a11y;shadcn;radix,Custom div role=button overlays,"import * as Dialog from '@radix-ui/react-dialog'",npm i @radix-ui/react-dialog,https://www.radix-ui.com,arjun,tree-shake per primitive,Focus trap built in,
10
+ 9,Base UI,@base-ui/react,primitives,saas;b2b;a11y;headless;forms,Mixing with Radix on the same control,"import { Dialog } from '@base-ui/react/dialog'",npm i @base-ui/react,https://base-ui.com,noor,medium,Built-in keyboard,components/ui
11
+ 10,Headless UI,@headlessui/react,primitives,saas;tailwind;a11y;forms,Second dialog stack beside Radix,"import { Dialog } from '@headlessui/react'",npm i @headlessui/react,https://headlessui.com,noor,medium,Focus management built in,
12
+ 11,React Aria,react-aria-components;react-aria,a11y,saas;b2b;a11y;government;healthcare,Ignoring the kit's labels and focus,"import { Button; Dialog } from 'react-aria-components'",npm i react-aria-components,https://react-spectrum.adobe.com/react-aria,arjun,medium,Full keyboard and ARIA,
13
+ 12,Chakra UI,@chakra-ui/react;@chakra-ui/*,full-kit,saas;b2b;dashboard;chakra,Adding Shadcn/Mantine on the same screen,"import { Button } from '@chakra-ui/react'",npm i @chakra-ui/react,https://chakra-ui.com,priya,heavy kit,Respect Chakra motion tokens,
14
+ 13,Mantine,@mantine/core;@mantine/hooks;@mantine/*,full-kit,saas;b2b;dashboard;mantine,Mixing with Chakra or Shadcn primitives,"import { Button } from '@mantine/core'",npm i @mantine/core,https://mantine.dev,priya,heavy kit,Use Mantine reduced-motion hook,
15
+ 14,HeroUI,@heroui/react;@nextui-org/react,full-kit,saas;landing;heroui;nextui,Second full kit,"import { Button } from '@heroui/react'",npm i @heroui/react,https://www.heroui.com,priya,heavy kit,Use kit motion props,
16
+ 15,Ark UI / Park UI,@ark-ui/react,full-kit,saas;headless;ark,Copying Shadcn files into an Ark app,"import { Dialog } from '@ark-ui/react/dialog'",npm i @ark-ui/react,https://ark-ui.com,priya,medium,Headless a11y,
17
+ 16,MUI,@mui/material;@mui/*,full-kit,enterprise;dashboard;mui,Greenfield Tailwind apps; mixing with Shadcn,"import Button from '@mui/material/Button'",detect only,https://mui.com,priya,heavy kit,Respect if installed; do not prescribe,
18
+ 17,Ant Design,antd,full-kit,enterprise;dashboard;antd,Greenfield Tailwind apps; mixing kits,"import { Button } from 'antd'",detect only,https://ant.design,priya,heavy kit,Respect if installed; do not prescribe,
19
+ 18,Floating UI,@floating-ui/react;@floating-ui/dom,a11y,saas;b2b;tooltip;popover;dropdown,Custom position:absolute tooltips,"import { useFloating } from '@floating-ui/react'",npm i @floating-ui/react,https://floating-ui.com,arjun,small,n/a,
20
+ 19,Vaul,vaul,primitives,mobile;sheet;drawer;shadcn,Desktop-only modal that should be Dialog,"import { Drawer } from 'vaul'",npm i vaul,https://vaul.emilkowal.ski,noor,small,Sheet animation honors reduced-motion,
21
+ 20,Sonner,sonner,feedback,saas;b2b;forms;toast;feedback,Custom toast stacks or alert() ,"import { toast } from 'sonner'",npm i sonner,https://sonner.emilkowal.ski,zara,small,No motion required,
22
+ 21,React Hook Form,react-hook-form,forms,saas;b2b;forms;settings,useState per field on large forms,"import { useForm } from 'react-hook-form'",npm i react-hook-form,https://react-hook-form.com,anuj,small,n/a,
23
+ 22,Zod,zod,forms,saas;b2b;forms;validation,Ad-hoc string checks with no schema,"import { z } from 'zod'",npm i zod,https://zod.dev,priya,small,n/a,
24
+ 23,CMDK,cmdk,command,saas;b2b;dashboard;power-user;command,Hiding all navigation behind Cmd+K only,"import { Command } from 'cmdk'",npm i cmdk,https://cmdk.paco.me,anuj,small,n/a,
25
+ 24,TanStack Table,@tanstack/react-table,table,saas;b2b;dashboard;table;density,Div-grid fake tables for >20 rows,"import { useReactTable } from '@tanstack/react-table'",npm i @tanstack/react-table,https://tanstack.com/table,anuj,medium,n/a,
26
+ 25,TanStack Virtual,@tanstack/react-virtual,table,dashboard;table;density;performance,Rendering 10k DOM rows,"import { useVirtualizer } from '@tanstack/react-virtual'",npm i @tanstack/react-virtual,https://tanstack.com/virtual,priya,small,n/a,
27
+ 26,Embla Carousel,embla-carousel-react,scroll,landing;marketing;carousel;mobile,Autoplay carousels on dashboards,"import useEmblaCarousel from 'embla-carousel-react'",npm i embla-carousel-react,https://www.embla-carousel.com,noor,small,Disable autoplay when reduced-motion,
28
+ 27,nuqs,nuqs,url-state,saas;b2b;dashboard;filters;share,Local-only filter state that must be shareable,"import { useQueryState } from 'nuqs'",npm i nuqs,https://nuqs.47ng.com,anuj,small,n/a,
29
+ 28,react-hotkeys-hook,react-hotkeys-hook;tinykeys,hotkeys,saas;b2b;dashboard;power-user;keyboard,Global shortcuts that steal browser find,"import { useHotkeys } from 'react-hotkeys-hook'",npm i react-hotkeys-hook,https://react-hotkeys-hook.vercel.app,anuj,small,n/a,
30
+ 29,Driver.js,driver.js,onboarding,onboarding;first-run;tour,Daily dashboards; unskippable overlays,"import { driver } from 'driver.js'",npm i driver.js,https://driverjs.com,noor,small,Skip motion; require Skip,
31
+ 30,Shepherd.js,shepherd.js,onboarding,onboarding;first-run;tour,Forced linear tours on expert surfaces,"import Shepherd from 'shepherd.js'",npm i shepherd.js,https://shepherdjs.dev,noor,medium,Skip and Back required,
32
+ 31,React Flow,@xyflow/react;reactflow,canvas,canvas;workflow;graph;diagram,CRUD tables or settings pages,"import { ReactFlow } from '@xyflow/react'",npm i @xyflow/react,https://reactflow.dev,priya,heavy,Only if the product is a graph,
33
+ 32,Tailwind CSS,tailwindcss,tokens,saas;b2b;landing;tailwind;tokens,Inline style={{}} design system,"import 'tailwindcss'",npm i tailwindcss,https://tailwindcss.com,arjun,build-time,n/a,
34
+ 33,CVA + tailwind-merge,class-variance-authority;tailwind-merge;clsx,tokens,saas;shadcn;tailwind;tokens,Duplicating variant class strings,"import { cva } from 'class-variance-authority'; import { twMerge } from 'tailwind-merge'",npm i class-variance-authority tailwind-merge clsx,https://cva.style,arjun,tiny,n/a,
35
+ 34,tailwindcss-animate,tailwindcss-animate;tw-animate-css,motion,saas;shadcn;tailwind;motion,Bounce utilities on product chrome,"import 'tailwindcss-animate'",npm i tailwindcss-animate,https://github.com/jamiebuilds/tailwindcss-animate,zara,tiny CSS,Pair with reduced-motion variants,
36
+ 35,Fontsource,@fontsource/*;@fontsource-variable/*,typography,saas;typography;fonts,Loading every weight of a family,"import '@fontsource-variable/geist'",npm i @fontsource-variable/geist,https://fontsource.org,arjun,per-font,n/a,
37
+ 36,Lucide,lucide-react,icons,saas;b2b;dashboard;icons,Mixing with Phosphor or Heroicons on one screen,"import { Search } from 'lucide-react'",npm i lucide-react,https://lucide.dev,arjun,tree-shake icons,n/a,
38
+ 37,Phosphor,@phosphor-icons/react,icons,saas;b2b;icons,Mixing icon families,"import { MagnifyingGlass } from '@phosphor-icons/react'",npm i @phosphor-icons/react,https://phosphoricons.com,arjun,tree-shake icons,n/a,
39
+ 38,Tremor,@tremor/react,charts,dashboard;analytics;kpi;charts,Marketing landings with no data,"import { AreaChart } from '@tremor/react'",npm i @tremor/react,https://tremor.so,arjun,medium,Charts still need text fallback,
40
+ 39,Recharts,recharts,charts,dashboard;analytics;charts,Custom SVG charts with no a11y,"import { LineChart; Line } from 'recharts'",npm i recharts,https://recharts.org,arjun,medium,Provide table or aria fallback,
41
+ 40,Number Flow,@number-flow/react,celebration,dashboard;kpi;onboarding;charts,Animating every table cell,"import NumberFlow from '@number-flow/react'",npm i @number-flow/react,https://number-flow.barvian.me,zara,small,Snap to final value when reduced-motion,
42
+ 41,Origin UI,origin-ui,forms,saas;forms;shadcn;inputs,Using as a second full kit,"Copy input/select patterns from Origin into components/ui",copy-paste,https://originui.com,noor,copy-paste,n/a,components/ui
43
+ 42,Magic UI,magicui-cli;@magicui/*,marketing-fx,landing;onboarding;marketing,Daily dashboards; settings; tables,Copy Magic UI component into components/magicui,copy-paste,https://magicui.design,zara,varies,Must respect reduced-motion,components/magicui
44
+ 43,Aceternity UI,aceternity,marketing-fx,landing;onboarding;marketing,Product app chrome,Copy effect into components/aceternity,copy-paste,https://ui.aceternity.com,zara,varies,Must respect reduced-motion,components/aceternity
45
+ 44,21st.dev / React Bits,21stdev;@21st-dev/react;react-bits,marketing-fx,landing;marketing;onboarding,Working dashboards,Copy block from 21st.dev,copy-paste,https://21st.dev,zara,varies,Landing only,
46
+ 45,Spline,@splinetool/react-spline,marketing-fx,landing;marketing;3d,Dashboards; forms; low-end mobile,"import Spline from '@splinetool/react-spline'",npm i @splinetool/react-spline,https://spline.design,priya,very heavy,Static image fallback,
@@ -76,7 +76,7 @@ npx analyzthis_design spec validate --file ./design-spec.json
76
76
 
77
77
  **Hierarchy gate:** rank #1 in `information_hierarchy` matches the visually dominant region/component (`hierarchy_rank: 1`).
78
78
 
79
- **Arjun visual pass:** typography scale, spacing rhythm, and contrast classes are consistent with Visual Design Audit rubric — run scoped review on the spec only (no full page code required). Verify anti-slop rules: no nested cards (`div.card > div.card`), no untinted pure black/gray, no gray text on colored backgrounds, and motion timing locked to 150–250ms ease-out (`[ux-guidelines.csv, row 100-105]`).
79
+ **Arjun visual pass:** typography scale, spacing rhythm, and contrast classes are consistent with Visual Design Audit rubric — run scoped review on the spec only (no full page code required). Verify anti-slop rules: no nested cards (`div.card > div.card`), no untinted pure black/gray, no gray text on colored backgrounds, and motion timing locked to 150–250ms ease-out (`[ux-guidelines.csv, row 100-105]`, `[motion.csv, row 1]`). If `motion.enabled`, require `library`, `import_path`, `timing_ms`, `easing`, `reduced_motion`. Marketing FX libraries only when notes say landing/onboarding. `components[].import_path` must match `installed_ui_libraries` or a cited `ui-libraries.csv` row.
80
80
 
81
81
  Set `spec_verdict` when done:
82
82
 
@@ -33,7 +33,7 @@ This runs **Kavi** — scans your repo, builds an Obsidian vault, and syncs a **
33
33
  | Review against PRDs and user stories | `/ux-story-gate` | Task map + routing before critique |
34
34
  | Index my codebase for personas | `/kavi` | Kavi → knowledge bank |
35
35
  | Run CLI orchestrator without API keys | `/devi` | Host LLM — voices personas from pending prompts |
36
- | Set visual direction with references + team debate | `/mood-board` | Collect web/DS references, tag, deliberate, converge |
36
+ | Set visual direction from real sites | `/mood-board` | Zara crops 20–24 real UI elements into a visual board. The team votes as advice; you keep / maybe / reject in the browser and your choice wins |
37
37
  | Inspect the chunked execution planner | `/chunk-planner` | See how tasks are split into model-routed chunks |
38
38
  | Run legacy single-pass orchestrator | `/run-unchunked` | Skip planner overhead for quick single-expert tasks |
39
39
  | Keep or skip the last persona note | `/accept` | Yes or no (plus one sentence if no). Local evolution — no CLI flags. |
@@ -115,7 +115,7 @@ Assess only — do not implement changes.
115
115
  | `/anuj` | Power-user wireframe |
116
116
  | `/design-director` | Full producer — ideation → DesignSpec → build |
117
117
  | `/design-spec` | DesignSpec format + validation rules |
118
- | `/mood-board` | Visual direction setting — references + team deliberation |
118
+ | `/mood-board` | Visual direction — element collage from real sites; you decide, the team advises |
119
119
  | `/chunk-planner` | Chunked execution planner explained |
120
120
  | `/run-unchunked` | Legacy single-pass orchestrator (skip chunked planner) |
121
121
  | `/persona-orchestrator` | Agentic critique (not wireframes) |
@@ -93,6 +93,7 @@ Vault: [path]
93
93
  Notes: [N written / S skipped]
94
94
  Enriched: [E]
95
95
  Sources discovered: [count]
96
+ UI libraries: [N installed]
96
97
  Knowledge bank: [synced count] → [targets]
97
98
  Next: /persona-orchestrator or /ux-story-gate — personas read this bank first.
98
99
  ```
@@ -109,7 +110,7 @@ Next: /persona-orchestrator or /ux-story-gate — personas read this bank first.
109
110
  | `Brand/` | Tailwind config, tokens, theme CSS |
110
111
  | `Pages/` | App Router / page files |
111
112
  | `Components/` | `components/`, UI TSX/JSX |
112
- | `Tech/` | `package.json`, configs, API routes |
113
+ | `Tech/` | `package.json`, configs, API routes, plus **Installed-UI-Libraries.md** (detected motion/UX/visual kits) |
113
114
  | `Sources/` | Discovered vaults, wikis, knowledge graphs |
114
115
  | `Web/` | External URLs from config + PRD/README |
115
116
  | `_meta/` | Index, knowledge-sources, last-sync |
@@ -120,6 +121,6 @@ Enrichment needs `OPENAI_API_KEY`, `GEMINI_API_KEY`, `ANTHROPIC_API_KEY`, or `ZA
120
121
 
121
122
  ## Session state
122
123
 
123
- After collect, `session-state.json` includes `vault_path` and `last_collect_at`. Other personas should read the knowledge bank before critiquing.
124
+ After collect, `session-state.json` includes `vault_path`, `last_collect_at`, and `installed_ui_libraries` (catalog matches from `package.json` + `components/ui` folders). Other personas must prefer installed libraries from `Tech/Installed-UI-Libraries.md` before recommending new packages.
124
125
 
125
126
  Install skills: `npx analyzthis_design --target all --force`
@@ -16,6 +16,8 @@ You are Meera. Ex-revenue/sales, thinks in retention, ARR, and GTM levers. Numbe
16
16
 
17
17
  **Session state:** if `session-state.json` exists (`npx analyzthis_design session show`), read `task_map`, `information_hierarchy`, and prior `persona_outputs` before speaking.
18
18
 
19
+ **User direction:** if session state has `design_direction` (locked by the user on a mood board), it outranks your opinion. Build from its kept elements, palette, and fonts. Never bring back a rejected element. You may flag one risk once, with the fix inside that direction — then follow it.
20
+
19
21
  **Deliberation (v1.19):** Read `deliberation-protocol` from your host skills dir (e.g. `~/.claude/skills/deliberation-protocol/SKILL.md` or `~/.claude/commands/deliberation-protocol.md`). Challenge Arjun's UX claims and Priya's effort assumptions with business evidence. Parallel adversarial review with Priya. Deliberation JSON required in review rounds.
20
22
 
21
23
  **Assess-only:** if the user asked to assess/propose/critique rather than build/implement/ship, stop at the business impact block — do not edit code.