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.
- package/README.md +20 -9
- package/assets/architecture/_shared/severity-levels.md +34 -0
- package/assets/architecture/_shared/stack-detection.md +34 -0
- package/assets/commands/marketing.md +7 -7
- package/assets/skills/docs/sync/SKILL.md +159 -519
- package/assets/skills/docs/write/SKILL.md +89 -186
- package/assets/skills/feature/new/SKILL.md +152 -192
- package/assets/skills/feature/refactor/SKILL.md +152 -233
- package/assets/skills/fix/hotfix/SKILL.md +139 -305
- package/assets/skills/fix/incident/SKILL.md +107 -19
- package/assets/skills/fix/pr-comment/SKILL.md +98 -224
- package/assets/skills/fix/root-cause/SKILL.md +161 -104
- package/assets/skills/{docs → marketing}/content/SKILL.md +4 -4
- package/assets/skills/marketing/logo/SKILL.md +252 -0
- package/assets/skills/marketing/seo-blog/SKILL.md +367 -0
- package/assets/skills/marketing/video/SKILL.md +258 -0
- package/assets/skills/research/onboarding/SKILL.md +127 -510
- package/assets/skills/research/spike/SKILL.md +128 -436
- package/assets/skills/research/web/SKILL.md +124 -83
- package/assets/skills/review/architect/SKILL.md +157 -306
- package/assets/skills/review/branch/SKILL.md +153 -208
- package/assets/skills/review/pr/SKILL.md +129 -519
- package/assets/skills/review/tdd/SKILL.md +108 -69
- package/bin/cli.js +2 -2
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +176 -8
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +31 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +30 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +64 -8
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/utils/symlink.d.ts +1 -0
- package/dist/utils/symlink.d.ts.map +1 -1
- package/dist/utils/symlink.js +8 -6
- package/dist/utils/symlink.js.map +1 -1
- package/package.json +1 -1
- package/assets/skills/docs/logo/SKILL.md +0 -492
- 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
|
|
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
|
|
12
|
+
- ✅ Same bug returns after multiple "fixes"
|
|
13
13
|
- ✅ "Sometimes works, sometimes doesn't" — likely hidden state
|
|
14
|
-
- ✅ Error
|
|
15
|
-
- ✅ Local
|
|
16
|
-
-
|
|
17
|
-
- ❌
|
|
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:
|
|
32
|
+
## Step 1: COLLECT — capture evidence exactly
|
|
30
33
|
|
|
31
|
-
Record
|
|
34
|
+
Record **verbatim**, do not interpret:
|
|
32
35
|
|
|
33
|
-
- Exact error message
|
|
34
|
-
- Stack trace: file, line
|
|
35
|
-
-
|
|
36
|
-
-
|
|
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
|
|
40
|
-
- [ ] Stack trace captured (or
|
|
41
|
-
- [ ]
|
|
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:
|
|
50
|
+
## Step 2: VERIFY — running code = local code?
|
|
46
51
|
|
|
47
|
-
|
|
52
|
+
Do NOT assume prod = local.
|
|
48
53
|
|
|
49
|
-
- Identify the
|
|
50
|
-
-
|
|
51
|
-
- If they
|
|
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
|
|
61
|
+
- [ ] Local checkout matches OR differences understood
|
|
56
62
|
|
|
57
63
|
---
|
|
58
64
|
|
|
59
|
-
## Step 3:
|
|
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
|
-
|
|
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
|
-
###
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
|
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:
|
|
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?** —
|
|
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
|
|
118
|
+
If you cannot answer all 3 → return to Step 3.
|
|
98
119
|
|
|
99
120
|
### Gate
|
|
100
|
-
- [ ] All 3 questions answered with evidence
|
|
121
|
+
- [ ] All 3 questions answered with **evidence**, not speculation
|
|
101
122
|
|
|
102
123
|
---
|
|
103
124
|
|
|
104
|
-
## Step 5:
|
|
105
|
-
|
|
106
|
-
"Sometimes works, sometimes doesn't" bugs
|
|
107
|
-
|
|
108
|
-
### Cache /
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
### Database /
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
|
|
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
|
|
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:
|
|
171
|
+
## Step 6: FIX
|
|
172
|
+
|
|
173
|
+
Only after Step 4 is answered. The fix MUST:
|
|
134
174
|
|
|
135
|
-
|
|
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
|
-
|
|
138
|
-
-
|
|
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
|
|
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:
|
|
191
|
+
## Step 7: VERIFY
|
|
149
192
|
|
|
150
|
-
- Reproduce the
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
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
|
|
158
|
-
- [ ] Cached / serialized paths both
|
|
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
|
-
{
|
|
215
|
+
{Specific technical cause from Step 4 Q1}
|
|
169
216
|
|
|
170
217
|
### Why it didn't fail before
|
|
171
|
-
{What changed: deploy
|
|
218
|
+
{What changed: deploy / dependency / data shape / config / traffic / runtime}
|
|
172
219
|
|
|
173
220
|
### Reproduction
|
|
174
|
-
{Exact steps
|
|
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
|
-
-
|
|
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
|
-
###
|
|
181
|
-
|
|
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,
|
|
194
|
-
- **DO NOT FIX BEFORE UNDERSTANDING** —
|
|
195
|
-
- **VERIFY DEPLOYED CODE** —
|
|
196
|
-
- **CHECK CACHE FIRST**
|
|
197
|
-
- **
|
|
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
|
|
207
|
-
|
|
|
208
|
-
|
|
|
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
|
-
|
|
|
217
|
-
|
|
|
218
|
-
|
|
|
219
|
-
|
|
|
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:
|
|
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 `/
|
|
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) | `/
|
|
255
|
-
| Creating video scripts / storyboards | `/
|
|
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 |
|