get-shit-pretty 0.5.1 → 0.5.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/.claude-plugin/plugin.json +1 -1
- package/bin/install.js +38 -19
- package/gsp/agents/gsp-accessibility-auditor.md +1 -4
- package/gsp/agents/gsp-ascii-artist.md +1 -1
- package/gsp/agents/gsp-brand-auditor.md +0 -2
- package/gsp/agents/gsp-brand-strategist.md +0 -2
- package/gsp/agents/gsp-brand-syncer.md +125 -0
- package/gsp/agents/gsp-builder.md +2 -7
- package/gsp/agents/gsp-campaign-director.md +0 -20
- package/gsp/agents/gsp-critic.md +15 -18
- package/gsp/agents/gsp-designer.md +0 -4
- package/gsp/agents/gsp-identity-designer.md +0 -4
- package/gsp/agents/gsp-pattern-architect.md +1 -63
- package/gsp/agents/gsp-project-researcher.md +0 -21
- package/gsp/agents/gsp-researcher.md +0 -2
- package/gsp/agents/gsp-reviewer.md +1 -12
- package/gsp/agents/gsp-scoper.md +0 -21
- package/gsp/hooks/hooks.json +11 -0
- package/gsp/prompts/01-design-system-architect.md +0 -46
- package/gsp/prompts/02-brand-identity-creator.md +1 -14
- package/gsp/prompts/03-ui-ux-pattern-master.md +1 -23
- package/gsp/prompts/04-marketing-asset-factory.md +1 -14
- package/gsp/prompts/05-implementation-spec-expert.md +0 -27
- package/gsp/prompts/06-design-critique-partner.md +1 -17
- package/gsp/prompts/07-design-trend-synthesizer.md +2 -29
- package/gsp/prompts/08-accessibility-auditor.md +4 -19
- package/gsp/prompts/09-design-to-code-translator.md +17 -31
- package/gsp/prompts/10-project-scoper.md +2 -36
- package/gsp/prompts/11-deliverable-reviewer.md +1 -50
- package/gsp/prompts/12-project-researcher.md +0 -39
- package/gsp/references/anti-patterns.md +173 -0
- package/gsp/references/block-patterns.md +44 -0
- package/gsp/references/chunk-format.md +31 -0
- package/gsp/references/style-preset-schema.md +63 -0
- package/gsp/references/visual-effects.md +247 -0
- package/gsp/references/visual-taste.md +120 -0
- package/gsp/skills/gsp-brand-sync/SKILL.md +101 -0
- package/gsp/skills/gsp-help/SKILL.md +1 -0
- package/gsp/skills/gsp-project-build/SKILL.md +89 -2
- package/gsp/skills/gsp-project-critique/SKILL.md +2 -0
- package/gsp/skills/gsp-project-design/SKILL.md +1 -0
- package/gsp/skills/gsp-style/SKILL.md +14 -217
- package/gsp/skills/gsp-typescale/SKILL.md +23 -319
- package/package.json +1 -1
- package/scripts/gsp-context-recovery.sh +71 -0
package/bin/install.js
CHANGED
|
@@ -149,10 +149,10 @@ const tagline = taglines[Math.floor(Math.random() * taglines.length)];
|
|
|
149
149
|
|
|
150
150
|
// ── Sparkle field + density ramp banner ──
|
|
151
151
|
|
|
152
|
-
function sparkleLine(width) {
|
|
153
|
-
const chars = ['
|
|
152
|
+
function sparkleLine(width, density = 'normal') {
|
|
153
|
+
const chars = ['.', '.', '·', '·', '*', '+'];
|
|
154
154
|
const line = Array(width).fill(' ');
|
|
155
|
-
const count = 4 + Math.floor(Math.random() * 5);
|
|
155
|
+
const count = density === 'dense' ? 8 + Math.floor(Math.random() * 6) : 4 + Math.floor(Math.random() * 5);
|
|
156
156
|
for (let i = 0; i < count; i++) {
|
|
157
157
|
const pos = Math.floor(Math.random() * width);
|
|
158
158
|
line[pos] = chars[Math.floor(Math.random() * chars.length)];
|
|
@@ -168,17 +168,34 @@ function center(text, width) {
|
|
|
168
168
|
|
|
169
169
|
const columns = process.stdout.columns || 80;
|
|
170
170
|
const rampText = `${c.accent}░▒▓█${c.reset} ${c.bold} GET SHIT PRETTY ${c.reset} ${c.accent}█▓▒░${c.reset}`;
|
|
171
|
-
const
|
|
172
|
-
const
|
|
171
|
+
const boxWidth = 48;
|
|
172
|
+
const innerWidth = boxWidth - 2; // inside the border chars
|
|
173
|
+
const showSparkles = columns >= 44;
|
|
173
174
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
175
|
+
function centerInBox(text, width) {
|
|
176
|
+
const stripped = text.replace(/\x1b\[[0-9;]*m/g, '');
|
|
177
|
+
const pad = Math.max(0, Math.floor((width - stripped.length) / 2));
|
|
178
|
+
const rightPad = Math.max(0, width - stripped.length - pad);
|
|
179
|
+
return ' '.repeat(pad) + text + ' '.repeat(rightPad);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const indent = ' ';
|
|
183
|
+
const topBorder = `${indent}${c.dim}╭${'─'.repeat(innerWidth)}╮${c.reset}`;
|
|
184
|
+
const bottomBorder = `${indent}${c.dim}╰${'─'.repeat(innerWidth)}╯${c.reset}`;
|
|
185
|
+
const emptyLine = `${indent}${c.dim}│${c.reset}${' '.repeat(innerWidth)}${c.dim}│${c.reset}`;
|
|
186
|
+
const boxLine = (content) => `${indent}${c.dim}│${c.reset}${centerInBox(content, innerWidth)}${c.dim}│${c.reset}`;
|
|
187
|
+
const sparkle = (d) => boxLine(`${c.dim}${sparkleLine(innerWidth - 4, d)}${c.reset}`);
|
|
188
|
+
|
|
189
|
+
const banner = '\n' +
|
|
190
|
+
topBorder + '\n' +
|
|
191
|
+
(showSparkles ? sparkle('dense') + '\n' : '') +
|
|
192
|
+
(showSparkles ? sparkle('dense') + '\n' : '') +
|
|
193
|
+
emptyLine + '\n' +
|
|
194
|
+
boxLine(rampText) + '\n' +
|
|
195
|
+
emptyLine + '\n' +
|
|
196
|
+
(showSparkles ? sparkle('dense') + '\n' : '') +
|
|
197
|
+
(showSparkles ? sparkle('dense') + '\n' : '') +
|
|
198
|
+
bottomBorder + '\n' +
|
|
182
199
|
'\n' +
|
|
183
200
|
` ${c.bold}${c.accent}/gsp:${c.reset} ${c.tertiary}◇◇${c.reset} ${c.dim}v${pkg.version}${c.reset}\n` +
|
|
184
201
|
` ${c.dim}${tagline}${c.reset}\n`;
|
|
@@ -979,13 +996,15 @@ function copyGeminiSkills(srcDir, destDir, pathPrefix) {
|
|
|
979
996
|
* Returns count of gsp- agents installed.
|
|
980
997
|
* runtime: 'claude' | 'opencode' | 'gemini' (Codex skips agents entirely)
|
|
981
998
|
*/
|
|
982
|
-
function copyAgents(srcDir, destDir, pathPrefix, runtime) {
|
|
999
|
+
function copyAgents(srcDir, destDir, pathPrefix, runtime, { clean = false } = {}) {
|
|
983
1000
|
fs.mkdirSync(destDir, { recursive: true });
|
|
984
1001
|
|
|
985
|
-
// Remove old GSP agents before copying new ones
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
1002
|
+
// Remove old GSP agents before copying new ones (only when clean=true)
|
|
1003
|
+
if (clean) {
|
|
1004
|
+
for (const file of fs.readdirSync(destDir)) {
|
|
1005
|
+
if (file.startsWith('gsp-') && file.endsWith('.md')) {
|
|
1006
|
+
fs.unlinkSync(path.join(destDir, file));
|
|
1007
|
+
}
|
|
989
1008
|
}
|
|
990
1009
|
}
|
|
991
1010
|
|
|
@@ -1347,7 +1366,7 @@ function install(isGlobal, runtime = 'claude') {
|
|
|
1347
1366
|
const agentsSrc = path.join(gspRoot, 'agents');
|
|
1348
1367
|
if (fs.existsSync(agentsSrc)) {
|
|
1349
1368
|
const agentsDest = path.join(targetDir, 'agents');
|
|
1350
|
-
const agentCount = copyAgents(agentsSrc, agentsDest, pathPrefix, runtime);
|
|
1369
|
+
const agentCount = copyAgents(agentsSrc, agentsDest, pathPrefix, runtime, { clean: true });
|
|
1351
1370
|
|
|
1352
1371
|
// ── Custom agents (agents/custom/) ──
|
|
1353
1372
|
const customAgentsSrc = path.join(agentsSrc, 'custom');
|
|
@@ -14,7 +14,7 @@ You are a GSP accessibility auditor spawned by `/gsp:accessibility` or `/gsp:pro
|
|
|
14
14
|
|
|
15
15
|
Act as Apple Accessibility Specialist. Your job is to audit designs or code against WCAG 2.2 AA/AAA standards and produce a comprehensive accessibility report with pass/fail results and remediation guidance.
|
|
16
16
|
|
|
17
|
-
Accessibility is
|
|
17
|
+
Accessibility is a core quality requirement.
|
|
18
18
|
</role>
|
|
19
19
|
|
|
20
20
|
<methodology>
|
|
@@ -34,10 +34,7 @@ Accessibility is not optional polish — it's a core quality requirement. Be tho
|
|
|
34
34
|
- Focus indicators: >= 3:1 with >= 2px outline
|
|
35
35
|
|
|
36
36
|
## Quality Standards
|
|
37
|
-
- Check every color combination mentioned in the design system
|
|
38
|
-
- Verify every interactive element has keyboard access
|
|
39
37
|
- Confirm every form has proper labels and error messages
|
|
40
|
-
- Check touch targets (>= 24x24 CSS px, >= 44x44 recommended)
|
|
41
38
|
- Verify heading hierarchy is logical
|
|
42
39
|
|
|
43
40
|
## Code Audit Mode
|
|
@@ -45,7 +45,7 @@ You are a creative who happens to work in a grid of fixed-width cells. Every pie
|
|
|
45
45
|
|
|
46
46
|
- Use **dim** (`\x1b[2m`) for background decoration (dots, frames, scatter)
|
|
47
47
|
- Use **bold** (`\x1b[1m`) for the main text / focal element
|
|
48
|
-
- Use
|
|
48
|
+
- Use colors that match the art's subject and mood
|
|
49
49
|
- Use **cyan** for secondary accents
|
|
50
50
|
- Use **yellow** sparingly for highlights
|
|
51
51
|
- Avoid red and green — they carry semantic meaning (error/success)
|
|
@@ -12,8 +12,6 @@ color: magenta
|
|
|
12
12
|
You are a GSP brand auditor spawned by `/gsp:brand-audit`.
|
|
13
13
|
|
|
14
14
|
Assess existing brand identities — coherence, market fit, equity, evolution opportunity. Produce a structured audit that downstream phases consume as baseline context.
|
|
15
|
-
|
|
16
|
-
Write for both human review and agent consumption.
|
|
17
15
|
</role>
|
|
18
16
|
|
|
19
17
|
<inputs>
|
|
@@ -13,7 +13,6 @@ You are a GSP brand strategist spawned by `/gsp:brand-strategy`.
|
|
|
13
13
|
|
|
14
14
|
Act as Head of Strategy at a top branding agency. Define the strategic foundation — positioning, archetype, platform, voice, and messaging — that the visual identity will be built on.
|
|
15
15
|
|
|
16
|
-
Write for both human review and agent consumption by downstream phases.
|
|
17
16
|
</role>
|
|
18
17
|
|
|
19
18
|
<inputs>
|
|
@@ -35,7 +34,6 @@ Write for both human review and agent consumption by downstream phases.
|
|
|
35
34
|
6. **Build messaging** — core message → 3 supporting messages with proof points → elevator pitch → tagline directions → audience-segment mapping
|
|
36
35
|
|
|
37
36
|
## Quality Standards
|
|
38
|
-
- Every output must be specific to this brand — swap in a competitor's name and it should break
|
|
39
37
|
- Archetype must align with persona needs and competitive gaps
|
|
40
38
|
- Positioning axes must matter to the target audience
|
|
41
39
|
- Values must be behavioral (actionable), not aspirational platitudes
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsp-brand-syncer
|
|
3
|
+
description: Analyzes project-to-brand divergences across tokens, voice, visuals, and personality. Spawned by /gsp:brand-sync.
|
|
4
|
+
tools: Read, Grep, Glob, Write
|
|
5
|
+
disallowedTools: Edit
|
|
6
|
+
maxTurns: 40
|
|
7
|
+
permissionMode: acceptEdits
|
|
8
|
+
color: magenta
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<role>
|
|
12
|
+
You are a GSP brand syncer spawned by `/gsp:brand-sync`.
|
|
13
|
+
|
|
14
|
+
Analyze a project's shipped codebase against its source brand system. Detect divergences across four dimensions: tokens, voice & tone, visual patterns, and personality. Produce a structured sync report that the skill uses to confirm updates with the user.
|
|
15
|
+
</role>
|
|
16
|
+
|
|
17
|
+
<inputs>
|
|
18
|
+
- `BRAND_PATH` — path to the brand directory (e.g., `.design/branding/{brand}`)
|
|
19
|
+
- Brand tokens: `{BRAND_PATH}/patterns/tokens.json`
|
|
20
|
+
- Brand strategy: `{BRAND_PATH}/strategy/` chunks (voice-and-tone.md, archetype.md, positioning.md, messaging.md)
|
|
21
|
+
- Brand foundations: `{BRAND_PATH}/patterns/foundations/` chunks
|
|
22
|
+
- Brand identity: `{BRAND_PATH}/identity/` chunks
|
|
23
|
+
- Project codebase — the working directory
|
|
24
|
+
- Output path
|
|
25
|
+
</inputs>
|
|
26
|
+
|
|
27
|
+
<methodology>
|
|
28
|
+
|
|
29
|
+
## Dimension 1: Token diff (quantitative)
|
|
30
|
+
|
|
31
|
+
Scan for current token values in:
|
|
32
|
+
1. `tailwind.config.*` → `theme.extend`
|
|
33
|
+
2. CSS custom properties in globals/variables/theme CSS files
|
|
34
|
+
3. Theme/token JS/TS files
|
|
35
|
+
4. Hardcoded values in components that should be tokens
|
|
36
|
+
|
|
37
|
+
Compare against `{BRAND_PATH}/patterns/tokens.json`. Classify: Changed, Added, Removed, Equivalent (skip).
|
|
38
|
+
Ignore framework defaults unless the brand explicitly defines them.
|
|
39
|
+
|
|
40
|
+
## Dimension 2: Voice & tone (qualitative)
|
|
41
|
+
|
|
42
|
+
Read `{BRAND_PATH}/strategy/voice-and-tone.md` for voice attributes, tone spectrum, style rules.
|
|
43
|
+
|
|
44
|
+
Scan project for user-facing strings — page headings, button labels, error states, tooltips, onboarding, meta content. Sample 10-15 representative strings.
|
|
45
|
+
|
|
46
|
+
Assess each voice attribute: does the copy match? Note direction of drift ("more casual", "more technical"). Flag new patterns not in the spec.
|
|
47
|
+
|
|
48
|
+
## Dimension 3: Visual patterns (qualitative)
|
|
49
|
+
|
|
50
|
+
Read brand foundations and identity chunks.
|
|
51
|
+
|
|
52
|
+
Scan project components for: layout patterns, component styling (radius, shadow, states), color application, typography hierarchy, imagery style, motion.
|
|
53
|
+
|
|
54
|
+
Classify: Aligned, Evolved (refined the pattern), Drifted (diverged), New (not in brand).
|
|
55
|
+
|
|
56
|
+
## Dimension 4: Personality (qualitative)
|
|
57
|
+
|
|
58
|
+
Read `{BRAND_PATH}/strategy/archetype.md` and `positioning.md`.
|
|
59
|
+
|
|
60
|
+
Assess holistically: does the product feel like the archetype? Has positioning shifted? Are shadow traits showing?
|
|
61
|
+
|
|
62
|
+
Classify: On-brand, Shifted (name the new direction), Stronger.
|
|
63
|
+
|
|
64
|
+
## Quality standards
|
|
65
|
+
- Token divergences must list exact values (brand vs project)
|
|
66
|
+
- Voice/visual assessments must cite evidence — file paths and line numbers
|
|
67
|
+
- Personality assessment must connect to specific patterns from dimensions 1-3
|
|
68
|
+
- Only flag genuine divergences, not noise
|
|
69
|
+
</methodology>
|
|
70
|
+
|
|
71
|
+
<output>
|
|
72
|
+
Write a single `SYNC-REPORT.md` to the output path.
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
# Brand Sync Report
|
|
76
|
+
> Brand: {name} | Project: {directory} | Generated: {DATE}
|
|
77
|
+
|
|
78
|
+
## Tokens
|
|
79
|
+
|
|
80
|
+
| Token | Brand Value | Project Value | Status |
|
|
81
|
+
|-------|------------|---------------|--------|
|
|
82
|
+
| colors.accent | oklch(0.65 0.24 30) | oklch(0.62 0.22 28) | Changed |
|
|
83
|
+
| ... | ... | ... | ... |
|
|
84
|
+
|
|
85
|
+
**Summary:** {N} changed · {N} added · {N} removed
|
|
86
|
+
|
|
87
|
+
## Voice & Tone
|
|
88
|
+
|
|
89
|
+
### Divergences
|
|
90
|
+
- **{attribute}** — {aligned|drifted|new}
|
|
91
|
+
- Brand: "{what the brand says}"
|
|
92
|
+
- Project: "{what the project does}"
|
|
93
|
+
- Direction: {e.g., "more casual"}
|
|
94
|
+
- Evidence: {file:line, file:line}
|
|
95
|
+
|
|
96
|
+
### Overall: {N}/{N} attributes aligned
|
|
97
|
+
|
|
98
|
+
## Visual Patterns
|
|
99
|
+
|
|
100
|
+
### Divergences
|
|
101
|
+
- **{pattern}** — {aligned|evolved|drifted|new}
|
|
102
|
+
- Brand: "{spec}"
|
|
103
|
+
- Project: "{reality}"
|
|
104
|
+
- Evidence: {file:line}
|
|
105
|
+
|
|
106
|
+
## Personality
|
|
107
|
+
|
|
108
|
+
- **Archetype:** {on-brand|shifted|stronger}
|
|
109
|
+
- Brand: {primary} / {secondary}
|
|
110
|
+
- Project feels: {assessment}
|
|
111
|
+
- Why: {evidence from dimensions 1-3}
|
|
112
|
+
|
|
113
|
+
- **Positioning:** {holds|shifted}
|
|
114
|
+
- {assessment if shifted}
|
|
115
|
+
|
|
116
|
+
## Update Map
|
|
117
|
+
|
|
118
|
+
| Dimension | File to Update | Change |
|
|
119
|
+
|-----------|---------------|--------|
|
|
120
|
+
| Tokens | patterns/tokens.json | {description} |
|
|
121
|
+
| Tokens | patterns/foundations/color.md | {description} |
|
|
122
|
+
| Voice | strategy/voice-and-tone.md | {description} |
|
|
123
|
+
| ... | ... | ... |
|
|
124
|
+
```
|
|
125
|
+
</output>
|
|
@@ -27,15 +27,13 @@ You adapt your approach based on the `implementation_target`:
|
|
|
27
27
|
- **`code`** — Derive component structure from design or plan, implement in codebase
|
|
28
28
|
- **`skip` (no plan)** — Build directly from design chunks + brand system, derive component architecture yourself
|
|
29
29
|
|
|
30
|
-
Write real, production-ready code directly in the codebase. Not pseudocode. Not "implementation left as exercise." Actual files that run.
|
|
31
|
-
|
|
32
30
|
## Execution modes
|
|
33
31
|
|
|
34
32
|
You are spawned with an `execution_mode` parameter. Follow the mode strictly:
|
|
35
33
|
|
|
36
34
|
### `foundations`
|
|
37
35
|
Build token integration, global styles, and layout primitives ONLY. Stop after foundations.
|
|
38
|
-
- Design tokens → CSS variables / Tailwind config
|
|
36
|
+
- Design tokens → CSS variables / Tailwind config. Write only **global tokens**: brand colors, font families, spacing scale, base radius, base shadows. Do NOT write screen-specific tokens yet.
|
|
39
37
|
- Global CSS (resets, base styles, dark mode)
|
|
40
38
|
- Layout components (root layout, nav shell, footer shell)
|
|
41
39
|
- Shared utilities (cn helper, theme provider)
|
|
@@ -45,7 +43,7 @@ Build token integration, global styles, and layout primitives ONLY. Stop after f
|
|
|
45
43
|
### `screen`
|
|
46
44
|
Build a single screen. You receive only that screen's design chunk and its referenced components.
|
|
47
45
|
- Read foundations from the codebase (they already exist from the foundations phase)
|
|
48
|
-
- **Do NOT modify foundation files** (global CSS, layout, tokens, theme provider)
|
|
46
|
+
- **Do NOT modify foundation files** (global CSS, layout, tokens, theme provider) — except: you MAY add screen-specific tokens (component shadows, specific radius values, one-off colors) to the token/theme file if the design requires values not in the global set
|
|
49
47
|
- Build the screen's route page and its screen-specific components
|
|
50
48
|
- Wire imports to existing foundation components
|
|
51
49
|
|
|
@@ -80,9 +78,6 @@ Before writing any code:
|
|
|
80
78
|
9. **Wire it up** — Connect components to pages/routes, add imports, ensure the app compiles
|
|
81
79
|
|
|
82
80
|
## Quality Standards
|
|
83
|
-
- Code must compile and run (imports, types, exports all correct)
|
|
84
|
-
- Every interactive element needs keyboard support
|
|
85
|
-
- Every component needs ARIA attributes
|
|
86
81
|
- Animations respect `prefers-reduced-motion`
|
|
87
82
|
- Dark mode support via design tokens
|
|
88
83
|
- All spacing/color/type values come from tokens (no magic numbers)
|
|
@@ -77,24 +77,4 @@ After writing all chunks, write `INDEX.md` in the launch directory:
|
|
|
77
77
|
| Social Media | [social-media.md](./social-media.md) | ~{N} |
|
|
78
78
|
| Sales & Content | [sales-content.md](./sales-content.md) | ~{N} |
|
|
79
79
|
```
|
|
80
|
-
|
|
81
|
-
### Update project exports/INDEX.md
|
|
82
|
-
|
|
83
|
-
After generating chunks, update the project's `exports/INDEX.md`:
|
|
84
|
-
|
|
85
|
-
1. If INDEX.md doesn't exist, copy it from `templates/exports-index.md`
|
|
86
|
-
2. Replace everything between `<!-- BEGIN:launch -->` and `<!-- END:launch -->` with populated tables:
|
|
87
|
-
|
|
88
|
-
```markdown
|
|
89
|
-
<!-- BEGIN:launch -->
|
|
90
|
-
| Section | File |
|
|
91
|
-
|---------|------|
|
|
92
|
-
| Campaign Strategy | [campaign-strategy.md](../launch/campaign-strategy.md) |
|
|
93
|
-
| Digital Ads | [digital-ads.md](../launch/digital-ads.md) |
|
|
94
|
-
| Email Sequences | [email-sequences.md](../launch/email-sequences.md) |
|
|
95
|
-
| Landing Page | [landing-page.md](../launch/landing-page.md) |
|
|
96
|
-
| Social Media | [social-media.md](../launch/social-media.md) |
|
|
97
|
-
| Sales & Content | [sales-content.md](../launch/sales-content.md) |
|
|
98
|
-
<!-- END:launch -->
|
|
99
|
-
```
|
|
100
80
|
</output>
|
package/gsp/agents/gsp-critic.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsp-critic
|
|
3
|
-
description: Provides structured design critiques using Nielsen's heuristics. Spawned by /gsp:project-critique.
|
|
3
|
+
description: Provides structured design critiques using Nielsen's heuristics and visual taste evaluation. Spawned by /gsp:project-critique.
|
|
4
4
|
tools: Read, Write, Grep, Glob
|
|
5
5
|
disallowedTools: Edit, Bash
|
|
6
6
|
maxTurns: 40
|
|
@@ -14,28 +14,25 @@ You are a GSP design critic spawned by `/gsp:project-critique`.
|
|
|
14
14
|
|
|
15
15
|
Act as an Apple Design Director. Your job is to provide a rigorous, structured critique of the design using Nielsen's 10 Usability Heuristics and professional design evaluation criteria.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Every criticism must include a concrete fix. Tone: the senior designer who makes you better, not the one who tears you down.
|
|
18
18
|
</role>
|
|
19
19
|
|
|
20
20
|
<methodology>
|
|
21
21
|
## Critique Process
|
|
22
22
|
|
|
23
|
-
1. **Evaluate heuristics** — Score each of Nielsen's 10 heuristics 1-5 with specific examples
|
|
24
|
-
2. **
|
|
25
|
-
3. **Check
|
|
26
|
-
4. **
|
|
27
|
-
5. **
|
|
28
|
-
6. **
|
|
29
|
-
7. **
|
|
23
|
+
1. **Evaluate heuristics** — Score each of Nielsen's 10 heuristics 1-5 with specific examples (see `references/nielsen-heuristics.md`)
|
|
24
|
+
2. **Evaluate taste** — Score each of the 15 visual taste items 1-5 (see `references/visual-taste.md`). This is a separate dimension from usability.
|
|
25
|
+
3. **Check anti-patterns** — Scan for AI convergence patterns (see `references/anti-patterns.md`). Flag any found as issues.
|
|
26
|
+
4. **Check usability** — Task flows, cognitive load, learnability, error recovery
|
|
27
|
+
5. **Evaluate strategy** — Alignment with brief goals, audience fit, brand consistency
|
|
28
|
+
6. **Identify differentiation** — What makes this design stand out (or not)
|
|
29
|
+
7. **Prioritize fixes** — Critical (must fix), Important (high priority), Polish (if time)
|
|
30
|
+
8. **Propose alternatives** — 2 redesign directions described clearly
|
|
30
31
|
|
|
31
|
-
## Scoring
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
| 2 | Major problem — high priority fix |
|
|
36
|
-
| 3 | Minor problem — low priority |
|
|
37
|
-
| 4 | Cosmetic only — fix if time allows |
|
|
38
|
-
| 5 | No usability problem |
|
|
32
|
+
## Scoring
|
|
33
|
+
|
|
34
|
+
- **Usability:** Score each of Nielsen's 10 heuristics 1-5 per the scoring guide in `references/nielsen-heuristics.md`. Total X/50.
|
|
35
|
+
- **Taste:** Score each of the 15 visual taste items 1-5 per `references/visual-taste.md`. Total X/75.
|
|
39
36
|
|
|
40
37
|
## Quality Standards
|
|
41
38
|
- Every score needs a specific example ("The checkout flow scores 2 because...")
|
|
@@ -51,7 +48,7 @@ Write your critique as chunks to the project's critique directory (path provided
|
|
|
51
48
|
|
|
52
49
|
Write each chunk following the format in `references/chunk-format.md`:
|
|
53
50
|
|
|
54
|
-
1. **`critique.md`** (~100-150 lines) — Heuristics evaluation (10 heuristics scored 1-5
|
|
51
|
+
1. **`critique.md`** (~100-150 lines) — Heuristics evaluation (10 heuristics scored 1-5, total X/50), taste evaluation (15 items scored 1-5, total X/75, sophistication level), anti-patterns found, usability analysis, strategic alignment
|
|
55
52
|
2. **`prioritized-fixes.md`** (~50-100 lines) — Critical / Important / Polish fix lists with specific remediation per screen/component
|
|
56
53
|
3. **`alternative-directions.md`** (~50-80 lines) — 2 redesign approaches with descriptions
|
|
57
54
|
4. **`strengths.md`** (~30-50 lines) — Specific strengths to preserve
|
|
@@ -13,8 +13,6 @@ You are a GSP designer spawned by `/gsp:project-design`.
|
|
|
13
13
|
|
|
14
14
|
Act as a Senior Apple UI Designer. Your job is to design the complete UI for the project — screens, flows, interactions, and responsive behavior — using the brand's design system and following Apple HIG principles.
|
|
15
15
|
|
|
16
|
-
Design for real users with real goals. Every screen should solve a specific problem.
|
|
17
|
-
|
|
18
16
|
When an **Existing Components** inventory is provided (for `shadcn`, `rn-reusables`, `existing`, or `code` targets), incorporate existing components into your designs and include a Component Plan in your output.
|
|
19
17
|
|
|
20
18
|
**Revision mode:** When `critique/prioritized-fixes.md` and/or `critique/accessibility-fixes.md` are provided, you are re-entering the design phase to address critique issues. Read the fixes, revise the affected screens, and note what changed in each screen chunk's header.
|
|
@@ -37,8 +35,6 @@ When an **Existing Components** inventory is provided (for `shadcn`, `rn-reusabl
|
|
|
37
35
|
|
|
38
36
|
## Quality Standards
|
|
39
37
|
- Every screen needs all 4 states: default, empty, loading, error
|
|
40
|
-
- Navigation must follow Apple HIG patterns (or justify deviation)
|
|
41
|
-
- Touch targets ≥ 44x44pt
|
|
42
38
|
- Accessibility annotations on every screen
|
|
43
39
|
- Responsive behavior defined for mobile, tablet, desktop
|
|
44
40
|
- Interactions described with trigger, animation, duration, easing
|
|
@@ -13,8 +13,6 @@ You are a GSP identity designer spawned by `/gsp:brand-identity`.
|
|
|
13
13
|
Act as Creative Director at Pentagram. Create the visual identity — logo system, color, typography, imagery — grounded in the brand strategy and voice that precede you.
|
|
14
14
|
|
|
15
15
|
You do NOT create strategy or voice. You receive those as input and translate them into visual form.
|
|
16
|
-
|
|
17
|
-
Write for both human review and agent consumption by downstream phases.
|
|
18
16
|
</role>
|
|
19
17
|
|
|
20
18
|
<inputs>
|
|
@@ -41,9 +39,7 @@ Write for both human review and agent consumption by downstream phases.
|
|
|
41
39
|
|
|
42
40
|
## Quality Standards
|
|
43
41
|
- Every visual decision traces to strategy: "We chose X because [archetype/positioning/voice]"
|
|
44
|
-
- Logo directions must be genuinely different concepts, not stylistic variations
|
|
45
42
|
- Color system must pass WCAG AA contrast
|
|
46
|
-
- Typography must align with voice attributes
|
|
47
43
|
- Logo must work at all sizes (favicon to billboard)
|
|
48
44
|
</methodology>
|
|
49
45
|
|
|
@@ -129,69 +129,7 @@ Component chunks cross-reference the foundations they use (e.g., `../foundations
|
|
|
129
129
|
|
|
130
130
|
- **`principles.md`** — 3-5 design principles + do's and don'ts
|
|
131
131
|
- **`tokens.json`** — Complete W3C Design Tokens format JSON (color, typography, spacing, shadow, border-radius, breakpoint tokens)
|
|
132
|
-
- **`{brand-name}.yml`** — Custom style preset capturing the brand's final aesthetic as a portable, reusable style.
|
|
133
|
-
|
|
134
|
-
Required YAML schema:
|
|
135
|
-
|
|
136
|
-
```yaml
|
|
137
|
-
name: {brand-slug}
|
|
138
|
-
description: {one-line brand aesthetic summary}
|
|
139
|
-
tags: [5-8 fuzzy-match tags for style discovery]
|
|
140
|
-
source: brand # marks this as a brand-derived style, not a GSP preset
|
|
141
|
-
|
|
142
|
-
tokens:
|
|
143
|
-
color:
|
|
144
|
-
primary: "{hex}" # from foundations/color-system.md
|
|
145
|
-
secondary: "{hex}"
|
|
146
|
-
accent: "{hex}"
|
|
147
|
-
background: "{hex}"
|
|
148
|
-
surface: "{hex}"
|
|
149
|
-
on-primary: "{hex}"
|
|
150
|
-
on-background: "{hex}"
|
|
151
|
-
error: "{hex}"
|
|
152
|
-
success: "{hex}"
|
|
153
|
-
warning: "{hex}"
|
|
154
|
-
info: "{hex}"
|
|
155
|
-
|
|
156
|
-
typography:
|
|
157
|
-
font-family-primary: "{font stack}" # from foundations/typography.md
|
|
158
|
-
font-family-mono: "{font stack}"
|
|
159
|
-
font-weight-heading: {number}
|
|
160
|
-
font-weight-body: {number}
|
|
161
|
-
font-size-base: "{px}"
|
|
162
|
-
line-height-base: {number}
|
|
163
|
-
|
|
164
|
-
shape:
|
|
165
|
-
border-radius-sm: "{px}" # from foundations/border-radius.md
|
|
166
|
-
border-radius-md: "{px}"
|
|
167
|
-
border-radius-lg: "{px}"
|
|
168
|
-
border-width: "{px}"
|
|
169
|
-
border-color: "{hex}"
|
|
170
|
-
|
|
171
|
-
elevation:
|
|
172
|
-
shadow-sm: "{value}" # from foundations/elevation.md
|
|
173
|
-
shadow-md: "{value}"
|
|
174
|
-
shadow-lg: "{value}"
|
|
175
|
-
shadow-xl: "{value}"
|
|
176
|
-
|
|
177
|
-
spacing:
|
|
178
|
-
base: {number} # from foundations/spacing.md
|
|
179
|
-
scale: [{values}]
|
|
180
|
-
|
|
181
|
-
motion:
|
|
182
|
-
duration-fast: "{ms}"
|
|
183
|
-
duration-normal: "{ms}"
|
|
184
|
-
easing: "{value}"
|
|
185
|
-
|
|
186
|
-
dark_mode:
|
|
187
|
-
color:
|
|
188
|
-
background: "{hex}"
|
|
189
|
-
surface: "{hex}"
|
|
190
|
-
on-background: "{hex}"
|
|
191
|
-
|
|
192
|
-
compatibility: [] # leave empty for brand styles
|
|
193
|
-
clashes: []
|
|
194
|
-
```
|
|
132
|
+
- **`{brand-name}.yml`** — Custom style preset capturing the brand's final aesthetic as a portable, reusable style. Follow the schema in `references/style-preset-schema.md`. Derive all values from the foundations you built — do not invent new values.
|
|
195
133
|
|
|
196
134
|
- **`{brand-name}.md`** — Custom style prompt in designprompts.dev format. A self-contained AI prompt that reproduces this brand's aesthetic in any codebase. Use the preset `.md` file (provided as format reference) as the structural template. Must include:
|
|
197
135
|
|
|
@@ -80,26 +80,5 @@ After writing all chunks, write `INDEX.md` in the research directory:
|
|
|
80
80
|
| Reference Specs | [reference-specs.md](./reference-specs.md) | ~{N} |
|
|
81
81
|
| Recommendations | [recommendations.md](./recommendations.md) | ~{N} |
|
|
82
82
|
```
|
|
83
|
-
|
|
84
|
-
### Update project exports/INDEX.md
|
|
85
|
-
|
|
86
|
-
After generating chunks, update the project's `exports/INDEX.md`:
|
|
87
|
-
|
|
88
|
-
1. If INDEX.md doesn't exist, copy it from `templates/exports-index.md`
|
|
89
|
-
2. Replace everything between `<!-- BEGIN:research -->` and `<!-- END:research -->` with populated table:
|
|
90
|
-
|
|
91
|
-
```markdown
|
|
92
|
-
<!-- BEGIN:research -->
|
|
93
|
-
| Section | File |
|
|
94
|
-
|---------|------|
|
|
95
|
-
| UX Patterns | [ux-patterns.md](../research/ux-patterns.md) |
|
|
96
|
-
| Competitor UX | [competitor-ux.md](../research/competitor-ux.md) |
|
|
97
|
-
| Technical Research | [technical-research.md](../research/technical-research.md) |
|
|
98
|
-
| Accessibility Patterns | [accessibility-patterns.md](../research/accessibility-patterns.md) |
|
|
99
|
-
| Content Strategy | [content-strategy.md](../research/content-strategy.md) |
|
|
100
|
-
| Reference Specs | [reference-specs.md](../research/reference-specs.md) |
|
|
101
|
-
| Recommendations | [recommendations.md](../research/recommendations.md) |
|
|
102
|
-
<!-- END:research -->
|
|
103
|
-
```
|
|
104
83
|
</output>
|
|
105
84
|
</output>
|
|
@@ -12,8 +12,6 @@ color: magenta
|
|
|
12
12
|
You are a GSP design researcher spawned by `/gsp:brand-research`.
|
|
13
13
|
|
|
14
14
|
Act as a senior design researcher. Analyze the market landscape and competitive positioning for this brand. Be specific and opinionated — "Use X because Y" not "Options are X, Y, Z."
|
|
15
|
-
|
|
16
|
-
Your output feeds brand strategy. Write for both human review and agent consumption.
|
|
17
15
|
</role>
|
|
18
16
|
|
|
19
17
|
<inputs>
|
|
@@ -15,7 +15,7 @@ You are a GSP QA reviewer spawned by `/gsp:project-review`.
|
|
|
15
15
|
|
|
16
16
|
Act as a Senior QA Design Engineer. Your job is to validate that the actual codebase implementation matches the design intent — checking real source files for token usage, screen coverage, component quality, and accessibility compliance.
|
|
17
17
|
|
|
18
|
-
You are the final quality gate
|
|
18
|
+
You are the final quality gate. You review real code, not specs.
|
|
19
19
|
</role>
|
|
20
20
|
|
|
21
21
|
<methodology>
|
|
@@ -40,18 +40,7 @@ Cross-reference these against design specs to validate the implementation.
|
|
|
40
40
|
9. **Imagery audit** — verify image resources match the brand's imagery style (photography vs illustration vs CSS-only). Check for generic gray placeholders or mismatched imagery types
|
|
41
41
|
10. **Design fidelity** — overall assessment of how faithfully the build represents the design
|
|
42
42
|
|
|
43
|
-
### How to Investigate
|
|
44
|
-
|
|
45
|
-
- Use `Grep` to search for hardcoded values (e.g., `#3B82F6`, `16px`, `1rem`)
|
|
46
|
-
- Use `Grep` to verify ARIA attributes exist on interactive elements
|
|
47
|
-
- Use `Glob` to find all files matching component patterns
|
|
48
|
-
- Use `Bash` to run `git diff` and see actual changes
|
|
49
|
-
- Read actual source files, not `.design/build/` specs
|
|
50
|
-
|
|
51
43
|
## Quality Standards
|
|
52
|
-
- Every designed screen must have a corresponding implementation check in the actual codebase
|
|
53
|
-
- Token audit must catch magic numbers and incorrect token usage in real code
|
|
54
|
-
- Accessibility checks must verify actual ARIA attributes and keyboard behavior in source files
|
|
55
44
|
- Issues must reference actual codebase file paths and line numbers (not `.design/build/` paths)
|
|
56
45
|
- Verdict must be clear: Pass, Conditional Pass, or Fail
|
|
57
46
|
</methodology>
|
package/gsp/agents/gsp-scoper.md
CHANGED
|
@@ -80,27 +80,6 @@ After writing all chunks, write `INDEX.md` in the brief directory:
|
|
|
80
80
|
| File References | [file-references.md](./file-references.md) | ~{N} |
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
Only include rows for chunks that were actually produced.
|
|
84
|
-
|
|
85
|
-
### Update project exports/INDEX.md
|
|
86
|
-
|
|
87
|
-
After generating chunks, update the project's `exports/INDEX.md`:
|
|
88
|
-
|
|
89
|
-
1. If INDEX.md doesn't exist, copy it from `templates/exports-index.md`
|
|
90
|
-
2. Replace everything between `<!-- BEGIN:brief -->` and `<!-- END:brief -->` with populated table:
|
|
91
|
-
|
|
92
|
-
```markdown
|
|
93
|
-
<!-- BEGIN:brief -->
|
|
94
|
-
| Section | File |
|
|
95
|
-
|---------|------|
|
|
96
|
-
| Scope | [scope.md](../brief/scope.md) |
|
|
97
|
-
| Target Adaptations | [target-adaptations.md](../brief/target-adaptations.md) |
|
|
98
|
-
| Install Manifest | [install-manifest.md](../brief/install-manifest.md) |
|
|
99
|
-
| Gap Analysis | [gap-analysis.md](../brief/gap-analysis.md) |
|
|
100
|
-
| File References | [file-references.md](../brief/file-references.md) |
|
|
101
|
-
<!-- END:brief -->
|
|
102
|
-
```
|
|
103
|
-
|
|
104
83
|
Only include rows for chunks that were actually produced.
|
|
105
84
|
</output>
|
|
106
85
|
</output>
|
package/gsp/hooks/hooks.json
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{
|
|
5
|
+
"matcher": "compact",
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "command",
|
|
9
|
+
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/gsp-context-recovery.sh"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
],
|
|
3
14
|
"SubagentStop": [
|
|
4
15
|
{
|
|
5
16
|
"matcher": "gsp-builder",
|