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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gsp",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Design engineering system for AI coding agents. Brand identity + design projects, from strategy to code.",
5
5
  "author": {
6
6
  "name": "jubscodes",
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 | 24 | 24 | 24 | 24 |
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
- │ ├── commands/gsp/ 20 slash commands (backward compat)
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
- Skills take precedence over commands when both exist. The installer reads from `gsp/` and writes to each runtime's config directory.
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 destSkillDir = path.join(destDir, dir.name);
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
- ### Progressive Disclosure
45
- Don't ask all 18 questions at once. Group into 3-4 conversational rounds:
46
- - Round 1: Context + Brand (questions 1-8)
47
- - Round 2: Scope + Constraints (questions 9-16)
48
- - Round 3: Success + Gaps (questions 17-18 + follow-ups)
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
- - **Use `AskUserQuestion`** for: picking between defined directions (archetypes, styles, brands), yes/no/which decisions, selecting from existing items (brands, projects), mood/tone/size preferences
70
- - **Use prose** for: open-ended creative input ("tell me about your brand"), gathering context you can't predict ("what problem does this solve?"), follow-up clarifications where the answer space is unbounded
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 prose.
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: Gather brand assets
47
+ ## Step 2: Load brand assets from brief
47
48
 
48
- Use `AskUserQuestion` to prompt for assets:
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
- Accept whatever format. Infer from partial info. If URLs provided, use WebFetch. Don't over-ask work with what's given.
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
- After selection, ask for hard constraints or visual references via `AskUserQuestion`:
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
- 1. "Will this brand target a specific tech stack?" (React + Tailwind, React Native + NativeWind, vanilla CSS, etc.)
71
- - If the scan detected a stack, present it as the default: "I see you're using {framework} with {styling} — build on that?"
72
- - Store answer in `{BRAND_PATH}/config.json` `system_config.tech_stack`
73
- 2. Based on scan results, determine system strategy:
74
- - If scan found existing tokens/components: "You have an existing design system. Want to evolve it, rethink it from scratch, or ignore it?"
75
- - Store strategy in `{BRAND_PATH}/config.json` → `system_config.system_strategy`
76
- - If scan found no tokens/components (greenfield/boilerplate): default to `generate`, skip the question
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
- "Here are the design system foundations:
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
- Everything right? Adjustments before building components?"
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
- Wait for user input. If adjustments needed, update the relevant foundation chunks.
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 on these foundations:
155
+ "Before we build the component library:
141
156
 
142
- The Customer ({primary persona name from BRIEF.md}):
143
- "{would a user recognize this as {brand}? Does the system feel like the brand?}"
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
- The Skeptic (internal stakeholder):
146
- "{challenges system decisions are the tokens flexible enough? Are the principles actionable?}"
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
- The Competitor ({top competitor name}):
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
- **Critical:** 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.
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
- Use `AskUserQuestion` with 2-3 archetype candidates. Each option:
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 2-3 rounds of natural conversation, gather a complete brief and create the right project structure (brand, project, or both). Route the user to their first phase skill.
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. **Inference over interrogation** — state assumptions, let them correct. "SaaS dashboard for enterprise" you already know: professional, data-dense, web-first.
53
- 2. **Progressive disclosure** — don't dump all questions at once. Flow in natural rounds.
54
- 3. **Concrete options over open-ended** — "More like Stripe's clean approach or Duolingo's playful style?" beats "What style do you want?"
55
- 4. **Know when you have enough** fill gaps with smart defaults. Don't over-ask.
56
- 5. **One message per round** — ask a cohesive set of related questions, not one at a time.
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 Step 3 Round 2 or Step 4.
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 (new)** → Brand flow (Step 3) with `brand_mode: "new"`
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. Create directory structure:
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
- 3. Gather brand brief in 3 rounds. The brief is the single source of truth for business and persona definition — invest here.
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
- **Round 1 Business & People:**
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
- **Round 2Brand Essence & Landscape:**
166
+ **Step 3cBusiness & People:**
150
167
 
151
- Before presenting personality options, **internally synthesize** promise (what should someone feel?) and point of view (what does this brand disagree with?) from Round 1. Don't ask these directly — use them to ground personality options.
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
- - Brand personality — 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:
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 3dBrand Essence:**
159
175
 
160
- **Round 3Constraints & confirmation:**
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
- **Evolve mode additions (when `brand_mode` is `evolve`):**
170
- Add to Round 3:
171
- - Current brand age, existing guidelines
172
- - Brand equity (what's working) and pain points (what's not)
173
- - Evolution scope preserve / evolve / replace
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
- Skip or compress rounds if the user gives enough upfront. Don't over-ask.
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-continue to Step 4
190
- - **E2E, evolve →** continue to `/gsp:brand-audit` (then Step 4 after audit)
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 in 2 rounds:
216
-
217
- **Round 1 — What we're building:**
218
- - What are we building? (app, website, dashboard, etc.)
219
- - Present background scan findings: "I found a {classification} {framework} project with {details}. Want to build on that?"
220
- - Platforms (web, iOS, Android)?
221
- - Tech stack preferences? (confirm inferred or ask)
222
- - Implementation target — use `AskUserQuestion` with options based on codebase analysis (e.g., shadcn, rn-reusables, custom, css-only)
223
- - Design scope — use `AskUserQuestion`:
224
- - **Full** — "Complete design: screens, components, tokens"
225
- - **Partial** — "Specific screens or flows only"
226
- - **Tokens only** — "Just design tokens, no screens"
227
- - Key screens/flows needed?
228
-
229
- Use inference from the codebase scan don't re-ask what you can already see.
230
-
231
- **Round 2Success & gaps:**
232
- - Success criteria
233
- - Timeline, constraints
234
- - Any remaining gaps
235
- - State your understanding back: "Here's what I'm hearing: [summary]." Use `AskUserQuestion`:
236
- - **Looks good** — "That's accurate, let's go"
237
- - **Adjust something** — "I want to change or add something"
238
- - **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
239
- - **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.
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
+ **SequenceSuccess & 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 2-round project brief gathering
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
- Check for a `VERSION` file to determine install type. The runtime directory varies by tool:
15
- - Claude Code: `.claude/` (local) or `~/.claude/` (global)
16
- - OpenCode: `.opencode/` (local) or `~/.config/opencode/` (global)
17
- - Gemini: `.gemini/` (local) or `~/.gemini/` (global)
18
- - Codex: `.codex/` (local) or `~/.codex/` (global)
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
- Look for the VERSION file in both local and global locations. Check two paths per location (current layout first, legacy fallback):
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
- If neither exists in either location, tell the user GSP doesn't appear to be installed and suggest running:
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. Store which type was detected (local or global).
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, tell the user:
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 to show what changed:
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 for the latest version. If it fails, skip — changelog display is optional.
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-* (all GSP skills)
69
- get-shit-pretty/* (runtime files)
70
- gsp-* agents (all GSP agents)
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
- Ask the user to confirm before proceeding. If they decline, stop.
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
- Based on the detected install type from Step 1:
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
- - **Local install**: run `npx get-shit-pretty@latest --claude --local`
84
- - **Global install**: run `npx get-shit-pretty@latest --claude`
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 Claude Code session to load the new commands and agents.
137
+ Restart your session to load the new skills and agents.
109
138
  ```
110
139
 
111
140
  </process>
@@ -6,6 +6,7 @@
6
6
  "created": ""
7
7
  },
8
8
  "brand_mode": "new",
9
+ "e2e": false,
9
10
  "evolution_scope": {
10
11
  "preserve": [],
11
12
  "evolve": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "get-shit-pretty",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Design engineering system for AI coding agents. Brand identity + design projects, from strategy to code.",
5
5
  "bin": {
6
6
  "get-shit-pretty": "bin/install.js"