get-shit-pretty 0.6.0 → 0.6.1
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 +3 -4
- package/bin/install.js +24 -1
- package/gsp/references/questioning.md +17 -9
- package/gsp/skills/gsp-accessibility/SKILL.md +1 -0
- package/gsp/skills/gsp-accessibility-audit/SKILL.md +1 -0
- package/gsp/skills/gsp-brand-audit/SKILL.md +6 -3
- package/gsp/skills/gsp-brand-identity/SKILL.md +6 -2
- package/gsp/skills/gsp-brand-patterns/SKILL.md +39 -26
- package/gsp/skills/gsp-brand-refine/SKILL.md +1 -0
- package/gsp/skills/gsp-brand-research/SKILL.md +1 -0
- package/gsp/skills/gsp-brand-strategy/SKILL.md +6 -2
- package/gsp/skills/gsp-brand-sync/SKILL.md +1 -0
- package/gsp/skills/gsp-doctor/SKILL.md +19 -0
- package/gsp/skills/gsp-palette/SKILL.md +1 -0
- package/gsp/skills/gsp-start/SKILL.md +88 -70
- package/gsp/skills/gsp-style/SKILL.md +1 -0
- package/gsp/skills/gsp-typescale/SKILL.md +1 -0
- package/gsp/skills/gsp-update/SKILL.md +52 -23
- package/gsp/templates/branding/config.json +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -240,7 +240,7 @@ GSP works across all major AI coding tools. The installer converts Claude Code's
|
|
|
240
240
|
|
|
241
241
|
| Feature | Claude Code | OpenCode | Gemini CLI | Codex CLI |
|
|
242
242
|
|---------|:-----------:|:--------:|:----------:|:---------:|
|
|
243
|
-
| Skills |
|
|
243
|
+
| Skills | 30 | 30 | 30 | 30 |
|
|
244
244
|
| Agents | 15 | 15 | 15 (experimental) | — |
|
|
245
245
|
| Slash syntax | `/gsp:command` | `/gsp-command` | `/gsp:command` | `$gsp-command` |
|
|
246
246
|
| Prompts + templates | Yes | Yes | Yes | Yes |
|
|
@@ -329,8 +329,7 @@ get-shit-pretty/
|
|
|
329
329
|
├── scripts/ Hook scripts and utilities
|
|
330
330
|
├── gsp/ Source of truth for all content
|
|
331
331
|
│ ├── agents/ 15 subagents (gsp-*.md)
|
|
332
|
-
│ ├──
|
|
333
|
-
│ ├── skills/ 24 skills (*/SKILL.md — primary)
|
|
332
|
+
│ ├── skills/ 30 skills (*/SKILL.md)
|
|
334
333
|
│ ├── hooks/ Plugin-level hooks (hooks.json)
|
|
335
334
|
│ ├── prompts/ 12 agent system prompts
|
|
336
335
|
│ ├── templates/ Config, state, brief, roadmap templates
|
|
@@ -343,7 +342,7 @@ get-shit-pretty/
|
|
|
343
342
|
└── CLAUDE.md AI agent instructions for this repo
|
|
344
343
|
```
|
|
345
344
|
|
|
346
|
-
|
|
345
|
+
The installer reads from `gsp/` and writes to each runtime's config directory.
|
|
347
346
|
|
|
348
347
|
---
|
|
349
348
|
|
package/bin/install.js
CHANGED
|
@@ -915,6 +915,7 @@ function copyOpencodeSkills(srcDir, destDir, pathPrefix) {
|
|
|
915
915
|
content = content.replace(/\.\/\.claude\//g, './.opencode/');
|
|
916
916
|
content = convertClaudeSkillToOpencode(content, skillName);
|
|
917
917
|
fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
|
|
918
|
+
copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
|
|
918
919
|
count++;
|
|
919
920
|
}
|
|
920
921
|
|
|
@@ -946,6 +947,7 @@ function copyCodexSkillsFromSource(srcDir, destDir, pathPrefix) {
|
|
|
946
947
|
content = content.replace(/~\/\.claude\//g, pathPrefix);
|
|
947
948
|
content = convertClaudeSkillToCodex(content, skillName);
|
|
948
949
|
fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
|
|
950
|
+
copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
|
|
949
951
|
count++;
|
|
950
952
|
}
|
|
951
953
|
return count;
|
|
@@ -986,6 +988,7 @@ function copyGeminiSkills(srcDir, destDir, pathPrefix) {
|
|
|
986
988
|
content = content.replace(/\.\/\.claude\//g, './.gemini/');
|
|
987
989
|
content = convertClaudeSkillToGemini(content, skillName);
|
|
988
990
|
fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
|
|
991
|
+
copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
|
|
989
992
|
count++;
|
|
990
993
|
}
|
|
991
994
|
return count;
|
|
@@ -1030,6 +1033,24 @@ function copyAgents(srcDir, destDir, pathPrefix, runtime, { clean = false } = {}
|
|
|
1030
1033
|
* Copy Claude Code skills (global install path — no body conversion, only path replacement).
|
|
1031
1034
|
* Returns skill count.
|
|
1032
1035
|
*/
|
|
1036
|
+
/**
|
|
1037
|
+
* Recursively copy sibling files in a skill directory (everything except SKILL.md).
|
|
1038
|
+
* All sibling files are copied verbatim — no path replacement applied.
|
|
1039
|
+
*/
|
|
1040
|
+
function copySiblingFiles(srcDir, destDir, pathPrefix) {
|
|
1041
|
+
for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
|
|
1042
|
+
if (entry.name === 'SKILL.md') continue; // already handled by caller
|
|
1043
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
1044
|
+
const destPath = path.join(destDir, entry.name);
|
|
1045
|
+
if (entry.isDirectory()) {
|
|
1046
|
+
fs.mkdirSync(destPath, { recursive: true });
|
|
1047
|
+
copySiblingFiles(srcPath, destPath, pathPrefix);
|
|
1048
|
+
} else {
|
|
1049
|
+
fs.copyFileSync(srcPath, destPath);
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1033
1054
|
function copyClaudeSkills(srcDir, destDir, pathPrefix) {
|
|
1034
1055
|
fs.mkdirSync(destDir, { recursive: true });
|
|
1035
1056
|
|
|
@@ -1045,11 +1066,13 @@ function copyClaudeSkills(srcDir, destDir, pathPrefix) {
|
|
|
1045
1066
|
if (!dir.isDirectory()) continue;
|
|
1046
1067
|
const skillMd = path.join(srcDir, dir.name, 'SKILL.md');
|
|
1047
1068
|
if (!fs.existsSync(skillMd)) continue;
|
|
1048
|
-
const
|
|
1069
|
+
const skillName = dir.name.startsWith('gsp-') ? dir.name : `gsp-${dir.name}`;
|
|
1070
|
+
const destSkillDir = path.join(destDir, skillName);
|
|
1049
1071
|
fs.mkdirSync(destSkillDir, { recursive: true });
|
|
1050
1072
|
let content = fs.readFileSync(skillMd, 'utf8');
|
|
1051
1073
|
content = content.replace(/~\/\.claude\//g, pathPrefix);
|
|
1052
1074
|
fs.writeFileSync(path.join(destSkillDir, 'SKILL.md'), content);
|
|
1075
|
+
copySiblingFiles(path.join(srcDir, dir.name), destSkillDir, pathPrefix);
|
|
1053
1076
|
skillCount++;
|
|
1054
1077
|
}
|
|
1055
1078
|
return skillCount;
|
|
@@ -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:
|
|
@@ -30,6 +30,7 @@ Run lightweight accessibility checks inline — contrast ratio lookups and token
|
|
|
30
30
|
|
|
31
31
|
<rules>
|
|
32
32
|
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
33
|
+
- One decision per question — never batch multiple questions in a single message
|
|
33
34
|
- Quick check mode (`--check`) produces display output only — no files written
|
|
34
35
|
- Token audit mode runs inline — no agent spawned
|
|
35
36
|
- Default conformance level is AA unless overridden by `--level AAA` or config
|
|
@@ -37,6 +37,7 @@ Run full accessibility audits — design screen reviews, codebase ARIA/keyboard/
|
|
|
37
37
|
|
|
38
38
|
<rules>
|
|
39
39
|
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
40
|
+
- One decision per question — never batch multiple questions in a single message
|
|
40
41
|
- Statement mode reads prior audit results — fails gracefully if none exist
|
|
41
42
|
- Default conformance level is AA unless overridden by `--level AAA` or config
|
|
42
43
|
- Foundation chunks follow `references/chunk-format.md` format
|
|
@@ -29,6 +29,7 @@ Audit an existing brand. Produce evolution map that guides research, strategy, a
|
|
|
29
29
|
|
|
30
30
|
<rules>
|
|
31
31
|
- Always use `AskUserQuestion` for user-facing questions — never raw text prompts
|
|
32
|
+
- One decision per question — never batch multiple questions in a single message
|
|
32
33
|
- Keep interactions concise — gather assets, confirm scope, spawn agent
|
|
33
34
|
- Artifacts must balance human readability with agent consumption for downstream phases
|
|
34
35
|
</rules>
|
|
@@ -43,13 +44,15 @@ Read `{BRAND_PATH}/config.json` to confirm `brand_mode` is `evolve`.
|
|
|
43
44
|
|
|
44
45
|
If missing, tell user to run `/gsp:start` first.
|
|
45
46
|
|
|
46
|
-
## Step 2:
|
|
47
|
+
## Step 2: Load brand assets from brief
|
|
47
48
|
|
|
48
|
-
|
|
49
|
+
Read `{BRAND_PATH}/BRIEF.md` — brand assets were already gathered during `/gsp:start`. Extract any logos, colors, guidelines, URLs, or descriptions the user provided.
|
|
50
|
+
|
|
51
|
+
If the brief has no asset information (legacy or incomplete brief), use `AskUserQuestion`:
|
|
49
52
|
- **Share assets now** — "I have guidelines, colors, fonts, voice samples, or URLs to share"
|
|
50
53
|
- **Describe the brand** — "I'll describe it in my own words"
|
|
51
54
|
|
|
52
|
-
|
|
55
|
+
If URLs were provided (in brief or just now), use WebFetch. Don't re-ask for information already in the brief.
|
|
53
56
|
|
|
54
57
|
## Step 3: Spawn auditor
|
|
55
58
|
|
|
@@ -31,6 +31,8 @@ Build the brand's visual identity.
|
|
|
31
31
|
|
|
32
32
|
<rules>
|
|
33
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
|
|
35
|
+
- Never re-ask what the user already answered in a prior phase — read BRIEF.md and strategy chunks, build on them
|
|
34
36
|
- Every visual decision must trace to strategy — archetype, positioning, or voice
|
|
35
37
|
- Artifacts must balance human readability with agent consumption for downstream phases
|
|
36
38
|
</rules>
|
|
@@ -75,9 +77,11 @@ Use `AskUserQuestion` with 2-3 visual directions:
|
|
|
75
77
|
- **Description:** color palette direction, typography feel, overall aesthetic
|
|
76
78
|
- **Preview:** "Palette: {key colors}. Type: {typeface style}. Feel: {1-line vibe}."
|
|
77
79
|
|
|
78
|
-
|
|
80
|
+
## Step 2b: Constraints
|
|
81
|
+
|
|
82
|
+
After visual direction is confirmed, ask as a separate `AskUserQuestion`:
|
|
79
83
|
- **No constraints** — "Go ahead with this direction"
|
|
80
|
-
- **Add constraints** — "I have specific requirements"
|
|
84
|
+
- **Add constraints** — "I have specific requirements (colors to avoid, accessibility needs, existing assets to match)"
|
|
81
85
|
|
|
82
86
|
## Step 3: Spawn identity designer
|
|
83
87
|
|
|
@@ -30,6 +30,11 @@ Build the design system, generate brand guidelines, and complete the branding di
|
|
|
30
30
|
@${CLAUDE_SKILL_DIR}/../../references/design-tokens.md
|
|
31
31
|
</execution_context>
|
|
32
32
|
|
|
33
|
+
<rules>
|
|
34
|
+
- Always use `AskUserQuestion` for user-facing questions — never raw text prompts
|
|
35
|
+
- One decision per question — never batch multiple questions in a single message
|
|
36
|
+
</rules>
|
|
37
|
+
|
|
33
38
|
<process>
|
|
34
39
|
## Step 0: Resolve brand
|
|
35
40
|
|
|
@@ -66,14 +71,20 @@ If `style_base` is empty or missing, load `${CLAUDE_SKILL_DIR}/../gsp-style/styl
|
|
|
66
71
|
|
|
67
72
|
**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
73
|
|
|
69
|
-
Then ask the user:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
Then ask the user (each as its own `AskUserQuestion`):
|
|
75
|
+
|
|
76
|
+
1. Tech stack — if the scan detected a stack, use `AskUserQuestion`:
|
|
77
|
+
- **Yes, build on {framework} + {styling}** — "Use what's already here"
|
|
78
|
+
- **Different stack** — "I want to target a different tech stack"
|
|
79
|
+
If no stack detected, use open-ended `AskUserQuestion`: "What tech stack will this brand target?"
|
|
80
|
+
Store answer in `{BRAND_PATH}/config.json` → `system_config.tech_stack`
|
|
81
|
+
|
|
82
|
+
2. System strategy — only ask if scan found existing tokens/components. Use `AskUserQuestion`:
|
|
83
|
+
- **Evolve** — "Extend the existing design system"
|
|
84
|
+
- **Rethink** — "Redesign from scratch, informed by what exists"
|
|
85
|
+
- **Ignore** — "Start fresh, don't reference the existing system"
|
|
86
|
+
Store strategy in `{BRAND_PATH}/config.json` → `system_config.system_strategy`
|
|
87
|
+
If scan found no tokens/components (greenfield/boilerplate): default to `generate`, skip this question
|
|
77
88
|
|
|
78
89
|
## Step 2: Determine system strategy
|
|
79
90
|
|
|
@@ -121,37 +132,37 @@ The agent writes foundations only:
|
|
|
121
132
|
|
|
122
133
|
## Step 3.5: Foundation review (interactive)
|
|
123
134
|
|
|
124
|
-
Read the foundation outputs and present:
|
|
135
|
+
Read the foundation outputs and present a compact summary:
|
|
125
136
|
|
|
126
|
-
"
|
|
137
|
+
"Design system foundations:
|
|
127
138
|
Color: {semantic mapping summary from foundations/color-system.md}
|
|
128
139
|
Typography: {type scale summary from foundations/typography.md}
|
|
129
140
|
Spacing: 8px base → {scale from foundations/spacing.md}
|
|
130
|
-
Design principles: {list from principles.md}
|
|
141
|
+
Design principles: {list from principles.md}"
|
|
131
142
|
|
|
132
|
-
|
|
143
|
+
Use `AskUserQuestion`:
|
|
144
|
+
- **Looks good** — "Build components on these foundations"
|
|
145
|
+
- **Adjust colors** — "I want to tweak the color system"
|
|
146
|
+
- **Adjust typography** — "I want to tweak the type scale"
|
|
147
|
+
- **Adjust other** — "I want to change spacing, principles, or other foundations"
|
|
133
148
|
|
|
134
|
-
|
|
149
|
+
If adjustments needed, update the relevant foundation chunks, then re-present.
|
|
135
150
|
|
|
136
151
|
## Step 3.75: Perspective check
|
|
137
152
|
|
|
138
153
|
Before building components, load persona profiles from `{BRAND_PATH}/BRIEF.md` and present stakeholder reactions:
|
|
139
154
|
|
|
140
|
-
"Before we build the component library
|
|
155
|
+
"Before we build the component library:
|
|
141
156
|
|
|
142
|
-
|
|
143
|
-
|
|
157
|
+
{primary persona name}: {would they recognize this as {brand}? Does it feel right?}
|
|
158
|
+
Skeptic: {are the tokens flexible enough? Are the principles actionable?}
|
|
159
|
+
{top competitor}: {how does this compare to industry standards?}"
|
|
144
160
|
|
|
145
|
-
|
|
146
|
-
|
|
161
|
+
Use `AskUserQuestion`:
|
|
162
|
+
- **Build components** — "These foundations are solid, let's go"
|
|
163
|
+
- **Adjust** — "One of these concerns resonates — I want to change something"
|
|
147
164
|
|
|
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.
|
|
165
|
+
If adjust → update foundations and re-present. If confirmed → proceed to components pass.
|
|
155
166
|
|
|
156
167
|
## Step 4: Spawn pattern architect — Pass 2: Components
|
|
157
168
|
|
|
@@ -208,7 +219,9 @@ Tell the user: "Brand kit saved to `guidelines.html` — open it in your browser
|
|
|
208
219
|
|
|
209
220
|
Render phase transition (see `references/phase-transitions.md`).
|
|
210
221
|
|
|
211
|
-
**
|
|
222
|
+
**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.
|
|
223
|
+
|
|
224
|
+
**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
225
|
|
|
213
226
|
Also display a brand summary after the standard transition — this is the final branding phase:
|
|
214
227
|
|
|
@@ -31,6 +31,7 @@ Accept natural language feedback about brand visuals, identify which tokens are
|
|
|
31
31
|
|
|
32
32
|
<rules>
|
|
33
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
|
|
34
35
|
- Never update artifacts without showing before/after and getting confirmation
|
|
35
36
|
- Only touch tokens directly affected by the feedback
|
|
36
37
|
- Preserve existing token structure — edit values in place, don't restructure
|
|
@@ -31,6 +31,7 @@ Research market context that will inform brand strategy.
|
|
|
31
31
|
|
|
32
32
|
<rules>
|
|
33
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
|
|
34
35
|
- Keep interactions concise — 1-2 exchanges max before spawning the agent
|
|
35
36
|
- Artifacts must balance human readability with agent consumption for downstream phases
|
|
36
37
|
</rules>
|
|
@@ -32,6 +32,8 @@ Define brand strategy and voice through interactive creative direction, then pro
|
|
|
32
32
|
|
|
33
33
|
<rules>
|
|
34
34
|
- Always use `AskUserQuestion` for user-facing questions — never raw text prompts
|
|
35
|
+
- One decision per question — never batch multiple questions in a single message
|
|
36
|
+
- Never re-ask what the user already answered in a prior phase — read BRIEF.md and build on it
|
|
35
37
|
- Push opinionated recommendations but let the user decide
|
|
36
38
|
- Quality gate: if you could swap in a competitor's name and it still works, it's too generic
|
|
37
39
|
- Artifacts must balance human readability with agent consumption for downstream phases
|
|
@@ -61,9 +63,11 @@ Frame as: "Here's where this brand can win." Keep it to 4-6 lines.
|
|
|
61
63
|
|
|
62
64
|
## Step 3: Archetype selection
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
Read the personality direction from BRIEF.md (gathered during `/gsp:start`). Use it as the starting point — don't re-ask for personality. Deepen it into a structural archetype.
|
|
67
|
+
|
|
68
|
+
Use `AskUserQuestion` with 2-3 archetype candidates that align with the chosen personality direction. Each option:
|
|
65
69
|
- **Label:** archetype name
|
|
66
|
-
- **Description:** strategic reasoning — why it fits the personas and gaps
|
|
70
|
+
- **Description:** strategic reasoning — why it fits the personas and gaps, and how it builds on the personality direction from the brief
|
|
67
71
|
- **Preview:** example sentence in that archetype's voice
|
|
68
72
|
|
|
69
73
|
Push a recommendation. Let user choose, adjust, or blend.
|
|
@@ -37,6 +37,7 @@ Compare a project's shipped state against its source brand across all dimensions
|
|
|
37
37
|
|
|
38
38
|
<rules>
|
|
39
39
|
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
40
|
+
- One decision per question — never batch multiple questions in a single message
|
|
40
41
|
- Never update the brand without explicit user confirmation
|
|
41
42
|
- Show before/after for every change — no silent updates
|
|
42
43
|
- Only update dimensions that actually diverged — don't regenerate the entire brand
|
|
@@ -239,6 +239,22 @@ Glob for all SKILL.md files in the skills directory (`{runtime-dir}/skills/*/SKI
|
|
|
239
239
|
- All present → PASS
|
|
240
240
|
- Missing → WARN: "Skills missing `user-invocable: true`: {list}. They won't appear in the slash-command menu. Re-run the installer or add the field manually."
|
|
241
241
|
|
|
242
|
+
**Check I2: Skill directories are complete (not just SKILL.md)**
|
|
243
|
+
For each gsp-* skill directory, check if `SKILL.md` references sibling files via `${CLAUDE_SKILL_DIR}/` paths (e.g. `styles/INDEX.yml`). If it does, verify those files/dirs exist in the installed skill directory.
|
|
244
|
+
- All referenced siblings present → PASS
|
|
245
|
+
- Missing siblings → FAIL: "Skill {name} references {path} but it's missing. Re-run the installer: `npx get-shit-pretty`"
|
|
246
|
+
|
|
247
|
+
**Check I3: Bundle directories accessible**
|
|
248
|
+
Check that the runtime bundle directories exist (`{runtime-dir}/prompts/`, `{runtime-dir}/templates/`, `{runtime-dir}/references/`). Skills reference these via `${CLAUDE_SKILL_DIR}/../../`.
|
|
249
|
+
- All present → PASS
|
|
250
|
+
- Missing → FAIL: "Bundle directory {dir} missing. Re-run the installer: `npx get-shit-pretty`"
|
|
251
|
+
|
|
252
|
+
**Check I4: VERSION file present**
|
|
253
|
+
Check `{runtime-dir}/VERSION` exists and contains a valid semver string.
|
|
254
|
+
- Present and valid → PASS (show version)
|
|
255
|
+
- Missing → WARN: "VERSION file missing. Re-run the installer."
|
|
256
|
+
- Mismatched with source → INFO: "Installed version {installed} differs from source {source}."
|
|
257
|
+
|
|
242
258
|
### Cross-Instance Checks
|
|
243
259
|
|
|
244
260
|
**Check X1: Multiple projects, same brand**
|
|
@@ -287,6 +303,9 @@ Overall Health: {SCORE}/100 {emoji}
|
|
|
287
303
|
|
|
288
304
|
─── Installation Health ───────────────
|
|
289
305
|
✅ I1. Skills invocable ........ PASS
|
|
306
|
+
✅ I2. Skill completeness ...... PASS
|
|
307
|
+
✅ I3. Bundle directories ...... PASS
|
|
308
|
+
✅ I4. VERSION file ............ PASS
|
|
290
309
|
|
|
291
310
|
─── Cross-Instance ────────────────────
|
|
292
311
|
✅ X1. Brand Consistency ...... PASS
|
|
@@ -31,6 +31,7 @@ Generate production-ready OKLCH color palettes from hex colors.
|
|
|
31
31
|
|
|
32
32
|
<rules>
|
|
33
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
|
|
34
35
|
- Palettes are deterministic — same hex input always produces the same OKLCH scales
|
|
35
36
|
- Foundation chunks follow `references/chunk-format.md` format exactly
|
|
36
37
|
- Every palette gets the full 11-stop scale: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950
|
|
@@ -25,7 +25,7 @@ Multiple brands and projects can coexist. Projects reference a brand.
|
|
|
25
25
|
</context>
|
|
26
26
|
|
|
27
27
|
<objective>
|
|
28
|
-
Through
|
|
28
|
+
Through a sequential one-question-at-a-time conversation, gather a complete brief and create the right project structure (brand, project, or both). Route the user to their first phase skill.
|
|
29
29
|
</objective>
|
|
30
30
|
|
|
31
31
|
<execution_context>
|
|
@@ -49,11 +49,12 @@ Through 2-3 rounds of natural conversation, gather a complete brief and create t
|
|
|
49
49
|
<questioning_principles>
|
|
50
50
|
Follow these principles throughout all conversations:
|
|
51
51
|
|
|
52
|
-
1. **
|
|
53
|
-
2. **
|
|
54
|
-
3. **
|
|
55
|
-
4. **
|
|
56
|
-
5. **
|
|
52
|
+
1. **One decision per question** — every question must be its own `AskUserQuestion` call with exactly one decision. Never group multiple questions into a single message. Ask, wait for the answer, then ask the next thing.
|
|
53
|
+
2. **Never re-ask** — if the user already answered something (in this phase or a prior one), don't ask again. If you need to validate, confirm: "I see X from earlier — still accurate?" The user should never feel like they're repeating themselves.
|
|
54
|
+
3. **Inference over interrogation** — state assumptions, let them correct. "SaaS dashboard for enterprise" → you already know: professional, data-dense, web-first.
|
|
55
|
+
4. **Adapt and skip** — use each answer to inform the next question. If an answer reveals enough to skip a later question, skip it. Don't follow a rigid checklist.
|
|
56
|
+
5. **Concrete options over open-ended** — "More like Stripe's clean approach or Duolingo's playful style?" beats "What style do you want?"
|
|
57
|
+
6. **Know when you have enough** — fill gaps with smart defaults. Don't over-ask.
|
|
57
58
|
</questioning_principles>
|
|
58
59
|
|
|
59
60
|
<process>
|
|
@@ -71,7 +72,7 @@ Scan `.design/` for existing brands and projects:
|
|
|
71
72
|
|
|
72
73
|
### Step 1b: Run design system scan (background)
|
|
73
74
|
|
|
74
|
-
Spawn `/gsp:design-system` as a background agent (`run_in_background: true`, `subagent_type: "general-purpose"`). It writes to `.design/system/` — don't wait for it. Store the task reference for
|
|
75
|
+
Spawn `/gsp:design-system` as a background agent (`run_in_background: true`, `subagent_type: "general-purpose"`). It writes to `.design/system/` — don't wait for it. Store the task reference for the brand essence questions or Step 4.
|
|
75
76
|
|
|
76
77
|
### Step 1c: Greet
|
|
77
78
|
|
|
@@ -121,8 +122,7 @@ Weave in what you found naturally: framework, styling, component count.
|
|
|
121
122
|
|
|
122
123
|
From the greeting exchange, determine which flow to run:
|
|
123
124
|
|
|
124
|
-
- **Brand identity
|
|
125
|
-
- **Brand identity (evolve)** → Brand flow (Step 3) with `brand_mode: "evolve"`. Detect evolve signals: user mentions existing brand, assets, guidelines, rebrand, refresh, modernize, evolve, update, redesign.
|
|
125
|
+
- **Brand identity** → Brand flow (Step 3)
|
|
126
126
|
- **Design project** → Check for brands first. If none exist, explain they need a brand first. Offer to create one, then auto-transition to project flow.
|
|
127
127
|
- **Full design (brand + project)** → Brand flow (Step 3), with E2E flag so brand completion auto-transitions to project flow (Step 4)
|
|
128
128
|
- **Quick project** → Quick flow (Step 5)
|
|
@@ -130,49 +130,69 @@ From the greeting exchange, determine which flow to run:
|
|
|
130
130
|
|
|
131
131
|
## Step 3: Brand flow
|
|
132
132
|
|
|
133
|
+
Each question is its own `AskUserQuestion` call. Ask one, wait, adapt, ask the next. Skip anything you can already infer.
|
|
134
|
+
|
|
135
|
+
**Step 3a — Brand name and path selection:**
|
|
136
|
+
|
|
133
137
|
1. Ask for brand name (kebab-case, e.g., "acme-corp")
|
|
134
|
-
2.
|
|
138
|
+
2. "Do you already have brand materials to work with?" — use `AskUserQuestion`:
|
|
139
|
+
- **Yes, I have an existing brand** — "I have a logo, colors, guidelines, or other assets"
|
|
140
|
+
- **No, starting fresh** — "Building a brand from scratch"
|
|
141
|
+
|
|
142
|
+
If **yes** → set `brand_mode: "evolve"`. Continue with evolve sequence (Step 3b-evolve).
|
|
143
|
+
If **no** → set `brand_mode: "new"`. Continue with new sequence (Step 3b-new).
|
|
144
|
+
|
|
145
|
+
3. Create directory structure:
|
|
135
146
|
```bash
|
|
136
147
|
mkdir -p .design/branding/{name}/{audit,discover,strategy,identity,patterns}
|
|
137
148
|
```
|
|
138
149
|
|
|
139
|
-
|
|
150
|
+
**Step 3b-evolve — Gather existing brand context:**
|
|
151
|
+
|
|
152
|
+
Ask these before business questions — the existing brand shapes everything:
|
|
153
|
+
|
|
154
|
+
3. Share your current brand materials — logo, colors, guidelines, URLs, anything you have. (open-ended — gather thoroughly here. Brand-audit will NOT re-ask for assets.)
|
|
155
|
+
4. How old is the current brand? (open-ended)
|
|
156
|
+
5. What's working well with the current brand? (open-ended)
|
|
157
|
+
6. What's not working — what are the pain points? (open-ended)
|
|
158
|
+
7. Evolution scope — use `AskUserQuestion`: **Preserve most, tweak details** / **Evolve significantly, keep core** / **Replace — start fresh**
|
|
159
|
+
|
|
160
|
+
Then continue to Step 3c (business & people), skipping anything the brand materials already reveal.
|
|
161
|
+
|
|
162
|
+
**Step 3b-new — Skip to business questions:**
|
|
140
163
|
|
|
141
|
-
|
|
142
|
-
- Company name, industry, stage
|
|
143
|
-
- Problem / audience / differentiation
|
|
144
|
-
- Business model, main competitors (2-3)
|
|
145
|
-
- Primary persona — infer a concrete profile (name, role, frustration, aspiration) from context and present for correction. Personas should feel like real people — dig into the emotional layer.
|
|
146
|
-
- Secondary persona (if relevant)
|
|
147
|
-
- Mission and vision
|
|
164
|
+
Continue directly to Step 3c.
|
|
148
165
|
|
|
149
|
-
**
|
|
166
|
+
**Step 3c — Business & People:**
|
|
150
167
|
|
|
151
|
-
|
|
168
|
+
8. What's the company name, and what industry/stage? (open-ended `AskUserQuestion`)
|
|
169
|
+
9. What problem does it solve, and for whom? (open-ended — use the answer to start inferring persona)
|
|
170
|
+
10. What's the business model? (use `AskUserQuestion` with options if you can infer likely models from industry, otherwise open-ended)
|
|
171
|
+
11. Who are the main competitors? (2-3 names — open-ended)
|
|
172
|
+
12. Present an inferred primary persona — a concrete profile (name, role, frustration, aspiration) based on answers so far. Personas should feel like real people — dig into the emotional layer. Use `AskUserQuestion`: **Looks right** / **Adjust** / **Add a secondary persona**
|
|
152
173
|
|
|
153
|
-
|
|
154
|
-
- Each option: **Label** (3 adjectives) / **Description** (why this personality fits their specific audience and competitive position — reference the persona by name, the problem, or the gap) / **Preview** (example sentence in that voice, using their product context)
|
|
155
|
-
- **Surprise me** — craft an unexpected direction inspired by the user's industry and personas
|
|
156
|
-
- What the brand should NEVER feel like
|
|
157
|
-
- Competitive landscape — use `WebSearch` to enrich the competitors named in Round 1. Present the map for confirmation.
|
|
158
|
-
- Brands admired / styles to avoid
|
|
174
|
+
**Step 3d — Brand Essence:**
|
|
159
175
|
|
|
160
|
-
**
|
|
161
|
-
- Existing brand assets? (logo, colors, guidelines)
|
|
162
|
-
- Timeline and budget constraints
|
|
163
|
-
- Non-negotiables
|
|
164
|
-
- **Check background scan:** If the codebase scanner has returned results, weave tech findings naturally.
|
|
165
|
-
- State your understanding back: "Here's what I'm hearing: [summary]." Use `AskUserQuestion`:
|
|
166
|
-
- **Looks good** — "That's accurate, let's go"
|
|
167
|
-
- **Adjust something** — "I want to change or add something"
|
|
176
|
+
Before presenting personality options, **internally synthesize** promise (what should someone feel?) and point of view (what does this brand disagree with?) from prior answers. Don't ask these directly — use them to ground personality options.
|
|
168
177
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
-
|
|
172
|
-
- Brand
|
|
173
|
-
-
|
|
178
|
+
13. Brand personality direction — use `AskUserQuestion` with 2-3 concrete personality directions. **Each option must explain WHY it fits this brand's audience and problem** — not just a style label:
|
|
179
|
+
- Each option: **Label** (3 adjectives) / **Description** (why this personality fits their specific audience and competitive position — reference the persona by name, the problem, or the gap) / **Preview** (example sentence in that voice, using their product context)
|
|
180
|
+
- **Surprise me** — craft an unexpected direction inspired by the user's industry and personas
|
|
181
|
+
- Note: this is a high-level direction only. Brand strategy phase will deepen this into archetype + voice — don't over-refine here.
|
|
182
|
+
14. What should the brand NEVER feel like? (use `AskUserQuestion` with 2-3 anti-directions inferred from their personality pick, plus open-ended option)
|
|
183
|
+
15. Brands admired or styles to avoid? (open-ended `AskUserQuestion`)
|
|
174
184
|
|
|
175
|
-
|
|
185
|
+
Note: competitive landscape deep-dive happens in the research phase — don't re-confirm it here. The competitor names from Q11 are enough.
|
|
186
|
+
|
|
187
|
+
**Step 3e — Constraints & confirmation:**
|
|
188
|
+
|
|
189
|
+
16. Any non-negotiables or constraints? (timeline, budget, must-haves) — open-ended `AskUserQuestion`
|
|
190
|
+
17. **Check background scan:** If the codebase scanner has returned results, weave tech findings naturally into your summary.
|
|
191
|
+
18. State your understanding back: "Here's what I'm hearing: [summary]." Use `AskUserQuestion`:
|
|
192
|
+
- **Looks good** — "That's accurate, let's go"
|
|
193
|
+
- **Adjust something** — "I want to change or add something"
|
|
194
|
+
|
|
195
|
+
Skip any question you can already answer from prior context. Don't over-ask.
|
|
176
196
|
|
|
177
197
|
4. Write artifacts:
|
|
178
198
|
- `.design/branding/{name}/BRIEF.md` from brand brief template
|
|
@@ -186,8 +206,8 @@ Skip or compress rounds if the user gives enough upfront. Don't over-ask.
|
|
|
186
206
|
|
|
187
207
|
- **Brand-only, new →** continue to `/gsp:brand-research`
|
|
188
208
|
- **Brand-only, evolve →** continue to `/gsp:brand-audit`
|
|
189
|
-
- **E2E, new →** auto-
|
|
190
|
-
- **E2E, evolve →** continue to `/gsp:brand-audit` (then Step 4
|
|
209
|
+
- **E2E, new →** continue to `/gsp:brand-research` (complete the entire brand pipeline first — research → strategy → identity → patterns — then auto-transition to Step 4 for project setup). Set `"e2e": true` in config.json so brand-patterns knows to route to project flow after completion.
|
|
210
|
+
- **E2E, evolve →** continue to `/gsp:brand-audit` (complete full brand pipeline, then auto-transition to Step 4). Set `"e2e": true` in config.json.
|
|
191
211
|
|
|
192
212
|
## Step 4: Project flow
|
|
193
213
|
|
|
@@ -212,33 +232,31 @@ Use the background `git branch --show-current` result. If detected, confirm bran
|
|
|
212
232
|
|
|
213
233
|
6. Consume `.design/system/STACK.md` — note classification for config.json, auto-infer `implementation_target` from STACK.md + COMPONENTS.md.
|
|
214
234
|
|
|
215
|
-
7. Gather project brief
|
|
216
|
-
|
|
217
|
-
**
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
-
|
|
233
|
-
|
|
234
|
-
-
|
|
235
|
-
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
Skip or compress rounds if the user gives enough upfront. Don't over-ask.
|
|
235
|
+
7. Gather project brief as a sequential conversation. Each question is its own `AskUserQuestion` call. Ask one, wait, adapt, ask the next. Skip anything you can already infer from the codebase scan.
|
|
236
|
+
|
|
237
|
+
**Sequence — What we're building:**
|
|
238
|
+
|
|
239
|
+
1. What are we building? (app, website, dashboard, etc.) — open-ended `AskUserQuestion`
|
|
240
|
+
2. Present background scan findings: "I found a {classification} {framework} project with {details}." Use `AskUserQuestion`: **Build on this** / **Different stack** / **Tell me more**
|
|
241
|
+
3. Platforms? — use `AskUserQuestion`: **Web** / **iOS** / **Android** / **Cross-platform** (skip if obvious from codebase)
|
|
242
|
+
4. Implementation target — use `AskUserQuestion` with options based on codebase analysis (e.g., shadcn, rn-reusables, custom, css-only)
|
|
243
|
+
5. Design scope — use `AskUserQuestion`:
|
|
244
|
+
- **Full** — "Complete design: screens, components, tokens"
|
|
245
|
+
- **Partial** — "Specific screens or flows only"
|
|
246
|
+
- **Tokens only** — "Just design tokens, no screens"
|
|
247
|
+
6. Key screens/flows needed? — open-ended `AskUserQuestion`
|
|
248
|
+
|
|
249
|
+
**Sequence — Success & confirmation:**
|
|
250
|
+
|
|
251
|
+
7. What does success look like? — open-ended `AskUserQuestion`
|
|
252
|
+
8. Any constraints? (timeline, budget, must-haves) — open-ended `AskUserQuestion`
|
|
253
|
+
9. State your understanding back: "Here's what I'm hearing: [summary]." Use `AskUserQuestion`:
|
|
254
|
+
- **Looks good** — "That's accurate, let's go"
|
|
255
|
+
- **Adjust something** — "I want to change or add something"
|
|
256
|
+
- **Explain this** — "Walk me through what you captured and why" → explain each section of the brief and how it'll be used in the next phases
|
|
257
|
+
- **Surprise me** — "Suggest something I haven't thought of" → propose an unexpected screen, flow, or feature angle that would elevate the project based on what you know about the brand, audience, and codebase. Present it as a suggestion the user can adopt, tweak, or skip.
|
|
258
|
+
|
|
259
|
+
Skip any question you can already answer from the codebase scan. Don't over-ask.
|
|
242
260
|
|
|
243
261
|
8. Write artifacts:
|
|
244
262
|
- `.design/projects/{name}/BRIEF.md` from project brief template
|
|
@@ -309,7 +327,7 @@ Continue directly to Step 4 (project flow) with these modifications:
|
|
|
309
327
|
- Go straight to asking for project name
|
|
310
328
|
- Set `style_preset: "{preset}"` in the project's `config.json`
|
|
311
329
|
- Set `identity_hash: "style-only"` in `brand.ref`
|
|
312
|
-
- Proceed with the normal
|
|
330
|
+
- Proceed with the normal sequential project brief gathering
|
|
313
331
|
|
|
314
332
|
### Upgrade path
|
|
315
333
|
|
|
@@ -35,6 +35,7 @@ Apply a named style preset to produce production-ready design tokens and foundat
|
|
|
35
35
|
|
|
36
36
|
<rules>
|
|
37
37
|
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
38
|
+
- One decision per question — never batch multiple questions in a single message
|
|
38
39
|
- `tokens.json` follows W3C Design Tokens format from `references/design-tokens.md`
|
|
39
40
|
- When mixing styles, later style values override earlier ones (last-wins precedence)
|
|
40
41
|
- Never mix clashing styles — check the compatibility matrix first
|
|
@@ -34,6 +34,7 @@ Generate a production-ready typography system with fluid responsive sizing, vert
|
|
|
34
34
|
|
|
35
35
|
<rules>
|
|
36
36
|
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
37
|
+
- One decision per question — never batch multiple questions in a single message
|
|
37
38
|
- Foundation chunks follow `references/chunk-format.md` format exactly
|
|
38
39
|
- All sizes include px, rem, AND fluid clamp() values for headings
|
|
39
40
|
- Line heights snap to a 4px grid for vertical rhythm (body 24px = 6 × 4px)
|
|
@@ -2,36 +2,51 @@
|
|
|
2
2
|
name: update
|
|
3
3
|
description: Update GSP to the latest version
|
|
4
4
|
user-invocable: true
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Bash
|
|
8
|
+
- AskUserQuestion
|
|
9
|
+
- Glob
|
|
10
|
+
- WebFetch
|
|
5
11
|
---
|
|
6
12
|
<objective>
|
|
7
13
|
Check for GSP updates, show what's new, and run the update if the user confirms.
|
|
8
14
|
</objective>
|
|
9
15
|
|
|
16
|
+
<rules>
|
|
17
|
+
- Always use `AskUserQuestion` for user-facing questions — never raw text prompts
|
|
18
|
+
- One decision per question — never batch multiple questions in a single message
|
|
19
|
+
</rules>
|
|
20
|
+
|
|
10
21
|
<process>
|
|
11
22
|
|
|
12
23
|
## Step 1 — Detect installation
|
|
13
24
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
Determine the runtime by checking which config directory exists. Check local first, then global:
|
|
26
|
+
|
|
27
|
+
| Runtime | Local dir | Global dir |
|
|
28
|
+
|---------|-----------|------------|
|
|
29
|
+
| Claude Code | `.claude/` | `~/.claude/` |
|
|
30
|
+
| OpenCode | `.opencode/` | `~/.config/opencode/` |
|
|
31
|
+
| Gemini | `.gemini/` | `~/.gemini/` |
|
|
32
|
+
| Codex | `.codex/` | `~/.codex/` |
|
|
19
33
|
|
|
20
|
-
|
|
34
|
+
For each runtime, look for the VERSION file in two paths (current layout first, legacy fallback):
|
|
21
35
|
1. `{runtime-dir}/VERSION` (v0.5.0+)
|
|
22
36
|
2. `{runtime-dir}/get-shit-pretty/VERSION` (legacy v0.4.x)
|
|
23
37
|
|
|
24
|
-
|
|
38
|
+
Record which runtime(s) and install type (local/global) were found.
|
|
39
|
+
|
|
40
|
+
If no VERSION file exists anywhere, tell the user GSP doesn't appear to be installed and suggest:
|
|
25
41
|
```
|
|
26
42
|
npx get-shit-pretty
|
|
27
43
|
```
|
|
28
44
|
Then stop.
|
|
29
45
|
|
|
30
|
-
Read the VERSION file to get the installed version.
|
|
46
|
+
Read the VERSION file to get the installed version.
|
|
31
47
|
|
|
32
48
|
## Step 2 — Check latest version
|
|
33
49
|
|
|
34
|
-
Run:
|
|
35
50
|
```bash
|
|
36
51
|
npm view get-shit-pretty version
|
|
37
52
|
```
|
|
@@ -40,7 +55,7 @@ If the command fails, tell the user the version check failed (they may be offlin
|
|
|
40
55
|
|
|
41
56
|
## Step 3 — Compare versions
|
|
42
57
|
|
|
43
|
-
If installed version >= latest version
|
|
58
|
+
If installed version >= latest version:
|
|
44
59
|
```
|
|
45
60
|
GSP v{installed} is already up to date.
|
|
46
61
|
```
|
|
@@ -48,40 +63,55 @@ Then stop.
|
|
|
48
63
|
|
|
49
64
|
## Step 4 — Show what's new
|
|
50
65
|
|
|
51
|
-
Tell the user:
|
|
52
66
|
```
|
|
53
67
|
Update available: v{installed} → v{latest}
|
|
54
68
|
```
|
|
55
69
|
|
|
56
|
-
Fetch the changelog
|
|
70
|
+
Fetch the changelog:
|
|
57
71
|
```bash
|
|
58
72
|
curl -sf https://raw.githubusercontent.com/jubscodes/get-shit-pretty/main/CHANGELOG.md
|
|
59
73
|
```
|
|
60
74
|
|
|
61
|
-
If the fetch succeeds, extract and display the section
|
|
75
|
+
If the fetch succeeds, extract and display the section(s) between the installed and latest versions. If it fails, skip — changelog display is optional.
|
|
62
76
|
|
|
63
77
|
## Step 5 — Warn about clean install
|
|
64
78
|
|
|
65
|
-
Tell the user:
|
|
66
79
|
```
|
|
67
80
|
The update replaces:
|
|
68
|
-
• skills/gsp-*
|
|
69
|
-
•
|
|
70
|
-
•
|
|
81
|
+
• skills/gsp-* (all GSP skills + sibling files)
|
|
82
|
+
• prompts/ (agent system prompts)
|
|
83
|
+
• templates/ (config, state, brief templates)
|
|
84
|
+
• references/ (shared reference material)
|
|
85
|
+
• agents/gsp-* (all GSP agents)
|
|
71
86
|
|
|
72
87
|
Custom files outside these prefixes are preserved.
|
|
73
88
|
```
|
|
74
89
|
|
|
75
90
|
## Step 6 — Confirm with user
|
|
76
91
|
|
|
77
|
-
|
|
92
|
+
Use `AskUserQuestion`:
|
|
93
|
+
- **Update now** — "Install v{latest}"
|
|
94
|
+
- **Skip** — "I'll update later"
|
|
95
|
+
|
|
96
|
+
If skip → stop.
|
|
78
97
|
|
|
79
98
|
## Step 7 — Execute update
|
|
80
99
|
|
|
81
|
-
|
|
100
|
+
Build the installer command based on what was detected in Step 1:
|
|
101
|
+
|
|
102
|
+
**Runtime flag:** use the detected runtime (`--claude`, `--opencode`, `--gemini`, `--codex`). If multiple runtimes were found, use `--all`.
|
|
103
|
+
|
|
104
|
+
**Scope flag:** `--local` if local install was detected, `--global` if global.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npx get-shit-pretty@latest {runtime-flag} {scope-flag}
|
|
108
|
+
```
|
|
82
109
|
|
|
83
|
-
|
|
84
|
-
-
|
|
110
|
+
Examples:
|
|
111
|
+
- Local Claude: `npx get-shit-pretty@latest --claude --local`
|
|
112
|
+
- Global Claude: `npx get-shit-pretty@latest --claude --global`
|
|
113
|
+
- Global OpenCode: `npx get-shit-pretty@latest --opencode --global`
|
|
114
|
+
- Multiple runtimes: `npx get-shit-pretty@latest --all --global`
|
|
85
115
|
|
|
86
116
|
Show the output to the user.
|
|
87
117
|
|
|
@@ -102,10 +132,9 @@ rm -f {runtime-dir}/get-shit-pretty/.update-cache.json
|
|
|
102
132
|
|
|
103
133
|
## Step 9 — Remind to restart
|
|
104
134
|
|
|
105
|
-
Tell the user:
|
|
106
135
|
```
|
|
107
136
|
GSP updated to v{latest}.
|
|
108
|
-
Restart your
|
|
137
|
+
Restart your session to load the new skills and agents.
|
|
109
138
|
```
|
|
110
139
|
|
|
111
140
|
</process>
|
package/package.json
CHANGED