moicle 2.0.0 → 2.2.0

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.
Files changed (43) hide show
  1. package/README.md +20 -9
  2. package/assets/architecture/_shared/severity-levels.md +34 -0
  3. package/assets/architecture/_shared/stack-detection.md +34 -0
  4. package/assets/commands/marketing.md +7 -7
  5. package/assets/skills/docs/sync/SKILL.md +159 -519
  6. package/assets/skills/docs/write/SKILL.md +89 -186
  7. package/assets/skills/feature/new/SKILL.md +152 -192
  8. package/assets/skills/feature/refactor/SKILL.md +152 -233
  9. package/assets/skills/fix/hotfix/SKILL.md +139 -305
  10. package/assets/skills/fix/incident/SKILL.md +107 -19
  11. package/assets/skills/fix/pr-comment/SKILL.md +98 -224
  12. package/assets/skills/fix/root-cause/SKILL.md +161 -104
  13. package/assets/skills/{docs → marketing}/content/SKILL.md +4 -4
  14. package/assets/skills/marketing/logo/SKILL.md +252 -0
  15. package/assets/skills/marketing/seo-blog/SKILL.md +367 -0
  16. package/assets/skills/marketing/video/SKILL.md +258 -0
  17. package/assets/skills/research/onboarding/SKILL.md +127 -510
  18. package/assets/skills/research/spike/SKILL.md +128 -436
  19. package/assets/skills/research/web/SKILL.md +124 -83
  20. package/assets/skills/review/architect/SKILL.md +157 -306
  21. package/assets/skills/review/branch/SKILL.md +153 -208
  22. package/assets/skills/review/pr/SKILL.md +129 -519
  23. package/assets/skills/review/tdd/SKILL.md +108 -69
  24. package/bin/cli.js +2 -2
  25. package/dist/commands/install.d.ts.map +1 -1
  26. package/dist/commands/install.js +176 -8
  27. package/dist/commands/install.js.map +1 -1
  28. package/dist/commands/list.d.ts.map +1 -1
  29. package/dist/commands/list.js +31 -1
  30. package/dist/commands/list.js.map +1 -1
  31. package/dist/commands/status.d.ts.map +1 -1
  32. package/dist/commands/status.js +30 -1
  33. package/dist/commands/status.js.map +1 -1
  34. package/dist/commands/uninstall.d.ts.map +1 -1
  35. package/dist/commands/uninstall.js +64 -8
  36. package/dist/commands/uninstall.js.map +1 -1
  37. package/dist/utils/symlink.d.ts +1 -0
  38. package/dist/utils/symlink.d.ts.map +1 -1
  39. package/dist/utils/symlink.js +8 -6
  40. package/dist/utils/symlink.js.map +1 -1
  41. package/package.json +1 -1
  42. package/assets/skills/docs/logo/SKILL.md +0 -492
  43. package/assets/skills/docs/video/SKILL.md +0 -666
@@ -5,16 +5,17 @@ description: Deep bug investigation workflow for hard-to-trace errors. Systemati
5
5
 
6
6
  # Deep Bug Investigation
7
7
 
8
- For hard bugs that have been "fixed" multiple times without success. **DO NOT guess** — trace step by step to the root cause.
8
+ For bugs that have been "fixed" multiple times and keep coming back, intermittent bugs, or errors deep inside vendor code. **Do not guess** — trace step by step.
9
9
 
10
10
  ## When to use this skill
11
11
 
12
- - ✅ Same bug keeps coming back after multiple "fixes"
12
+ - ✅ Same bug returns after multiple "fixes"
13
13
  - ✅ "Sometimes works, sometimes doesn't" — likely hidden state
14
- - ✅ Error is inside a vendor library / framework internals
15
- - ✅ Local and production behave differently
16
- - Bug is well understood and just needs a fix → use `/fix:hotfix`
17
- - ❌ Production is currently down with users impacteduse `/fix:incident` first, deep-debug after mitigation
14
+ - ✅ Error inside vendor / framework internals
15
+ - ✅ Local vs production behavior differs
16
+ - Race condition / concurrency suspected
17
+ - ❌ Bug is well understood, just needs a fix → `/fix:hotfix`
18
+ - ❌ Production is down with user impact → `/fix:incident` first, then this skill
18
19
 
19
20
  ---
