@stylecrib/cli 0.0.0-stage → 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.
- package/README.md +163 -2
- package/agents/MANIFEST.yml +136 -0
- package/agents/README.md +75 -0
- package/agents/art-director.md +168 -0
- package/agents/audacity-director.md +109 -0
- package/agents/brand-identity.md +179 -0
- package/agents/brand-precedent.md +119 -0
- package/agents/brief-enforcer.md +136 -0
- package/agents/component-qa.md +167 -0
- package/agents/cto.md +49 -0
- package/agents/design-director.md +184 -0
- package/agents/design-systems-engineer.md +162 -0
- package/agents/direction-curator.md +133 -0
- package/agents/homogeneity-detector.md +104 -0
- package/agents/logo-designer.md +240 -0
- package/agents/marketing-designer.md +156 -0
- package/agents/media-curator.md +165 -0
- package/agents/motion-engineer.md +270 -0
- package/agents/qa-conductor.md +143 -0
- package/agents/render-qa.md +133 -0
- package/agents/upgrade-simulator.md +123 -0
- package/agents/vp-architecture.md +49 -0
- package/agents/vp-engineering.md +49 -0
- package/dist/index.js +7182 -0
- package/package.json +69 -4
- package/themes/README.md +70 -0
- package/themes/acrylic-soft/THEME.md +142 -0
- package/themes/acrylic-soft/tokens.ts +180 -0
- package/themes/agency-creative/THEME.md +91 -0
- package/themes/agency-creative/tokens.ts +202 -0
- package/themes/agency-portfolio/THEME.md +109 -0
- package/themes/agency-portfolio/tokens.ts +159 -0
- package/themes/ai-startup/THEME.md +95 -0
- package/themes/ai-startup/tokens.ts +162 -0
- package/themes/airline-modern/THEME.md +104 -0
- package/themes/airline-modern/tokens.ts +179 -0
- package/themes/arc-stack/.anchor-render.png +0 -0
- package/themes/arc-stack/THEME.md +125 -0
- package/themes/arc-stack/audit.log.jsonl +6 -0
- package/themes/arc-stack/dismissals.jsonl +3 -0
- package/themes/arc-stack/tailwind.snippet.ts +17 -0
- package/themes/arc-stack/theme.yml +153 -0
- package/themes/arc-stack/tokens.ts +29 -0
- package/themes/architectural/THEME.md +102 -0
- package/themes/architectural/tokens.ts +159 -0
- package/themes/atelier-radiance/THEME.md +93 -0
- package/themes/atelier-radiance/audit.log.jsonl +1 -0
- package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
- package/themes/atelier-radiance/theme.yml +130 -0
- package/themes/atelier-radiance/tokens.ts +29 -0
- package/themes/automotive-ev/THEME.md +87 -0
- package/themes/automotive-ev/tokens.ts +183 -0
- package/themes/automotive-luxury/THEME.md +88 -0
- package/themes/automotive-luxury/tokens.ts +175 -0
- package/themes/baby-modern/THEME.md +79 -0
- package/themes/baby-modern/tokens.ts +184 -0
- package/themes/banking-gravity/THEME.md +171 -0
- package/themes/banking-gravity/tokens.ts +169 -0
- package/themes/beauty-clean/THEME.md +92 -0
- package/themes/beauty-clean/tokens.ts +176 -0
- package/themes/beauty-luxury/THEME.md +96 -0
- package/themes/beauty-luxury/tokens.ts +178 -0
- package/themes/bento-modular/.anchor-render.png +0 -0
- package/themes/bento-modular/BUILD_BRIEF.md +171 -0
- package/themes/bento-modular/THEME.md +80 -0
- package/themes/bento-modular/audit.log.jsonl +3 -0
- package/themes/bento-modular/dismissals.jsonl +1 -0
- package/themes/bento-modular/tailwind.snippet.ts +17 -0
- package/themes/bento-modular/theme.yml +83 -0
- package/themes/bento-modular/tokens.ts +27 -0
- package/themes/bookstore-indie/THEME.md +78 -0
- package/themes/bookstore-indie/tokens.ts +147 -0
- package/themes/brutalist/THEME.md +96 -0
- package/themes/brutalist/tokens.ts +151 -0
- package/themes/business-tiles/THEME.md +141 -0
- package/themes/business-tiles/tokens.ts +178 -0
- package/themes/cabana-poster/THEME.md +158 -0
- package/themes/cabana-poster/audit.log.jsonl +1 -0
- package/themes/cabana-poster/tailwind.snippet.ts +16 -0
- package/themes/cabana-poster/theme.yml +221 -0
- package/themes/cabana-poster/tokens.ts +34 -0
- package/themes/case-panel/THEME.md +126 -0
- package/themes/case-panel/audit.log.jsonl +2 -0
- package/themes/case-panel/tailwind.snippet.ts +15 -0
- package/themes/case-panel/theme.yml +153 -0
- package/themes/case-panel/tokens.ts +28 -0
- package/themes/cinematic-dark/THEME.md +97 -0
- package/themes/cinematic-dark/tokens.ts +195 -0
- package/themes/classic-car/THEME.md +86 -0
- package/themes/classic-car/tokens.ts +173 -0
- package/themes/cloud-friendly/THEME.md +152 -0
- package/themes/cloud-friendly/tokens.ts +181 -0
- package/themes/community-niche/THEME.md +102 -0
- package/themes/community-niche/tokens.ts +177 -0
- package/themes/corporate-grid/THEME.md +154 -0
- package/themes/corporate-grid/tokens.ts +182 -0
- package/themes/couture-luxury/THEME.md +85 -0
- package/themes/couture-luxury/tokens.ts +146 -0
- package/themes/creator-social/THEME.md +131 -0
- package/themes/creator-social/tokens.ts +249 -0
- package/themes/crypto-onchain/THEME.md +100 -0
- package/themes/crypto-onchain/tokens.ts +207 -0
- package/themes/cycling-brand/THEME.md +78 -0
- package/themes/cycling-brand/tokens.ts +185 -0
- package/themes/dating-friendly/THEME.md +102 -0
- package/themes/dating-friendly/tokens.ts +178 -0
- package/themes/dense-utility/THEME.md +85 -0
- package/themes/dense-utility/tokens.ts +155 -0
- package/themes/devtool-cli/THEME.md +100 -0
- package/themes/devtool-cli/tokens.ts +195 -0
- package/themes/devtool-docs/THEME.md +105 -0
- package/themes/devtool-docs/tokens.ts +177 -0
- package/themes/editorial/THEME.md +129 -0
- package/themes/editorial/audit.log.jsonl +2 -0
- package/themes/editorial/tailwind.snippet.ts +15 -0
- package/themes/editorial/theme.yml +173 -0
- package/themes/editorial/tokens.ts +29 -0
- package/themes/education-formal/THEME.md +154 -0
- package/themes/education-formal/audit.log.jsonl +1 -0
- package/themes/education-formal/tailwind.snippet.ts +15 -0
- package/themes/education-formal/theme.yml +186 -0
- package/themes/education-formal/tokens.ts +29 -0
- package/themes/education-warm/THEME.md +91 -0
- package/themes/education-warm/tokens.ts +185 -0
- package/themes/ember-poster/README.md +79 -0
- package/themes/ember-poster/THEME.md +101 -0
- package/themes/ember-poster/audit.log.jsonl +17 -0
- package/themes/ember-poster/package.json +34 -0
- package/themes/ember-poster/tailwind.snippet.ts +17 -0
- package/themes/ember-poster/theme.yml +109 -0
- package/themes/ember-poster/tokens.ts +27 -0
- package/themes/enterprise-cloud/THEME.md +139 -0
- package/themes/enterprise-cloud/tokens.ts +179 -0
- package/themes/enterprise-tech/.anchor-render.png +0 -0
- package/themes/enterprise-tech/THEME.md +167 -0
- package/themes/enterprise-tech/audit.log.jsonl +1 -0
- package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
- package/themes/enterprise-tech/theme.yml +202 -0
- package/themes/enterprise-tech/tokens.ts +29 -0
- package/themes/ev-charging/THEME.md +94 -0
- package/themes/ev-charging/tokens.ts +185 -0
- package/themes/farm-direct/THEME.md +92 -0
- package/themes/farm-direct/tokens.ts +180 -0
- package/themes/fintech-card/THEME.md +96 -0
- package/themes/fintech-card/tokens.ts +191 -0
- package/themes/fintech-trust/THEME.md +94 -0
- package/themes/fintech-trust/tokens.ts +192 -0
- package/themes/food-blog/THEME.md +98 -0
- package/themes/food-blog/tokens.ts +183 -0
- package/themes/forum-classic/THEME.md +100 -0
- package/themes/forum-classic/tokens.ts +168 -0
- package/themes/fresh-plate/.anchor-render.png +0 -0
- package/themes/fresh-plate/THEME.md +144 -0
- package/themes/fresh-plate/audit.log.jsonl +2 -0
- package/themes/fresh-plate/dismissals.jsonl +3 -0
- package/themes/fresh-plate/tailwind.snippet.ts +16 -0
- package/themes/fresh-plate/theme.yml +189 -0
- package/themes/fresh-plate/tokens.ts +30 -0
- package/themes/furniture-modern/THEME.md +94 -0
- package/themes/furniture-modern/tokens.ts +176 -0
- package/themes/gaming-esports/THEME.md +146 -0
- package/themes/gaming-esports/tokens.ts +199 -0
- package/themes/gaming-streamer/THEME.md +139 -0
- package/themes/gaming-streamer/tokens.ts +201 -0
- package/themes/glassmorphic-modern/THEME.md +119 -0
- package/themes/glassmorphic-modern/tokens.ts +174 -0
- package/themes/government-civic/THEME.md +138 -0
- package/themes/government-civic/tokens.ts +164 -0
- package/themes/gym-chain/THEME.md +79 -0
- package/themes/gym-chain/tokens.ts +196 -0
- package/themes/healthcare-bright/THEME.md +95 -0
- package/themes/healthcare-bright/tokens.ts +184 -0
- package/themes/home-decor/THEME.md +94 -0
- package/themes/home-decor/tokens.ts +177 -0
- package/themes/hotel-boutique/THEME.md +110 -0
- package/themes/hotel-boutique/tokens.ts +179 -0
- package/themes/hyperminimal-mono/THEME.md +91 -0
- package/themes/hyperminimal-mono/tokens.ts +150 -0
- package/themes/indie-art-game/THEME.md +107 -0
- package/themes/indie-art-game/tokens.ts +216 -0
- package/themes/insurance-legacy/THEME.md +101 -0
- package/themes/insurance-legacy/tokens.ts +182 -0
- package/themes/insurance-modern/THEME.md +103 -0
- package/themes/insurance-modern/tokens.ts +192 -0
- package/themes/kaiju-reveal/THEME.md +97 -0
- package/themes/kaiju-reveal/tokens.ts +185 -0
- package/themes/kinetic-data/THEME.md +172 -0
- package/themes/kinetic-data/audit.log.jsonl +1 -0
- package/themes/kinetic-data/tailwind.snippet.ts +16 -0
- package/themes/kinetic-data/theme.yml +207 -0
- package/themes/kinetic-data/tokens.ts +30 -0
- package/themes/kinetic-headline/.anchor-render.png +0 -0
- package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
- package/themes/kinetic-headline/THEME.md +78 -0
- package/themes/kinetic-headline/audit.log.jsonl +4 -0
- package/themes/kinetic-headline/dismissals.jsonl +1 -0
- package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
- package/themes/kinetic-headline/theme.yml +81 -0
- package/themes/kinetic-headline/tokens.ts +26 -0
- package/themes/law-firm/THEME.md +108 -0
- package/themes/law-firm/tokens.ts +158 -0
- package/themes/lawtech-modern/THEME.md +107 -0
- package/themes/lawtech-modern/tokens.ts +192 -0
- package/themes/linkedin-pro/THEME.md +102 -0
- package/themes/linkedin-pro/tokens.ts +174 -0
- package/themes/logistics-modern/THEME.md +94 -0
- package/themes/logistics-modern/tokens.ts +187 -0
- package/themes/magazine-glossy/THEME.md +74 -0
- package/themes/magazine-glossy/tokens.ts +158 -0
- package/themes/marker-mag/THEME.md +128 -0
- package/themes/marker-mag/audit.log.jsonl +1 -0
- package/themes/marker-mag/tailwind.snippet.ts +15 -0
- package/themes/marker-mag/theme.yml +159 -0
- package/themes/marker-mag/tokens.ts +27 -0
- package/themes/marketplace-modern/THEME.md +135 -0
- package/themes/marketplace-modern/tokens.ts +186 -0
- package/themes/marketplace-vintage/THEME.md +110 -0
- package/themes/marketplace-vintage/tokens.ts +185 -0
- package/themes/maximalist/THEME.md +96 -0
- package/themes/maximalist/tokens.ts +168 -0
- package/themes/mid-century/THEME.md +109 -0
- package/themes/mid-century/tokens.ts +162 -0
- package/themes/motorcycle-brand/THEME.md +86 -0
- package/themes/motorcycle-brand/tokens.ts +174 -0
- package/themes/museum/THEME.md +83 -0
- package/themes/museum/tokens.ts +147 -0
- package/themes/music-streaming/THEME.md +101 -0
- package/themes/music-streaming/tokens.ts +187 -0
- package/themes/music-vinyl/THEME.md +98 -0
- package/themes/music-vinyl/tokens.ts +167 -0
- package/themes/nature-distilled/.anchor-render.png +0 -0
- package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
- package/themes/nature-distilled/THEME.md +81 -0
- package/themes/nature-distilled/audit.log.jsonl +2 -0
- package/themes/nature-distilled/tailwind.snippet.ts +16 -0
- package/themes/nature-distilled/theme.yml +91 -0
- package/themes/nature-distilled/tokens.ts +26 -0
- package/themes/news-tabloid/THEME.md +72 -0
- package/themes/news-tabloid/tokens.ts +158 -0
- package/themes/news-tech/THEME.md +75 -0
- package/themes/news-tech/tokens.ts +149 -0
- package/themes/newsletter/THEME.md +82 -0
- package/themes/newsletter/tokens.ts +138 -0
- package/themes/newspaper-classic/THEME.md +74 -0
- package/themes/newspaper-classic/tokens.ts +159 -0
- package/themes/nonprofit-arts/THEME.md +78 -0
- package/themes/nonprofit-arts/tokens.ts +157 -0
- package/themes/nonprofit-warm/THEME.md +105 -0
- package/themes/nonprofit-warm/tokens.ts +188 -0
- package/themes/outdoor-adventure/THEME.md +113 -0
- package/themes/outdoor-adventure/tokens.ts +181 -0
- package/themes/overland-broadside/THEME.md +119 -0
- package/themes/overland-broadside/audit.log.jsonl +1 -0
- package/themes/overland-broadside/tailwind.snippet.ts +17 -0
- package/themes/overland-broadside/theme.yml +138 -0
- package/themes/overland-broadside/tokens.ts +27 -0
- package/themes/performance-engineered/THEME.md +162 -0
- package/themes/performance-engineered/audit.log.jsonl +1 -0
- package/themes/performance-engineered/tailwind.snippet.ts +15 -0
- package/themes/performance-engineered/theme.yml +193 -0
- package/themes/performance-engineered/tokens.ts +29 -0
- package/themes/pet-food/THEME.md +78 -0
- package/themes/pet-food/tokens.ts +185 -0
- package/themes/pharma-clinical/THEME.md +164 -0
- package/themes/pharma-clinical/audit.log.jsonl +1 -0
- package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
- package/themes/pharma-clinical/theme.yml +201 -0
- package/themes/pharma-clinical/tokens.ts +29 -0
- package/themes/pill-editorial/THEME.md +125 -0
- package/themes/pill-editorial/audit.log.jsonl +1 -0
- package/themes/pill-editorial/tailwind.snippet.ts +15 -0
- package/themes/pill-editorial/theme.yml +168 -0
- package/themes/pill-editorial/tokens.ts +31 -0
- package/themes/podcast-warm/THEME.md +103 -0
- package/themes/podcast-warm/tokens.ts +192 -0
- package/themes/publisher-indie/THEME.md +78 -0
- package/themes/publisher-indie/tokens.ts +148 -0
- package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
- package/themes/raw-concrete/THEME.md +76 -0
- package/themes/raw-concrete/audit.log.jsonl +10 -0
- package/themes/raw-concrete/tailwind.snippet.ts +16 -0
- package/themes/raw-concrete/theme.yml +88 -0
- package/themes/raw-concrete/tokens.ts +27 -0
- package/themes/realestate-luxury/THEME.md +94 -0
- package/themes/realestate-luxury/tokens.ts +169 -0
- package/themes/realestate-marketplace/THEME.md +106 -0
- package/themes/realestate-marketplace/tokens.ts +183 -0
- package/themes/restaurant-modern/THEME.md +109 -0
- package/themes/restaurant-modern/tokens.ts +172 -0
- package/themes/runway-fashion/THEME.md +99 -0
- package/themes/runway-fashion/tokens.ts +167 -0
- package/themes/saturday-morning/THEME.md +117 -0
- package/themes/saturday-morning/tokens.ts +281 -0
- package/themes/schema.ts +235 -0
- package/themes/signal-dark/BUILD_BRIEF.md +168 -0
- package/themes/signal-dark/THEME.md +107 -0
- package/themes/signal-dark/tokens.ts +181 -0
- package/themes/soft-modern/THEME.md +91 -0
- package/themes/soft-modern/tokens.ts +166 -0
- package/themes/solar-residential/THEME.md +92 -0
- package/themes/solar-residential/tokens.ts +176 -0
- package/themes/sports-league/THEME.md +180 -0
- package/themes/sports-league/audit.log.jsonl +1 -0
- package/themes/sports-league/tailwind.snippet.ts +15 -0
- package/themes/sports-league/theme.yml +213 -0
- package/themes/sports-league/tokens.ts +32 -0
- package/themes/stadium-sport/THEME.md +114 -0
- package/themes/stadium-sport/tokens.ts +187 -0
- package/themes/streetwear-hype/THEME.md +100 -0
- package/themes/streetwear-hype/tokens.ts +174 -0
- package/themes/studio-architect/THEME.md +108 -0
- package/themes/studio-architect/tokens.ts +162 -0
- package/themes/studio-photographer/THEME.md +88 -0
- package/themes/studio-photographer/tokens.ts +164 -0
- package/themes/team-kanban/.anchor-render.png +0 -0
- package/themes/team-kanban/THEME.md +167 -0
- package/themes/team-kanban/audit.log.jsonl +2 -0
- package/themes/team-kanban/dismissals.jsonl +1 -0
- package/themes/team-kanban/tailwind.snippet.ts +15 -0
- package/themes/team-kanban/theme.yml +209 -0
- package/themes/team-kanban/tokens.ts +35 -0
- package/themes/telehealth-modern/THEME.md +95 -0
- package/themes/telehealth-modern/tokens.ts +197 -0
- package/themes/tourism-board/THEME.md +111 -0
- package/themes/tourism-board/tokens.ts +173 -0
- package/themes/toys-modern/THEME.md +79 -0
- package/themes/toys-modern/tokens.ts +200 -0
- package/themes/travel-luxury/THEME.md +95 -0
- package/themes/travel-luxury/tokens.ts +162 -0
- package/themes/vacation-rental/THEME.md +105 -0
- package/themes/vacation-rental/tokens.ts +174 -0
- package/themes/vault-reel/THEME.md +134 -0
- package/themes/vault-reel/audit.log.jsonl +3 -0
- package/themes/vault-reel/tailwind.snippet.ts +16 -0
- package/themes/vault-reel/theme.yml +167 -0
- package/themes/vault-reel/tokens.ts +30 -0
- package/themes/vet-modern/THEME.md +79 -0
- package/themes/vet-modern/tokens.ts +194 -0
- package/themes/web3-restraint/THEME.md +87 -0
- package/themes/web3-restraint/tokens.ts +154 -0
- package/themes/wellness-active/THEME.md +102 -0
- package/themes/wellness-active/tokens.ts +203 -0
- package/themes/wellness-spa/THEME.md +93 -0
- package/themes/wellness-spa/tokens.ts +173 -0
- package/themes/y2k-chrome/THEME.md +118 -0
- package/themes/y2k-chrome/tokens.ts +249 -0
- package/themes/yoga-studio/THEME.md +76 -0
- package/themes/yoga-studio/tokens.ts +163 -0
package/README.md
CHANGED
|
@@ -1,3 +1,164 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @stylecrib/cli
|
|
2
2
|
|
|
3
|
-
|
|
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
|
+
|
|
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
|
+
|
|
7
|
+
## Install + run
|
|
8
|
+
|
|
9
|
+
One command, pointed at a directory — **not released yet**, see the note below:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
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>
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# project-local (recommended — the git hook resolves it via npx --no-install)
|
|
24
|
+
npm i -D @stylecrib/cli
|
|
25
|
+
npx stylecrib init
|
|
26
|
+
|
|
27
|
+
# global
|
|
28
|
+
npm i -g @stylecrib/cli
|
|
29
|
+
stylecrib init
|
|
30
|
+
|
|
31
|
+
# one-off, no install
|
|
32
|
+
npx @stylecrib/cli init
|
|
33
|
+
```
|
|
34
|
+
</details>
|
|
35
|
+
|
|
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.
|
|
37
|
+
|
|
38
|
+
## What `stylecrib init` does
|
|
39
|
+
|
|
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.
|
|
43
|
+
2. **Ingest** — fetches URL content and reads images to feed the Director as multimodal context.
|
|
44
|
+
3. **Director synthesis** — Anthropic call with the Director Feel-mode system prompt. Produces synthesized ethos, token plan, typography stack, full `DIRECTION.md`.
|
|
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).
|
|
46
|
+
|
|
47
|
+
Existing files are never overwritten. `--dry-run` shows the plan without writing.
|
|
48
|
+
|
|
49
|
+
## What `stylecrib init` does NOT do (yet)
|
|
50
|
+
|
|
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.
|
|
55
|
+
|
|
56
|
+
## The pre-commit gate
|
|
57
|
+
|
|
58
|
+
`stylecrib install-hooks` wires:
|
|
59
|
+
|
|
60
|
+
- **Pre-commit hook** at `.git/hooks/pre-commit` → runs `stylecrib check --staged` on every commit. Diff-scoped: only NEW slop hits introduced by the commit block. Pre-existing debt in hot files doesn't stop new commits; that's the nightly-sweep report's job.
|
|
61
|
+
- **On-save hook** via `.claude/settings.json` → runs `stylecrib hook-check` on every Claude Code Write/Edit event.
|
|
62
|
+
- **CI gate** at `.github/workflows/stylecrib-review.yml` → runs the pack on every PR.
|
|
63
|
+
|
|
64
|
+
Emergency bypass (logs the reason for weekly review): `STYLECRIB_SKIP_QA="<reason>" git commit`. Never `--no-verify` — that leaves no audit trail.
|
|
65
|
+
|
|
66
|
+
## Commands
|
|
67
|
+
|
|
68
|
+
- `stylecrib init` — install the pack + a theme
|
|
69
|
+
- `stylecrib check` — run the review loop against the current diff (called by pre-commit)
|
|
70
|
+
- `stylecrib apply` — run the Director synthesis to generate / regenerate a DIRECTION.md
|
|
71
|
+
- `stylecrib review-site` — walk every UI file and run the structural detectors (nightly sweep)
|
|
72
|
+
- `stylecrib install-hooks` — install the pre-commit + on-save + CI gates
|
|
73
|
+
- `stylecrib audit` — one-shot drift report against your existing repo (no install required)
|
|
74
|
+
- `stylecrib rule add` / `stylecrib rule share` — author + share slop rules
|
|
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.
|
|
78
|
+
- `stylecrib status` — show current install state
|
|
79
|
+
- `stylecrib reject "<pattern>"` — append to `.stylecrib/feedback.md`
|
|
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
|
+
|
|
146
|
+
## The pack that ships
|
|
147
|
+
|
|
148
|
+
**Orchestrator (1):** qa-conductor
|
|
149
|
+
|
|
150
|
+
**Craft reviewers (13):** design-director, marketing-designer, motion-engineer, homogeneity-detector, audacity-director, media-curator, render-qa, art-director, brand-identity, brand-precedent, logo-designer, direction-curator, component-qa
|
|
151
|
+
|
|
152
|
+
**Craft writers (1):** design-systems-engineer
|
|
153
|
+
|
|
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.)
|
|
155
|
+
|
|
156
|
+
**Enforcer (1):** brief-enforcer — fires per-diff on any section-source change when a matching `themes/<slug>/BUILD_BRIEF.md` exists
|
|
157
|
+
|
|
158
|
+
**Exec auditors (3):** cto (claim-vs-code), vp-architecture (install-story), vp-engineering (ship-readiness)
|
|
159
|
+
|
|
160
|
+
Full architecture: [AGENTS_ARCHITECTURE.md](https://github.com/frischermf/stylecrib/blob/main/AGENTS_ARCHITECTURE.md).
|
|
161
|
+
|
|
162
|
+
## License
|
|
163
|
+
|
|
164
|
+
Fair Source — free for personal use; commercial from $20/mo. See [LICENSE](https://github.com/frischermf/stylecrib/blob/main/LICENSE) (pending — see [TODO](https://github.com/frischermf/stylecrib/blob/main/TODO.md)).
|
|
@@ -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
|
+
|
package/agents/README.md
ADDED
|
@@ -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.
|