@stylecrib/cli 0.3.1 → 0.3.2

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 (348) hide show
  1. package/README.md +94 -9
  2. package/agents/MANIFEST.yml +136 -0
  3. package/agents/README.md +75 -0
  4. package/agents/art-director.md +168 -0
  5. package/agents/audacity-director.md +109 -0
  6. package/agents/brand-identity.md +179 -0
  7. package/agents/brand-precedent.md +119 -0
  8. package/agents/brief-enforcer.md +136 -0
  9. package/agents/component-qa.md +167 -0
  10. package/agents/cto.md +49 -0
  11. package/agents/design-director.md +184 -0
  12. package/agents/design-systems-engineer.md +162 -0
  13. package/agents/direction-curator.md +133 -0
  14. package/agents/homogeneity-detector.md +104 -0
  15. package/agents/logo-designer.md +240 -0
  16. package/agents/marketing-designer.md +156 -0
  17. package/agents/media-curator.md +165 -0
  18. package/agents/motion-engineer.md +270 -0
  19. package/agents/qa-conductor.md +143 -0
  20. package/agents/render-qa.md +133 -0
  21. package/agents/upgrade-simulator.md +123 -0
  22. package/agents/vp-architecture.md +49 -0
  23. package/agents/vp-engineering.md +49 -0
  24. package/dist/index.js +1577 -463
  25. package/package.json +11 -4
  26. package/themes/README.md +70 -0
  27. package/themes/acrylic-soft/THEME.md +142 -0
  28. package/themes/acrylic-soft/tokens.ts +180 -0
  29. package/themes/agency-creative/THEME.md +91 -0
  30. package/themes/agency-creative/tokens.ts +202 -0
  31. package/themes/agency-portfolio/THEME.md +109 -0
  32. package/themes/agency-portfolio/tokens.ts +159 -0
  33. package/themes/ai-startup/THEME.md +95 -0
  34. package/themes/ai-startup/tokens.ts +162 -0
  35. package/themes/airline-modern/THEME.md +104 -0
  36. package/themes/airline-modern/tokens.ts +179 -0
  37. package/themes/arc-stack/.anchor-render.png +0 -0
  38. package/themes/arc-stack/THEME.md +125 -0
  39. package/themes/arc-stack/audit.log.jsonl +6 -0
  40. package/themes/arc-stack/dismissals.jsonl +3 -0
  41. package/themes/arc-stack/tailwind.snippet.ts +17 -0
  42. package/themes/arc-stack/theme.yml +153 -0
  43. package/themes/arc-stack/tokens.ts +29 -0
  44. package/themes/architectural/THEME.md +102 -0
  45. package/themes/architectural/tokens.ts +159 -0
  46. package/themes/atelier-radiance/THEME.md +93 -0
  47. package/themes/atelier-radiance/audit.log.jsonl +1 -0
  48. package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
  49. package/themes/atelier-radiance/theme.yml +130 -0
  50. package/themes/atelier-radiance/tokens.ts +29 -0
  51. package/themes/automotive-ev/THEME.md +87 -0
  52. package/themes/automotive-ev/tokens.ts +183 -0
  53. package/themes/automotive-luxury/THEME.md +88 -0
  54. package/themes/automotive-luxury/tokens.ts +175 -0
  55. package/themes/baby-modern/THEME.md +79 -0
  56. package/themes/baby-modern/tokens.ts +184 -0
  57. package/themes/banking-gravity/THEME.md +171 -0
  58. package/themes/banking-gravity/tokens.ts +169 -0
  59. package/themes/beauty-clean/THEME.md +92 -0
  60. package/themes/beauty-clean/tokens.ts +176 -0
  61. package/themes/beauty-luxury/THEME.md +96 -0
  62. package/themes/beauty-luxury/tokens.ts +178 -0
  63. package/themes/bento-modular/.anchor-render.png +0 -0
  64. package/themes/bento-modular/BUILD_BRIEF.md +171 -0
  65. package/themes/bento-modular/THEME.md +80 -0
  66. package/themes/bento-modular/audit.log.jsonl +3 -0
  67. package/themes/bento-modular/dismissals.jsonl +1 -0
  68. package/themes/bento-modular/tailwind.snippet.ts +17 -0
  69. package/themes/bento-modular/theme.yml +83 -0
  70. package/themes/bento-modular/tokens.ts +27 -0
  71. package/themes/bookstore-indie/THEME.md +78 -0
  72. package/themes/bookstore-indie/tokens.ts +147 -0
  73. package/themes/brutalist/THEME.md +96 -0
  74. package/themes/brutalist/tokens.ts +151 -0
  75. package/themes/business-tiles/THEME.md +141 -0
  76. package/themes/business-tiles/tokens.ts +178 -0
  77. package/themes/cabana-poster/THEME.md +158 -0
  78. package/themes/cabana-poster/audit.log.jsonl +1 -0
  79. package/themes/cabana-poster/tailwind.snippet.ts +16 -0
  80. package/themes/cabana-poster/theme.yml +221 -0
  81. package/themes/cabana-poster/tokens.ts +34 -0
  82. package/themes/case-panel/THEME.md +126 -0
  83. package/themes/case-panel/audit.log.jsonl +2 -0
  84. package/themes/case-panel/tailwind.snippet.ts +15 -0
  85. package/themes/case-panel/theme.yml +153 -0
  86. package/themes/case-panel/tokens.ts +28 -0
  87. package/themes/cinematic-dark/THEME.md +97 -0
  88. package/themes/cinematic-dark/tokens.ts +195 -0
  89. package/themes/classic-car/THEME.md +86 -0
  90. package/themes/classic-car/tokens.ts +173 -0
  91. package/themes/cloud-friendly/THEME.md +152 -0
  92. package/themes/cloud-friendly/tokens.ts +181 -0
  93. package/themes/community-niche/THEME.md +102 -0
  94. package/themes/community-niche/tokens.ts +177 -0
  95. package/themes/corporate-grid/THEME.md +154 -0
  96. package/themes/corporate-grid/tokens.ts +182 -0
  97. package/themes/couture-luxury/THEME.md +85 -0
  98. package/themes/couture-luxury/tokens.ts +146 -0
  99. package/themes/creator-social/THEME.md +131 -0
  100. package/themes/creator-social/tokens.ts +249 -0
  101. package/themes/crypto-onchain/THEME.md +100 -0
  102. package/themes/crypto-onchain/tokens.ts +207 -0
  103. package/themes/cycling-brand/THEME.md +78 -0
  104. package/themes/cycling-brand/tokens.ts +185 -0
  105. package/themes/dating-friendly/THEME.md +102 -0
  106. package/themes/dating-friendly/tokens.ts +178 -0
  107. package/themes/dense-utility/THEME.md +85 -0
  108. package/themes/dense-utility/tokens.ts +155 -0
  109. package/themes/devtool-cli/THEME.md +100 -0
  110. package/themes/devtool-cli/tokens.ts +195 -0
  111. package/themes/devtool-docs/THEME.md +105 -0
  112. package/themes/devtool-docs/tokens.ts +177 -0
  113. package/themes/editorial/THEME.md +129 -0
  114. package/themes/editorial/audit.log.jsonl +2 -0
  115. package/themes/editorial/tailwind.snippet.ts +15 -0
  116. package/themes/editorial/theme.yml +173 -0
  117. package/themes/editorial/tokens.ts +29 -0
  118. package/themes/education-formal/THEME.md +154 -0
  119. package/themes/education-formal/audit.log.jsonl +1 -0
  120. package/themes/education-formal/tailwind.snippet.ts +15 -0
  121. package/themes/education-formal/theme.yml +186 -0
  122. package/themes/education-formal/tokens.ts +29 -0
  123. package/themes/education-warm/THEME.md +91 -0
  124. package/themes/education-warm/tokens.ts +185 -0
  125. package/themes/ember-poster/README.md +79 -0
  126. package/themes/ember-poster/THEME.md +101 -0
  127. package/themes/ember-poster/audit.log.jsonl +17 -0
  128. package/themes/ember-poster/package.json +34 -0
  129. package/themes/ember-poster/tailwind.snippet.ts +17 -0
  130. package/themes/ember-poster/theme.yml +109 -0
  131. package/themes/ember-poster/tokens.ts +27 -0
  132. package/themes/enterprise-cloud/THEME.md +139 -0
  133. package/themes/enterprise-cloud/tokens.ts +179 -0
  134. package/themes/enterprise-tech/.anchor-render.png +0 -0
  135. package/themes/enterprise-tech/THEME.md +167 -0
  136. package/themes/enterprise-tech/audit.log.jsonl +1 -0
  137. package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
  138. package/themes/enterprise-tech/theme.yml +202 -0
  139. package/themes/enterprise-tech/tokens.ts +29 -0
  140. package/themes/ev-charging/THEME.md +94 -0
  141. package/themes/ev-charging/tokens.ts +185 -0
  142. package/themes/farm-direct/THEME.md +92 -0
  143. package/themes/farm-direct/tokens.ts +180 -0
  144. package/themes/fintech-card/THEME.md +96 -0
  145. package/themes/fintech-card/tokens.ts +191 -0
  146. package/themes/fintech-trust/THEME.md +94 -0
  147. package/themes/fintech-trust/tokens.ts +192 -0
  148. package/themes/food-blog/THEME.md +98 -0
  149. package/themes/food-blog/tokens.ts +183 -0
  150. package/themes/forum-classic/THEME.md +100 -0
  151. package/themes/forum-classic/tokens.ts +168 -0
  152. package/themes/fresh-plate/.anchor-render.png +0 -0
  153. package/themes/fresh-plate/THEME.md +144 -0
  154. package/themes/fresh-plate/audit.log.jsonl +2 -0
  155. package/themes/fresh-plate/dismissals.jsonl +3 -0
  156. package/themes/fresh-plate/tailwind.snippet.ts +16 -0
  157. package/themes/fresh-plate/theme.yml +189 -0
  158. package/themes/fresh-plate/tokens.ts +30 -0
  159. package/themes/furniture-modern/THEME.md +94 -0
  160. package/themes/furniture-modern/tokens.ts +176 -0
  161. package/themes/gaming-esports/THEME.md +146 -0
  162. package/themes/gaming-esports/tokens.ts +199 -0
  163. package/themes/gaming-streamer/THEME.md +139 -0
  164. package/themes/gaming-streamer/tokens.ts +201 -0
  165. package/themes/glassmorphic-modern/THEME.md +119 -0
  166. package/themes/glassmorphic-modern/tokens.ts +174 -0
  167. package/themes/government-civic/THEME.md +138 -0
  168. package/themes/government-civic/tokens.ts +164 -0
  169. package/themes/gym-chain/THEME.md +79 -0
  170. package/themes/gym-chain/tokens.ts +196 -0
  171. package/themes/healthcare-bright/THEME.md +95 -0
  172. package/themes/healthcare-bright/tokens.ts +184 -0
  173. package/themes/home-decor/THEME.md +94 -0
  174. package/themes/home-decor/tokens.ts +177 -0
  175. package/themes/hotel-boutique/THEME.md +110 -0
  176. package/themes/hotel-boutique/tokens.ts +179 -0
  177. package/themes/hyperminimal-mono/THEME.md +91 -0
  178. package/themes/hyperminimal-mono/tokens.ts +150 -0
  179. package/themes/indie-art-game/THEME.md +107 -0
  180. package/themes/indie-art-game/tokens.ts +216 -0
  181. package/themes/insurance-legacy/THEME.md +101 -0
  182. package/themes/insurance-legacy/tokens.ts +182 -0
  183. package/themes/insurance-modern/THEME.md +103 -0
  184. package/themes/insurance-modern/tokens.ts +192 -0
  185. package/themes/kaiju-reveal/THEME.md +97 -0
  186. package/themes/kaiju-reveal/tokens.ts +185 -0
  187. package/themes/kinetic-data/THEME.md +172 -0
  188. package/themes/kinetic-data/audit.log.jsonl +1 -0
  189. package/themes/kinetic-data/tailwind.snippet.ts +16 -0
  190. package/themes/kinetic-data/theme.yml +207 -0
  191. package/themes/kinetic-data/tokens.ts +30 -0
  192. package/themes/kinetic-headline/.anchor-render.png +0 -0
  193. package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
  194. package/themes/kinetic-headline/THEME.md +78 -0
  195. package/themes/kinetic-headline/audit.log.jsonl +4 -0
  196. package/themes/kinetic-headline/dismissals.jsonl +1 -0
  197. package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
  198. package/themes/kinetic-headline/theme.yml +81 -0
  199. package/themes/kinetic-headline/tokens.ts +26 -0
  200. package/themes/law-firm/THEME.md +108 -0
  201. package/themes/law-firm/tokens.ts +158 -0
  202. package/themes/lawtech-modern/THEME.md +107 -0
  203. package/themes/lawtech-modern/tokens.ts +192 -0
  204. package/themes/linkedin-pro/THEME.md +102 -0
  205. package/themes/linkedin-pro/tokens.ts +174 -0
  206. package/themes/logistics-modern/THEME.md +94 -0
  207. package/themes/logistics-modern/tokens.ts +187 -0
  208. package/themes/magazine-glossy/THEME.md +74 -0
  209. package/themes/magazine-glossy/tokens.ts +158 -0
  210. package/themes/marker-mag/THEME.md +128 -0
  211. package/themes/marker-mag/audit.log.jsonl +1 -0
  212. package/themes/marker-mag/tailwind.snippet.ts +15 -0
  213. package/themes/marker-mag/theme.yml +159 -0
  214. package/themes/marker-mag/tokens.ts +27 -0
  215. package/themes/marketplace-modern/THEME.md +135 -0
  216. package/themes/marketplace-modern/tokens.ts +186 -0
  217. package/themes/marketplace-vintage/THEME.md +110 -0
  218. package/themes/marketplace-vintage/tokens.ts +185 -0
  219. package/themes/maximalist/THEME.md +96 -0
  220. package/themes/maximalist/tokens.ts +168 -0
  221. package/themes/mid-century/THEME.md +109 -0
  222. package/themes/mid-century/tokens.ts +162 -0
  223. package/themes/motorcycle-brand/THEME.md +86 -0
  224. package/themes/motorcycle-brand/tokens.ts +174 -0
  225. package/themes/museum/THEME.md +83 -0
  226. package/themes/museum/tokens.ts +147 -0
  227. package/themes/music-streaming/THEME.md +101 -0
  228. package/themes/music-streaming/tokens.ts +187 -0
  229. package/themes/music-vinyl/THEME.md +98 -0
  230. package/themes/music-vinyl/tokens.ts +167 -0
  231. package/themes/nature-distilled/.anchor-render.png +0 -0
  232. package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
  233. package/themes/nature-distilled/THEME.md +81 -0
  234. package/themes/nature-distilled/audit.log.jsonl +2 -0
  235. package/themes/nature-distilled/tailwind.snippet.ts +16 -0
  236. package/themes/nature-distilled/theme.yml +91 -0
  237. package/themes/nature-distilled/tokens.ts +26 -0
  238. package/themes/news-tabloid/THEME.md +72 -0
  239. package/themes/news-tabloid/tokens.ts +158 -0
  240. package/themes/news-tech/THEME.md +75 -0
  241. package/themes/news-tech/tokens.ts +149 -0
  242. package/themes/newsletter/THEME.md +82 -0
  243. package/themes/newsletter/tokens.ts +138 -0
  244. package/themes/newspaper-classic/THEME.md +74 -0
  245. package/themes/newspaper-classic/tokens.ts +159 -0
  246. package/themes/nonprofit-arts/THEME.md +78 -0
  247. package/themes/nonprofit-arts/tokens.ts +157 -0
  248. package/themes/nonprofit-warm/THEME.md +105 -0
  249. package/themes/nonprofit-warm/tokens.ts +188 -0
  250. package/themes/outdoor-adventure/THEME.md +113 -0
  251. package/themes/outdoor-adventure/tokens.ts +181 -0
  252. package/themes/overland-broadside/THEME.md +119 -0
  253. package/themes/overland-broadside/audit.log.jsonl +1 -0
  254. package/themes/overland-broadside/tailwind.snippet.ts +17 -0
  255. package/themes/overland-broadside/theme.yml +138 -0
  256. package/themes/overland-broadside/tokens.ts +27 -0
  257. package/themes/performance-engineered/THEME.md +162 -0
  258. package/themes/performance-engineered/audit.log.jsonl +1 -0
  259. package/themes/performance-engineered/tailwind.snippet.ts +15 -0
  260. package/themes/performance-engineered/theme.yml +193 -0
  261. package/themes/performance-engineered/tokens.ts +29 -0
  262. package/themes/pet-food/THEME.md +78 -0
  263. package/themes/pet-food/tokens.ts +185 -0
  264. package/themes/pharma-clinical/THEME.md +164 -0
  265. package/themes/pharma-clinical/audit.log.jsonl +1 -0
  266. package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
  267. package/themes/pharma-clinical/theme.yml +201 -0
  268. package/themes/pharma-clinical/tokens.ts +29 -0
  269. package/themes/pill-editorial/THEME.md +125 -0
  270. package/themes/pill-editorial/audit.log.jsonl +1 -0
  271. package/themes/pill-editorial/tailwind.snippet.ts +15 -0
  272. package/themes/pill-editorial/theme.yml +168 -0
  273. package/themes/pill-editorial/tokens.ts +31 -0
  274. package/themes/podcast-warm/THEME.md +103 -0
  275. package/themes/podcast-warm/tokens.ts +192 -0
  276. package/themes/publisher-indie/THEME.md +78 -0
  277. package/themes/publisher-indie/tokens.ts +148 -0
  278. package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
  279. package/themes/raw-concrete/THEME.md +76 -0
  280. package/themes/raw-concrete/audit.log.jsonl +10 -0
  281. package/themes/raw-concrete/tailwind.snippet.ts +16 -0
  282. package/themes/raw-concrete/theme.yml +88 -0
  283. package/themes/raw-concrete/tokens.ts +27 -0
  284. package/themes/realestate-luxury/THEME.md +94 -0
  285. package/themes/realestate-luxury/tokens.ts +169 -0
  286. package/themes/realestate-marketplace/THEME.md +106 -0
  287. package/themes/realestate-marketplace/tokens.ts +183 -0
  288. package/themes/restaurant-modern/THEME.md +109 -0
  289. package/themes/restaurant-modern/tokens.ts +172 -0
  290. package/themes/runway-fashion/THEME.md +99 -0
  291. package/themes/runway-fashion/tokens.ts +167 -0
  292. package/themes/saturday-morning/THEME.md +117 -0
  293. package/themes/saturday-morning/tokens.ts +281 -0
  294. package/themes/schema.ts +235 -0
  295. package/themes/signal-dark/BUILD_BRIEF.md +168 -0
  296. package/themes/signal-dark/THEME.md +107 -0
  297. package/themes/signal-dark/tokens.ts +181 -0
  298. package/themes/soft-modern/THEME.md +91 -0
  299. package/themes/soft-modern/tokens.ts +166 -0
  300. package/themes/solar-residential/THEME.md +92 -0
  301. package/themes/solar-residential/tokens.ts +176 -0
  302. package/themes/sports-league/THEME.md +180 -0
  303. package/themes/sports-league/audit.log.jsonl +1 -0
  304. package/themes/sports-league/tailwind.snippet.ts +15 -0
  305. package/themes/sports-league/theme.yml +213 -0
  306. package/themes/sports-league/tokens.ts +32 -0
  307. package/themes/stadium-sport/THEME.md +114 -0
  308. package/themes/stadium-sport/tokens.ts +187 -0
  309. package/themes/streetwear-hype/THEME.md +100 -0
  310. package/themes/streetwear-hype/tokens.ts +174 -0
  311. package/themes/studio-architect/THEME.md +108 -0
  312. package/themes/studio-architect/tokens.ts +162 -0
  313. package/themes/studio-photographer/THEME.md +88 -0
  314. package/themes/studio-photographer/tokens.ts +164 -0
  315. package/themes/team-kanban/.anchor-render.png +0 -0
  316. package/themes/team-kanban/THEME.md +167 -0
  317. package/themes/team-kanban/audit.log.jsonl +2 -0
  318. package/themes/team-kanban/dismissals.jsonl +1 -0
  319. package/themes/team-kanban/tailwind.snippet.ts +15 -0
  320. package/themes/team-kanban/theme.yml +209 -0
  321. package/themes/team-kanban/tokens.ts +35 -0
  322. package/themes/telehealth-modern/THEME.md +95 -0
  323. package/themes/telehealth-modern/tokens.ts +197 -0
  324. package/themes/tourism-board/THEME.md +111 -0
  325. package/themes/tourism-board/tokens.ts +173 -0
  326. package/themes/toys-modern/THEME.md +79 -0
  327. package/themes/toys-modern/tokens.ts +200 -0
  328. package/themes/travel-luxury/THEME.md +95 -0
  329. package/themes/travel-luxury/tokens.ts +162 -0
  330. package/themes/vacation-rental/THEME.md +105 -0
  331. package/themes/vacation-rental/tokens.ts +174 -0
  332. package/themes/vault-reel/THEME.md +134 -0
  333. package/themes/vault-reel/audit.log.jsonl +3 -0
  334. package/themes/vault-reel/tailwind.snippet.ts +16 -0
  335. package/themes/vault-reel/theme.yml +167 -0
  336. package/themes/vault-reel/tokens.ts +30 -0
  337. package/themes/vet-modern/THEME.md +79 -0
  338. package/themes/vet-modern/tokens.ts +194 -0
  339. package/themes/web3-restraint/THEME.md +87 -0
  340. package/themes/web3-restraint/tokens.ts +154 -0
  341. package/themes/wellness-active/THEME.md +102 -0
  342. package/themes/wellness-active/tokens.ts +203 -0
  343. package/themes/wellness-spa/THEME.md +93 -0
  344. package/themes/wellness-spa/tokens.ts +173 -0
  345. package/themes/y2k-chrome/THEME.md +118 -0
  346. package/themes/y2k-chrome/tokens.ts +249 -0
  347. package/themes/yoga-studio/THEME.md +76 -0
  348. package/themes/yoga-studio/tokens.ts +163 -0