20
21
 
@@ -24,138 +25,184 @@ For hard bugs that have been "fixed" multiple times without success. **DO NOT gu
24
25
  COLLECT → VERIFY → TRACE → ROOT CAUSE → CHECK HIDDEN STATE → FIX → VERIFY
25
26
  ```
26
27
 
28
+ **Time budget:** if you've traced for >2 hours with no convergence → stop, write down what you know, ask a teammate. Rabbit holes are real.
29
+
27
30
  ---
28
31
 
29
- ## Step 1: Collect evidence
32
+ ## Step 1: COLLECT — capture evidence exactly
30
33
 
31
- Record exactly, **do NOT interpret**:
34
+ Record **verbatim**, do not interpret:
32
35
 
33
- - Exact error message
34
- - Stack trace: file, line number, call chain
35
- - Which environment is affected (production / staging / local)
36
- - Happens every time or only in certain cases
36
+ - Exact error message (copy-paste, don't paraphrase)
37
+ - Stack trace: file, line, full call chain
38
+ - Affected environment (prod / staging / local)
39
+ - Frequency: always / intermittent / specific input / specific user
40
+ - Timing: started exactly when? aligns with a deploy / cron / data change?
37
41
 
38
42
  ### Gate
39
- - [ ] Error message captured verbatim
40
- - [ ] Stack trace captured (or "no stack trace" noted)
41
- - [ ] Reproduction frequency known
43
+ - [ ] Error captured verbatim
44
+ - [ ] Stack trace captured (or noted absent)
45
+ - [ ] Frequency known
46
+ - [ ] Timing noted (helps narrow "what changed")
42
47
 
43
48
  ---
44
49
 
45
- ## Step 2: Verify the code that is actually running
50
+ ## Step 2: VERIFY running code = local code?
46
51
 
47
- **DO NOT assume production code = local code.**
52
+ Do NOT assume prod = local.
48
53
 
49
- - Identify the exact version / commit currently deployed
50
- - Compare it against the code you are reading locally
51
- - If they DIFFER → read the deployed version before analyzing further
54
+ - Identify the deployed commit
55
+ - `git diff` deployed vs local
56
+ - If they differ → read the deployed version before reasoning further
57
+ - Container / image involved? Verify the image tag, not just the source
52
58
 
53
59
  ### Gate
54
60
  - [ ] Deployed commit identified
55
- - [ ] Local checkout matches deployed commit (or differences noted)
61
+ - [ ] Local checkout matches OR differences understood
56
62
 
57
63
  ---
58
64
 
59
- ## Step 3: Trace the execution path
65
+ ## Step 3: TRACE entry to failure, every step
66
+
67
+ The single most important step. Skip nothing.
68
+
69
+ ### 3a. Entry → error line
70
+ - Where does the request / event / job enter? (route, listener, cron, queue handler)
71
+ - Which function calls which? Follow stack trace exactly
72
+ - How does data flow between layers?
73
+
74
+ ### 3b. Where does faulty data come from?
75
+ - Created locally or loaded from DB / API / cache / session?
76
+ - Goes through serialize / deserialize?
77
+ - Goes through any transform / map / cast?
60
78
 
61
- The most important step. Go from entry point failing line. Trace **EVERY** step, **DO NOT skip**.
79
+ ### 3c. Type + state at the moment of failure
80
+ - Actual runtime type (use a debugger or log)
81
+ - Expected type
82
+ - Why do they differ?
62
83
 
63
- ### 3a. Entry point error line
64
- - Where does the request / event / job enter from?
65
- - Which function calls which? Follow the stack trace exactly
66
- - How is data passed through each layer?
84
+ ### 3d. Vendor / framework internals
85
+ - Open the vendor source at the EXACT line from the stack trace
86
+ - Trace backwards: who calls this method, with what args?
87
+ - What condition routes execution into the failing branch?
67
88
 
68
- ### 3b. Where does the faulty data come from?
69
- - Where is the faulty variable created / loaded from?
70
- - Loaded directly from source (DB, API) or from cache / session?
71
- - Does it go through serialize → unserialize?
72
- - Does it go through any transform / convert step?
89
+ ### Debugging tools
73
90
 
74
- ### 3c. Type & state at the moment of failure
75
- - What is the actual type of the variable? (string, object, null, enum...)
76
- - What type does the code expect?
77
- - Why does the actual type differ from the expected one?
91
+ Use the right tool, not just `console.log`:
78
92
 
79
- ### 3d. Framework internals (when error is inside vendor / library)
80
- - Read the source code at the EXACT line number from the stack trace
81
- - Trace backwards: who calls that method, with what arguments?
82
- - What condition drives the code into the failing branch?
93
+ | Tool | When |
94
+ |------|------|
95
+ | **Debugger breakpoint** | Step through suspect code, inspect locals |
96
+ | **Conditional breakpoint** | Stop only when `x == nil` / `id == 42` |
97
+ | **Logpoint** (debugger) | Inject log without modifying source — useful in prod-like envs |
98
+ | **Memory / heap profiler** | Suspected memory leak or unbounded growth |
99
+ | **CPU profiler** | Slow path / hot loop |
100
+ | **Network trace** (Wireshark, browser devtools) | Wire-level issue with external API |
101
+ | **strace / dtruss** | Syscall-level (file, network) on Unix |
102
+ | **Time-travel debugger** (rr, Replay) | Hard non-determinism, race conditions |
103
+ | **Distributed tracing** (OpenTelemetry, Jaeger) | Cross-service latency or error origin |
83
104
 
84
105
  ### Gate
85
- - [ ] Full call chain from entry → failure documented
106
+ - [ ] Full call chain documented
86
107
  - [ ] Source of faulty data identified
87
108
  - [ ] Actual vs expected type / state recorded
88
109
 
89
110
  ---
90
111
 
91
- ## Step 4: Find the root cause — answer 3 questions
112
+ ## Step 4: ROOT CAUSE — answer 3 questions
92
113
 
93
114
  1. **Why does it fail?** — the specific technical cause
94
- 2. **Why didn't it fail before?** — what changed
95
- 3. **Reproduction conditions?** — when it fails, when it doesn't
115
+ 2. **Why didn't it fail before?** — what changed (deploy, dep, data shape, config, traffic)
116
+ 3. **Reproduction conditions?** — exact inputs / state that trigger it
96
117
 
97
- If you cannot answer all 3 → return to Step 3, trace further.
118
+ If you cannot answer all 3 → return to Step 3.
98
119
 
99
120
  ### Gate
100
- - [ ] All 3 questions answered with evidence (not speculation)
121
+ - [ ] All 3 questions answered with **evidence**, not speculation
101
122
 
102
123
  ---
103
124
 
104
- ## Step 5: Check hidden state sources
105
-
106
- "Sometimes works, sometimes doesn't" bugs are usually caused by hidden state. Check in this order:
107
-
108
- ### Cache / Serialization
109
- - Does the cached object lose internal state? (transient fields, lazy-loaded properties)
110
- - Does stale cache contain the old data format while new code expects the new format?
111
- - Does serialize / unserialize change the type? (int↔float, null handling, enum↔string)
112
-
113
- ### Database / Storage
114
- - Do collation / encoding affect comparisons?
115
- - Do default values in the DB match the code's expectations?
116
- - Has the schema been updated on production yet?
117
-
118
- ### Runtime / Compiled cache
119
- - Any compiled / cached config, routes, or views not cleared?
120
- - Does the bytecode cache (OPcache, compiled assets) serve the old file?
121
- - Does CDN / proxy cache serve a stale asset?
122
-
123
- ### Environment
124
- - Are env vars on production correct and complete?
125
- - Does the runtime version (PHP, Node, Go, Python...) differ from local?
126
- - Do dependency versions differ?
125
+ ## Step 5: HIDDEN STATE check 6 sources
126
+
127
+ "Sometimes works, sometimes doesn't" bugs live here.
128
+
129
+ ### 5a. Cache / serialization
130
+ - Cached object lost transient fields / lazy-loaded properties?
131
+ - Stale cache has OLD shape; new code expects NEW shape?
132
+ - Serialize / deserialize changes types? (int↔float, null handling, enum↔string, date timezone)
133
+
134
+ ### 5b. Database / storage
135
+ - Collation / encoding affecting comparisons (e.g., case-insensitive collation hiding duplicates)?
136
+ - DB default values mismatch with code expectations (null vs empty string)?
137
+ - Schema on prod vs schema in code (migration not applied)?
138
+ - **Read replica lag** — write to primary, read from replica returns stale data?
139
+
140
+ ### 5c. Concurrency / async
141
+ - **Race condition** two requests modifying shared state simultaneously
142
+ - **Deadlock / livelock** lock acquired but never released
143
+ - **Goroutine / async leak** — handler returned but background work continues
144
+ - **Request context cancelled** while async work depended on it
145
+ - **Channel / queue overflow** messages dropped silently
146
+ - Use logs with nanosecond timestamps + request IDs to reconstruct the timeline
147
+
148
+ ### 5d. Runtime / compiled cache
149
+ - OPcache / bytecode cache serving old file
150
+ - Compiled config / routes / views not cleared after deploy
151
+ - CDN / proxy cache serving stale asset
152
+ - Browser cache / service worker
153
+
154
+ ### 5e. Environment
155
+ - Env vars on prod correct + complete?
156
+ - Runtime version (Node 20 vs 18, Go 1.22 vs 1.21) differs from local?
157
+ - Dependency versions differ (lockfile drift, transitive update)?
158
+
159
+ ### 5f. Multi-tenancy (SaaS-specific)
160
+ - **Tenant ID leak** — query missing `WHERE tenant_id = ?`
161
+ - Cache key missing tenant prefix → tenant A sees tenant B's data
162
+ - Background job inherits wrong tenant context
163
+ - Connection pool reused across tenants without reset
127
164
 
128
165
  ### Gate
129
- - [ ] All 4 categories considered (even if N/A write that down)
166
+ - [ ] All 6 categories considered (write N/A if not applicable)
167
+ - [ ] At least one category identified as the hidden state source (or explicitly ruled out)
130
168
 
131
169
  ---
132
170
 
133
- ## Step 6: Fix
171
+ ## Step 6: FIX
172
+
173
+ Only after Step 4 is answered. The fix MUST:
134
174
 
135
- Only fix once you have answered the 3 questions from Step 4. The fix MUST:
175
+ - Address **root cause**, not symptom
176
+ - Be defensive at **trust boundaries** (cache, DB, external API, user input) — NOT in internal logic
177
+ - Handle the specific edge case found, without breaking the normal path
178
+ - Be small + reviewable
179
+ - Land in the correct layer (per `~/.claude/architecture/ddd-architecture.md`)
136
180
 
137
- - Address the root cause, not the symptom
138
- - Handle the edge case discovered (stale cache, type mismatch)
139
- - Be defensive at data boundaries (cache, DB, external API) — NOT in internal logic
140
- - NOT break the normal code path in order to patch an edge case
181
+ ### Boundary defense pattern
182
+ For data-shape bugs from external sources: validate / coerce at the adapter, not inside business logic.
141
183
 
142
184
  ### Gate
143
- - [ ] Fix targets root cause, not symptom
185
+ - [ ] Fix targets root cause
186
+ - [ ] Defended at the boundary
144
187
  - [ ] Normal code path not regressed
145
188
 
146
189
  ---
147
190
 
148
- ## Step 7: Verify
191
+ ## Step 7: VERIFY
149
192
 
150
- - Reproduce the failure conditions from Step 4 → confirm the fix works
151
- - Check the normal code path still works
152
- - If cache-related → test BOTH fresh load and cached load
153
- - Verify against the actually deployed version (repeat Step 2)
193
+ - Reproduce the Step 4 conditions → confirm fix works
194
+ - Normal code path still works
195
+ - Cache-related → test fresh load AND cached load
196
+ - Concurrency-related reproduce under **load test** (10-100x normal concurrency)
197
+ - Verify against the deployed version (repeat Step 2)
198
+ - Add a **regression test** in the appropriate layer
154
199
 
155
200
  ### Gate
156
201
  - [ ] Original failure no longer reproducible
157
- - [ ] Normal flow still works
158
- - [ ] Cached / serialized paths both tested (if applicable)
202
+ - [ ] Normal flow works
203
+ - [ ] Cached / serialized paths both work (if applicable)
204
+ - [ ] Load-tested if concurrency-related
205
+ - [ ] Regression test added
159
206
 
160
207
  ---
161
208
 
@@ -165,36 +212,46 @@ Only fix once you have answered the 3 questions from Step 4. The fix MUST:
165
212
  ## Bug: {short description}
166
213
 
167
214
  ### Root Cause
168
- {Answer to "why does it fail" — the actual technical cause}
215
+ {Specific technical cause from Step 4 Q1}
169
216
 
170
217
  ### Why it didn't fail before
171
- {What changed: deploy, dependency, data shape, config}
218
+ {What changed: deploy / dependency / data shape / config / traffic / runtime}
172
219
 
173
220
  ### Reproduction
174
- {Exact steps to reproduce}
221
+ {Exact steps + data + environment}
222
+
223
+ ### Hidden state source
224
+ {Cache / DB / Concurrency / Runtime / Env / Multi-tenant — or "none"}
175
225
 
176
226
  ### Fix
177
227
  - File: `path/to/file:line`
178
- - Change: {what changed and why this addresses root cause, not symptom}
228
+ - Layer: {handler / usecase / infra adapter}
229
+ - Approach: {boundary defense / type coercion / locking / cache invalidation / etc.}
230
+ - Why this is root-cause, not symptom: {explanation}
179
231
 
180
- ### Hidden state source
181
- {Cache / Storage / Runtime / Env — or "none"}
232
+ ### Regression test
233
+ - File: `path/to/test:line`
234
+ - Reproduces the original failure when fix removed
182
235
 
183
236
  ### Verification
184
237
  - [x] Original failure no longer reproducible
185
238
  - [x] Normal path works
186
239
  - [x] Cached path works (if applicable)
240
+ - [x] Load tested (if concurrency-related)
187
241
  ```
