moicle 1.7.0 → 2.1.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 +76 -27
- 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 +245 -0
- package/assets/skills/docs/write/SKILL.md +274 -0
- package/assets/skills/feature/api/SKILL.md +277 -0
- package/assets/skills/feature/deprecate/SKILL.md +276 -0
- package/assets/skills/feature/new/SKILL.md +273 -0
- package/assets/skills/feature/refactor/SKILL.md +269 -0
- package/assets/skills/fix/hotfix/SKILL.md +233 -0
- package/assets/skills/fix/incident/SKILL.md +360 -0
- package/assets/skills/fix/pr-comment/SKILL.md +186 -0
- package/assets/skills/fix/root-cause/SKILL.md +276 -0
- package/assets/skills/marketing/content/SKILL.md +269 -0
- 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 +225 -0
- package/assets/skills/research/spike/SKILL.md +228 -0
- package/assets/skills/research/web/SKILL.md +204 -0
- package/assets/skills/review/architect/SKILL.md +274 -0
- package/assets/skills/review/branch/SKILL.md +277 -0
- package/assets/skills/review/pr/SKILL.md +231 -0
- package/assets/skills/review/tdd/SKILL.md +245 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +2 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/utils/symlink.d.ts +7 -0
- package/dist/utils/symlink.d.ts.map +1 -1
- package/dist/utils/symlink.js +82 -0
- package/dist/utils/symlink.js.map +1 -1
- package/package.json +1 -1
- package/assets/skills/api-integration/SKILL.md +0 -883
- package/assets/skills/architect-review/SKILL.md +0 -393
- package/assets/skills/content-writer/SKILL.md +0 -721
- package/assets/skills/deep-debug/SKILL.md +0 -114
- package/assets/skills/deprecation/SKILL.md +0 -923
- package/assets/skills/documentation/SKILL.md +0 -1333
- package/assets/skills/fix-pr-comment/SKILL.md +0 -283
- package/assets/skills/hotfix/SKILL.md +0 -397
- package/assets/skills/incident-response/SKILL.md +0 -946
- package/assets/skills/logo-design/SKILL.md +0 -477
- package/assets/skills/new-feature/SKILL.md +0 -297
- package/assets/skills/onboarding/SKILL.md +0 -607
- package/assets/skills/pr-review/SKILL.md +0 -620
- package/assets/skills/refactor/SKILL.md +0 -338
- package/assets/skills/research/SKILL.md +0 -124
- package/assets/skills/review-changes/SKILL.md +0 -312
- package/assets/skills/spike/SKILL.md +0 -535
- package/assets/skills/sync-docs/SKILL.md +0 -575
- package/assets/skills/tdd/SKILL.md +0 -828
- package/assets/skills/video-content/SKILL.md +0 -651
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fix-root-cause
|
|
3
|
+
description: Deep bug investigation workflow for hard-to-trace errors. Systematic root cause analysis — no guessing, no blind fixes. Use when user says "deep debug", "deep-debug", "trace bug", "find root cause", "hard bug", "investigate bug".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Deep Bug Investigation
|
|
7
|
+
|
|
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
|
+
|
|
10
|
+
## When to use this skill
|
|
11
|
+
|
|
12
|
+
- ✅ Same bug returns after multiple "fixes"
|
|
13
|
+
- ✅ "Sometimes works, sometimes doesn't" — likely hidden state
|
|
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
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Workflow
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
COLLECT → VERIFY → TRACE → ROOT CAUSE → CHECK HIDDEN STATE → FIX → VERIFY
|
|
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
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Step 1: COLLECT — capture evidence exactly
|
|
33
|
+
|
|
34
|
+
Record **verbatim**, do not interpret:
|
|
35
|
+
|
|
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?
|
|
41
|
+
|
|
42
|
+
### Gate
|
|
43
|
+
- [ ] Error captured verbatim
|
|
44
|
+
- [ ] Stack trace captured (or noted absent)
|
|
45
|
+
- [ ] Frequency known
|
|
46
|
+
- [ ] Timing noted (helps narrow "what changed")
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Step 2: VERIFY — running code = local code?
|
|
51
|
+
|
|
52
|
+
Do NOT assume prod = local.
|
|
53
|
+
|
|
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
|
|
58
|
+
|
|
59
|
+
### Gate
|
|
60
|
+
- [ ] Deployed commit identified
|
|
61
|
+
- [ ] Local checkout matches OR differences understood
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
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?
|
|
78
|
+
|
|
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?
|
|
83
|
+
|
|
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?
|
|
88
|
+
|
|
89
|
+
### Debugging tools
|
|
90
|
+
|
|
91
|
+
Use the right tool, not just `console.log`:
|
|
92
|
+
|
|
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 |
|
|
104
|
+
|
|
105
|
+
### Gate
|
|
106
|
+
- [ ] Full call chain documented
|
|
107
|
+
- [ ] Source of faulty data identified
|
|
108
|
+
- [ ] Actual vs expected type / state recorded
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Step 4: ROOT CAUSE — answer 3 questions
|
|
113
|
+
|
|
114
|
+
1. **Why does it fail?** — the specific technical cause
|
|
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
|
|
117
|
+
|
|
118
|
+
If you cannot answer all 3 → return to Step 3.
|
|
119
|
+
|
|
120
|
+
### Gate
|
|
121
|
+
- [ ] All 3 questions answered with **evidence**, not speculation
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
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
|
|
164
|
+
|
|
165
|
+
### Gate
|
|
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)
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Step 6: FIX
|
|
172
|
+
|
|
173
|
+
Only after Step 4 is answered. The fix MUST:
|
|
174
|
+
|
|
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`)
|
|
180
|
+
|
|
181
|
+
### Boundary defense pattern
|
|
182
|
+
For data-shape bugs from external sources: validate / coerce at the adapter, not inside business logic.
|
|
183
|
+
|
|
184
|
+
### Gate
|
|
185
|
+
- [ ] Fix targets root cause
|
|
186
|
+
- [ ] Defended at the boundary
|
|
187
|
+
- [ ] Normal code path not regressed
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Step 7: VERIFY
|
|
192
|
+
|
|
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
|
|
199
|
+
|
|
200
|
+
### Gate
|
|
201
|
+
- [ ] Original failure no longer reproducible
|
|
202
|
+
- [ ] Normal flow works
|
|
203
|
+
- [ ] Cached / serialized paths both work (if applicable)
|
|
204
|
+
- [ ] Load-tested if concurrency-related
|
|
205
|
+
- [ ] Regression test added
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Final Report
|
|
210
|
+
|
|
211
|
+
```markdown
|
|
212
|
+
## Bug: {short description}
|
|
213
|
+
|
|
214
|
+
### Root Cause
|
|
215
|
+
{Specific technical cause from Step 4 Q1}
|
|
216
|
+
|
|
217
|
+
### Why it didn't fail before
|
|
218
|
+
{What changed: deploy / dependency / data shape / config / traffic / runtime}
|
|
219
|
+
|
|
220
|
+
### Reproduction
|
|
221
|
+
{Exact steps + data + environment}
|
|
222
|
+
|
|
223
|
+
### Hidden state source
|
|
224
|
+
{Cache / DB / Concurrency / Runtime / Env / Multi-tenant — or "none"}
|
|
225
|
+
|
|
226
|
+
### Fix
|
|
227
|
+
- File: `path/to/file:line`
|
|
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}
|
|
231
|
+
|
|
232
|
+
### Regression test
|
|
233
|
+
- File: `path/to/test:line`
|
|
234
|
+
- Reproduces the original failure when fix removed
|
|
235
|
+
|
|
236
|
+
### Verification
|
|
237
|
+
- [x] Original failure no longer reproducible
|
|
238
|
+
- [x] Normal path works
|
|
239
|
+
- [x] Cached path works (if applicable)
|
|
240
|
+
- [x] Load tested (if concurrency-related)
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Hard Rules
|
|
246
|
+
|
|
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
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Related Skills
|
|
259
|
+
|
|
260
|
+
| When | Use |
|
|
261
|
+
|------|-----|
|
|
262
|
+
| Bug is understood, just needs a fix | `/fix:hotfix` |
|
|
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` |
|
|
266
|
+
|
|
267
|
+
## Recommended Agents
|
|
268
|
+
|
|
269
|
+
| Phase | Agent | Purpose |
|
|
270
|
+
|-------|-------|---------|
|
|
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 |
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: marketing-content
|
|
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
|
+
---
|
|
5
|
+
|
|
6
|
+
# Content Writer
|
|
7
|
+
|
|
8
|
+
Workflow for creating content strategy: audience research, content pillars, SEO blog posts, social media plans, newsletters.
|
|
9
|
+
|
|
10
|
+
## When to use this skill
|
|
11
|
+
|
|
12
|
+
- ✅ Building a content strategy from scratch (pillars, calendar, channels)
|
|
13
|
+
- ✅ Writing one specific piece (blog post, newsletter, social thread)
|
|
14
|
+
- ✅ Repurposing one piece into multi-channel content
|
|
15
|
+
- ❌ Writing API / project documentation → use `/docs:write` or `/docs:sync`
|
|
16
|
+
- ❌ Writing release notes / changelog → use git history + manual
|
|
17
|
+
- ❌ Designing a video → use `/marketing:video`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Workflow
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
RESEARCH → PLAN → WRITE → OPTIMIZE → DISTRIBUTE
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Phase 1: RESEARCH
|
|
30
|
+
|
|
31
|
+
**Goal:** understand audience, competitors, and SEO landscape.
|
|
32
|
+
|
|
33
|
+
### Gather brief
|
|
34
|
+
Ask the user for (skip what's already known):
|
|
35
|
+
|
|
36
|
+
| Field | Example |
|
|
37
|
+
|-------|---------|
|
|
38
|
+
| Brand / Product | "Acme — DevOps platform for indie teams" |
|
|
39
|
+
| Voice / Tone | "Casual but technical, no marketing fluff" |
|
|
40
|
+
| Primary audience | "Solo / small-team DevOps engineers" |
|
|
41
|
+
| Pain points | "Too many tools, none integrate well" |
|
|
42
|
+
| Goals (pick ≤2) | SEO traffic, lead gen, brand awareness, education, community, thought leadership |
|
|
43
|
+
| Current channels | Blog / X / LinkedIn / Dev.to / YouTube / Newsletter / Discord |
|
|
44
|
+
| Competitors | 3–5 names + what they do well |
|
|
45
|
+
|
|
46
|
+
### Audience & SEO research
|
|
47
|
+
- **Search intent** for the topic (informational / navigational / transactional / commercial)
|
|
48
|
+
- **Top 10 SERP** results for 3–5 target keywords — what content ranks?
|
|
49
|
+
- **Gaps** competitors miss (more depth, better examples, fresher data)
|
|
50
|
+
- **Keyword set** — primary + 2–5 long-tails per piece
|
|
51
|
+
|
|
52
|
+
### Gate
|
|
53
|
+
- [ ] Brief captured (skip fields already covered in conversation)
|
|
54
|
+
- [ ] Target keywords with search intent identified
|
|
55
|
+
- [ ] Competitor gap identified
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Phase 2: PLAN
|
|
60
|
+
|
|
61
|
+
**Goal:** define content pillars + calendar.
|
|
62
|
+
|
|
63
|
+
### Content pillars
|
|
64
|
+
Pick 3–5 themes that ladder up to the brand's positioning. Each pillar gets a mix of formats.
|
|
65
|
+
|
|
66
|
+
| Pillar | Why it matters to audience | Formats |
|
|
67
|
+
|--------|---------------------------|---------|
|
|
68
|
+
| {pillar 1} | {pain → outcome} | blog, social, newsletter |
|
|
69
|
+
| {pillar 2} | ... | ... |
|
|
70
|
+
|
|
71
|
+
### Calendar template
|
|
72
|
+
Plan 4–6 weeks ahead. Use a consistent cadence.
|
|
73
|
+
|
|
74
|
+
| Week | Blog (long-form) | Social (short-form) | Newsletter |
|
|
75
|
+
|------|------------------|---------------------|------------|
|
|
76
|
+
| W1 | {title} | 3 posts (1 educational, 1 hot take, 1 personal) | {topic} |
|
|
77
|
+
| W2 | ... | ... | ... |
|
|
78
|
+
|
|
79
|
+
### Content mix rule (per channel)
|
|
80
|
+
- **80/20:** 80% value (educate / entertain), 20% promote
|
|
81
|
+
- **Don't post when you have nothing to say** — skip a slot rather than post filler
|
|
82
|
+
|
|
83
|
+
### Gate
|
|
84
|
+
- [ ] 3–5 pillars defined with audience rationale
|
|
85
|
+
- [ ] Calendar drafted for ≥4 weeks
|
|
86
|
+
- [ ] Channels matched to audience habits
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Phase 3: WRITE
|
|
91
|
+
|
|
92
|
+
**Goal:** draft the actual content. One format at a time.
|
|
93
|
+
|
|
94
|
+
### Blog post structure (long-form, SEO)
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
TITLE (≤60 chars, includes primary keyword)
|
|
98
|
+
META DESCRIPTION (≤155 chars, includes primary keyword + CTA)
|
|
99
|
+
|
|
100
|
+
H1 (matches title or close variant)
|
|
101
|
+
|
|
102
|
+
HOOK (2–3 sentences: the problem the reader has)
|
|
103
|
+
|
|
104
|
+
TL;DR (3 bullets: the answer up front)
|
|
105
|
+
|
|
106
|
+
H2: Problem context — why this matters now
|
|
107
|
+
H2: The solution — your main argument / approach
|
|
108
|
+
H3: Step 1 / Aspect 1
|
|
109
|
+
H3: Step 2
|
|
110
|
+
H3: Step 3
|
|
111
|
+
H2: Common pitfalls — what NOT to do
|
|
112
|
+
H2: Real example — actual code / screenshot / case
|
|
113
|
+
H2: Next steps — what to do today
|
|
114
|
+
|
|
115
|
+
CTA (1 line: try the product / subscribe / share)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Target length: 1200–2500 words for SEO; 500–1000 for opinion pieces.
|
|
119
|
+
|
|
120
|
+
### Social thread (X / LinkedIn)
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
HOOK (1–2 lines — must work alone in the feed)
|
|
124
|
+
↓
|
|
125
|
+
3–7 posts each ≤280 chars
|
|
126
|
+
- Each post stands alone if shared
|
|
127
|
+
- One idea per post
|
|
128
|
+
- Use line breaks
|
|
129
|
+
↓
|
|
130
|
+
CTA (link to blog / signup)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Newsletter
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
SUBJECT (≤50 chars, curiosity > clickbait)
|
|
137
|
+
PREVIEW TEXT (≤90 chars, complements subject)
|
|
138
|
+
|
|
139
|
+
GREETING (personal, 1–2 lines)
|
|
140
|
+
|
|
141
|
+
MAIN STORY (1 idea, 200–400 words)
|
|
142
|
+
|
|
143
|
+
LINKS (3–5 curated, with 1-line why-it-matters)
|
|
144
|
+
|
|
145
|
+
CTA (one ask only)
|
|
146
|
+
|
|
147
|
+
SIGNATURE
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Writing rules
|
|
151
|
+
- **One idea per paragraph** (≤4 lines)
|
|
152
|
+
- **Active voice** ("the API returns" not "is returned by the API")
|
|
153
|
+
- **Concrete > abstract** (numbers, code, screenshots, names)
|
|
154
|
+
- **Cut filler:** "in order to" → "to", "due to the fact that" → "because", "very important" → "critical"
|
|
155
|
+
- **Read aloud** before publishing — if you stumble, rewrite
|
|
156
|
+
|
|
157
|
+
### Gate
|
|
158
|
+
- [ ] Draft matches the format's structure
|
|
159
|
+
- [ ] Primary keyword in title + H1 + first 100 words (blog)
|
|
160
|
+
- [ ] Read aloud — no stumbles
|
|
161
|
+
- [ ] At least 1 concrete example (number, code, screenshot, name)
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Phase 4: OPTIMIZE
|
|
166
|
+
|
|
167
|
+
**Goal:** make the content perform.
|
|
168
|
+
|
|
169
|
+
### Combined checklist (SEO + quality)
|
|
170
|
+
- [ ] Title ≤60 chars, includes primary keyword
|
|
171
|
+
- [ ] Meta description ≤155 chars
|
|
172
|
+
- [ ] H1 matches search intent
|
|
173
|
+
- [ ] H2/H3 use related keywords naturally
|
|
174
|
+
- [ ] Alt text on all images
|
|
175
|
+
- [ ] Internal links to ≥2 related posts
|
|
176
|
+
- [ ] External links to ≥1 authoritative source per major claim
|
|
177
|
+
- [ ] No keyword stuffing (read naturally)
|
|
178
|
+
- [ ] Mobile-friendly: short paragraphs, clear hierarchy
|
|
179
|
+
- [ ] Reading level appropriate for audience (Hemingway grade ≤10 for general)
|
|
180
|
+
- [ ] No typos (run a checker)
|
|
181
|
+
|
|
182
|
+
### Gate
|
|
183
|
+
- [ ] All checklist items pass (or explicit waiver)
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Phase 5: DISTRIBUTE
|
|
188
|
+
|
|
189
|
+
**Goal:** get the content in front of the right people.
|
|
190
|
+
|
|
191
|
+
### Per-channel adaptation
|
|
192
|
+
|
|
193
|
+
| Channel | Adaptation |
|
|
194
|
+
|---------|------------|
|
|
195
|
+
| Blog | Full piece, optimized for search |
|
|
196
|
+
| X | Thread of 3–7 posts pulling key insights + link to blog |
|
|
197
|
+
| LinkedIn | 1 long-form post (200–500 words), no link in body (link in comments) |
|
|
198
|
+
| Dev.to / Hashnode | Republish blog with canonical link to original |
|
|
199
|
+
| Reddit | Comment in relevant thread first, then share post only if community allows |
|
|
200
|
+
| Newsletter | Featured story or short blurb + link |
|
|
201
|
+
| YouTube Shorts / TikTok | 30–60 sec extract of key insight |
|
|
202
|
+
|
|
203
|
+
### Tracking
|
|
204
|
+
- UTM tags per channel: `?utm_source=X&utm_medium=social&utm_campaign={pillar}`
|
|
205
|
+
- Track per piece: views, time-on-page, scroll depth, conversions
|
|
206
|
+
- Iterate: double down on what works, kill what doesn't after 3 attempts
|
|
207
|
+
|
|
208
|
+
### Gate
|
|
209
|
+
- [ ] Adapted for each chosen channel
|
|
210
|
+
- [ ] UTM tags applied
|
|
211
|
+
- [ ] Tracking in place
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Final Report
|
|
216
|
+
|
|
217
|
+
```markdown
|
|
218
|
+
## Content Plan: {brand / campaign}
|
|
219
|
+
|
|
220
|
+
### Strategy
|
|
221
|
+
- Pillars: {list}
|
|
222
|
+
- Audience: {one line}
|
|
223
|
+
- Goal: {primary}
|
|
224
|
+
|
|
225
|
+
### Calendar (next 4 weeks)
|
|
226
|
+
{table}
|
|
227
|
+
|
|
228
|
+
### Pieces Drafted
|
|
229
|
+
| Title | Format | Status | Channel |
|
|
230
|
+
|-------|--------|--------|---------|
|
|
231
|
+
| ... | blog | published | site + X + LinkedIn |
|
|
232
|
+
|
|
233
|
+
### Metrics to Watch
|
|
234
|
+
- {KPI 1, baseline → target}
|
|
235
|
+
- {KPI 2}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Hard Rules
|
|
241
|
+
|
|
242
|
+
- **One idea per piece** — if you have two, write two pieces
|
|
243
|
+
- **No filler** — every paragraph earns its place
|
|
244
|
+
- **No keyword stuffing** — write for humans first, search engines second
|
|
245
|
+
- **Skip a slot rather than post filler**
|
|
246
|
+
- **Iterate based on data** — kill what doesn't work after 3 attempts
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Related Skills
|
|
251
|
+
|
|
252
|
+
| When | Use |
|
|
253
|
+
|------|-----|
|
|
254
|
+
| Building brand identity (logo + colors) | `/marketing:logo` |
|
|
255
|
+
| Creating video scripts / storyboards | `/marketing:video` |
|
|
256
|
+
| Building a full marketing plan | `/marketing` (combines all three) |
|
|
257
|
+
| Writing project documentation | `/docs:write` |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Recommended Agents
|
|
262
|
+
|
|
263
|
+
| Phase | Agent | Purpose |
|
|
264
|
+
|-------|-------|---------|
|
|
265
|
+
| RESEARCH | `@docs-writer` | Document research findings |
|
|
266
|
+
| PLAN | `@clean-architect` | Structure pillars and calendar |
|
|
267
|
+
| WRITE | `@docs-writer` | Draft pieces |
|
|
268
|
+
| OPTIMIZE | `@security-audit` | Check for sensitive content / claims |
|
|
269
|
+
| DISTRIBUTE | `@docs-writer` | Channel adaptations |
|