get-shit-pretty 0.6.0 → 0.6.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/README.md +5 -4
- package/bin/install.js +30 -1
- package/gsp/agents/gsp-identity-designer.md +5 -8
- package/gsp/hooks/hooks.json +54 -0
- package/gsp/references/questioning.md +17 -9
- package/gsp/skills/get-shit-pretty/SKILL.md +2 -0
- package/gsp/skills/gsp-accessibility/SKILL.md +2 -0
- package/gsp/skills/gsp-accessibility-audit/SKILL.md +3 -0
- package/gsp/skills/gsp-add-reference/SKILL.md +1 -0
- package/gsp/skills/gsp-art/SKILL.md +1 -0
- package/gsp/skills/gsp-brand-audit/SKILL.md +8 -3
- package/gsp/skills/gsp-brand-identity/SKILL.md +20 -14
- package/gsp/skills/gsp-brand-patterns/SKILL.md +41 -26
- package/gsp/skills/gsp-brand-refine/SKILL.md +2 -0
- package/gsp/skills/gsp-brand-research/SKILL.md +3 -0
- package/gsp/skills/gsp-brand-strategy/SKILL.md +8 -2
- package/gsp/skills/gsp-brand-sync/SKILL.md +3 -0
- package/gsp/skills/gsp-design-system/SKILL.md +1 -0
- package/gsp/skills/gsp-doctor/SKILL.md +20 -0
- package/gsp/skills/gsp-help/SKILL.md +1 -0
- package/gsp/skills/gsp-launch/SKILL.md +11 -2
- package/gsp/skills/gsp-palette/SKILL.md +2 -0
- package/gsp/skills/gsp-pretty/SKILL.md +1 -0
- package/gsp/skills/gsp-progress/SKILL.md +1 -0
- package/gsp/skills/gsp-project-brief/SKILL.md +10 -9
- package/gsp/skills/gsp-project-build/SKILL.md +15 -5
- package/gsp/skills/gsp-project-critique/SKILL.md +34 -10
- package/gsp/skills/gsp-project-design/SKILL.md +30 -7
- package/gsp/skills/gsp-project-research/SKILL.md +11 -9
- package/gsp/skills/gsp-project-review/SKILL.md +3 -0
- package/gsp/skills/gsp-scaffold/SKILL.md +1 -0
- package/gsp/skills/gsp-start/SKILL.md +109 -99
- package/gsp/skills/gsp-style/SKILL.md +2 -0
- package/gsp/skills/gsp-typescale/SKILL.md +2 -0
- package/gsp/skills/gsp-update/SKILL.md +53 -23
- package/gsp/templates/branding/config.json +2 -1
- package/gsp/templates/phases/identity.md +2 -6
- package/gsp/templates/projects/config.json +1 -1
- package/package.json +12 -14
package/README.md
CHANGED
|
@@ -183,6 +183,7 @@ Create marketing campaign assets — landing page copy, social media content, la
|
|
|
183
183
|
| `/gsp:brand-strategy` | Define archetype, positioning, personality, voice, messaging |
|
|
184
184
|
| `/gsp:brand-identity` | Create visual identity — logo, color, type |
|
|
185
185
|
| `/gsp:brand-patterns` | Build design system — tokens, components |
|
|
186
|
+
| `/gsp:brand-refine` | Surgical token and palette adjustments mid-project |
|
|
186
187
|
|
|
187
188
|
### Project
|
|
188
189
|
|
|
@@ -200,6 +201,7 @@ Create marketing campaign assets — landing page copy, social media content, la
|
|
|
200
201
|
|
|
201
202
|
| Command | What it does |
|
|
202
203
|
|---------|--------------|
|
|
204
|
+
| `/gsp:accessibility-audit` | Full WCAG 2.2 AA accessibility audit |
|
|
203
205
|
| `/gsp:add-reference` | Add reference material to a project |
|
|
204
206
|
| `/gsp:doctor` | Check project health |
|
|
205
207
|
| `/gsp:update` | Update GSP to latest version |
|
|
@@ -240,7 +242,7 @@ GSP works across all major AI coding tools. The installer converts Claude Code's
|
|
|
240
242
|
|
|
241
243
|
| Feature | Claude Code | OpenCode | Gemini CLI | Codex CLI |
|
|
242
244
|
|---------|:-----------:|:--------:|:----------:|:---------:|
|
|
243
|
-
| Skills |
|
|
245
|
+
| Skills | 30 | 30 | 30 | 30 |
|
|
244
246
|
| Agents | 15 | 15 | 15 (experimental) | — |
|
|
245
247
|
| Slash syntax | `/gsp:command` | `/gsp-command` | `/gsp:command` | `$gsp-command` |
|
|
246
248
|
| Prompts + templates | Yes | Yes | Yes | Yes |
|
|
@@ -329,8 +331,7 @@ get-shit-pretty/
|
|
|
329
331
|
├── scripts/ Hook scripts and utilities
|
|
330
332
|
├── gsp/ Source of truth for all content
|
|
331
333
|
│ ├── agents/ 15 subagents (gsp-*.md)
|
|
332
|
-
│ ├──
|
|
333
|
-
│ ├── skills/ 24 skills (*/SKILL.md — primary)
|
|
334
|
+
│ ├── skills/ 30 skills (*/SKILL.md)
|
|
334
335
|
│ ├── hooks/ Plugin-level hooks (hooks.json)
|
|
335
336
|
│ ├── prompts/ 12 agent system prompts
|
|
336
337
|
│ ├── templates/ Config, state, brief, roadmap templates
|
|
@@ -343,7 +344,7 @@ get-shit-pretty/
|
|
|
343
344
|
└── CLAUDE.md AI agent instructions for this repo
|
|
344
345
|
```
|
|
345
346
|
|
|
346
|
-
|
|
347
|
+
The installer reads from `gsp/` and writes to each runtime's config directory.
|
|
347
348
|
|
|
348
349
|
---
|
|
349
350
|
|
package/bin/install.js
CHANGED
|
@@ -605,6 +605,8 @@ function convertClaudeSkillToOpencode(content, skillName) {
|
|
|
605
605
|
if (trimmed.startsWith('color:')) { inList = false; continue; }
|
|
606
606
|
if (trimmed.startsWith('context:')) { inList = false; continue; }
|
|
607
607
|
if (trimmed.startsWith('agent:')) { inList = false; continue; }
|
|
608
|
+
if (trimmed.startsWith('model:')) { inList = false; continue; }
|
|
609
|
+
if (trimmed.startsWith('effort:')) { inList = false; continue; }
|
|
608
610
|
// Skip list items under dropped fields
|
|
609
611
|
if (inList) {
|
|
610
612
|
if (trimmed.startsWith('- ')) continue;
|
|
@@ -783,6 +785,8 @@ function convertClaudeSkillToGemini(content, skillName) {
|
|
|
783
785
|
if (trimmed.startsWith('color:')) { inList = false; continue; }
|
|
784
786
|
if (trimmed.startsWith('context:')) { inList = false; continue; }
|
|
785
787
|
if (trimmed.startsWith('agent:')) { inList = false; continue; }
|
|
788
|
+
if (trimmed.startsWith('model:')) { inList = false; continue; }
|
|
789
|
+
if (trimmed.startsWith('effort:')) { inList = false; continue; }
|
|
786
790
|
if (inList) {
|
|
787
791
|
if (trimmed.startsWith('- ')) continue;
|
|
788
792
|
else if (trimmed && !trimmed.startsWith('-')) inList = false;
|
|
@@ -858,6 +862,8 @@ function convertClaudeSkillToCodex(content, skillName) {
|
|
|
858
862
|
if (trimmed.startsWith('color:')) { inList = false; continue; }
|
|
859
863
|
if (trimmed.startsWith('context:')) { inList = false; continue; }
|
|
860
864
|
if (trimmed.startsWith('agent:')) { inList = false; continue; }
|
|
865
|
+
if (trimmed.startsWith('model:')) { inList = false; continue; }
|
|
866
|
+
if (trimmed.startsWith('effort:')) { inList = false; continue; }
|
|
861
867
|
if (inList) {
|
|
862
868
|
if (trimmed.startsWith('- ')) continue;
|
|
863
869
|
else if (trimmed && !trimmed.startsWith('-')) inList = false;
|
|
@@ -915,6 +921,7 @@ function copyOpencodeSkills(srcDir, destDir, pathPrefix) {
|
|
|
915
921
|
content = content.replace(/\.\/\.claude\//g, './.opencode/');
|
|
916
922
|
content = convertClaudeSkillToOpencode(content, skillName);
|
|
917
923
|
fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
|
|
924
|
+
copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
|
|
918
925
|
count++;
|
|
919
926
|
}
|
|
920
927
|
|
|
@@ -946,6 +953,7 @@ function copyCodexSkillsFromSource(srcDir, destDir, pathPrefix) {
|
|
|
946
953
|
content = content.replace(/~\/\.claude\//g, pathPrefix);
|
|
947
954
|
content = convertClaudeSkillToCodex(content, skillName);
|
|
948
955
|
fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
|
|
956
|
+
copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
|
|
949
957
|
count++;
|
|
950
958
|
}
|
|
951
959
|
return count;
|
|
@@ -986,6 +994,7 @@ function copyGeminiSkills(srcDir, destDir, pathPrefix) {
|
|
|
986
994
|
content = content.replace(/\.\/\.claude\//g, './.gemini/');
|
|
987
995
|
content = convertClaudeSkillToGemini(content, skillName);
|
|
988
996
|
fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
|
|
997
|
+
copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
|
|
989
998
|
count++;
|
|
990
999
|
}
|
|
991
1000
|
return count;
|
|
@@ -1030,6 +1039,24 @@ function copyAgents(srcDir, destDir, pathPrefix, runtime, { clean = false } = {}
|
|
|
1030
1039
|
* Copy Claude Code skills (global install path — no body conversion, only path replacement).
|
|
1031
1040
|
* Returns skill count.
|
|
1032
1041
|
*/
|
|
1042
|
+
/**
|
|
1043
|
+
* Recursively copy sibling files in a skill directory (everything except SKILL.md).
|
|
1044
|
+
* All sibling files are copied verbatim — no path replacement applied.
|
|
1045
|
+
*/
|
|
1046
|
+
function copySiblingFiles(srcDir, destDir, pathPrefix) {
|
|
1047
|
+
for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
|
|
1048
|
+
if (entry.name === 'SKILL.md') continue; // already handled by caller
|
|
1049
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
1050
|
+
const destPath = path.join(destDir, entry.name);
|
|
1051
|
+
if (entry.isDirectory()) {
|
|
1052
|
+
fs.mkdirSync(destPath, { recursive: true });
|
|
1053
|
+
copySiblingFiles(srcPath, destPath, pathPrefix);
|
|
1054
|
+
} else {
|
|
1055
|
+
fs.copyFileSync(srcPath, destPath);
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1033
1060
|
function copyClaudeSkills(srcDir, destDir, pathPrefix) {
|
|
1034
1061
|
fs.mkdirSync(destDir, { recursive: true });
|
|
1035
1062
|
|
|
@@ -1045,11 +1072,13 @@ function copyClaudeSkills(srcDir, destDir, pathPrefix) {
|
|
|
1045
1072
|
if (!dir.isDirectory()) continue;
|
|
1046
1073
|
const skillMd = path.join(srcDir, dir.name, 'SKILL.md');
|
|
1047
1074
|
if (!fs.existsSync(skillMd)) continue;
|
|
1048
|
-
const
|
|
1075
|
+
const skillName = dir.name.startsWith('gsp-') ? dir.name : `gsp-${dir.name}`;
|
|
1076
|
+
const destSkillDir = path.join(destDir, skillName);
|
|
1049
1077
|
fs.mkdirSync(destSkillDir, { recursive: true });
|
|
1050
1078
|
let content = fs.readFileSync(skillMd, 'utf8');
|
|
1051
1079
|
content = content.replace(/~\/\.claude\//g, pathPrefix);
|
|
1052
1080
|
fs.writeFileSync(path.join(destSkillDir, 'SKILL.md'), content);
|
|
1081
|
+
copySiblingFiles(path.join(srcDir, dir.name), destSkillDir, pathPrefix);
|
|
1053
1082
|
skillCount++;
|
|
1054
1083
|
}
|
|
1055
1084
|
return skillCount;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsp-identity-designer
|
|
3
3
|
description: Creates visual identity — logo, color, typography, imagery. Spawned by /gsp:brand-identity.
|
|
4
|
-
tools: Read, Write, Edit, Bash, Grep, Glob,
|
|
5
|
-
maxTurns:
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob, WebFetch
|
|
5
|
+
maxTurns: 30
|
|
6
6
|
permissionMode: acceptEdits
|
|
7
7
|
color: magenta
|
|
8
8
|
---
|
|
@@ -30,12 +30,11 @@ You do NOT create strategy or voice. You receive those as input and translate th
|
|
|
30
30
|
1. **Absorb inputs** — strategy chunks for strategic grounding, voice-and-tone for verbal-visual alignment, mood board for visual starting point
|
|
31
31
|
1.5. **Seed from style base** — if style base preset files are provided, read the `.yml` for token values (palette, typography, spacing) and the `.md` for design philosophy. Use these as vocabulary, not constraint — adapt freely where the brand demands it. The preset is a starting palette and type direction, not a rulebook.
|
|
32
32
|
2. **Design logo system** — 3 distinct directions, each expressing strategy differently. For each: concept, rationale (connects to archetype + positioning), variations, usage rules
|
|
33
|
-
3. **Build color system** — primary, secondary, accent, semantic. Each color needs strategic rationale. Include Hex
|
|
34
|
-
4. **Generate palettes** — use tints.dev API: `https://tints.dev/api/{colorName}/{hexWithout#}`. Store in `identity/palettes.json`
|
|
33
|
+
3. **Build color system** — primary, secondary, accent, neutral, semantic. Each color needs strategic rationale. Include Hex and RGB. Map dark mode. Calculate WCAG AA contrast. Semantic colors (success, warning, error, info) are standard values — define them in color-system.md but do NOT generate tints.dev palettes for them.
|
|
34
|
+
4. **Generate palettes** — use tints.dev API: `https://tints.dev/api/{colorName}/{hexWithout#}`. **Only for brand colors (primary, secondary, accent) and neutrals.** Store in `identity/palettes.json`
|
|
35
35
|
5. **Define typography** — primary + secondary typefaces. Connect choices to voice: "We chose X because our voice is Y"
|
|
36
36
|
6. **Specify imagery** — photography, illustration, iconography. Connected to archetype and brand essence
|
|
37
37
|
7. **Show applications** — brand in context across key touchpoints
|
|
38
|
-
8. **Outline brand book** — 20-page structure
|
|
39
38
|
|
|
40
39
|
## Quality Standards
|
|
41
40
|
- Every visual decision traces to strategy: "We chose X because [archetype/positioning/voice]"
|
|
@@ -44,7 +43,7 @@ You do NOT create strategy or voice. You receive those as input and translate th
|
|
|
44
43
|
</methodology>
|
|
45
44
|
|
|
46
45
|
<output>
|
|
47
|
-
Write
|
|
46
|
+
Write 5 chunks + palettes.json + INDEX.md to the identity directory (path provided by the skill that spawned you).
|
|
48
47
|
|
|
49
48
|
Each chunk follows `references/chunk-format.md`.
|
|
50
49
|
|
|
@@ -53,7 +52,6 @@ Each chunk follows `references/chunk-format.md`.
|
|
|
53
52
|
3. **`typography.md`** (~60-80 lines) — primary + secondary typefaces with rationale, type scale, responsive behavior
|
|
54
53
|
4. **`imagery-style.md`** (~50-70 lines) — photography, illustration, iconography guidelines
|
|
55
54
|
5. **`brand-applications.md`** (~50-70 lines) — key touchpoints showing brand in use
|
|
56
|
-
6. **`brand-book.md`** (~40-50 lines) — 20-page outline
|
|
57
55
|
|
|
58
56
|
### palettes.json
|
|
59
57
|
tints.dev OKLCH palettes in the identity directory.
|
|
@@ -71,7 +69,6 @@ tints.dev OKLCH palettes in the identity directory.
|
|
|
71
69
|
| Typography | [typography.md](./typography.md) | ~{N} |
|
|
72
70
|
| Imagery Style | [imagery-style.md](./imagery-style.md) | ~{N} |
|
|
73
71
|
| Brand Applications | [brand-applications.md](./brand-applications.md) | ~{N} |
|
|
74
|
-
| Brand Book | [brand-book.md](./brand-book.md) | ~{N} |
|
|
75
72
|
| Palettes | [palettes.json](./palettes.json) | — |
|
|
76
73
|
```
|
|
77
74
|
</output>
|
package/gsp/hooks/hooks.json
CHANGED
|
@@ -12,6 +12,60 @@
|
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
14
|
"SubagentStop": [
|
|
15
|
+
{
|
|
16
|
+
"matcher": "gsp-designer",
|
|
17
|
+
"hooks": [
|
|
18
|
+
{
|
|
19
|
+
"type": "prompt",
|
|
20
|
+
"prompt": "The gsp-designer agent just finished. Verify: (1) at least one design/screen-*.md chunk was written, (2) design/INDEX.md was written, (3) design/preview.html was written. Report any missing deliverables to the user."
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"matcher": "gsp-critic",
|
|
26
|
+
"hooks": [
|
|
27
|
+
{
|
|
28
|
+
"type": "prompt",
|
|
29
|
+
"prompt": "The gsp-critic agent just finished. Verify: (1) critique/critique.md was written with a heuristics score, (2) critique/prioritized-fixes.md was written, (3) critique/strengths.md was written. Report any missing deliverables to the user."
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"matcher": "gsp-identity-designer",
|
|
35
|
+
"hooks": [
|
|
36
|
+
{
|
|
37
|
+
"type": "prompt",
|
|
38
|
+
"prompt": "The gsp-identity-designer agent just finished. Verify: (1) identity/INDEX.md was written, (2) identity/color-system.md exists, (3) identity/typography.md exists, (4) identity/palettes.json exists. Report any missing deliverables to the user."
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"matcher": "gsp-pattern-architect",
|
|
44
|
+
"hooks": [
|
|
45
|
+
{
|
|
46
|
+
"type": "prompt",
|
|
47
|
+
"prompt": "The gsp-pattern-architect agent just finished. Verify: (1) tokens.json was written, (2) INDEX.md was written, (3) at least one foundations/ chunk exists. Report any missing deliverables to the user."
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"matcher": "gsp-scoper",
|
|
53
|
+
"hooks": [
|
|
54
|
+
{
|
|
55
|
+
"type": "prompt",
|
|
56
|
+
"prompt": "The gsp-scoper agent just finished. Verify: (1) brief/scope.md was written, (2) brief/target-adaptations.md was written, (3) brief/INDEX.md was written. Report any missing deliverables to the user."
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"matcher": "gsp-campaign-director",
|
|
62
|
+
"hooks": [
|
|
63
|
+
{
|
|
64
|
+
"type": "prompt",
|
|
65
|
+
"prompt": "The gsp-campaign-director agent just finished. Verify: (1) launch/campaign-strategy.md was written, (2) launch/INDEX.md was written. Report any missing deliverables to the user."
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
},
|
|
15
69
|
{
|
|
16
70
|
"matcher": "gsp-builder",
|
|
17
71
|
"hooks": [
|
|
@@ -5,10 +5,18 @@ Guide brief-gathering conversations — used by `/gsp:start` for both brand brie
|
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## Core Rules
|
|
9
|
+
|
|
10
|
+
**One decision per question.** Every question must be its own `AskUserQuestion` call. Never group multiple questions into a single message. Ask one thing, wait for the answer, use it to inform the next question.
|
|
11
|
+
|
|
12
|
+
**Never re-ask what the user already answered.** If information was gathered in a prior phase and is available in BRIEF.md or other artifacts, use it — don't ask again. If you need to validate stale information, confirm it ("I see X from earlier — still accurate?") rather than asking from scratch. Each phase reads the prior phase's output; the user should never feel like they're repeating themselves.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
8
16
|
## Question Flow
|
|
9
17
|
|
|
10
18
|
### Phase 1: Context (Who & Why)
|
|
11
|
-
Start broad, then narrow.
|
|
19
|
+
Start broad, then narrow. Each is a separate `AskUserQuestion`.
|
|
12
20
|
|
|
13
21
|
1. **What** is this project? (app, website, rebrand, campaign)
|
|
14
22
|
2. **Who** is it for? (audience demographics, psychographics)
|
|
@@ -41,11 +49,11 @@ Start broad, then narrow.
|
|
|
41
49
|
|
|
42
50
|
## Questioning Techniques
|
|
43
51
|
|
|
44
|
-
###
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
### One at a Time
|
|
53
|
+
Ask each question as its own `AskUserQuestion` call. Wait for the answer before asking the next. Use each answer to decide whether to skip, reframe, or drill into the next question.
|
|
54
|
+
|
|
55
|
+
### Adapt and Skip
|
|
56
|
+
Don't follow the list rigidly. If an early answer reveals enough context, skip later questions. If an answer is surprising, follow up before moving on. The sequence is a guide, not a script.
|
|
49
57
|
|
|
50
58
|
### Follow-Up Patterns
|
|
51
59
|
- **"Tell me more about..."** — When an answer is surface-level
|
|
@@ -66,9 +74,9 @@ Don't ask what you can infer:
|
|
|
66
74
|
- Reserve prose questions for open-ended exploration where you genuinely don't know the option space
|
|
67
75
|
|
|
68
76
|
### When to Use `AskUserQuestion` vs Prose
|
|
69
|
-
- **
|
|
70
|
-
- **
|
|
71
|
-
- **Rule of thumb:** if you can write 2-4 meaningful options with descriptions, use `AskUserQuestion`. If you'd be guessing at what the options should be, use
|
|
77
|
+
- **Always use `AskUserQuestion`** — this is the default for every user-facing question
|
|
78
|
+
- **Prose is only for** follow-up clarifications where the answer space is truly unbounded and you cannot write meaningful options
|
|
79
|
+
- **Rule of thumb:** if you can write 2-4 meaningful options with descriptions, use `AskUserQuestion`. If you'd be guessing at what the options should be, still use `AskUserQuestion` with an open-ended framing.
|
|
72
80
|
|
|
73
81
|
### Knowing When You Have Enough
|
|
74
82
|
A brief is complete when you can answer:
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: get-shit-pretty
|
|
3
3
|
description: "Design engineering for AI coding tools. Full pipeline: brand research, strategy, identity, design system, UI design, critique, accessibility audit, build, and launch. Runs specialized agents with Apple HIG, Nielsen's heuristics, WCAG 2.2 AA, and design token standards baked in."
|
|
4
4
|
user-invocable: false
|
|
5
|
+
model: opus
|
|
6
|
+
effort: high
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
# Get Shit Pretty
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: accessibility
|
|
3
3
|
description: Quick contrast checks and token WCAG audits — inline, no agent
|
|
4
4
|
user-invocable: true
|
|
5
|
+
model: sonnet
|
|
5
6
|
allowed-tools:
|
|
6
7
|
- Read
|
|
7
8
|
- Write
|
|
@@ -30,6 +31,7 @@ Run lightweight accessibility checks inline — contrast ratio lookups and token
|
|
|
30
31
|
|
|
31
32
|
<rules>
|
|
32
33
|
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
34
|
+
- One decision per question — never batch multiple questions in a single message
|
|
33
35
|
- Quick check mode (`--check`) produces display output only — no files written
|
|
34
36
|
- Token audit mode runs inline — no agent spawned
|
|
35
37
|
- Default conformance level is AA unless overridden by `--level AAA` or config
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: accessibility-audit
|
|
3
3
|
description: Full WCAG accessibility audit — design screens, codebase, or generate compliance statement
|
|
4
4
|
user-invocable: true
|
|
5
|
+
model: opus
|
|
6
|
+
effort: high
|
|
5
7
|
allowed-tools:
|
|
6
8
|
- Read
|
|
7
9
|
- Write
|
|
@@ -37,6 +39,7 @@ Run full accessibility audits — design screen reviews, codebase ARIA/keyboard/
|
|
|
37
39
|
|
|
38
40
|
<rules>
|
|
39
41
|
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
42
|
+
- One decision per question — never batch multiple questions in a single message
|
|
40
43
|
- Statement mode reads prior audit results — fails gracefully if none exist
|
|
41
44
|
- Default conformance level is AA unless overridden by `--level AAA` or config
|
|
42
45
|
- Foundation chunks follow `references/chunk-format.md` format
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: brand-audit
|
|
3
3
|
description: Audit an existing brand before evolving it
|
|
4
4
|
user-invocable: true
|
|
5
|
+
model: opus
|
|
6
|
+
effort: high
|
|
5
7
|
allowed-tools:
|
|
6
8
|
- Read
|
|
7
9
|
- Write
|
|
@@ -29,6 +31,7 @@ Audit an existing brand. Produce evolution map that guides research, strategy, a
|
|
|
29
31
|
|
|
30
32
|
<rules>
|
|
31
33
|
- Always use `AskUserQuestion` for user-facing questions — never raw text prompts
|
|
34
|
+
- One decision per question — never batch multiple questions in a single message
|
|
32
35
|
- Keep interactions concise — gather assets, confirm scope, spawn agent
|
|
33
36
|
- Artifacts must balance human readability with agent consumption for downstream phases
|
|
34
37
|
</rules>
|
|
@@ -43,13 +46,15 @@ Read `{BRAND_PATH}/config.json` to confirm `brand_mode` is `evolve`.
|
|
|
43
46
|
|
|
44
47
|
If missing, tell user to run `/gsp:start` first.
|
|
45
48
|
|
|
46
|
-
## Step 2:
|
|
49
|
+
## Step 2: Load brand assets from brief
|
|
47
50
|
|
|
48
|
-
|
|
51
|
+
Read `{BRAND_PATH}/BRIEF.md` — brand assets were already gathered during `/gsp:start`. Extract any logos, colors, guidelines, URLs, or descriptions the user provided.
|
|
52
|
+
|
|
53
|
+
If the brief has no asset information (legacy or incomplete brief), use `AskUserQuestion`:
|
|
49
54
|
- **Share assets now** — "I have guidelines, colors, fonts, voice samples, or URLs to share"
|
|
50
55
|
- **Describe the brand** — "I'll describe it in my own words"
|
|
51
56
|
|
|
52
|
-
|
|
57
|
+
If URLs were provided (in brief or just now), use WebFetch. Don't re-ask for information already in the brief.
|
|
53
58
|
|
|
54
59
|
## Step 3: Spawn auditor
|
|
55
60
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: brand-identity
|
|
3
3
|
description: Create your visual identity — logo, color, typography
|
|
4
4
|
user-invocable: true
|
|
5
|
+
model: opus
|
|
6
|
+
effort: high
|
|
5
7
|
allowed-tools:
|
|
6
8
|
- Read
|
|
7
9
|
- Write
|
|
@@ -31,6 +33,8 @@ Build the brand's visual identity.
|
|
|
31
33
|
|
|
32
34
|
<rules>
|
|
33
35
|
- Always use `AskUserQuestion` for user-facing questions — never raw text prompts
|
|
36
|
+
- One decision per question — never batch multiple questions in a single message
|
|
37
|
+
- Never re-ask what the user already answered in a prior phase — read BRIEF.md and strategy chunks, build on them
|
|
34
38
|
- Every visual decision must trace to strategy — archetype, positioning, or voice
|
|
35
39
|
- Artifacts must balance human readability with agent consumption for downstream phases
|
|
36
40
|
</rules>
|
|
@@ -75,32 +79,34 @@ Use `AskUserQuestion` with 2-3 visual directions:
|
|
|
75
79
|
- **Description:** color palette direction, typography feel, overall aesthetic
|
|
76
80
|
- **Preview:** "Palette: {key colors}. Type: {typeface style}. Feel: {1-line vibe}."
|
|
77
81
|
|
|
78
|
-
|
|
82
|
+
## Step 2b: Constraints
|
|
83
|
+
|
|
84
|
+
After visual direction is confirmed, ask as a separate `AskUserQuestion`:
|
|
79
85
|
- **No constraints** — "Go ahead with this direction"
|
|
80
|
-
- **Add constraints** — "I have specific requirements"
|
|
86
|
+
- **Add constraints** — "I have specific requirements (colors to avoid, accessibility needs, existing assets to match)"
|
|
81
87
|
|
|
82
88
|
## Step 3: Spawn identity designer
|
|
83
89
|
|
|
84
|
-
Spawn the `gsp-identity-designer` agent
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
+
Spawn the `gsp-identity-designer` agent. **Inline all content** — the agent should not need to read any input files.
|
|
91
|
+
|
|
92
|
+
Pass in the agent prompt:
|
|
93
|
+
- **Content of** BRIEF.md (loaded in Step 1)
|
|
94
|
+
- **Content of** strategy chunks: archetype.md, positioning.md, brand-platform.md, voice-and-tone.md (loaded in Step 1)
|
|
95
|
+
- **Content of** discover/mood-board-direction.md (loaded in Step 1)
|
|
96
|
+
- **Content of** style base preset files `.yml` + `.md` (when loaded in Step 1)
|
|
97
|
+
- **Content of** audit/brand-inventory.md (when loaded in Step 2)
|
|
98
|
+
- Brand Identity Creator prompt (02), identity output template, color composition reference (from execution_context)
|
|
90
99
|
- User-confirmed visual direction + constraints
|
|
91
|
-
- Style base preset files (`.yml` + `.md`) if loaded
|
|
92
|
-
- Audit chunks if they exist
|
|
93
100
|
- **Output path:** `{BRAND_PATH}/identity/`
|
|
94
101
|
|
|
95
|
-
The agent writes
|
|
102
|
+
The agent writes 5 chunks + palettes.json + INDEX.md:
|
|
96
103
|
1. `logo-directions.md`
|
|
97
104
|
2. `color-system.md`
|
|
98
105
|
3. `typography.md`
|
|
99
106
|
4. `imagery-style.md`
|
|
100
107
|
5. `brand-applications.md`
|
|
101
|
-
6. `
|
|
102
|
-
7. `
|
|
103
|
-
8. `INDEX.md`
|
|
108
|
+
6. `palettes.json`
|
|
109
|
+
7. `INDEX.md`
|
|
104
110
|
|
|
105
111
|
## Step 4: Perspective check
|
|
106
112
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: brand-patterns
|
|
3
3
|
description: Build your design system — tokens, components, brand guidelines
|
|
4
4
|
user-invocable: true
|
|
5
|
+
model: opus
|
|
6
|
+
effort: high
|
|
5
7
|
allowed-tools:
|
|
6
8
|
- Read
|
|
7
9
|
- Write
|
|
@@ -30,6 +32,11 @@ Build the design system, generate brand guidelines, and complete the branding di
|
|
|
30
32
|
@${CLAUDE_SKILL_DIR}/../../references/design-tokens.md
|
|
31
33
|
</execution_context>
|
|
32
34
|
|
|
35
|
+
<rules>
|
|
36
|
+
- Always use `AskUserQuestion` for user-facing questions — never raw text prompts
|
|
37
|
+
- One decision per question — never batch multiple questions in a single message
|
|
38
|
+
</rules>
|
|
39
|
+
|
|
33
40
|
<process>
|
|
34
41
|
## Step 0: Resolve brand
|
|
35
42
|
|
|
@@ -66,14 +73,20 @@ If `style_base` is empty or missing, load `${CLAUDE_SKILL_DIR}/../gsp-style/styl
|
|
|
66
73
|
|
|
67
74
|
**Always scan:** If `.design/system/` docs don't exist, invoke `/gsp:design-system` via Skill tool to scan the codebase. If they already exist, read them. Either way, load STACK.md, COMPONENTS.md, and TOKENS.md before continuing.
|
|
68
75
|
|
|
69
|
-
Then ask the user:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
Then ask the user (each as its own `AskUserQuestion`):
|
|
77
|
+
|
|
78
|
+
1. Tech stack — if the scan detected a stack, use `AskUserQuestion`:
|
|
79
|
+
- **Yes, build on {framework} + {styling}** — "Use what's already here"
|
|
80
|
+
- **Different stack** — "I want to target a different tech stack"
|
|
81
|
+
If no stack detected, use open-ended `AskUserQuestion`: "What tech stack will this brand target?"
|
|
82
|
+
Store answer in `{BRAND_PATH}/config.json` → `system_config.tech_stack`
|
|
83
|
+
|
|
84
|
+
2. System strategy — only ask if scan found existing tokens/components. Use `AskUserQuestion`:
|
|
85
|
+
- **Evolve** — "Extend the existing design system"
|
|
86
|
+
- **Rethink** — "Redesign from scratch, informed by what exists"
|
|
87
|
+
- **Ignore** — "Start fresh, don't reference the existing system"
|
|
88
|
+
Store strategy in `{BRAND_PATH}/config.json` → `system_config.system_strategy`
|
|
89
|
+
If scan found no tokens/components (greenfield/boilerplate): default to `generate`, skip this question
|
|
77
90
|
|
|
78
91
|
## Step 2: Determine system strategy
|
|
79
92
|
|
|
@@ -121,37 +134,37 @@ The agent writes foundations only:
|
|
|
121
134
|
|
|
122
135
|
## Step 3.5: Foundation review (interactive)
|
|
123
136
|
|
|
124
|
-
Read the foundation outputs and present:
|
|
137
|
+
Read the foundation outputs and present a compact summary:
|
|
125
138
|
|
|
126
|
-
"
|
|
139
|
+
"Design system foundations:
|
|
127
140
|
Color: {semantic mapping summary from foundations/color-system.md}
|
|
128
141
|
Typography: {type scale summary from foundations/typography.md}
|
|
129
142
|
Spacing: 8px base → {scale from foundations/spacing.md}
|
|
130
|
-
Design principles: {list from principles.md}
|
|
143
|
+
Design principles: {list from principles.md}"
|
|
131
144
|
|
|
132
|
-
|
|
145
|
+
Use `AskUserQuestion`:
|
|
146
|
+
- **Looks good** — "Build components on these foundations"
|
|
147
|
+
- **Adjust colors** — "I want to tweak the color system"
|
|
148
|
+
- **Adjust typography** — "I want to tweak the type scale"
|
|
149
|
+
- **Adjust other** — "I want to change spacing, principles, or other foundations"
|
|
133
150
|
|
|
134
|
-
|
|
151
|
+
If adjustments needed, update the relevant foundation chunks, then re-present.
|
|
135
152
|
|
|
136
153
|
## Step 3.75: Perspective check
|
|
137
154
|
|
|
138
155
|
Before building components, load persona profiles from `{BRAND_PATH}/BRIEF.md` and present stakeholder reactions:
|
|
139
156
|
|
|
140
|
-
"Before we build the component library
|
|
157
|
+
"Before we build the component library:
|
|
141
158
|
|
|
142
|
-
|
|
143
|
-
|
|
159
|
+
{primary persona name}: {would they recognize this as {brand}? Does it feel right?}
|
|
160
|
+
Skeptic: {are the tokens flexible enough? Are the principles actionable?}
|
|
161
|
+
{top competitor}: {how does this compare to industry standards?}"
|
|
144
162
|
|
|
145
|
-
|
|
146
|
-
|
|
163
|
+
Use `AskUserQuestion`:
|
|
164
|
+
- **Build components** — "These foundations are solid, let's go"
|
|
165
|
+
- **Adjust** — "One of these concerns resonates — I want to change something"
|
|
147
166
|
|
|
148
|
-
|
|
149
|
-
"{how does this system compare to industry standards? Any gaps?}"
|
|
150
|
-
|
|
151
|
-
Any of these concerns resonate? Want to adjust foundations before building components?"
|
|
152
|
-
|
|
153
|
-
If user wants changes → update foundations.
|
|
154
|
-
If confirmed → proceed to components pass.
|
|
167
|
+
If adjust → update foundations and re-present. If confirmed → proceed to components pass.
|
|
155
168
|
|
|
156
169
|
## Step 4: Spawn pattern architect — Pass 2: Components
|
|
157
170
|
|
|
@@ -208,7 +221,9 @@ Tell the user: "Brand kit saved to `guidelines.html` — open it in your browser
|
|
|
208
221
|
|
|
209
222
|
Render phase transition (see `references/phase-transitions.md`).
|
|
210
223
|
|
|
211
|
-
**
|
|
224
|
+
**E2E mode:** Read `{BRAND_PATH}/config.json`. If `e2e` is `true`, auto-invoke `/gsp:start` via Skill tool — it will detect the completed brand and route directly to project setup (Step 4). No need to ask the user.
|
|
225
|
+
|
|
226
|
+
**Non-E2E:** When the user chooses "Start a project", invoke `/gsp:start` via the Skill tool. Do NOT attempt to handle project setup inline — `/gsp:start` has the codebase scanning, questioning rounds, and brief-writing logic needed for a proper project setup. The branding agent's context is spent on brand work and lacks the project setup methodology.
|
|
212
227
|
|
|
213
228
|
Also display a brand summary after the standard transition — this is the final branding phase:
|
|
214
229
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: brand-refine
|
|
3
3
|
description: Targeted brand adjustments mid-project — tweak colors, typography, or spacing without re-running the full branding diamond
|
|
4
4
|
user-invocable: true
|
|
5
|
+
model: sonnet
|
|
5
6
|
allowed-tools:
|
|
6
7
|
- Read
|
|
7
8
|
- Write
|
|
@@ -31,6 +32,7 @@ Accept natural language feedback about brand visuals, identify which tokens are
|
|
|
31
32
|
|
|
32
33
|
<rules>
|
|
33
34
|
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
35
|
+
- One decision per question — never batch multiple questions in a single message
|
|
34
36
|
- Never update artifacts without showing before/after and getting confirmation
|
|
35
37
|
- Only touch tokens directly affected by the feedback
|
|
36
38
|
- Preserve existing token structure — edit values in place, don't restructure
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: brand-research
|
|
3
3
|
description: Research your market and competitors
|
|
4
4
|
user-invocable: true
|
|
5
|
+
model: sonnet
|
|
6
|
+
effort: high
|
|
5
7
|
allowed-tools:
|
|
6
8
|
- Read
|
|
7
9
|
- Write
|
|
@@ -31,6 +33,7 @@ Research market context that will inform brand strategy.
|
|
|
31
33
|
|
|
32
34
|
<rules>
|
|
33
35
|
- Always use `AskUserQuestion` for user-facing questions — never raw text prompts
|
|
36
|
+
- One decision per question — never batch multiple questions in a single message
|
|
34
37
|
- Keep interactions concise — 1-2 exchanges max before spawning the agent
|
|
35
38
|
- Artifacts must balance human readability with agent consumption for downstream phases
|
|
36
39
|
</rules>
|