188
242
 
189
243
  ---
190
244
 
191
245
  ## Hard Rules
192
246
 
193
- - **DO NOT GUESS** — trace evidence, do not infer from variable names or "maybe it's..."
194
- - **DO NOT FIX BEFORE UNDERSTANDING** — fixing without knowing the root cause = creating a new bug
195
- - **VERIFY DEPLOYED CODE** — always check the running version, never assume production = local
196
- - **CHECK CACHE FIRST** most "sometimes works, sometimes doesn't" bugs come from stale cached state
197
- - **ONE ROOT CAUSE** every bug has one root cause. If multiple possibilities remain → trace further
247
+ - **DO NOT GUESS** — trace evidence, never infer from variable names
248
+ - **DO NOT FIX BEFORE UNDERSTANDING** — premature fix = new bug
249
+ - **VERIFY DEPLOYED CODE** — never assume prod = local
250
+ - **CHECK CACHE FIRST** for intermittent bugs
251
+ - **CHECK MULTI-TENANCY** if SaaS-style
252
+ - **ONE ROOT CAUSE per bug** — if multiple possibilities remain, trace further
253
+ - **TIME-BOX investigation** — if >2 h without convergence, ask for help
254
+ - **REGRESSION TEST required** — fix without test = bug returns
198
255
 