package/README.md CHANGED
@@ -1,29 +1,45 @@
1
1
  # @stylecrib/cli
2
2
 
3
- Design upgrade for vibe-coded React apps. Installs 20 Claude Code subagents + a chosen theme from a 120-theme library into your repo. Refuses AI-default patterns at commit time.
3
+ Design upgrade for vibe-coded React apps. Installs 19 Claude Code subagents + a chosen theme from a 118-theme library into your repo. Refuses AI-default patterns at commit time.
4
4
 
5
5
  Full mandate + rule catalog: [github.com/frischermf/stylecrib/blob/main/SLOP-BLOCKLIST.md](https://github.com/frischermf/stylecrib/blob/main/SLOP-BLOCKLIST.md).
6
6
 
7
7
  ## Install + run
8
8
 
9
+ One command, pointed at a directory — **not released yet**, see the note below:
10
+
9
11
  ```bash
10
- # one-off
11
- npx @stylecrib/cli init
12
+ curl -fsSL https://raw.githubusercontent.com/frischermf/stylecrib/main/install.sh | bash -s -- ~/path/to/project
13
+ ```
14
+
15
+ > `install.sh` isn't on `main` until PR #3 merges, so the one-liner 404s today and fails silently (`curl | bash` on a 404 exits 0). The manual install below gets you the same release meanwhile.
16
+
17
+ Empty or nonexistent directory → it scaffolds a Vite + React + TypeScript + Tailwind app first. Existing Vite + React + Tailwind app → it installs in place and stages the theme for review. Node 20+ is detected, never installed for you; nothing runs as root and no shell profile is touched.
18
+
19
+ <details>
20
+ <summary>Manual install</summary>
12
21
 
13
- # project-local
22
+ ```bash
23
+ # project-local (recommended — the git hook resolves it via npx --no-install)
14
24
  npm i -D @stylecrib/cli
15
25
  npx stylecrib init
16
26
 
17
27
  # global
18
28
  npm i -g @stylecrib/cli
19
29
  stylecrib init
30
+
31
+ # one-off, no install
32
+ npx @stylecrib/cli init
20
33
  ```
34
+ </details>
21
35
 
22
- You'll need Claude Code on your PATH (default) OR `ANTHROPIC_API_KEY` set — `stylecrib check` (the pre-commit gate) uses one or the other to run the QA-conductor review.
36
+ **Auth.** Installing a canonical theme (`--style soft-modern`, the default) reads the shipped tokens verbatim, makes no API call, and needs no key. You need Claude Code on your PATH OR `ANTHROPIC_API_KEY` for two things: synthesizing a direction from your own references, and the QA-conductor review that `stylecrib check` runs at commit time. The structural slop detectors run without either.
23
37
 
24
38
  ## What `stylecrib init` does
25
39
 
26
- 1. **Wizard** — pick a base direction (from the 120-theme library or custom), name brand references, anti-references, a vibe sentence, optional URLs and reference images.
40
+ With `--yes` (or when no terminal is attached — a piped installer, CI) it skips every prompt: it takes `--style` or `soft-modern`, uses the directory name as the project name, and adds no references. No references means no Director call, so that path costs nothing and needs no API key. Otherwise:
41
+
42
+ 1. **Wizard** — pick a base direction (from the 118-theme library or custom), name brand references, anti-references, a vibe sentence, optional URLs and reference images.
27
43
  2. **Ingest** — fetches URL content and reads images to feed the Director as multimodal context.
28
44
  3. **Director synthesis** — Anthropic call with the Director Feel-mode system prompt. Produces synthesized ethos, token plan, typography stack, full `DIRECTION.md`.
29
45
  4. **Writes** — `design-system/DIRECTION.md`, `.claude/agents/*.md` (19 agents including brief-enforcer + cto + vp-architecture + vp-engineering), and appends a routing block to your `CLAUDE.md` (creates one if missing).
@@ -32,8 +48,10 @@ Existing files are never overwritten. `--dry-run` shows the plan without writing
32
48
 
33
49
  ## What `stylecrib init` does NOT do (yet)
34
50
 
35
- - **Install + wire the runtime provider files** — `<ThemeAdminProvider>`, `<SectionRegistryProvider>`, `<StyleCribAdmin />`, `<StyleCribSection>`. Those live in **[`@stylecrib/react`](https://www.npmjs.com/package/@stylecrib/react)** on npm as of 2026-08-13. `init` doesn't yet run `npm install` on your behalf or scaffold the wire-up code into your `App.tsx` — run `npm install @stylecrib/react` yourself and follow [docs/STYLECRIB_ADMIN.md](https://github.com/frischermf/stylecrib/blob/main/docs/STYLECRIB_ADMIN.md). Full automation is phase 4 of the runtime extraction.
36
- - **Install a theme's runtime assets** — init picks a theme and writes its `DIRECTION.md`, but the theme's `tokens.ts` / `THEME.md` / `BUILD_BRIEF.md` files aren't copied into your repo. Fetch them from the [theme detail page](https://stylecrib.ai/themes) via the "Copy for Claude Code" button.
51
+ - **Edit your `App.tsx`** — it installs `@stylecrib/react` and writes `src/lib/stylecrib-wire.tsx`, but importing `<StyleCribWire>` into your app is one line you make yourself. (The `install.sh` scaffold path does it for you, since it wrote that `App.tsx` in the first place.) See [docs/STYLECRIB_ADMIN.md](https://github.com/frischermf/stylecrib/blob/main/docs/STYLECRIB_ADMIN.md).
52
+ - **Support routers other than react-router-dom** — the `<StyleCribAdmin>` drawer uses `useLocation` for its route-scoped section registry, so without `react-router-dom` the runtime step is skipped entirely. Next.js and TanStack Router aren't wired yet.
53
+ - **Emit tokens for every theme** — 4 of the 25 canonical directions (`editorial`, `performance-engineered`, `enterprise-tech`, `kinetic-data`) ship the newer `theme.yml` palette format the token emitter doesn't consume yet. `init` refuses those up front rather than producing a project that won't build.
54
+ - **Install a theme's runtime assets** — init picks a theme and writes its `DIRECTION.md`, but the theme's `tokens.ts` / `THEME.md` / `BUILD_BRIEF.md` files aren't copied into your repo. Fetch them from the [theme detail page](https://github.com/frischermf/stylecrib/themes) via the "Copy for Claude Code" button.
37
55
 
38
56
  ## The pre-commit gate
39
57
 
@@ -55,9 +73,76 @@ Emergency bypass (logs the reason for weekly review): `STYLECRIB_SKIP_QA="<reaso
55
73
  - `stylecrib audit` — one-shot drift report against your existing repo (no install required)
56
74
  - `stylecrib rule add` / `stylecrib rule share` — author + share slop rules
57
75
  - `stylecrib harness *` — theme-materialization + grading (advanced)
76
+ - `stylecrib verify` — typecheck the project, then boot its dev server and confirm the app actually renders
77
+ - `stylecrib mcp` — serve StyleCrib over MCP (stdio) to Cursor, Windsurf, Claude Desktop, Zed, etc.
58
78
  - `stylecrib status` — show current install state
59
79
  - `stylecrib reject "<pattern>"` — append to `.stylecrib/feedback.md`
60
80
 
81
+ ### `stylecrib verify` — the runtime gate
82
+
83
+ `stylecrib check` is diff-scoped and fast, which is what makes it safe to run on
84
+ every commit. The tradeoff is that it reads source, so it cannot catch a
85
+ change that leaves the source plausible and the app broken — a bad import, a
86
+ value that throws on construction, a component that no longer mounts.
87
+
88
+ `stylecrib verify` covers that gap and is meant to run **after an AI sweep and
89
+ before a push**, not on every commit:
90
+
91
+ ```bash
92
+ npx stylecrib verify # typecheck + boot
93
+ npx stylecrib verify --no-boot # typecheck only (CI without a browser)
94
+ npx stylecrib verify --screenshot out.png # also capture the rendered route
95
+ npx stylecrib verify --route /pricing # check a route other than /
96
+ ```
97
+
98
+ The boot step asks headless Chrome for the **post-JavaScript DOM** rather than
99
+ just fetching the URL. That distinction is the whole point: a Vite dev server
100
+ returns a valid ~550-byte HTML shell with HTTP 200 even when the app throws
101
+ during import, so fetching a route proves the server is up and nothing more.
102
+ Without Chrome installed it falls back to the HTTP body and says so, so a
103
+ weaker check never reads as the stronger one.
104
+
105
+ ### `stylecrib mcp` — use StyleCrib from any MCP client
106
+
107
+ The agent pack is Claude-Code-native: 19 doctrines in `.claude/agents/`, fired
108
+ by a pre-commit hook. `stylecrib mcp` is the portability layer. It serves the same
109
+ rule catalog, the same detectors, and the same theme library over the Model
110
+ Context Protocol, so a client that isn't Claude Code gets the same enforcement
111
+ without the hook.
112
+
113
+ Add it to your client's MCP config. Claude Code (`.mcp.json` in the repo):
114
+
115
+ ```json
116
+ {
117
+ "mcpServers": {
118
+ "stylecrib": { "command": "npx", "args": ["-y", "@stylecrib/cli", "mcp"] }
119
+ }
120
+ }
121
+ ```
122
+
123
+ Cursor (`.cursor/mcp.json`) and Claude Desktop (`claude_desktop_config.json`)
124
+ take the same `mcpServers` shape. If the CLI is already a devDependency of the
125
+ project, `"command": "npx", "args": ["stylecrib", "mcp"]` avoids the download.
126
+
127
+ **Tools**
128
+
129
+ | Tool | What it does |
130
+ |---|---|
131
+ | `list_themes` | The 25 canonical directions, with whether tokens can be generated for each |
132
+ | `get_theme` | A theme's full `THEME.md` brief — use it to brief an agent before UI work |
133
+ | `emit_theme_tokens` | `tailwind.config.ts` + `src/index.css` for a theme, same as `stylecrib init` writes |
134
+ | `list_rules` | The 39-rule catalog, filterable by category / severity / detector site |
135
+ | `check_slop` | Run the 26 text-pattern detectors (of 32 commit-time rules) on a file's contents; returns every hit with rule + line |
136
+
137
+ **Resources** — `stylecrib://rules` (the catalog as JSON) and `stylecrib://agents/{name}`
138
+ (each of the 19 agent doctrines as markdown, so a non-Claude-Code client can
139
+ load the `qa-conductor` prompt itself).
140
+
141
+ Two honest limits. `check_slop` is whole-file, not diff-scoped — it reports
142
+ every hit present, where the pre-commit hook reports only hits a change
143
+ introduced. And this is stdio only; a hosted HTTP transport waits on the same
144
+ things as the marketing site (a domain that's actually ours, auth, hosting).
145
+
61
146
  ## The pack that ships
62
147
 
63
148
  **Orchestrator (1):** qa-conductor
@@ -66,7 +151,7 @@ Emergency bypass (logs the reason for weekly review): `STYLECRIB_SKIP_QA="<reaso
66
151
 
67
152
  **Craft writers (1):** design-systems-engineer
68
153
 
69
- (`upgrade-simulator` is dogfood-only — powers the /try marketing surface at stylecrib.ai; not part of the review loop customers run inside their own repo. Retired from the customer bundle 2026-08-09.)
154
+ (`upgrade-simulator` is dogfood-only — powers the /try marketing surface at stylecrib.dev; not part of the review loop customers run inside their own repo. Retired from the customer bundle 2026-08-09.)
70
155
 
71
156
  **Enforcer (1):** brief-enforcer — fires per-diff on any section-source change when a matching `themes/<slug>/BUILD_BRIEF.md` exists
72
157
 
@@ -0,0 +1,136 @@
1
+ # agents/MANIFEST.yml — the single source of truth for the shipped agent pack.
2
+ #
3
+ # Every .md file in this directory MUST have an entry here. Every entry MUST
4
+ # have a matching import in cli/src/lib/bundled-agents.ts (the CLI's inline
5
+ # bundle for customers who haven't run `stylecrib init` yet). Drift between
6
+ # on-disk .md, this file, and bundled-agents.ts is caught at build time by
7
+ # cli/scripts/validate-agents.mjs.
8
+ #
9
+ # The frontmatter inside each .md carries `name`, `description`, `tools` —
10
+ # don't duplicate them here. This file adds only what the frontmatter
11
+ # doesn't already say: which tier each agent belongs to, and which surface
12
+ # it ships on.
13
+ #
14
+ # Tiers (rough phases of the review loop):
15
+ # craft-review — read-only reviewers of design output (drift, composition,
16
+ # a11y, tokens, motion, media, brand fit)
17
+ # craft-write — the ONE apply agent (design-systems-engineer) — never
18
+ # run in parallel with craft-review
19
+ # craft-specialty — narrower craft agents invoked on specific triggers
20
+ # (art direction, logo, identity, direction curation,
21
+ # audacity/ceiling checks, render QA)
22
+ # enforcer — mechanical per-diff gate (brief-enforcer reads a theme
23
+ # BUILD_BRIEF and checks section source against it)
24
+ # orchestrator — routes one call to the applicable tier
25
+ # exec — product-truth auditors above the craft layer
26
+ # simulator — user-facing simulation (dogfood only for now — TODO)
27
+ #
28
+ # Surface — where the agent ships:
29
+ # customer — inlined in bundled-agents.ts + copied by `stylecrib init` into
30
+ # the customer's .claude/agents/
31
+ # dogfood — installed in site/.claude/agents/ for the marketing site's
32
+ # own review loop; not shipped in the pack
33
+ # both — installed everywhere
34
+
35
+ agents:
36
+ # ─── Orchestrator ────────────────────────────────────────────────
37
+ - name: qa-conductor
38
+ tier: orchestrator
39
+ surface: both
40
+
41
+ # ─── Craft — read-only reviewers ─────────────────────────────────
42
+ - name: design-director
43
+ tier: craft-review
44
+ surface: both
45
+ notes: |
46
+ Owns DIRECTION.md + DESIGN_AUDIT.csv writes despite Edit/Write
47
+ tools — the boundary is prose-enforced. TODO #A5 (site) tracks a
48
+ PreToolUse hook that would restrict writes to that allow-list.
49
+ - name: marketing-designer
50
+ tier: craft-review
51
+ surface: both
52
+ - name: component-qa
53
+ tier: craft-review
54
+ surface: both
55
+ - name: motion-engineer
56
+ tier: craft-review
57
+ surface: both
58
+ - name: media-curator
59
+ tier: craft-review
60
+ surface: both
61
+ notes: |
62
+ Owns OBJECTIVE media facts (format, dimensions, byte size, codec,
63
+ loop, LCP impact, license). The SUBJECTIVE fit-to-direction call
64
+ belongs to design-director (Curator hands off with needs_director).
65
+ - name: homogeneity-detector
66
+ tier: craft-review
67
+ surface: both
68
+ - name: brand-precedent
69
+ tier: craft-review
70
+ surface: both
71
+ - name: audacity-director
72
+ tier: craft-review
73
+ surface: both
74
+ notes: |
75
+ Ceiling check — must be the brand's signature move, not the plain
76
+ interpretation. Complements design-director (floor check). Invoke
77
+ before claiming any direction-rendering work done.
78
+
79
+ # ─── Craft — apply (sequential, after review) ───────────────────
80
+ - name: design-systems-engineer
81
+ tier: craft-write
82
+ surface: both
83
+ notes: |
84
+ The only agent with real write scope over components. Never
85
+ invoked with write intent alongside craft-review agents (their
86
+ findings would be stale). Read-only phase produces NEEDS_TOKEN /
87
+ NEEDS_REFACTOR flags; write phase implements them.
88
+
89
+ # ─── Craft — specialty ──────────────────────────────────────────
90
+ - name: art-director
91
+ tier: craft-specialty
92
+ surface: both
93
+ - name: logo-designer
94
+ tier: craft-specialty
95
+ surface: both
96
+ - name: brand-identity
97
+ tier: craft-specialty
98
+ surface: both
99
+ - name: direction-curator
100
+ tier: craft-specialty
101
+ surface: both
102
+ - name: render-qa
103
+ tier: craft-specialty
104
+ surface: both
105
+
106
+ # ─── Enforcer ────────────────────────────────────────────────────
107
+ - name: brief-enforcer
108
+ tier: enforcer
109
+ surface: both
110
+ notes: |
111
+ No-ops on themes without a BUILD_BRIEF.md (currently 115 of 120).
112
+ TODO: never invoked in a real review pass; qa-conductor routing
113
+ update pending.
114
+
115
+ # ─── Exec — product-truth auditors ───────────────────────────────
116
+ - name: cto
117
+ tier: exec
118
+ surface: both
119
+ - name: vp-architecture
120
+ tier: exec
121
+ surface: both
122
+ - name: vp-engineering
123
+ tier: exec
124
+ surface: both
125
+
126
+ # ─── Simulator ───────────────────────────────────────────────────
127
+ - name: upgrade-simulator
128
+ tier: simulator
129
+ surface: dogfood
130
+ notes: |
131
+ Decision 2026-08-08: dogfood-only. Powers the /try surface on the
132
+ marketing site (site/src/pages/UpgradeSimulator.tsx). Not part of
133
+ the review loop customers run inside their own repo, so it stays
134
+ out of the customer pack. Retired from bundled-agents.ts on
135
+ 2026-08-09.
136
+
@@ -0,0 +1,75 @@
1
+ # The StyleCrib agent pack
2
+
3
+ **20 Claude Code subagents** in the source tree, **19 shipped in the customer pack** (`upgrade-simulator` is dogfood-only — powers the site's `/try` surface, not the review loop customers run). Installed at `<project>/.claude/agents/` by `stylecrib init`. This file is the routing map — read it FIRST when you're deciding which agents to invoke on a diff. Full metadata (tier + surface + notes) lives in [`MANIFEST.yml`](MANIFEST.yml); the orchestrator's own routing doctrine lives in [`qa-conductor.md`](qa-conductor.md).
4
+
5
+ ## Default routing — through the conductor
6
+
7
+ **In 90% of cases, invoke [`qa-conductor`](qa-conductor.md) and let it route.** The conductor reads the diff, decides which agents apply, applies each agent's criteria, and returns one PASS/BLOCK verdict. Faster to type, harder to skip, no parallel-writer races.
8
+
9
+ Direct-invoke individual agents ONLY when the trigger is narrow and you know exactly which agent you need (see the table below).
10
+
11
+ ## The tiers
12
+
13
+ | Tier | Agents | Purpose |
14
+ |---|---|---|
15
+ | **Orchestrator** | `qa-conductor` | One call. Routes to every applicable reviewer, returns one PASS/BLOCK verdict. |
16
+ | **Craft — review** | `design-director`, `marketing-designer`, `component-qa`, `motion-engineer`, `media-curator`, `homogeneity-detector`, `brand-precedent`, `audacity-director` | Read-only reviewers. Applied in parallel by the conductor. Never invoked alongside a write phase. |
17
+ | **Craft — write** | `design-systems-engineer` | The ONE agent with real write scope over components. Invoked sequentially AFTER a review verdict, with the punch list from Review. |
18
+ | **Craft — specialty** | `art-director`, `logo-designer`, `brand-identity`, `direction-curator`, `render-qa` | Narrower craft agents on specific triggers (art direction, logo, identity, direction curation, render QA). |
19
+ | **Enforcer** | `brief-enforcer` | Mechanical per-diff gate. Reads a theme's `BUILD_BRIEF.md` and checks section source against its MANDATORY BUILD DIRECTIVE + per-theme SLOP-BLOCKLIST + CHROME INVENTORY. |
20
+ | **Exec** | `cto`, `vp-architecture`, `vp-engineering` | Product-truth auditors above the craft layer. Not per-diff; specific triggers only (see below). |
21
+ | **Simulator** | `upgrade-simulator` | Dogfood-only (site-side). Powers the `/try` marketing surface. Not shipped in the customer pack. |
22
+
23
+ ## Decision tree — direct-invoke triggers
24
+
25
+ Use this ONLY when the trigger is narrow and you know exactly which agent you need. For anything else, invoke `qa-conductor`.
26
+
27
+ | Trigger | Invoke | Notes |
28
+ |---|---|---|
29
+ | Any file under `src/components/*` or `src/pages/*` | `qa-conductor` | Default path. Conductor routes to craft-review + brief-enforcer if applicable. |
30
+ | A section source under `src/components/sections/*.tsx` AND the theme has a `BUILD_BRIEF.md` | `brief-enforcer` FIRST, then `qa-conductor` | Brief-enforcer BLOCK stops the review — no point running craft reviewers if the theme's own mandate is violated. Only 5 themes carry briefs today; enforcer no-ops on the others. |
31
+ | Punch list from a prior review (numbered findings, often with screenshots) | `design-systems-engineer` in punch-list mode | The only write phase. Do not touch files not implicated by the list. |
32
+ | Same correction issued 2+ times in a session | `design-director` in rule-codification mode | Main-session responsibility to count — subagents start fresh each turn and can't detect it themselves. |
33
+ | Same BLOCK-severity finding across 3+ recent diffs | `design-director` (surface via orchestrator) | Same reason as above. |
34
+ | A new customer-facing marketing surface, public claim in docs / README / investor deck, route added to `/agents` / `/themes` / Home | `cto` | Product-truth: does the shipped code back the claim? |
35
+ | A file under the customer-runtime layer (`site/src/lib/theme-admin.tsx`, `site/src/lib/section-registry.tsx`, `site/src/components/admin/StyleCribAdmin.tsx`, `site/src/components/StyleCribSection.tsx`, `site/src/components/sections-library/*`, `cli/src/commands/init.ts`, `docs/STYLECRIB_ADMIN.md`) | `vp-architecture` | Install-story: does the described install path resolve? |
36
+ | Any diff before pushing to `main`, OR a diff touching CI / release workflows / `agents/MANIFEST.yml` / `cli/src/lib/bundled-agents.ts` / `cli/src/commands/check.ts` | `vp-engineering` | Ship-readiness: are main-branch invariants drifting? |
37
+ | A new hero image / video / 3D / audio / animation | `media-curator` (objective) + `design-director` Mode 6 (subjective fit) | Curator hands off with `needs_director` on anything requiring subjective judgment. |
38
+ | Motion added (keyframes, scroll reveals, route transitions, parallax) | `motion-engineer` | Compositor-only + `prefers-reduced-motion` guard contract. |
39
+ | New logo treatment / brand-mark change | `logo-designer` | |
40
+ | New voice/copy patterns or brand-color extensions | `brand-identity` | |
41
+ | A page-level composition or hero (any diff) | Handled by `qa-conductor` — routes to `marketing-designer` Mode 4 (anti-template) | Explicitly: refuses the stock-SaaS-AI-output shape (centered headline + double-CTA + 3-pillar grid + pricing rows). |
42
+
43
+ ## Two-phase discipline — the hard boundary
44
+
45
+ Craft-review agents (design-director, component-qa, marketing-designer, homogeneity-detector, brand-precedent, audacity-director, media-curator) are **read-only reviewers**. Systems-engineer in a review pass is ALSO read-only — it produces `NEEDS_TOKEN` / `NEEDS_REFACTOR` findings without writing.
46
+
47
+ `design-systems-engineer` **writes only in the apply phase**, sequentially, AFTER a review verdict. Never in parallel with the reviewers — otherwise the reviewers inspect a pre-edit tree and their findings go stale.
48
+
49
+ The conductor enforces this by returning BLOCK with a punch list; the caller (main session or developer) invokes systems-engineer with the list, then re-invokes the conductor on the new diff.
50
+
51
+ ## Handoff contracts
52
+
53
+ - **Any reviewer → conductor:** structured finding — severity (info | warn | block), file:line, one-sentence reason.
54
+ - **Conductor → caller:** one verdict block with per-agent findings + a `Required changes` list on BLOCK.
55
+ - **Systems → conductor (after apply):** the file diff.
56
+ - **Media Curator → Director:** the objective checklist + a `needs_director: true` flag on anything requiring subjective fit-to-direction judgment.
57
+ - **Any agent → Director:** pattern-across-invocations note — *"I've flagged the same issue N times; may want to codify."*
58
+
59
+ ## Tool restrictions are real
60
+
61
+ Each agent's frontmatter `tools:` line enforces its scope:
62
+
63
+ - Read-only: `component-qa`, `media-curator`, `homogeneity-detector`, `brand-precedent`, `audacity-director`, `render-qa`, `motion-engineer`, `marketing-designer`, `cto`, `vp-architecture`, `vp-engineering`, `qa-conductor` — no `Write` or `Edit` in their tools list, so they literally cannot fix anything.
64
+ - Write-scoped: `design-director` (DIRECTION.md + DESIGN_AUDIT.csv only — prose-enforced, not tool-enforced; a `PreToolUse` hook to restrict is open TODO), `design-systems-engineer` (tokens + styles + components).
65
+ - Special: `brief-enforcer` is a mechanical read-only gate with the same shape as component-qa but scoped to the theme's own BUILD_BRIEF.
66
+
67
+ ## Not in the customer pack
68
+
69
+ `upgrade-simulator` is dogfood-only — surface: `dogfood` in MANIFEST.yml, retired from `cli/src/lib/bundled-agents.ts` on 2026-08-09. It powers the marketing site's `/try` surface, not the review loop customers run inside their own repo.
70
+
71
+ ## Full spec
72
+
73
+ - [`MANIFEST.yml`](MANIFEST.yml) — source of truth for tier + surface. Cross-checked at build time by `cli/scripts/validate-agents.mjs`; drift between MANIFEST, on-disk .md files, and `bundled-agents.ts` fails the build.
74
+ - [`qa-conductor.md`](qa-conductor.md) — the orchestrator's own routing doctrine (mirrors the decision tree above from the conductor's perspective). Read this when a routing question isn't answered here.
75
+ - Each agent's `.md` — frontmatter carries `name` / `description` / `tools`. `description` is what Claude Code's router matches on when the user's request implies an agent.
@@ -0,0 +1,168 @@
1
+ ---
2
+ name: art-director
3
+ description: Use when the project needs an art-direction call — choosing hero imagery for a new landing surface, selecting an illustration aesthetic that fits the direction, briefing a photo shoot or AI-image generation prompt, deciding when motion footage fits and when a still does, or auditing existing media for art-direction coherence. Reads DIRECTION.md; writes ART_DIRECTION.md. Does not edit components.
4
+ tools: Read, Glob, Grep, Edit, Write
5
+ ---
6
+
7
+ You are the **Art Director** for this project. Your job is to own the *visual identity beyond tokens* — the photography style, illustration aesthetic, hero composition rules, and the atmosphere a direction calls for. The Design Director owns the typography, color, and spacing scale; you own what those tokens decorate. If the Design Director is the typographer, you are the photo editor and creative director.
8
+
9
+ You own one artifact:
10
+
11
+ - `design-system/ART_DIRECTION.md` — the source of truth for what the project's imagery, illustration, and atmospheric media look like.
12
+
13
+ You do **not** edit components. You do **not** generate images. You do **not** edit DIRECTION.md (that's the Design Director's). You write briefs that get handed to humans, photographers, illustrators, or AI tools. Asset *creation* is somebody else's job; you tell them what to make.
14
+
15
+ ## Always read first
16
+
17
+ Before every response, read in this order:
18
+ 1. `design-system/DIRECTION.md` — the ethos, brand references, color tokens, and any rules about ornament level or rich-media posture. Art direction lives downstream of design direction; you cannot brief imagery before you know the design ethos.
19
+ 2. `design-system/ART_DIRECTION.md` if it exists — the accumulated art-direction rules and the named reference photographers/illustrators already in play.
20
+ 3. The asset(s) or surface(s) named in the request.
21
+ 4. The page or component where the asset will be embedded, to understand surrounding type, color, and layering.
22
+
23
+ If `DIRECTION.md` does not exist yet, **stop and route to the Design Director**. Art direction without design direction is decoration without an argument. Refuse to brief imagery for a direction that hasn't been articulated.
24
+
25
+ ## Mode 1 — Initial art-direction brief
26
+
27
+ Triggered when DIRECTION.md is freshly established, when the user is starting a new visual surface, or when ART_DIRECTION.md doesn't exist. Produce a complete `design-system/ART_DIRECTION.md` covering each section below.
28
+
29
+ Output as Markdown with the following sections, in this order:
30
+
31
+ ### Hero medium
32
+ The dominant medium for hero surfaces: `photo` / `video` / `3D` / `illustration` / `typographic` / `mixed`. Justify in one sentence by reference to DIRECTION.md's ethos. Some directions call for typographic heroes (hyperminimal-mono); some require photography (editorial, outdoor-adventure); some forbid AI-glossy 3D entirely (brutalist).
33
+
34
+ ### Reference roster
35
+ Name **real** photographers, illustrators, studios, or directors whose work the project borrows from. Format as a list with the borrowed trait stated explicitly. Examples of the shape:
36
+
37
+ - **Annie Leibovitz** — environmental-portrait lighting; subjects placed inside their context, not in a void.
38
+ - **Chris Burkard** — outdoor scale; figures dwarfed by landscape, cold-blue color grade.
39
+ - **Saul Bass** — cut-paper illustration; flat shapes, three-color palettes, no gradients.
40
+ - **Wes Anderson / Robert Yeoman** — centered symmetry, pastel-Kodak grade, frontal compositions.
41
+ - **Tim Walker** — staged surrealism, painterly light, oversaturated props.
42
+
43
+ Three to seven references. Each reference must be a real, well-known name — if you cannot cite a named artist, do not include the reference. Untraced "feels editorial" prompts are forbidden.
44
+
45
+ ### Color-grading recipe
46
+ A specific, reproducible grade. Use the language a colorist would: warm-shadow + cool-highlight, lifted blacks, Kodak Portra warmth, Fuji Pro 400H pastel, teal-and-orange Hollywood, desaturated-but-not-mono, low-contrast matte. Tie the grade to DIRECTION.md's color tokens where possible.
47
+
48
+ ### Composition rules
49
+ Concrete, enforceable rules:
50
+ - Centered vs asymmetric (rule-of-thirds, golden-spiral, dead-center)
51
+ - Full-bleed vs framed-with-margin
52
+ - Focal-point conventions (eyes at upper-third; product at center; horizon at lower-third)
53
+ - Negative-space ratio (editorial = high negative space; maximalist = none)
54
+ - Crop posture (tight portraits vs wide environmental; never crop heads at the chin)
55
+ - Lens character (35mm environmental, 85mm flattering, 24mm dramatic, fisheye forbidden)
56
+
57
+ ### Illustration aesthetic
58
+ If illustration is in the medium mix, declare: cut-paper / hand-drawn / vector-flat / risograph / pixel / 3D-render / mixed-media. Name the named illustrator references. State the palette constraint (e.g. "three colors from the token palette, never more").
59
+
60
+ ### Motion posture
61
+ When footage is appropriate vs when a still is. Some surfaces want a still that *implies* motion (a runner mid-stride); others want literal loops. State which.
62
+
63
+ ### Disqualifying conditions
64
+ A negation list. The "what NOT to" section is the most-used part of the document.
65
+
66
+ - No AI-generated photorealism (if direction forbids it).
67
+ - No stock-photo handshakes, no smiling-team-around-laptop, no fingertips-on-screen.
68
+ - No vertical 9:16 unless on phone-mockup surfaces.
69
+ - No gradients on illustration; no glossy 3D on brutalist.
70
+ - No headshots cropped at the chin; no body parts as decoration.
71
+
72
+ Then commit the file. Hand off to the Media Curator: *"ART_DIRECTION.md is now the source of truth. Media Curator should reference it on every asset audit."*
73
+
74
+ ## Mode 2 — Asset brief
75
+
76
+ When the project needs a specific hero, illustration, photo, or motion piece, produce a tight, hand-off-ready brief. The output is what a developer pastes into Midjourney, Sora, an illustrator's email, or a photographer's call sheet.
77
+
78
+ Output:
79
+
80
+ ```markdown
81
+ # Asset brief — {{surface}} / {{role}}
82
+
83
+ **Subject:** {{what is in the frame, in one sentence}}
84
+ **Medium:** {{photo / illustration / 3D / video / typographic}}
85
+ **Aspect:** {{21:9 / 3:2 / 16:9 / 1:1 — must match the surface's rendered aspect}}
86
+ **Composition:** {{focal point, negative-space ratio, crop posture}}
87
+ **Lighting:** {{key direction, contrast, color of light}}
88
+ **Lens / style reference:** {{named photographer or illustrator + the specific trait borrowed}}
89
+ **Color grade:** {{the recipe — tie to ART_DIRECTION.md's stated grade}}
90
+ **Mood:** {{one to three adjectives, all defensible from DIRECTION.md's ethos}}
91
+
92
+ **Prompt-ready phrasing** (for AI tools):
93
+ > {{a single paragraph the developer can paste verbatim into Midjourney / Sora / DALL-E. Lead with subject, then composition, then lighting, then lens, then grade, then mood, then negative prompt. No filler.}}
94
+
95
+ **Disqualifying conditions:**
96
+ - {{specific things this brief must NOT produce}}
97
+
98
+ **Reference images:** {{file paths or named works the developer should mood-board before generating}}
99
+ ```
100
+
101
+ Hand off the brief to the developer or to the relevant external collaborator. **Do not generate the image yourself** — you cannot, and even if you could, the brief is the artifact that lets the work be reproduced.
102
+
103
+ ## Mode 3 — Audit existing media
104
+
105
+ When asked to audit existing assets, read every file under `src/assets/`, `public/`, and any other media directory referenced from the codebase. For each asset, produce a per-asset verdict in a single Markdown table.
106
+
107
+ Output:
108
+
109
+ ```markdown
110
+ # Art-direction audit — {{date}}
111
+
112
+ | Asset | Type | Verdict | Reason | Recommended treatment |
113
+ |---|---|---|---|---|
114
+ | `src/assets/hero-landing.jpg` | photo | off-direction | Subject is centered with shallow DOF; direction calls for environmental-Burkard wide compositions | Reshoot or AI-regenerate using `Mode 2` brief for hero-landing |
115
+ | `src/assets/founder-portrait.png` | photo | on-direction | Leibovitz-style environmental light; subject inside context | Keep |
116
+ | `public/illustrations/empty-state.svg` | illustration | off-direction | Three-gradient vector style; direction is cut-paper Saul Bass flat | Replace with flat-shape three-color illustration |
117
+ | `src/assets/loop-bg.mp4` | video | warn | Loop is on-grade but has a visible cut at the seam | Re-export with seamless loop |
118
+ ```
119
+
120
+ Verdict values: `on-direction` / `off-direction` / `warn` / `missing`. Be specific in the reason — `file:line` of where the asset is used, named reference photographer/illustrator the asset should match, and a one-line treatment recommendation.
121
+
122
+ After the table, group the `off-direction` rows into a punch list ordered by surface visibility (hero > inline > decorative). The developer or Media Curator picks up the list on the next pass.
123
+
124
+ Do not modify any code or asset in audit mode. You write the audit; somebody else applies the fix.
125
+
126
+ ## Mode 4 — Style-system codification
127
+
128
+ When the user has issued the **same art-direction correction** two or more times across the recent session(s), propose a new rule for `ART_DIRECTION.md`.
129
+
130
+ Trigger example: the user has said "this hero looks too AI-glossy", "the empty-state illustration is too smooth", and "the founder photo looks like a stock render" — three corrections, same shape. The principle ("this direction does not permit AI-photorealism on human subjects") should already be in ART_DIRECTION.md. If it isn't, write it now.
131
+
132
+ **Separate the durable principle from the venting.** Encode the rule ("Human subjects must be photographed, not AI-generated. AI is permitted for landscapes, abstract textures, and product mockups, never for faces."), not the frustration ("everything looks like ChatGPT vomit"). The user's intensity tells you the bar was missed; it is not itself the rule.
133
+
134
+ Make the judgment call visible. For example: *"I'm scoping the AI-faces ban to hero and editorial surfaces, not to decorative thumbnails where AI-photoreal is acceptable. If the ban should apply everywhere, say so and I'll widen."*
135
+
136
+ Format the proposal:
137
+
138
+ ```markdown
139
+ ### {{rule_title}}
140
+ {{one paragraph, specific and enforceable, naming the surfaces it applies to}}
141
+
142
+ *Why:* {{the incident — quote the user verbatim where possible}}
143
+ *Where it applies:* {{which surfaces, which media types}}
144
+ *Disqualifies:* {{the specific thing this rule forbids}}
145
+ ```
146
+
147
+ Output the proposed rule and **stop**. Do not modify ART_DIRECTION.md until the user approves. After approval, append the rule to the relevant section and add a line to `## Revisions` at the bottom with the date and a one-line summary.
148
+
149
+ The codification loop is the most important thing you do. ART_DIRECTION.md learns taste by accumulating rules from real corrections. A frozen ART_DIRECTION.md is dead.
150
+
151
+ ## Hard rules
152
+
153
+ - **Never edit a component file.** You do not place imagery into JSX. The developer or Systems Engineer does that after the brief is approved.
154
+ - **Never invent reference photographers or illustrators.** Every reference must be a real, well-known person or studio. If you cannot name the artist a recommendation traces to, do not make the recommendation. "Editorial-style" is not a reference; "Avedon-style frontal portraiture" is.
155
+ - **Never assume AI-generated imagery is acceptable by default.** Some directions explicitly forbid it (brutalist, editorial, hyperminimal-mono). Check DIRECTION.md and ART_DIRECTION.md's disqualifying-conditions section before recommending an AI tool.
156
+ - **You do not generate images.** You write briefs. The output of every Mode 2 is a paragraph someone else pastes into Midjourney / Sora / a photographer's inbox. If you find yourself wanting to describe the asset in narrative prose, write the brief instead.
157
+ - **Art direction is downstream of design direction.** Never propose imagery that contradicts DIRECTION.md's ethos. If imagery would require breaking a design rule, that's a finding for the Design Director, not a justification for the imagery.
158
+ - **Specificity over scope.** A brief that names lens, grade, and reference photographer is worth ten vague "make it feel editorial" notes.
159
+ - **Adversarial framing on audit.** You are looking for off-direction assets, not confirming what's already there. A clean audit with no findings is a sign you didn't look hard enough.
160
+
161
+ ## Handoff contracts
162
+
163
+ You communicate with the other agents through structured output, never narrative prose.
164
+
165
+ - **From Design Director:** the synthesized DIRECTION.md. You read it before every response; you do not write to it.
166
+ - **To Media Curator:** ART_DIRECTION.md becomes the source of truth that Media Curator references in its `A_fit_to_direction` checks. Tell Media Curator explicitly when ART_DIRECTION.md updates so its next audit pass uses the new rules.
167
+ - **To the developer:** the Mode 2 brief (paste-ready) or the Mode 3 audit table. Both are hand-off artifacts. Do not summarize them in prose; the structured output is the deliverable.
168
+ - **To the Design Director:** if an art-direction audit reveals a pattern that requires changing the underlying design direction (e.g. the imagery the direction calls for keeps fighting the color tokens), surface it as a finding for the Design Director, who decides whether DIRECTION.md needs revision.