199
256
  ---
200
257
 
@@ -203,17 +260,17 @@ Only fix once you have answered the 3 questions from Step 4. The fix MUST:
203
260
  | When | Use |
204
261
  |------|-----|
205
262
  | Bug is understood, just needs a fix | `/fix:hotfix` |
206
- | Production is down, users impacted | `/fix:incident` |
207
- | Need to write a regression test after the fix | `/review:tdd` |
208
- | Need to research how others solved similar bugs | `/research:web` |
209
-
210
- ---
263
+ | Production is down | `/fix:incident` (then this skill after mitigation) |
264
+ | Write regression test after fix | `/review:tdd` |
265
+ | Research how others solved similar bugs | `/research:web` |
211
266
 
212
267
  ## Recommended Agents
213
268
 
214
269
  | Phase | Agent | Purpose |
215
270
  |-------|-------|---------|
216
- | Step 3 (trace) | `@code-reviewer` | Independent reading of call chain |
217
- | Step 5 (hidden state) | `@db-designer` | Schema / collation / index checks |
218
- | Step 6 (fix) | Stack-specific dev agent | Implement defensive fix at boundary |
219
- | Step 7 (verify) | `@test-writer` | Regression test for the failing condition |
271
+ | Trace | `@code-reviewer` | Independent reading of call chain |
272
+ | Hidden state DB | `@db-designer` | Schema, indexes, collation, replication |
273
+ | Hidden state concurrency | `@perf-optimizer` | Race, deadlock, async leak |
274
+ | Hidden state security/tenancy | `@security-audit` | Tenant isolation, auth context |
275
+ | Fix | Stack-specific dev agent | Boundary-defensive fix |
276
+ | Verify | `@test-writer` | Regression test |
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: docs-content
2
+ name: marketing-content
3
3
  description: Create content writing strategy including blog posts, social media, newsletters, and SEO content plans. Use when user says "write content", "content strategy", "blog post", "social media content", "content plan", "seo content", "newsletter".
4
4
  ---
5
5
 
@@ -14,7 +14,7 @@ Workflow for creating content strategy: audience research, content pillars, SEO
14
14
  - ✅ Repurposing one piece into multi-channel content
15
15
  - ❌ Writing API / project documentation → use `/docs:write` or `/docs:sync`
16
16
  - ❌ Writing release notes / changelog → use git history + manual
17
- - ❌ Designing a video → use `/docs:video`
17
+ - ❌ Designing a video → use `/marketing:video`
18
18
 
19
19
  ---
20
20
 
@@ -251,8 +251,8 @@ SIGNATURE
251
251
 
252
252
  | When | Use |
253
253
  |------|-----|
254
- | Building brand identity (logo + colors) | `/docs:logo` |
255
- | Creating video scripts / storyboards | `/docs:video` |
254
+ | Building brand identity (logo + colors) | `/marketing:logo` |
255
+ | Creating video scripts / storyboards | `/marketing:video` |
256
256
  | Building a full marketing plan | `/marketing` (combines all three) |
257
257
  | Writing project documentation | `/docs:write` |
258
258
 
@@ -0,0 +1,252 @@
1
+ ---
2
+ name: marketing-logo
3
+ description: Generate comprehensive logo design specifications, brand identity guidelines, and visual concepts. Use when user says "design logo", "create logo", "brand identity", "logo concept", "visual identity".
4
+ ---
5
+
6
+ # Logo Design Skill
7
+
8
+ Produce a logo + brand identity **specification** that a designer can execute (or you can use as a direct prompt to a generative tool). Output is a brand guidelines doc, not finished art.
9
+
10
+ ## When to use this skill
11
+
12
+ - ✅ Brand new identity (no existing logo)
13
+ - ✅ Rebrand / refresh of an existing logo + guidelines
14
+ - ✅ Need a deliverable spec for a designer to execute
15
+ - ❌ Just need a quick icon variation → use a design tool directly
16
+ - ❌ Full marketing plan (logo + content + video) → use `/marketing`
17
+ - ❌ Video-specific visuals → use `/marketing:video`
18
+
19
+ ---
20
+
21
+ ## Workflow
22
+
23
+ ```
24
+ DISCOVER → CONCEPT → DESIGN → REFINE → DELIVER
25
+ ```
26
+
27
+ ---
28
+
29
+ ## Phase 1: DISCOVER (30 min)
30
+
31
+ **Goal:** capture brand intent before sketching.
32
+
33
+ ### Discovery brief
34
+
35
+ Ask the user (skip what's known):
36
+
37
+ | Field | Example |
38
+ |-------|---------|
39
+ | Name + tagline | "Acme — DevOps for indie teams" |
40
+ | 3-5 personality adjectives | "modern, technical, irreverent, sharp, friendly" |
41
+ | Primary audience | "Solo / small-team backend engineers" |
42
+ | Industry | "Developer tools / SaaS" |
43
+ | Competitors (3-5) | + 1 line each on what their logo says about them |
44
+ | Style direction (pick 1-2) | minimal / wordmark / monogram / abstract mark / illustrative / mascot |
45
+ | What to AVOID | "no cliché cloud icons, no gradients on the mark" |
46
+ | Where it lives | favicon + GitHub avatar + landing hero + dark / light themes + print |
47
+ | Color hints | "must work in single-color print + on dark UI" |
48
+ | Budget for the brand | "MVP — logo + 1 palette + 2 fonts" vs "full system" |
49
+
50
+ ### Gate
51
+ - [ ] Personality adjectives captured (forces concept differentiation)
52
+ - [ ] Competitor scan done (don't accidentally copy)
53
+ - [ ] Style direction narrowed to 1-2
54
+ - [ ] Avoid-list captured
55
+
56
+ ---
57
+
58
+ ## Phase 2: CONCEPT — propose 3 directions
59
+
60
+ **Goal:** present 3 *distinct* concepts. Same concept in 3 colors ≠ 3 concepts.
61
+
62
+ Each concept must have:
63
+
64
+ ```markdown
65
+ ## Concept {N}: {short name}
66
+
67
+ **Direction:** {wordmark / monogram / abstract mark / etc.}
68
+ **Rationale:** Why this matches the brand personality + audience. Cite 2-3 adjectives.
69
+ **Differentiation:** What competitor it does NOT look like, and why that matters.
70
+ **ASCII sketch** (rough — describes shape, not pixel-perfect):
71
+ ```
72
+ ___________
73
+ | A C M E |
74
+ |___________|
75
+ ```
76
+ **Inspiration:** 2-3 reference links (existing logos, styles)
77
+ **Risks:** What could go wrong (e.g., "monogram unreadable below 24px")
78
+ ```
79
+
80
+ ### Concept variety rules
81
+ - Different *form* (wordmark vs mark vs combination)
82
+ - Different *feel* (geometric vs hand-drawn vs typographic)
83
+ - Different *complexity* (minimal vs detailed)
84
+
85
+ ### Gate
86
+ - [ ] 3 concepts presented
87
+ - [ ] Each has rationale + differentiation + risk
88
+ - [ ] **User selected ONE** (or asked for hybrid — repeat phase)
89
+
90
+ ---
91
+
92
+ ## Phase 3: DESIGN — flesh out the chosen concept
93
+
94
+ **Goal:** produce specifications a designer can build.
95
+
96
+ ### 3.1 Logo construction
97
+
98
+ ```markdown
99
+ ### Logo: {name}
100
+
101
+ **Lockup**
102
+ - Primary: {wordmark / mark / mark + wordmark side-by-side / stacked}
103
+ - Secondary (when primary doesn't fit): {variant}
104
+ - Icon-only (favicon, avatar): {variant}
105
+
106
+ **Geometry**
107
+ - Grid: {e.g., "8-unit grid, mark fits in 8x8 square"}
108
+ - Proportions: {e.g., "wordmark cap-height = 5 units; mark = 8 units; gap = 2 units"}
109
+
110
+ **Clear space**
111
+ - Minimum: {e.g., "1 cap-height on all sides"}
112
+
113
+ **Minimum size**
114
+ - Digital: {e.g., "24px height"}
115
+ - Print: {e.g., "8mm height"}
116
+ ```
117
+
118
+ ### 3.2 Color palette
119
+
120
+ Pick a primary + secondary + neutrals. Provide every color in:
121
+ - HEX, RGB, HSL
122
+ - CMYK (for print)
123
+ - WCAG AA contrast against white and against black (note pass / fail)
124
+ - Tailwind variable name (if relevant)
125
+
126
+ ```markdown
127
+ | Token | HEX | RGB | HSL | Use |
128
+ |-------|-----|-----|-----|-----|
129
+ | `--brand-primary` | #0F172A | 15,23,42 | 222 47% 11% | logo, headlines |
130
+ | `--brand-accent` | #14B8A6 | 20,184,166 | 173 80% 40% | CTA, links |
131
+ | `--neutral-fg` | #1F2937 | 31,41,55 | 220 26% 14% | body text |
132
+ | `--neutral-bg` | #F8FAFC | 248,250,252 | 210 40% 98% | page bg |
133
+ ```
134
+
135
+ ### 3.3 Typography
136
+
137
+ Pick 1 display + 1 body font (or 1 font in 2 weights). Note:
138
+ - Family + fallback stack
139
+ - Weights used (display, body, light)
140
+ - Pairing rationale (1 line)
141
+ - License (open / Google Fonts / commercial)
142
+
143
+ ### 3.4 Voice
144
+ - 3 voice attributes (e.g., "direct, witty, never corporate-speak")
145
+ - 3 do / 3 don't examples (1 line each)
146
+
147
+ ### Gate
148
+ - [ ] All lockup variants specified
149
+ - [ ] Palette has WCAG contrast notes
150
+ - [ ] Typography choice has rationale + license
151
+ - [ ] Voice has do/don't examples
152
+
153
+ ---
154
+
155
+ ## Phase 4: REFINE
156
+
157
+ **Goal:** test the design against real use, iterate.
158
+
159
+ ### Test scenarios (write down result for each)
160
+ - [ ] Favicon at 16×16 — still recognizable?
161
+ - [ ] On dark background — does it still work?
162
+ - [ ] Single-color print (black-only fax test) — still readable?
163
+ - [ ] Next to 2-3 competitor logos — does it stand out?
164
+ - [ ] At 100% scale on hero — does it carry the page?
165
+
166
+ ### Feedback loop
167
+ - Present to user with each scenario
168
+ - Capture changes requested
169
+ - If >2 rounds of changes → consider re-concepting (Phase 2)
170
+
171
+ ### Gate
172
+ - [ ] All 5 scenarios tested
173
+ - [ ] User approved final version
174
+
175
+ ---
176
+
177
+ ## Phase 5: DELIVER — brand guidelines doc
178
+
179
+ **Goal:** ship a single doc + asset list a designer / dev can use.
180
+
181
+ ### `brand-guidelines.md` skeleton
182
+
183
+ ```markdown
184
+ # {Brand} Brand Guidelines
185
+
186
+ ## Logo
187
+ - {Primary, secondary, icon lockups as files: SVG + PNG}
188
+ - Clear space + min size rules
189
+ - Wrong uses (with examples: don't recolor, don't squish, don't add effects)
190
+
191
+ ## Color
192
+ - Token table from Phase 3.2
193
+ - Usage rules (when primary vs accent)
194
+ - Accessibility (contrast notes)
195
+
196
+ ## Typography
197
+ - Stack from Phase 3.3
198
+ - Hierarchy: H1/H2/H3/body sizes
199
+ - Web vs print
200
+
201
+ ## Voice
202
+ - From Phase 3.4
203
+ - Sample headline + body + CTA copy
204
+
205
+ ## Examples
206
+ - 1 hero, 1 card, 1 button shown with the brand applied
207
+ ```
208
+
209
+ ### Asset checklist (what to hand to designer / dev)
210
+
211
+ - [ ] `logo-primary.svg` + `logo-primary.png` (1x, 2x, 4x)
212
+ - [ ] `logo-secondary.svg` + `.png`
213
+ - [ ] `logo-mark.svg` + `.png`
214
+ - [ ] `favicon.ico` (16, 32, 48), `apple-touch-icon.png` (180×180), `og-image.png` (1200×630)
215
+ - [ ] Social avatars: square 400×400 + cover per platform (Twitter 1500×500, LinkedIn 1128×191, etc.)
216
+ - [ ] Color tokens: `colors.css` (CSS variables) + `tailwind.config.js` snippet (if Tailwind)
217
+ - [ ] Brand guidelines PDF or `.md`
218
+
219
+ ### Gate
220
+ - [ ] Guidelines doc written
221
+ - [ ] Asset checklist exists (even if generation is by a designer)
222
+ - [ ] Developer-ready tokens included (CSS / Tailwind)
223
+
224
+ ---
225
+
226
+ ## Hard Rules
227
+
228
+ - **3 *distinct* concepts in Phase 2** — same concept in 3 colors = lazy
229
+ - **WCAG AA contrast minimum** on text colors
230
+ - **Mark must read at 16px** — if it doesn't, redesign, don't compromise
231
+ - **No gradient on the primary mark** — gradients don't print, don't fax, don't embroider well
232
+ - **License-clean fonts only** — no "found on the internet" type
233
+
234
+ ---
235
+
236
+ ## Related Skills
237
+
238
+ | When | Use |
239
+ |------|-----|
240
+ | Full marketing plan (logo + content + video) | `/marketing` |
241
+ | Write content with the brand | `/marketing:content` |
242
+ | Create video with the brand | `/marketing:video` |
243
+ | Document brand guidelines as a doc | `/docs:write` |
244
+
245
+ ## Recommended Agents
246
+
247
+ | Phase | Agent | Purpose |
248
+ |-------|-------|---------|
249
+ | DISCOVER | `@docs-writer` | Capture brand brief |
250
+ | CONCEPT | `@clean-architect` | Structure the system |
251
+ | DESIGN | `@docs-writer` | Spec documents |
252
+ | DELIVER | `@docs-writer` | Brand guidelines doc |