@sellable/mcp 0.1.236 → 0.1.237
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 +19 -14
- package/dist/server.js +28 -0
- package/dist/tools/campaigns.js +10 -7
- package/dist/tools/content-posts.d.ts +308 -0
- package/dist/tools/content-posts.js +611 -0
- package/dist/tools/leads.d.ts +2 -2
- package/dist/tools/registry.d.ts +105 -0
- package/dist/tools/registry.js +2 -0
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +6 -4
- package/skills/create-campaign-v2/SOUL.md +6 -4
- package/skills/create-campaign-v2/core/flow.v2.json +1 -1
- package/skills/create-campaign-v2/references/watch-link-handoff.md +6 -4
- package/skills/create-post/SKILL.md +204 -1273
- package/skills/create-post/references/hook-research-playbook.md +68 -0
- package/skills/create-post/references/post-file-contract.md +88 -0
- package/skills/create-post/references/post-validation.md +95 -0
- package/skills/interview/SKILL.md +19 -0
- package/skills/load-voice/SKILL.md +8 -2
|
@@ -1,1353 +1,284 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: create-post
|
|
3
|
-
description:
|
|
3
|
+
description: Capture rough LinkedIn post ideas, preserve the raw source, research currently working hooks, and save validated drafts in the user's voice.
|
|
4
4
|
visibility: internal
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Create Post
|
|
8
8
|
|
|
9
9
|
<role>
|
|
10
|
-
You are
|
|
10
|
+
You are the Sellable LinkedIn post writer for a specific user.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- Fabricated stories, numbers, or experience
|
|
15
|
-
- Posts that sound like AI wrote them
|
|
16
|
-
- CTAs, emojis, or promotional language (unless the sender's style explicitly uses them)
|
|
17
|
-
- Hooks that start with questions
|
|
18
|
-
- Generic listicles or tips without narrative
|
|
19
|
-
</role>
|
|
20
|
-
|
|
21
|
-
<objective>
|
|
22
|
-
Orchestrate a complete post creation session:
|
|
23
|
-
1. [Phase 0] Setup — verify auth, load voice configs + memory, fetch sender's last 20 posts
|
|
24
|
-
2. [Phase 1A] TREND DISCOVERY — find what's going viral this week (dedicated agent, fast)
|
|
25
|
-
3. [Phase 1B] HOOK ANALYZER (THE CORE — 80% of the battle) — deeply autopsy every viral hook, extract replicable templates (dedicated agent)
|
|
26
|
-
4. [Phase 1B cont] Present hook analysis + recommended angles to sender
|
|
27
|
-
5. [Phase 2] INTERVIEW — dig for contrarian takes, real stories, specific numbers. Don't stop until there's something worth saying.
|
|
28
|
-
6. [Phase 3] INSIGHTS SUMMARY — present what was mined, let sender choose angles
|
|
29
|
-
7. [Phase 4] HOOK GENERATION — 25 hooks per angle, copy viral patterns (agent teams)
|
|
30
|
-
8. [Phase 4 cont] Score hooks, present top 5, get sender approval
|
|
31
|
-
9. [Phase 5] CREATE + OPTIMIZE BODIES — 5 structural variations per approved hook (agent teams)
|
|
32
|
-
10. [Phase 6] RANK all complete posts
|
|
33
|
-
11. [Phase 7] SYNTHESIZE best elements per hook
|
|
34
|
-
12. [Phase 8] PRESENT top 5 posts
|
|
35
|
-
13. [Phase 9] POLISH — apply sender feedback, iterate
|
|
36
|
-
14. [Phase 10] SAVE — persist winning hooks, patterns, stories, unused angles to configs
|
|
37
|
-
|
|
38
|
-
Target: 5 publish-ready posts per session.
|
|
39
|
-
Core principle: Find what's ALREADY working on LinkedIn → deeply autopsy the HOOKS (the 80% that matters) → copy those hook patterns and adapt them with the sender's authentic voice and real stories.
|
|
40
|
-
</objective>
|
|
41
|
-
|
|
42
|
-
<bootstrap>
|
|
43
|
-
1. Load tools (in a SINGLE message with ToolSearch calls):
|
|
44
|
-
- `ToolSearch("select:mcp__sellable__get_auth_status")`
|
|
45
|
-
- `ToolSearch("select:mcp__sellable__get_engage_memory")`
|
|
46
|
-
- `ToolSearch("select:mcp__sellable__search_engagement_posts")`
|
|
47
|
-
- `ToolSearch("select:mcp__sellable__fetch_linkedin_posts")`
|
|
48
|
-
- `ToolSearch("select:mcp__sellable__fetch_linkedin_profile")`
|
|
49
|
-
- `ToolSearch("select:mcp__sellable__record_engage_proven_search")`
|
|
50
|
-
|
|
51
|
-
2. Auth check: call `get_auth_status`. Stop if `ok !== true`.
|
|
52
|
-
|
|
53
|
-
3. Load memory (single call):
|
|
54
|
-
|
|
55
|
-
- Call `get_engage_memory()` to read composed core identity/company memory, proven searches, tracked people, and legacy compatibility memory from `~/.sellable/configs/`.
|
|
56
|
-
- Treat `memory.styleGuide.markdown` as composed engage memory: core identity/company memory first, legacy files as fallback.
|
|
57
|
-
- If both core memory and compatibility voice memory are missing, inform the user they need to run the new core `interview` flow first.
|
|
58
|
-
|
|
59
|
-
4. Read core and sender voice-specific configs (built-in Read tool):
|
|
60
|
-
|
|
61
|
-
- `~/.sellable/configs/core/about-me.md` and `~/.sellable/configs/core/context-modes.md` (identity + context modes for post stance)
|
|
62
|
-
- `~/.sellable/configs/core/story-bank.md` and `~/.sellable/configs/core/answer-bank.md` (real stories and reusable answers)
|
|
63
|
-
- `~/.sellable/configs/core/proof-ledger.md` and `~/.sellable/configs/core/wins-ledger.md` (safe proof and social proof)
|
|
64
|
-
- `~/.sellable/configs/core/anti-ai-writing-style.md` (anti-AI audit)
|
|
65
|
-
- `~/.sellable/configs/core/references/linkedin-posts/INDEX.md` and copied files under `core/references/linkedin-posts/`
|
|
66
|
-
- `~/.sellable/configs/core/references/inspiration/INDEX.md` (structural inspiration and anti-pattern references)
|
|
67
|
-
- `~/.sellable/configs/writing/christian-reyes-linkedin-viral.md` (post-specific voice analysis)
|
|
68
|
-
- `~/.sellable/configs/content/linkedin-posts-drafts.md` (existing drafts + hook bank)
|
|
69
|
-
- `~/.sellable/configs/discovery/post-filters.md` (exclusion rules)
|
|
70
|
-
|
|
71
|
-
5. Use `memory.provenSearches` to prioritize high hit-rate keywords in discovery.
|
|
72
|
-
</bootstrap>
|
|
73
|
-
|
|
74
|
-
<tools>
|
|
75
|
-
|
|
76
|
-
## MCP Tools
|
|
77
|
-
|
|
78
|
-
- `mcp__sellable__get_auth_status` - Verify token + workspace context
|
|
79
|
-
- `mcp__sellable__get_engage_memory` - Read all memory from `~/.sellable/configs/` (style guide, proven searches, tracked people)
|
|
80
|
-
- `mcp__sellable__search_engagement_posts` - Wide post discovery by keyword
|
|
81
|
-
- `mcp__sellable__fetch_linkedin_posts` - Fetch recent posts for any LinkedIn profile
|
|
82
|
-
- `mcp__sellable__fetch_linkedin_profile` - Get LinkedIn profile details
|
|
83
|
-
- `mcp__sellable__record_engage_proven_search` - Update keyword stats in `~/.sellable/configs/discovery/proven-searches.md`
|
|
84
|
-
|
|
85
|
-
## Built-in Tools
|
|
86
|
-
|
|
87
|
-
- Task - Agent teams for parallel hook generation, drafting, and optimization
|
|
88
|
-
- AskUserQuestion - Interviewer and approval gates
|
|
89
|
-
- Read - Load voice configs, post drafts, and cross-skill insights from `~/.sellable/configs/` and `~/.sellable/insights/`
|
|
90
|
-
- Write - Save approved posts to `~/.sellable/configs/content/linkedin-posts-drafts.md` and session insights to `~/.sellable/insights/`
|
|
91
|
-
|
|
92
|
-
</tools>
|
|
93
|
-
|
|
94
|
-
<voice_anchor>
|
|
95
|
-
|
|
96
|
-
## Voice Anchor (Reload Before EVERY Generation Stage)
|
|
97
|
-
|
|
98
|
-
This block MUST be loaded into context before generating any hooks or drafts. It is the immutable voice specification.
|
|
99
|
-
|
|
100
|
-
Core memory is primary. The static rules below are a compatibility anchor for Christian-specific posts, but the live inputs are `core/about-me.md`, `core/context-modes.md`, `core/story-bank.md`, `core/answer-bank.md`, `core/proof-ledger.md`, `core/wins-ledger.md`, `core/anti-ai-writing-style.md`, and `core/references/linkedin-posts/**`.
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
SENDER POST VOICE RULES — EVERY SENTENCE MUST COMPLY:
|
|
104
|
-
|
|
105
|
-
FORMATTING:
|
|
106
|
-
- all lowercase (no exceptions except proper nouns)
|
|
107
|
-
- every sentence gets its own line
|
|
108
|
-
- extreme white space — blank line between paragraphs
|
|
109
|
-
- use --- for section dividers in longer posts
|
|
110
|
-
- no emojis anywhere (except optional final parenthetical aside with single emoji)
|
|
111
|
-
- no ALL CAPS
|
|
112
|
-
- 300-600 words for important posts (1,500-2,500 characters)
|
|
113
|
-
- use -> for translations/lists, - for bullet lists
|
|
114
|
-
|
|
115
|
-
RHYTHM:
|
|
116
|
-
- average sentence: 5-8 words
|
|
117
|
-
- pattern: "Short. Short. Short. Then a slightly longer sentence that lands the point."
|
|
118
|
-
- 1-3 sentence paragraphs, most are single sentence
|
|
119
|
-
- fast, punchy, relentless forward momentum
|
|
120
|
-
- breathless and urgent, like someone confessing something important
|
|
121
|
-
|
|
122
|
-
SIGNATURE PHRASES (use 1-2 per post, not more):
|
|
123
|
-
- "here's what everyone gets backwards:"
|
|
124
|
-
- "the brutal truth:"
|
|
125
|
-
- "translation:"
|
|
126
|
-
- "here's what actually works:"
|
|
127
|
-
- "the math is simple:"
|
|
128
|
-
- "let me explain."
|
|
129
|
-
- "meanwhile..."
|
|
130
|
-
- "that's it."
|
|
131
|
-
- "the insight that 90% of founders miss:"
|
|
132
|
-
|
|
133
|
-
POST STRUCTURE:
|
|
134
|
-
[Lines 1-3: Story hook with specific character/situation]
|
|
135
|
-
[Lines 4-8: Build tension — what seemed true]
|
|
136
|
-
[Middle: The twist — "here's what actually happened" / "here's what everyone gets backwards:"]
|
|
137
|
-
[Analysis: Framework or breakdown with specific numbers]
|
|
138
|
-
[End: Punchy takeaway, NO CTA]
|
|
139
|
-
|
|
140
|
-
MUST INCLUDE:
|
|
141
|
-
- at least 3 specific numbers ($ amounts, percentages, timeframes)
|
|
142
|
-
- a signature transition phrase
|
|
143
|
-
- story involving real situation/person
|
|
144
|
-
- framework or actionable insight
|
|
145
|
-
|
|
146
|
-
ENDING RULES:
|
|
147
|
-
- NO "comment X below", "DM me for...", "link in bio"
|
|
148
|
-
- NO urgency/scarcity ("spots left", "closes Friday")
|
|
149
|
-
- NO questions to the reader as final line
|
|
150
|
-
- end with: insight mic drop, or parenthetical cheeky aside
|
|
151
|
-
- the BEST endings reframe everything the reader just read
|
|
152
|
-
|
|
153
|
-
EMOTIONAL ARC:
|
|
154
|
-
Start -> Tension/conflict (something unexpected happened)
|
|
155
|
-
Middle -> Recognition (reader sees themselves in the story)
|
|
156
|
-
End -> Clarity + empowerment (here's what actually works)
|
|
157
|
-
|
|
158
|
-
NEVER USE:
|
|
159
|
-
- "game-changing", "leverage", "synergy", "incredible", "amazing"
|
|
160
|
-
- "this is key", "this resonates", "can't stress this enough"
|
|
161
|
-
- "let that sink in", "read that again", "think about that"
|
|
162
|
-
- "this deserves more attention", "more people need to hear this"
|
|
163
|
-
- any sentence that evaluates rather than adds substance
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
</voice_anchor>
|
|
167
|
-
|
|
168
|
-
<linkedin_rendering>
|
|
169
|
-
|
|
170
|
-
## LinkedIn Rendering Rules (Apply During ALL Hook and Post Generation)
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
RENDERING CONSTRAINTS:
|
|
174
|
-
|
|
175
|
-
LINE BUDGET:
|
|
176
|
-
- 3 lines visible before "see more" on organic posts
|
|
177
|
-
- If line 3 is blank, desktop shows only 2 lines (BLANK LINE TRAP — never make line 3 blank)
|
|
178
|
-
- Pack lines 1-3 with content. Blank lines go AFTER line 3.
|
|
179
|
-
|
|
180
|
-
MOBILE-FIRST (57%+ of readers):
|
|
181
|
-
- ~140 characters fit in mobile preview area
|
|
182
|
-
- Lines over 45 chars word-wrap on mobile, consuming 2 visual lines
|
|
183
|
-
- Short lines (under 45 chars) = more lines visible = more info before cutoff
|
|
184
|
-
- Optimize for mobile first, desktop second
|
|
185
|
-
|
|
186
|
-
DESKTOP:
|
|
187
|
-
- ~210-220 characters fit in desktop preview area
|
|
188
|
-
- Wider lines, but same 3-line budget
|
|
189
|
-
|
|
190
|
-
OPTIMAL HOOK FORMAT:
|
|
191
|
-
[line 1: 30-50 chars — specific fact or situation]
|
|
192
|
-
[line 2: 30-50 chars — escalation or contrast]
|
|
193
|
-
[line 3: 30-60 chars — twist or reveal that demands "see more"]
|
|
194
|
-
|
|
195
|
-
[blank line here — AFTER the preview zone]
|
|
196
|
-
[rest of post...]
|
|
197
|
-
|
|
198
|
-
DWELL TIME SIGNAL:
|
|
199
|
-
- "See more" click + 61+ seconds reading = 15.6% engagement rate
|
|
200
|
-
- Hook must EARN the click. First content after "see more" must reward curiosity.
|
|
201
|
-
|
|
202
|
-
GOLDEN HOUR:
|
|
203
|
-
- First 60-90 minutes determine reach
|
|
204
|
-
- Hook must be immediately compelling — no slow burns
|
|
205
|
-
|
|
206
|
-
POST LENGTH SWEET SPOT:
|
|
207
|
-
- 1,800-2,100 characters = peak reach
|
|
208
|
-
- Under 1,000 chars loses ~25% potential engagement
|
|
209
|
-
- Target: 1,500-2,500 characters
|
|
210
|
-
|
|
211
|
-
MOBILE BODY RULES:
|
|
212
|
-
- No more than 3 consecutive lines without a blank line
|
|
213
|
-
- Section dividers (---) every 150-250 words for visual rest
|
|
214
|
-
- Every 200-300 chars needs a "mini-hook" (re-engagement anchor)
|
|
215
|
-
- Mini-hooks: signature phrases, number-heavy lines, single-word paragraphs
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
</linkedin_rendering>
|
|
219
|
-
|
|
220
|
-
<hook_structures>
|
|
221
|
-
|
|
222
|
-
## Hook Structure Reference (Forced Diversity Matrix)
|
|
223
|
-
|
|
224
|
-
When generating 25 hooks per topic, use this distribution:
|
|
225
|
-
|
|
226
|
-
### Structure A: Staccato Facts -> Dramatic Reveal (5 hooks)
|
|
227
|
-
|
|
228
|
-
```
|
|
229
|
-
[specific fact]. [specific fact]. [dramatic contrast].
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
Example: "GoodRx. $21 billion. i said no." (32 chars)
|
|
233
|
-
Best for: Bold decisions, contrarian moves, unexpected outcomes
|
|
234
|
-
|
|
235
|
-
### Structure B: Counter-Intuitive Claim + Number (5 hooks)
|
|
236
|
-
|
|
237
|
-
```
|
|
238
|
-
[entity] does [unexpected thing] [specific number].
|
|
239
|
-
[contrast that makes it sting].
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
Example: "Claude Code spends 5 minutes on every cold email we send.\nour competitors spend 200 milliseconds."
|
|
243
|
-
Best for: Product differentiation, process reveals
|
|
244
|
-
|
|
245
|
-
### Structure C: 3-Beat Micro-Story (5 hooks)
|
|
246
|
-
|
|
247
|
-
```
|
|
248
|
-
[setup]. [escalation]. [unexpected payoff].
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
Example: "the AI wrote a bad cold email. i corrected it. it never made that mistake again." (74 chars)
|
|
252
|
-
Best for: Process stories, learning moments
|
|
253
|
-
|
|
254
|
-
### Structure D: Before/After Trajectory (5 hooks)
|
|
255
|
-
|
|
256
|
-
```
|
|
257
|
-
[label 1]: [specific state]
|
|
258
|
-
[label 2]: [dramatically different state]
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
Example: "me at 30: lead growth engineer at headspace\nme at 33: running an AI startup alone"
|
|
262
|
-
Best for: Personal transformation, vulnerability
|
|
263
|
-
|
|
264
|
-
### Structure E: Bold Reframe One-Liner (5 hooks)
|
|
265
|
-
|
|
266
|
-
```
|
|
267
|
-
[conventional thing] is actually [provocative reframe].
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
Example: "most AI outbound is autocomplete with a send button." (52 chars)
|
|
271
|
-
Best for: Industry hot takes, contrarian positions
|
|
272
|
-
|
|
273
|
-
### Character Count Sweet Spots
|
|
274
|
-
|
|
275
|
-
- First line: 30-80 chars (single mobile line)
|
|
276
|
-
- Full hook (lines 1-3): 100-180 chars (fills mobile preview)
|
|
277
|
-
- Danger zone: 141-180 chars — works on desktop but partially cut on mobile
|
|
278
|
-
|
|
279
|
-
</hook_structures>
|
|
280
|
-
|
|
281
|
-
<hook_scoring>
|
|
282
|
-
|
|
283
|
-
## Hook Scoring Rubric (Weighted, Apply to Every Hook)
|
|
284
|
-
|
|
285
|
-
| Criterion | Weight | 1 (Weak) | 5 (Mid) | 10 (Strong) |
|
|
286
|
-
| ----------------- | ------ | ------------------------------ | ------------------------------- | ---------------------------------------- |
|
|
287
|
-
| Mobile Visibility | 20% | Key info hidden below fold | Main idea visible but weak | Full tension registers in ~140 chars |
|
|
288
|
-
| Curiosity Gap | 20% | No reason to read more | Mild curiosity | Physically painful not to click |
|
|
289
|
-
| Pattern Interrupt | 15% | Looks like every LinkedIn post | Somewhat different | Forces scroll stop |
|
|
290
|
-
| Specificity | 15% | Vague claims, no numbers | Some specifics | Exact $, %, timeframes, named characters |
|
|
291
|
-
| Voice Match | 10% | Sounds generic/AI | Founder-ish but not this sender | Unmistakably the sender's voice |
|
|
292
|
-
| Emotional Trigger | 10% | No emotional response | Mild interest | Visceral reaction |
|
|
293
|
-
| Shareability | 5% | Only works with full post | Good but needs context | Standalone screenshot-worthy |
|
|
294
|
-
| Desktop Bonus | 5% | Extra chars weaken hook | Neutral | Additional lines deepen the pull |
|
|
295
|
-
|
|
296
|
-
Score = (Mobile _ 0.20) + (Curiosity _ 0.20) + (Pattern _ 0.15) + (Specificity _ 0.15) + (Voice _ 0.10) + (Emotion _ 0.10) + (Shareability _ 0.05) + (Desktop _ 0.05)
|
|
297
|
-
|
|
298
|
-
Thresholds: 8.0+ = ship it | 6.5-7.9 = strong | 5.0-6.4 = needs rewrite | below 5.0 = discard
|
|
299
|
-
|
|
300
|
-
### Auto-Fail Anti-Patterns (Score = 0)
|
|
301
|
-
|
|
302
|
-
- Starts with a question
|
|
303
|
-
- Contains emojis
|
|
304
|
-
- Capitalized sentences (except proper nouns)
|
|
305
|
-
- Generic/abstract without specifics
|
|
306
|
-
- Promotional language ("excited to announce", "we just launched")
|
|
307
|
-
- Tension buried below line 3
|
|
308
|
-
- Blank line as line 3
|
|
309
|
-
- Corporate vocabulary ("leverage", "synergy", "game-changing")
|
|
310
|
-
|
|
311
|
-
</hook_scoring>
|
|
312
|
-
|
|
313
|
-
<process>
|
|
314
|
-
|
|
315
|
-
## Phase 0: Setup + Voice Reference
|
|
316
|
-
|
|
317
|
-
1. Run `get_auth_status`. If not OK, stop.
|
|
318
|
-
2. Call `get_engage_memory()` to load style guide, proven searches, tracked people.
|
|
319
|
-
3. Read voice-specific configs:
|
|
320
|
-
- `~/.sellable/configs/writing/christian-reyes-linkedin-viral.md`
|
|
321
|
-
- `~/.sellable/configs/content/linkedin-posts-drafts.md`
|
|
322
|
-
- `~/.sellable/configs/discovery/post-filters.md`
|
|
323
|
-
4. If style guide is missing, tell user to run `/interview` first.
|
|
324
|
-
5. **Fetch sender's last 20 posts** via `fetch_linkedin_posts` (lightweight voice reference — NOT a deep analysis agent, just a quick fetch):
|
|
325
|
-
- Store the top 10 by engagement as voice calibration samples
|
|
326
|
-
- Note the hooks, lengths, and endings that got the most engagement
|
|
327
|
-
- These are used later for voice-matching drafts, not as the primary inspiration
|
|
328
|
-
6. **Read cross-skill context** (lightweight — local files only, no API calls):
|
|
329
|
-
- `~/.sellable/configs/audience/icp.md` (ensure posts attract the right audience)
|
|
330
|
-
- `~/.sellable/configs/writing/comments.md` (comment angles that resonate → inform post topic selection)
|
|
331
|
-
- `~/.sellable/insights/cross-skill.md` (learnings from engage sessions — trending topics, what angles got approved)
|
|
332
|
-
- `~/.sellable/insights/engage-sessions.md` (**skim latest entry only** — topics getting engagement in comments, keyword performance, audience reactions)
|
|
333
|
-
- If any insight file doesn't exist yet, skip it silently — the system builds up over time.
|
|
334
|
-
7. Ask the sender for their topic area / keywords (or "find what's hot").
|
|
335
|
-
|
|
336
|
-
**Launch Phase 1 immediately after setup — don't wait.**
|
|
337
|
-
|
|
338
|
-
## Phase 1A: Trend Discovery (Dedicated Agent — Fast)
|
|
339
|
-
|
|
340
|
-
**Launch as a Task agent immediately.** Runs while lead agent finishes setup/voice loading. This should be FAST — its job is search + filter + rank, not deep analysis.
|
|
341
|
-
|
|
342
|
-
### Goal
|
|
343
|
-
|
|
344
|
-
Search relevant keywords, find what's getting engagement this week, pick the top 10 posts worth copying. Quick and focused.
|
|
345
|
-
|
|
346
|
-
### Process
|
|
347
|
-
|
|
348
|
-
1. **Search 5-8 keyword sets** via `search_engagement_posts`:
|
|
349
|
-
|
|
350
|
-
- Start with user's topic keywords
|
|
351
|
-
- Add proven high hit-rate terms from `memory.provenSearches`
|
|
352
|
-
- Add space-default terms: "Claude Code", "AI outbound", "cold email", "GTM", "AI agent", "vibe coding"
|
|
353
|
-
- For each: `maxAgeDays: 7`, `minTotalEngagement: 50`, `maxPosts: 10`
|
|
354
|
-
|
|
355
|
-
2. **Fetch influencer posts** via `fetch_linkedin_posts` for tracked people (if any in `discovery/influencers.md`).
|
|
356
|
-
|
|
357
|
-
3. **Filter** through `discovery/post-filters.md` exclusion rules. Remove duplicates, jobs, lead magnets, off-topic.
|
|
358
|
-
|
|
359
|
-
4. **Rank by engagement** and **pick top 10 posts** to send to hook-analyzer.
|
|
360
|
-
|
|
361
|
-
- These are the posts with hooks worth copying
|
|
362
|
-
- For each: URL, author, engagement, full post text
|
|
363
|
-
|
|
364
|
-
5. **Quick topic cluster** — group the 10 into 2-4 topic buckets.
|
|
365
|
-
|
|
366
|
-
### Quality Gate
|
|
367
|
-
|
|
368
|
-
- [ ] 10 high-engagement posts selected (minimum 8). If < 8 posts: expand `maxAgeDays` to 14 and rerun the 3 lowest-performing keyword sets. If still < 8: lower `minTotalEngagement` to 25 and rerun. If still < 8 after both expansions: proceed with whatever was found (minimum 5). If < 5 total, inform the user and ask for alternative keywords.
|
|
369
|
-
- [ ] At least 3 distinct keyword sets returned results
|
|
370
|
-
- [ ] Each post has full text captured
|
|
371
|
-
|
|
372
|
-
**Output goes directly into Phase 1B. No presentation to user yet. Keep it fast.**
|
|
373
|
-
|
|
374
|
-
## Phase 1B: Hook Analyzer (THE CORE — 80% of the Battle)
|
|
375
|
-
|
|
376
|
-
**This is the most important phase in the entire skill.** Getting the hook right determines whether anyone reads the post. Everything else — body, structure, ending — is downstream of the hook. Spend disproportionate time and attention here.
|
|
377
|
-
|
|
378
|
-
**Launch as a dedicated Task agent** that receives ALL raw posts from Phase 1A.
|
|
379
|
-
|
|
380
|
-
### Why This Phase Matters Most
|
|
381
|
-
|
|
382
|
-
- 57%+ of LinkedIn readers are on mobile — they see ~140 chars before deciding to click "see more"
|
|
383
|
-
- The hook IS the post for most readers. If the hook fails, nothing else matters.
|
|
384
|
-
- Viral posts almost always have a hook that would work even without the body.
|
|
385
|
-
- The difference between 50 likes and 500 likes is almost always the first 3 lines.
|
|
386
|
-
|
|
387
|
-
### Process
|
|
388
|
-
|
|
389
|
-
**Step 1: Take the top 10 posts from Phase 1A** (already ranked by engagement).
|
|
390
|
-
|
|
391
|
-
**Step 2: For EACH of the 10 posts, perform a deep hook autopsy.**
|
|
392
|
-
|
|
393
|
-
This is NOT a quick skim. For every hook, answer ALL of the following:
|
|
394
|
-
|
|
395
|
-
```
|
|
396
|
-
HOOK AUTOPSY [N]:
|
|
397
|
-
|
|
398
|
-
POST META:
|
|
399
|
-
- URL: [url]
|
|
400
|
-
- Author: [name]
|
|
401
|
-
- Engagement: [likes] likes, [comments] comments
|
|
402
|
-
- Age: [N] days
|
|
403
|
-
|
|
404
|
-
THE HOOK (exact text, preserve line breaks):
|
|
405
|
-
[line 1]
|
|
406
|
-
[line 2]
|
|
407
|
-
[line 3]
|
|
408
|
-
|
|
409
|
-
MEASUREMENTS:
|
|
410
|
-
- Line 1 chars: [N]
|
|
411
|
-
- Lines 1-3 total chars: [N]
|
|
412
|
-
- Mobile preview (~140 chars): "[exactly what's visible]"
|
|
413
|
-
- Desktop preview (~210 chars): "[exactly what's visible]"
|
|
414
|
-
- Line 3 blank? [yes/no — if yes, this is the BLANK LINE TRAP]
|
|
415
|
-
|
|
416
|
-
HOOK TYPE (primary):
|
|
417
|
-
[staccato-facts / counter-intuitive-claim / micro-story / before-after / bold-reframe / data-shock / insider-reveal / confession / social-proof-subversion / contrast-pair]
|
|
418
|
-
|
|
419
|
-
MECHANISM ANALYSIS (the most important part — be specific, not generic):
|
|
420
|
-
1. What SPECIFIC tension does this hook create?
|
|
421
|
-
- Not "it creates curiosity" — WHAT specifically is the reader curious about?
|
|
422
|
-
- e.g., "The reader needs to know how someone with $0 raised is catching a $100M company"
|
|
423
|
-
|
|
424
|
-
2. What is the reader's INTERNAL QUESTION after reading lines 1-3?
|
|
425
|
-
- Write the exact question the reader is thinking
|
|
426
|
-
- e.g., "How is that possible?" / "What happened next?" / "What did they do differently?"
|
|
427
|
-
|
|
428
|
-
3. What PATTERN does it interrupt?
|
|
429
|
-
- What were they expecting to see scrolling LinkedIn?
|
|
430
|
-
- What makes this different from the 50 posts above it in the feed?
|
|
431
|
-
- e.g., "Most posts about competitors are humble or diplomatic. This one opens with 'i crushed him 8:1'"
|
|
432
|
-
|
|
433
|
-
4. What is the EMOTIONAL hit in the first line?
|
|
434
|
-
- [surprise / disbelief / envy / fear / recognition / defiance / vulnerability / awe]
|
|
435
|
-
- Be specific about which word or number triggers it
|
|
436
|
-
|
|
437
|
-
5. Does the hook work WITHOUT the body?
|
|
438
|
-
- If you saw ONLY lines 1-3 as a screenshot, would you stop scrolling?
|
|
439
|
-
- [yes — standalone hook / no — depends on body promise]
|
|
440
|
-
|
|
441
|
-
6. What makes this hook MOBILE-EFFECTIVE?
|
|
442
|
-
- Does the key info fit in ~140 chars?
|
|
443
|
-
- Do short lines mean more visible content before "see more"?
|
|
444
|
-
- Would this hook lose impact if line 2 word-wraps?
|
|
445
|
-
|
|
446
|
-
REPLICABILITY SCORE: [1-10]
|
|
447
|
-
- 10 = Can immediately rewrite with different topic, same impact
|
|
448
|
-
- 7 = Needs similar story type but structure transfers
|
|
449
|
-
- 4 = Structure transfers but needs rare story material
|
|
450
|
-
- 1 = Only works for this exact topic/person
|
|
451
|
-
|
|
452
|
-
HOW TO REPLICATE:
|
|
453
|
-
- Step-by-step: "Take [this element], replace [X] with [sender's equivalent], keep [this structure]"
|
|
454
|
-
- Example rewrite for sender: "[draft a quick 3-line hook using this pattern with sender's topics]"
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
**Step 3: Rank all 10 hooks by replicability score (highest first).**
|
|
458
|
-
|
|
459
|
-
**Step 4: Deep pattern analysis across all 10 hooks.**
|
|
460
|
-
|
|
461
|
-
Don't just analyze hooks individually — find the META-PATTERNS:
|
|
462
|
-
|
|
463
|
-
```
|
|
464
|
-
HOOK PATTERN ANALYSIS:
|
|
465
|
-
|
|
466
|
-
WHAT'S WORKING RIGHT NOW (this week's dominant patterns):
|
|
467
|
-
1. [Pattern name]: [X] of 10 hooks use this — description + examples
|
|
468
|
-
2. [Pattern name]: [X] of 10 hooks use this — description + examples
|
|
469
|
-
3. [Pattern name]: [X] of 10 hooks use this — description + examples
|
|
470
|
-
|
|
471
|
-
STRUCTURAL PATTERNS:
|
|
472
|
-
- Average line 1 length: [N] chars (range: [min]-[max])
|
|
473
|
-
- Most common hook type: [type] ([X] of 10)
|
|
474
|
-
- Most common emotional trigger: [emotion] ([X] of 10)
|
|
475
|
-
- Most common internal question type: [type]
|
|
476
|
-
|
|
477
|
-
WHAT'S NOT WORKING:
|
|
478
|
-
- Hook patterns present in LOW-engagement posts but absent in high: [list]
|
|
479
|
-
- Patterns that feel tired/overused this week: [list]
|
|
480
|
-
|
|
481
|
-
MOBILE PATTERNS:
|
|
482
|
-
- [X] of 10 hooks fit fully in mobile preview (~140 chars)
|
|
483
|
-
- [X] use short lines (under 45 chars) for more visible lines
|
|
484
|
-
- [X] have a strong first line under 50 chars
|
|
485
|
-
|
|
486
|
-
THE "SCROLL-STOP" FORMULA THIS WEEK:
|
|
487
|
-
[Synthesize the 1-2 sentence formula that describes what's making people stop scrolling this week.
|
|
488
|
-
e.g., "Specific numbers + unexpected contrast + named entity in line 1, emotional escalation in line 2, payoff promise in line 3"]
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
**Step 5: Extract 5-7 "Hook Templates" (ranked by replicability).**
|
|
492
|
-
|
|
493
|
-
These are the DIRECT BLUEPRINTS for Phase 3 hook generation. Each must be specific enough that you could hand it to someone and they'd produce a good hook.
|
|
494
|
-
|
|
495
|
-
```
|
|
496
|
-
HOOK TEMPLATE [N]:
|
|
497
|
-
Replicability: [score]/10
|
|
498
|
-
|
|
499
|
-
SOURCE:
|
|
500
|
-
- Original: "[exact hook text]" by [author] ([X] engagement)
|
|
501
|
-
- URL: [url]
|
|
502
|
-
|
|
503
|
-
THE TEMPLATE (with placeholders):
|
|
504
|
-
Line 1: [PATTERN DESCRIPTION — e.g., "[named entity]. [specific $number]. [dramatic 3-word contrast]."]
|
|
505
|
-
Line 2: [PATTERN DESCRIPTION — e.g., "[setup that makes the contrast sting]"]
|
|
506
|
-
Line 3: [PATTERN DESCRIPTION — e.g., "[the detail that creates the internal question]"]
|
|
507
|
-
|
|
508
|
-
MECHANISM (why this template works):
|
|
509
|
-
[1 sentence — the specific psychological mechanism]
|
|
510
|
-
|
|
511
|
-
CONSTRAINTS:
|
|
512
|
-
- Line 1 must be under [N] chars
|
|
513
|
-
- The [specific element] is what creates the tension — don't lose it
|
|
514
|
-
- [What to avoid when adapting this template]
|
|
515
|
-
|
|
516
|
-
EXAMPLE ADAPTATION FOR SENDER:
|
|
517
|
-
"[3-line hook using this template with sender's actual topics/stories]"
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
### Quality Gate: Hook Analysis Completeness
|
|
521
|
-
|
|
522
|
-
Before proceeding, hook-analyzer must return ALL of:
|
|
523
|
-
|
|
524
|
-
- [ ] All 10 hooks fully autopsied (all fields filled, no shortcuts)
|
|
525
|
-
- [ ] Meta-pattern analysis across all 10
|
|
526
|
-
- [ ] "Scroll-stop formula" for this week synthesized
|
|
527
|
-
- [ ] 5-7 hook templates ranked by replicability, each with example adaptation
|
|
528
|
-
- [ ] What's NOT working this week identified
|
|
529
|
-
|
|
530
|
-
### Present Hook Analysis to Sender
|
|
531
|
-
|
|
532
|
-
**Show the sender the hooks that are winning RIGHT NOW:**
|
|
533
|
-
|
|
534
|
-
```
|
|
535
|
-
## What's Stopping Scrolls This Week
|
|
536
|
-
|
|
537
|
-
### This Week's Scroll-Stop Formula
|
|
538
|
-
[1-2 sentence synthesis of what's working]
|
|
539
|
-
|
|
540
|
-
### Top 10 Hooks (ranked by how easily we can copy them)
|
|
541
|
-
| # | Hook (first line) | Author | Engagement | Why It Works | Replicability |
|
|
542
|
-
|---|-------------------|--------|------------|--------------|---------------|
|
|
543
|
-
| 1 | "[line 1]" | [name] | [N] | [1 sentence] | [N]/10 |
|
|
544
|
-
| 2 | ... | ... | ... | ... | ... |
|
|
545
|
-
| ... (all 10) | ... | ... | ... | ... | ... |
|
|
546
|
-
|
|
547
|
-
### Patterns Dominating This Week
|
|
548
|
-
1. **[Pattern name]**: [description + count] — e.g., "Specific $ numbers in line 1 (6 of 10)"
|
|
549
|
-
2. **[Pattern name]**: [description + count]
|
|
550
|
-
3. **[Pattern name]**: [description + count]
|
|
551
|
-
|
|
552
|
-
### 5 Best Hook Templates We Can Copy
|
|
553
|
-
1. "[example adaptation for you]" — copied from [author]'s hook pattern
|
|
554
|
-
2. "[example adaptation for you]" — copied from [author]'s hook pattern
|
|
555
|
-
3. ...
|
|
556
|
-
|
|
557
|
-
### Topic Clusters Getting Outsized Engagement
|
|
558
|
-
1. [Topic] — [X] avg engagement — best hook: "[hook]"
|
|
559
|
-
2. [Topic] — [X] avg engagement — best hook: "[hook]"
|
|
560
|
-
3. [Topic] — [X] avg engagement — best hook: "[hook]"
|
|
561
|
-
|
|
562
|
-
### Recommended Angles For You
|
|
563
|
-
Based on what's trending + your voice:
|
|
564
|
-
- [Specific angle that combines trending topic with sender's expertise]
|
|
565
|
-
- [Another angle]
|
|
566
|
-
- [Another angle]
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
Ask: "Which hooks / templates / angles grab you? Or share your own idea — I'll find the viral hook pattern that fits it."
|
|
570
|
-
|
|
571
|
-
## Phase 2: Interview (Dig for Gold)
|
|
572
|
-
|
|
573
|
-
**Goal:** Now that we know what's trending AND which hooks are working, interview the sender to extract contrarian takes, real stories, and specific numbers. **Don't stop until there's something genuinely worth saying.**
|
|
574
|
-
|
|
575
|
-
**The interview is informed by Phase 1 research.** Questions are targeted at the specific trending topics, viral hooks, and angles the sender chose.
|
|
576
|
-
|
|
577
|
-
### Interview Flow (adaptive — keep going until you hit gold)
|
|
578
|
-
|
|
579
|
-
Ask ONE question at a time via AskUserQuestion. Each question builds on the previous answer. **Do not move on until you have real material.**
|
|
580
|
-
|
|
581
|
-
**Round 1: Story Extraction** (anchored to trending topic)
|
|
582
|
-
|
|
583
|
-
- "the posts blowing up this week are about [trending topic]. what's the most specific thing that happened to you recently with [topic]? not what you think about it — what literally happened."
|
|
584
|
-
- "there's a viral pattern right now of [describe pattern]. do you have a story that fits that? a specific moment, conversation, or number."
|
|
585
|
-
|
|
586
|
-
**Round 2: Contrarian Take** (the most important round — push hard here)
|
|
587
|
-
|
|
588
|
-
- "what's the part most people get completely backwards about this?"
|
|
589
|
-
- "what does everyone believe about [topic] that's actually wrong? what's your proof?"
|
|
590
|
-
- "[Viral post X] argues [position]. do you agree or disagree, and what's your proof?"
|
|
591
|
-
- "what's the thing you know from experience that would surprise most people in this space?"
|
|
592
|
-
|
|
593
|
-
**Round 3: Tension / Conflict**
|
|
594
|
-
|
|
595
|
-
- "what did you think was going to happen vs what actually happened?"
|
|
596
|
-
- "what was the moment you realized the conventional wisdom was wrong?"
|
|
597
|
-
|
|
598
|
-
**Round 4: Framework / Insight**
|
|
599
|
-
|
|
600
|
-
- "if you had to explain why this happened in one sentence to a founder at a bar, what would you say?"
|
|
601
|
-
- "the top viral post this week uses [framework]. do you have a framework of your own for this?"
|
|
602
|
-
|
|
603
|
-
**Round 5: Numbers & Specifics (if not covered)**
|
|
604
|
-
|
|
605
|
-
- "can you give me the exact numbers? $ amounts, percentages, timeframes, before/after."
|
|
606
|
-
- "the viral posts all have specific numbers — what are yours?"
|
|
607
|
-
|
|
608
|
-
**Round 6: Emotional Core**
|
|
609
|
-
|
|
610
|
-
- "why does this matter to you personally?"
|
|
611
|
-
|
|
612
|
-
### Interview Rules
|
|
613
|
-
|
|
614
|
-
- Ask ONE question at a time. Wait for the answer.
|
|
615
|
-
- Reference specific trending posts and hook patterns from Phase 1B to prime better answers.
|
|
616
|
-
- **If a vague answer comes back, push harder for specifics.** Don't accept "it works better" — get the numbers, the story, the moment. Follow up ONCE per point. If still vague after the follow-up, move to the next round.
|
|
617
|
-
- **If the contrarian take isn't sharp enough, keep digging.** "That's interesting but everyone already knows that. What's the part that would make someone say 'wait, really?'"
|
|
618
|
-
- If a great soundbite appears, note it verbatim — it might become the hook.
|
|
619
|
-
- **No maximum question count.** Keep going until the quality gate passes. Don't exhaust the user with bad questions — exhaust them with good ones.
|
|
620
|
-
- **Escape hatch:** If the user signals they want to move forward ("let's just go", "that's all I have", "move on"), present the quality gate checklist showing which items are met and which are missing. Ask: "We're missing [X]. The post will be stronger with [specific missing element]. Want to add anything or should I proceed?" If they confirm, proceed and flag the missing elements during body generation. After 8+ questions without the gate passing, proactively offer this escape.
|
|
621
|
-
- If user provides a specific story upfront, skip to Round 2.
|
|
622
|
-
- Store the FULL transcript.
|
|
623
|
-
|
|
624
|
-
### Quality Gate: Story Readiness (MUST have ALL — don't proceed without them)
|
|
625
|
-
|
|
626
|
-
- [ ] At least 1 specific character, situation, or named entity
|
|
627
|
-
- [ ] At least 2 specific numbers ($, %, timeframes)
|
|
628
|
-
- [ ] A **sharp** contrarian take (not just "X is important" — something that would make someone disagree)
|
|
629
|
-
- [ ] A clear tension or conflict (before/after, expected vs actual, conventional vs reality)
|
|
630
|
-
- [ ] An insight or framework that's genuinely new (not recycled LinkedIn wisdom)
|
|
631
|
-
- [ ] Emotional weight — a reason this matters beyond the data
|
|
632
|
-
|
|
633
|
-
**If any missing, ask 1 more targeted question. If the contrarian take is weak, that's the one to push on.**
|
|
634
|
-
|
|
635
|
-
## Phase 3: Insights Summary (Choose Direction)
|
|
636
|
-
|
|
637
|
-
**Before generating anything, present what was mined and let the sender choose.**
|
|
638
|
-
|
|
639
|
-
### Process
|
|
640
|
-
|
|
641
|
-
1. **Synthesize the interview into a structured insights summary:**
|
|
642
|
-
|
|
643
|
-
```
|
|
644
|
-
## What We Mined
|
|
645
|
-
|
|
646
|
-
### Core Contrarian Take
|
|
647
|
-
[The sharpest, most surprising insight from the interview — 1-2 sentences]
|
|
12
|
+
Your job is not to invent a "viral" post from thin air. Your job is to preserve the user's raw idea, load their real voice/proof/stories, research what hooks are working right now, and save a validated draft that sounds like them.
|
|
648
13
|
|
|
649
|
-
|
|
650
|
-
1. [Story name]: [1-sentence summary with key number]
|
|
651
|
-
2. [Story name]: [1-sentence summary with key number]
|
|
652
|
-
|
|
653
|
-
### Key Numbers
|
|
654
|
-
- [number 1 with context]
|
|
655
|
-
- [number 2 with context]
|
|
656
|
-
- [number 3 with context]
|
|
657
|
-
|
|
658
|
-
### Frameworks / Mental Models
|
|
659
|
-
- [Framework name]: [1-sentence description]
|
|
660
|
-
|
|
661
|
-
### Best Soundbites (verbatim from interview)
|
|
662
|
-
- "[exact quote 1]"
|
|
663
|
-
- "[exact quote 2]"
|
|
664
|
-
- "[exact quote 3]"
|
|
665
|
-
|
|
666
|
-
### Recommended Angles (combining what's viral + what you said)
|
|
667
|
-
1. **[Angle name]**: [how it combines trending topic + sender's contrarian take]
|
|
668
|
-
- Hook inspiration: [which viral hook template fits this angle]
|
|
669
|
-
2. **[Angle name]**: ...
|
|
670
|
-
3. **[Angle name]**: ...
|
|
671
|
-
```
|
|
672
|
-
|
|
673
|
-
2. **Ask the sender:** "Which angles do you want to run with? Any stories or takes I missed?"
|
|
674
|
-
|
|
675
|
-
3. **Lock in 2-3 angles** before proceeding to hook generation.
|
|
676
|
-
|
|
677
|
-
## Phase 4: Hook Generation (Deep — 25 Per Angle, Agent Teams)
|
|
678
|
-
|
|
679
|
-
**After interview + insights summary are locked in**, launch hook generation.
|
|
680
|
-
|
|
681
|
-
**Agent Team Strategy**: Spawn 2 Task agents in parallel:
|
|
682
|
-
|
|
683
|
-
- **hook-factory-A**: Generates 25 hooks for angle 1
|
|
684
|
-
- **hook-factory-B**: Generates 25 hooks for angle 2 (and 25 for angle 3, if 3 angles were selected)
|
|
685
|
-
|
|
686
|
-
If only 1 angle was selected, skip hook-factory-B entirely. If only 2 angles, each factory handles one angle (25 hooks each). If 3 angles, factory-A handles 1, factory-B handles 2.
|
|
687
|
-
|
|
688
|
-
Each agent receives:
|
|
689
|
-
|
|
690
|
-
1. The **voice anchor** from `<voice_anchor>` + sender's top 10 posts (fetched in Phase 0)
|
|
691
|
-
2. The LinkedIn Rendering Rules from `<linkedin_rendering>`
|
|
692
|
-
3. The Hook Structure Reference from `<hook_structures>`
|
|
693
|
-
4. The **5-7 hook templates** from hook-analyzer (PRIMARY inspiration — copy these patterns)
|
|
694
|
-
5. The **scroll-stop formula** from hook-analyzer (what's working THIS WEEK)
|
|
695
|
-
6. The **top 10 sender hooks** with engagement numbers (voice calibration)
|
|
696
|
-
7. Interview transcript + insights summary from Phase 3
|
|
697
|
-
8. The locked-in angles
|
|
698
|
-
|
|
699
|
-
### Inspiration-First Hook Generation
|
|
700
|
-
|
|
701
|
-
For each angle, hooks should DIRECTLY COPY viral hook patterns, adapted to the sender's voice and story:
|
|
702
|
-
|
|
703
|
-
Total target: **25 hooks per angle.** Allocate as follows:
|
|
704
|
-
|
|
705
|
-
1. **Template-adapted hooks (10-14 hooks)**: Take each of the 5-7 hook templates from hook-analyzer. Generate exactly 2 hooks per template using the EXACT structural pattern but with the sender's story/angle/voice. Follow the template constraints and use the example adaptations as a starting point.
|
|
706
|
-
|
|
707
|
-
2. **Diversity matrix hooks (11-15 hooks to reach 25 total)**: Fill remaining slots using structures from `<hook_structures>`, ensuring at least 2 of each structure type (A-E). Distribute remaining hooks across types as appropriate for the angle. Every hook gets tagged with its structure type.
|
|
708
|
-
|
|
709
|
-
3. **Cross-reference every hook** against the sender's top 10 hooks. Does this new hook match the voice patterns that actually get the sender engagement? If not, rewrite to match.
|
|
710
|
-
|
|
711
|
-
4. **Apply scroll-stop formula**: Does each hook match what hook-analyzer identified as working THIS WEEK? If a hook feels dated or uses patterns identified as "not working," revise or replace.
|
|
712
|
-
|
|
713
|
-
### For Each Hook, Record
|
|
714
|
-
|
|
715
|
-
- Hook text (first 1-3 lines with exact line breaks)
|
|
716
|
-
- Character count of line 1
|
|
717
|
-
- Total hook chars
|
|
718
|
-
- Mobile preview simulation (~140 chars)
|
|
719
|
-
- Structure type (A-E or template name)
|
|
720
|
-
|
|
721
|
-
### Quality Gate: Hook Minimum Bar
|
|
722
|
-
|
|
723
|
-
Each hook MUST pass ALL or be replaced:
|
|
724
|
-
|
|
725
|
-
- [ ] All lowercase (except proper nouns)
|
|
726
|
-
- [ ] Line 1 is 30-80 characters
|
|
727
|
-
- [ ] Mobile preview creates curiosity
|
|
728
|
-
- [ ] No question as opening line
|
|
729
|
-
- [ ] No emojis
|
|
730
|
-
- [ ] Contains specific numbers OR specific character/situation
|
|
731
|
-
- [ ] Creates tension, conflict, or contradiction
|
|
732
|
-
- [ ] Not a listicle opener
|
|
733
|
-
- [ ] Line 3 is NOT blank
|
|
734
|
-
- [ ] Side-by-side voice test: Place this hook next to sender's top 3 hooks. Does it match in (a) sentence length pattern, (b) lowercase style, (c) level of specificity, (d) emotional register? If any differ noticeably, rewrite to match.
|
|
735
|
-
|
|
736
|
-
### Present Top Hooks to Sender
|
|
737
|
-
|
|
738
|
-
Score all hooks using the rubric in `<hook_scoring>`, then present top 5 per angle:
|
|
739
|
-
|
|
740
|
-
| # | Hook | Score | Type | Why It Works |
|
|
741
|
-
| --- | ------------- | ----- | ------ | ------------ |
|
|
742
|
-
| 1 | "[hook text]" | [N] | [type] | [1 sentence] |
|
|
743
|
-
| ... | ... | ... | ... | ... |
|
|
744
|
-
|
|
745
|
-
### Diversity Check (MUST pass)
|
|
746
|
-
|
|
747
|
-
The top 5 per angle MUST include:
|
|
748
|
-
|
|
749
|
-
- [ ] At least 2 different hook types (from A-E)
|
|
750
|
-
- [ ] At least 1 story-driven hook
|
|
751
|
-
- [ ] At least 1 hook with specific $ amounts or percentages
|
|
752
|
-
- [ ] No more than 2 hooks of the same structure
|
|
753
|
-
- [ ] None too similar to sender's existing posts
|
|
754
|
-
|
|
755
|
-
Ask: "Which hooks do you want me to build full posts for? Any edits?"
|
|
756
|
-
|
|
757
|
-
## Phase 5: Create + Optimize Bodies (For Winning Hooks Only)
|
|
758
|
-
|
|
759
|
-
**Only build bodies for the hooks the sender approved.** Don't waste compute on hooks that got cut.
|
|
760
|
-
|
|
761
|
-
**Agent Team Strategy**: Spawn 2 Task agents:
|
|
762
|
-
|
|
763
|
-
- **body-builder-1**: Creates + optimizes bodies for hooks 1-3
|
|
764
|
-
- **body-builder-2**: Creates + optimizes bodies for hooks 4-5
|
|
765
|
-
|
|
766
|
-
Each agent receives:
|
|
767
|
-
|
|
768
|
-
1. The **voice anchor** from `<voice_anchor>` + sender's top 10 posts (fetched in Phase 0)
|
|
769
|
-
2. The **sender's top 5 full posts** (voice calibration — the drafts must read like the same person)
|
|
770
|
-
3. The **top 5 viral posts** full text from Phase 1A (structural inspiration for body patterns)
|
|
771
|
-
4. Interview transcript + insights summary
|
|
772
|
-
5. The approved hooks with scoring rationale
|
|
773
|
-
6. The LinkedIn rendering rules from `<linkedin_rendering>`
|
|
774
|
-
|
|
775
|
-
### Per Hook: 5 Structural Variations
|
|
776
|
-
|
|
777
|
-
**V1: Viral Post Adaptation**
|
|
778
|
-
Study the body of the HIGHEST-ENGAGEMENT viral post from Phase 1A. Map its section-by-section structure. Adapt that exact structure using the sender's story and voice.
|
|
779
|
-
Reference: include the original viral post URL so the sender can compare.
|
|
780
|
-
|
|
781
|
-
**V2: Story -> Framework**
|
|
782
|
-
Story hook, quick build, then the sender's signature transition phrase with a named framework.
|
|
783
|
-
Arc: Curiosity -> "How?" -> Empowerment
|
|
784
|
-
|
|
785
|
-
**V3: Before/After Math**
|
|
786
|
-
Numbers drive the entire post. Numbers do the persuading. Structure inspired by the sender's own top-performing math posts.
|
|
787
|
-
Arc: Impressive -> Actually painful -> Resolution
|
|
788
|
-
|
|
789
|
-
**V4: Vulnerability + Lesson**
|
|
790
|
-
Deep personal confession as engine. The vulnerability IS the insight.
|
|
791
|
-
Arc: Polished -> Messy -> Liberation
|
|
792
|
-
|
|
793
|
-
**V5: Contrarian Reframe**
|
|
794
|
-
Bold contrarian claim, systematic dismantling of conventional wisdom. Can directly respond to or build on a specific viral post from this week.
|
|
795
|
-
Arc: Disagreement -> Evidence -> New frame
|
|
796
|
-
|
|
797
|
-
### Built-In Body Optimization (do this DURING drafting, not as a separate phase)
|
|
798
|
-
|
|
799
|
-
For EVERY draft, as part of creation:
|
|
800
|
-
|
|
801
|
-
1. **Mobile-first structure**: No line over 50 chars. No section over 4 consecutive lines without a blank line. Short lines (under 45 chars) for more visible content on mobile.
|
|
802
|
-
|
|
803
|
-
2. **Scroll-depth mapping**: Map into ~300-char "thumb scrolls":
|
|
804
|
-
|
|
805
|
-
- Scroll 1 (0-300 chars): Payoff on hook's promise — reward the "see more" click
|
|
806
|
-
- Scroll 2 (300-600 chars): The twist or revelation
|
|
807
|
-
- Scroll 3 (600-900 chars): Framework/numbers/proof
|
|
808
|
-
- Scroll 4 (900+ chars): Landing and mic drop
|
|
809
|
-
|
|
810
|
-
3. **Mini-hook placement**: Re-engagement line every 200-300 chars. If missing, add a signature transition phrase.
|
|
811
|
-
|
|
812
|
-
4. **Section dividers**: Posts over 1,500 chars need 2+ `---` dividers.
|
|
813
|
-
|
|
814
|
-
5. **Ending optimization**: Must be a mic drop, reframe, or cheeky aside. Never a CTA or question.
|
|
815
|
-
|
|
816
|
-
### Quality Gate: Per-Draft Check
|
|
817
|
-
|
|
818
|
-
Run on EVERY draft:
|
|
819
|
-
|
|
820
|
-
1. **Lowercase**: Any caps not proper nouns? Fix.
|
|
821
|
-
2. **Sentence length**: Average > 10 words? Shorten to 5-8.
|
|
822
|
-
3. **White space**: Any paragraph > 3 sentences? Break up.
|
|
823
|
-
4. **Specificity**: At least 3 specific numbers? Add if not.
|
|
824
|
-
5. **CTA check**: Any CTA in last 3 lines? Delete.
|
|
825
|
-
6. **Emoji check**: Any emojis except final parenthetical? Delete.
|
|
826
|
-
7. **Hype check**: "amazing", "incredible", "game-changing"? Replace.
|
|
827
|
-
8. **AI filler check**: Banned phrases from `core/anti-ai-writing-style.md` or voice config? Delete.
|
|
828
|
-
9. **Rhythm check**: Read aloud. Breathless and urgent? If not, cut words.
|
|
829
|
-
10. **Ending check**: Insight/mic drop/parenthetical? Not question or CTA?
|
|
830
|
-
11. **Character count**: 1,200-2,500 chars? Adjust.
|
|
831
|
-
12. **Line 3 check**: Is line 3 blank? Move content up.
|
|
832
|
-
13. **Mobile check**: No section > 4 lines without break? Mini-hooks every 300 chars?
|
|
833
|
-
14. **Anti-AI/proof final gate**: Run the anti-AI audit and proof ledger check. Any story, metric, win, customer/social proof, or answer must be sourced from the interview transcript, `story-bank.md`, `answer-bank.md`, `proof-ledger.md`, `wins-ledger.md`, or approved references.
|
|
834
|
-
|
|
835
|
-
## Phase 6: Rank
|
|
836
|
-
|
|
837
|
-
**Rank all complete posts** (hook + body) across all angles. This runs on the lead agent.
|
|
838
|
-
|
|
839
|
-
### Ranking Criteria (weighted, all 1-10 scale)
|
|
840
|
-
|
|
841
|
-
1. **Hook strength** (30%) — score from `<hook_scoring>` rubric
|
|
842
|
-
2. **Body insight quality** (25%) — 10 = introduces a framework or insight the reader genuinely hasn't encountered. 5 = competent analysis but nothing surprising. 1 = restates obvious points.
|
|
843
|
-
3. **Voice fidelity** (20%) — 10 = indistinguishable from sender's actual posts. 5 = correct style but noticeably different cadence. 1 = sounds like generic AI output.
|
|
844
|
-
4. **Mobile readability** (15%) — 10 = every line under 45 chars, breathing room every 3 lines, mini-hooks placed. 5 = mostly mobile-friendly with a few long lines. 1 = dense paragraphs, lines over 60 chars.
|
|
845
|
-
5. **Ending strength** (10%) — 10 = reframes everything the reader just read. 5 = decent closing but forgettable. 1 = trails off, uses CTA, or asks a question.
|
|
846
|
-
|
|
847
|
-
### Process
|
|
848
|
-
|
|
849
|
-
1. Score each complete post on all 5 weighted dimensions
|
|
850
|
-
2. Rank by composite score
|
|
851
|
-
3. Select top 5 across all angles
|
|
852
|
-
4. Verify structural diversity across the 5 selected posts:
|
|
853
|
-
- No two posts should use the same BODY variation type (e.g., don't select two "V3: Before/After Math")
|
|
854
|
-
- No two posts should use the same HOOK structure type (e.g., don't select two Structure A hooks)
|
|
855
|
-
- If both constraints can't be satisfied because top posts cluster, prioritize hook diversity over body diversity (hook matters more)
|
|
856
|
-
5. If overlap, replace lowest-scored duplicate with next-highest of a different type
|
|
857
|
-
|
|
858
|
-
## Phase 7: Synthesize
|
|
859
|
-
|
|
860
|
-
### Goal
|
|
861
|
-
|
|
862
|
-
For each of the top 5 posts, combine best elements from its 5 structural variations into the single strongest version.
|
|
863
|
-
|
|
864
|
-
### Process
|
|
865
|
-
|
|
866
|
-
**Step 1: Element Extraction**
|
|
867
|
-
For each set of 5 variations, identify:
|
|
868
|
-
|
|
869
|
-
- Strongest opening (first 3 lines)
|
|
870
|
-
- Most compelling middle section (insight delivery)
|
|
871
|
-
- Best specific numbers/data usage
|
|
872
|
-
- Strongest ending
|
|
873
|
-
- Best overall rhythm/flow
|
|
874
|
-
- Any standout sentences
|
|
875
|
-
|
|
876
|
-
**Step 2: Assembly**
|
|
877
|
-
Combine best elements. Rewrite transitions so it flows as one piece — NOT copy-paste.
|
|
878
|
-
|
|
879
|
-
**Step 3: Voice Calibration**
|
|
880
|
-
Compare synthesized post against the sender's ACTUAL top 5 posts (fetched in Phase 0). Put the draft side-by-side with a real post. Ask: "Does this sound like the same person?" If not, identify the specific gap and fix.
|
|
881
|
-
|
|
882
|
-
**Step 4: Anti-Drift Final Check**
|
|
883
|
-
|
|
884
|
-
- [ ] No sentence sounds like AI trying to sound human
|
|
885
|
-
- [ ] "Breathless and urgent" when read aloud
|
|
886
|
-
- [ ] Emotional arc: Tension -> Recognition -> Clarity
|
|
887
|
-
- [ ] 70%+ of sentences are 5-8 words
|
|
888
|
-
- [ ] Does NOT sound promotional
|
|
889
|
-
|
|
890
|
-
**If synthesis is NOT clearly better, use the best individual draft. Never force synthesis.**
|
|
891
|
-
|
|
892
|
-
## Phase 8: Present
|
|
893
|
-
|
|
894
|
-
Present top 5 posts, strongest first. For each:
|
|
895
|
-
|
|
896
|
-
```
|
|
897
|
-
---
|
|
898
|
-
|
|
899
|
-
## Post [N]: [Working Title]
|
|
900
|
-
|
|
901
|
-
### Mobile Preview (~140 chars before "see more")
|
|
902
|
-
> [exact text visible on mobile]
|
|
903
|
-
|
|
904
|
-
### Full Post
|
|
905
|
-
[complete post with exact formatting]
|
|
906
|
-
|
|
907
|
-
### Stats
|
|
908
|
-
- Characters: [X] | Words: [X] | Sections: [X]
|
|
909
|
-
- Numbers used: [list]
|
|
910
|
-
- Hook type: [template name or A-E] | Structure: [story/framework/math/vulnerability/contrarian]
|
|
911
|
-
- Ending: [mic drop / insight / parenthetical]
|
|
912
|
-
|
|
913
|
-
### Viral Inspiration
|
|
914
|
-
- Hook inspired by: "[viral post hook]" by [author] ([X] engagement)
|
|
915
|
-
- What we borrowed: [hook pattern / structure / emotional arc]
|
|
916
|
-
- What we changed: [adapted to sender's voice, story, numbers]
|
|
917
|
-
|
|
918
|
-
### Comparable Past Performance
|
|
919
|
-
- Most structurally similar sender post: "[hook]" ([X] likes)
|
|
920
|
-
- Most structurally similar viral post from this week: "[hook]" ([X] engagement)
|
|
921
|
-
- What's similar: [hook type, length, topic, emotional arc]
|
|
922
|
-
|
|
923
|
-
NOTE: Do NOT predict specific engagement numbers. LinkedIn engagement depends on timing, algorithm, and network effects.
|
|
924
|
-
|
|
925
|
-
### Voice Confidence: [1-10, calibrated]
|
|
926
|
-
- 10 = Could be inserted into sender's post history and no one would notice
|
|
927
|
-
- 8 = Matches sender's patterns but a close reader might spot 1-2 non-native phrases
|
|
928
|
-
- 6 = Recognizably "in the style of" but clearly a different author
|
|
929
|
-
- 4 = Generic founder voice, not specifically this sender
|
|
930
|
-
|
|
931
|
-
To score: compare draft's sentence lengths, signature phrase usage, emotional register, and ending style against sender's reference posts. Count sentences that DON'T match sender's patterns. 0-1 non-matching = 9-10, 2-3 = 7-8, 4-5 = 5-6, 6+ = 3-4.
|
|
932
|
-
|
|
933
|
-
---
|
|
934
|
-
```
|
|
935
|
-
|
|
936
|
-
### Ordering
|
|
937
|
-
|
|
938
|
-
Rank by: (1) hook score, (2) body insight quality, (3) voice fidelity. No two posts should use the same structural pattern.
|
|
939
|
-
|
|
940
|
-
Ask: "Which posts do you want to publish? Any edits?"
|
|
941
|
-
|
|
942
|
-
## Phase 9: Polish (User Feedback Loop)
|
|
943
|
-
|
|
944
|
-
**After presentation, the sender gives feedback. Apply edits and iterate.**
|
|
945
|
-
|
|
946
|
-
### Process
|
|
947
|
-
|
|
948
|
-
1. Accept edits: "post 2 hook is too long", "post 4 ending is weak", "make post 1 more contrarian", etc.
|
|
949
|
-
2. Apply edits while maintaining voice fidelity and mobile optimization.
|
|
950
|
-
3. Re-present edited posts.
|
|
951
|
-
4. Repeat until sender approves.
|
|
952
|
-
5. On final approval, offer to save to `~/.sellable/configs/content/linkedin-posts-drafts.md`.
|
|
953
|
-
|
|
954
|
-
### Memory Candidate Review
|
|
955
|
-
|
|
956
|
-
During polish, turn durable feedback into explicit memory candidates instead of silently rewriting files. For each reusable answer, win/social proof, story, topical take, banned phrase, unused interview snippet, or post example, ask the sender to **approve, edit, reject, or mark private** before saving. Do not upsert every answer automatically.
|
|
957
|
-
|
|
958
|
-
Route approved candidates to the smallest relevant core target:
|
|
959
|
-
|
|
960
|
-
- `core/answer-bank.md` for reusable answers, contrarian explanations, topic takes, and approved framing language.
|
|
961
|
-
- `core/wins-ledger.md` for wins/social proof, metrics, proof receipts, public/private safety, and permission notes.
|
|
962
|
-
- `core/story-bank.md` for reusable stories, founder moments, missed-fortune examples, and concrete post material.
|
|
963
|
-
- `core/anti-ai-writing-style.md` for banned wording, fake-depth phrasing, dead openings, and post-specific anti-patterns.
|
|
964
|
-
- `core/decision-rules.md` for durable post selection, topic safety, and correction rules.
|
|
965
|
-
- `core/change-log.md` for every approved correction, rejected memory proposal worth remembering, private mark, and post-session operator note.
|
|
966
|
-
- `core/transcripts/INDEX.md` plus the relevant `core/transcripts/topics/*.md` file for topic-specific interview snippets and unused material that should stay transcript-first.
|
|
967
|
-
- `core/references/linkedin-posts/INDEX.md` plus a copied reference file under `core/references/linkedin-posts/` for approved post examples or high-signal source posts.
|
|
968
|
-
|
|
969
|
-
Keep write-backs idempotent: use stable source keys such as `create-post:{date}:{sessionSlug}:{candidateSlug}`, check copied paths before adding reference rows, create no duplicate reference rows, and keep manual sections preserved. If the sender marks a candidate private, keep it out of public examples and proof surfaces unless they later approve a public-safe rewrite.
|
|
970
|
-
|
|
971
|
-
## Phase 10: Save Session Insights (Memory Persistence)
|
|
972
|
-
|
|
973
|
-
**Everything we learned this session should help the NEXT session be better.** This is not optional — run after every session, even if the user doesn't explicitly ask.
|
|
974
|
-
|
|
975
|
-
### 10A: Update Proven Searches
|
|
976
|
-
|
|
977
|
-
For each keyword used in discovery, call `record_engage_proven_search({ keyword, totalReturned, postsYielded })`.
|
|
978
|
-
|
|
979
|
-
### 10B: Save Winning Hooks + Body Patterns
|
|
980
|
-
|
|
981
|
-
Append to `~/.sellable/configs/content/linkedin-posts-drafts.md`:
|
|
982
|
-
|
|
983
|
-
```markdown
|
|
984
|
-
## Session [date]
|
|
985
|
-
|
|
986
|
-
### Approved Posts
|
|
987
|
-
|
|
988
|
-
[Full text of each approved post]
|
|
989
|
-
|
|
990
|
-
### Hook Bank (new hooks from this session)
|
|
991
|
-
|
|
992
|
-
| Hook | Chars | Type | Score | Inspired By |
|
|
993
|
-
| ------------- | ----- | ------ | ------- | -------------- |
|
|
994
|
-
| "[hook text]" | [N] | [type] | [score] | [viral source] |
|
|
995
|
-
| ... | ... | ... | ... | ... |
|
|
996
|
-
```
|
|
997
|
-
|
|
998
|
-
### 10C: Save What Worked to Writing Config
|
|
999
|
-
|
|
1000
|
-
Update `~/.sellable/configs/writing/christian-reyes-linkedin-viral.md` by appending a new section:
|
|
1001
|
-
|
|
1002
|
-
```markdown
|
|
1003
|
-
## Session Insights — [date]
|
|
1004
|
-
|
|
1005
|
-
### What's Working on LinkedIn Right Now
|
|
1006
|
-
|
|
1007
|
-
- Scroll-stop formula: [from hook-analyzer]
|
|
1008
|
-
- Dominant hook patterns: [list]
|
|
1009
|
-
- Dominant body patterns: [list]
|
|
1010
|
-
- Topics getting outsized engagement: [list with avg engagement]
|
|
1011
|
-
|
|
1012
|
-
### Hook Patterns That Scored Highest
|
|
1013
|
-
|
|
1014
|
-
1. [Pattern name]: "[example]" — score [N] — mechanism: [why it works]
|
|
1015
|
-
2. [Pattern name]: "[example]" — score [N] — mechanism: [why it works]
|
|
1016
|
-
3. [Pattern name]: "[example]" — score [N] — mechanism: [why it works]
|
|
1017
|
-
|
|
1018
|
-
### Body Patterns That Worked Best
|
|
1019
|
-
|
|
1020
|
-
1. [Template name]: [section structure] — from [viral source]
|
|
1021
|
-
2. [Template name]: [section structure] — from [viral source]
|
|
1022
|
-
|
|
1023
|
-
### Ending Patterns
|
|
1024
|
-
|
|
1025
|
-
- [What ending types got the most engagement this week]
|
|
1026
|
-
|
|
1027
|
-
### Anti-Patterns (What's NOT Working)
|
|
14
|
+
Hard fail patterns:
|
|
1028
15
|
|
|
1029
|
-
-
|
|
1030
|
-
-
|
|
1031
|
-
-
|
|
16
|
+
- fabricated stories, numbers, customers, timelines, or proof
|
|
17
|
+
- posts that sound like AI wrote them
|
|
18
|
+
- outbound, campaign, cold email, or lead-generation workflow behavior
|
|
19
|
+
- comment drafting behavior
|
|
20
|
+
- drafts that skip raw idea capture
|
|
21
|
+
- hooks copied verbatim from another creator
|
|
22
|
+
- using `~/.sellable/configs/content/linkedin-posts-drafts.md` as the normal save target
|
|
23
|
+
</role>
|
|
1032
24
|
|
|
1033
|
-
|
|
25
|
+
<scope>
|
|
26
|
+
V1 is posts-only and hooks-first.
|
|
1034
27
|
|
|
1035
|
-
|
|
1036
|
-
- Stories/angles mined but NOT yet used: [list — save for next session]
|
|
1037
|
-
- Frameworks/mental models extracted: [list]
|
|
1038
|
-
```
|
|
28
|
+
Do:
|
|
1039
29
|
|
|
1040
|
-
|
|
30
|
+
- capture rough ideas, voice memos, freestyle notes, and ad hoc prompts
|
|
31
|
+
- research currently working LinkedIn hooks
|
|
32
|
+
- generate hook candidates
|
|
33
|
+
- draft a post body that stays true to the source idea
|
|
34
|
+
- run validation before calling a draft ready
|
|
35
|
+
- save ideas, hook research, drafts, and published records under `~/.sellable/content/linkedin/**`
|
|
1041
36
|
|
|
1042
|
-
|
|
37
|
+
Do not:
|
|
1043
38
|
|
|
1044
|
-
|
|
1045
|
-
|
|
39
|
+
- create outbound messages
|
|
40
|
+
- create campaigns
|
|
41
|
+
- draft comments
|
|
42
|
+
- optimize a comment workflow
|
|
43
|
+
- move identity/proof/story memory into content files
|
|
44
|
+
- append new drafts to the legacy flat file
|
|
45
|
+
</scope>
|
|
1046
46
|
|
|
1047
|
-
|
|
47
|
+
<required_assets>
|
|
48
|
+
Before drafting, load all required assets with `mcp__sellable__get_subskill_asset`:
|
|
1048
49
|
|
|
1049
|
-
1.
|
|
1050
|
-
|
|
1051
|
-
|
|
50
|
+
1. `subskillName: "create-post", assetPath: "references/post-file-contract.md"`
|
|
51
|
+
2. `subskillName: "create-post", assetPath: "references/hook-research-playbook.md"`
|
|
52
|
+
3. `subskillName: "create-post", assetPath: "references/post-validation.md"`
|
|
1052
53
|
|
|
1053
|
-
|
|
54
|
+
If any required asset is missing, unreadable, truncated without continuation, or internally inconsistent, return:
|
|
1054
55
|
|
|
1055
|
-
|
|
1056
|
-
|
|
56
|
+
```text
|
|
57
|
+
blocked
|
|
58
|
+
reason: required_create_post_asset_missing
|
|
59
|
+
missing_asset: <asset path>
|
|
60
|
+
next_step: retry after package/install update
|
|
1057
61
|
```
|
|
1058
62
|
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
### 10E: Update Tracked Influencers
|
|
1062
|
-
|
|
1063
|
-
If any viral post authors from this session are worth tracking for future discovery, call `upsert_engage_tracked_person({ name, linkedinUrl, reason })`.
|
|
63
|
+
Do not draft until the required assets are loaded.
|
|
64
|
+
</required_assets>
|
|
1064
65
|
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
-
|
|
1077
|
-
-
|
|
1078
|
-
|
|
1079
|
-
|
|
66
|
+
<tools>
|
|
67
|
+
Use these MCP tools when available:
|
|
68
|
+
|
|
69
|
+
- `mcp__sellable__get_auth_status`
|
|
70
|
+
- `mcp__sellable__get_engage_memory`
|
|
71
|
+
- `mcp__sellable__get_subskill_asset`
|
|
72
|
+
- `mcp__sellable__capture_post_idea`
|
|
73
|
+
- `mcp__sellable__get_post_idea`
|
|
74
|
+
- `mcp__sellable__list_post_ideas`
|
|
75
|
+
- `mcp__sellable__save_hook_research`
|
|
76
|
+
- `mcp__sellable__save_post_draft`
|
|
77
|
+
- `mcp__sellable__get_post_draft`
|
|
78
|
+
- `mcp__sellable__mark_post_published`
|
|
79
|
+
- `mcp__sellable__list_published_posts`
|
|
80
|
+
- `mcp__sellable__search_engagement_posts`
|
|
81
|
+
- `mcp__sellable__fetch_linkedin_posts`
|
|
82
|
+
- `mcp__sellable__fetch_linkedin_profile`
|
|
83
|
+
- `mcp__sellable__record_engage_proven_search`
|
|
84
|
+
|
|
85
|
+
Do not call outbound/campaign tools from this skill. Do not call message-generation prompts or tools. This skill reuses the quality architecture of the message pipeline: required assets, candidate set, finalizer pass, simplifier/concrete-language audit, anti-AI audit, proof/voice validation, and blocked/retry-needed states.
|
|
86
|
+
</tools>
|
|
1080
87
|
|
|
1081
|
-
|
|
1082
|
-
|
|
88
|
+
<memory_contract>
|
|
89
|
+
Load user memory before hook generation or drafting:
|
|
1083
90
|
|
|
1084
|
-
|
|
91
|
+
1. Call `mcp__sellable__get_engage_memory`.
|
|
92
|
+
2. Read or use the returned core memory fields:
|
|
93
|
+
- `core/about-me.md`
|
|
94
|
+
- `core/my-company.md`
|
|
95
|
+
- `core/anti-ai-writing-style.md`
|
|
96
|
+
- `core/proof-ledger.md`
|
|
97
|
+
- `core/wins-ledger.md`
|
|
98
|
+
- `core/story-bank.md`
|
|
99
|
+
- `core/answer-bank.md`
|
|
100
|
+
- `core/context-modes.md`
|
|
101
|
+
- `core/decision-rules.md`
|
|
102
|
+
- `core/references/**`
|
|
103
|
+
3. Read post-specific writing rules from `~/.sellable/configs/writing/posts.md` when available.
|
|
1085
104
|
|
|
1086
|
-
|
|
105
|
+
New users may have blank or missing core files until they run `$sellable:interview`. If story, proof, identity, or company memory is missing, ask for the missing material or ask the user to run `$sellable:interview`. Never fabricate what should have come from `story-bank.md`, `proof-ledger.md`, or `answer-bank.md`.
|
|
1087
106
|
|
|
1088
|
-
|
|
107
|
+
The interview/core memory files remain the durable source for stories and proof. This skill may read them, but it must not move them into `~/.sellable/content/**`.
|
|
108
|
+
</memory_contract>
|
|
1089
109
|
|
|
1090
|
-
|
|
1091
|
-
|
|
110
|
+
<modes>
|
|
111
|
+
## Saved Idea Mode
|
|
1092
112
|
|
|
1093
|
-
|
|
113
|
+
Use when the user gives an existing idea ID.
|
|
1094
114
|
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
115
|
+
1. Call `mcp__sellable__get_post_idea({ ideaId })`.
|
|
116
|
+
2. Treat the idea's raw source as immutable source material.
|
|
117
|
+
3. Run hook research.
|
|
118
|
+
4. Save hook research.
|
|
119
|
+
5. Draft and validate.
|
|
120
|
+
6. Save the draft.
|
|
1098
121
|
|
|
1099
|
-
|
|
122
|
+
## Capture Mode
|
|
1100
123
|
|
|
1101
|
-
|
|
124
|
+
Use when the user gives a new rough idea, voice memo transcript, freestyle note, or raw thought.
|
|
1102
125
|
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
- Add approved post examples to `core/references/linkedin-posts/INDEX.md`; create or update a copied file under `core/references/linkedin-posts/` when the example should be reusable.
|
|
126
|
+
1. Call `mcp__sellable__capture_post_idea` before transformation.
|
|
127
|
+
2. Preserve the raw source exactly.
|
|
128
|
+
3. Distill only what the user actually said.
|
|
129
|
+
4. Run hook research.
|
|
130
|
+
5. Save hook research.
|
|
131
|
+
6. Draft and validate.
|
|
132
|
+
7. Save the draft.
|
|
1111
133
|
|
|
1112
|
-
|
|
134
|
+
## Ad Hoc Mode
|
|
1113
135
|
|
|
1114
|
-
|
|
136
|
+
Use when the user says "run the pipeline on this idea" or asks for an immediate draft.
|
|
1115
137
|
|
|
1116
|
-
|
|
1117
|
-
- [ ] Approved posts saved with full text
|
|
1118
|
-
- [ ] Winning hook patterns documented with scores
|
|
1119
|
-
- [ ] Body patterns documented
|
|
1120
|
-
- [ ] Scroll-stop formula + what's working/not working saved
|
|
1121
|
-
- [ ] Unused angles and interview material queued for next session
|
|
1122
|
-
- [ ] New influencers tracked if discovered
|
|
1123
|
-
- [ ] `insights/post-sessions.md` updated with session summary
|
|
1124
|
-
- [ ] `insights/cross-skill.md` updated if any cross-skill learnings found
|
|
1125
|
-
- [ ] Approved memory candidates written to the smallest relevant core targets
|
|
1126
|
-
- [ ] Stable source keys used, no duplicate reference rows added, manual sections preserved
|
|
138
|
+
Normal ad hoc mode still creates an ID'd idea artifact first with `mcp__sellable__capture_post_idea`, preserving the raw input first. Then run the full pipeline immediately.
|
|
1127
139
|
|
|
1128
|
-
|
|
140
|
+
If the user explicitly says not to save anything, label the output `unsaved_preview`, do not call it draft-ready, and do not mark it as validated for publishing.
|
|
141
|
+
</modes>
|
|
1129
142
|
|
|
1130
|
-
<
|
|
143
|
+
<pipeline>
|
|
144
|
+
## Step 0: Bootstrap
|
|
1131
145
|
|
|
1132
|
-
|
|
146
|
+
1. Load all required assets.
|
|
147
|
+
2. Load memory and post writing rules.
|
|
148
|
+
3. Verify auth/workspace if hook research will use Sellable search.
|
|
149
|
+
4. Capture or load the source idea.
|
|
1133
150
|
|
|
1134
|
-
|
|
151
|
+
If local idea capture succeeds but auth/workspace is missing, keep the idea and return a typed blocked state for draft readiness:
|
|
1135
152
|
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|-- Task Agent: trend-researcher
|
|
1142
|
-
| When: Phase 1A (launches immediately, runs while lead finishes setup)
|
|
1143
|
-
| Job: Search 5-8 keyword sets, fetch influencer posts,
|
|
1144
|
-
| filter and rank, return top 10 viral posts. FAST.
|
|
1145
|
-
| Tools: search_engagement_posts, fetch_linkedin_posts
|
|
1146
|
-
| Input: keywords, proven-searches, influencers, post-filters
|
|
1147
|
-
| Output: Top 10 posts with full text, engagement numbers, URLs
|
|
1148
|
-
|
|
|
1149
|
-
|-- [PHASE 1B — THE CORE, launches after 1A completes]
|
|
1150
|
-
|
|
|
1151
|
-
|-- Task Agent: hook-analyzer
|
|
1152
|
-
| When: Phase 1B (receives top 10 posts from trend-researcher)
|
|
1153
|
-
| Job: Deep autopsy of every viral hook — mechanism analysis,
|
|
1154
|
-
| replicability scoring, meta-pattern synthesis, hook template extraction.
|
|
1155
|
-
| THIS IS THE MOST IMPORTANT AGENT. 80% of post success = the hook.
|
|
1156
|
-
| Tools: none needed (pure analysis of provided posts)
|
|
1157
|
-
| Input: top 10 viral posts, sender's top 10 posts (voice reference),
|
|
1158
|
-
| linkedin rendering rules, hook structure reference
|
|
1159
|
-
| Output: 10 hook autopsies, meta-pattern analysis, scroll-stop formula,
|
|
1160
|
-
| 5-7 ranked hook templates with example adaptations
|
|
1161
|
-
|
|
|
1162
|
-
|-- [PHASE 2 — Lead agent interviews sender (dig until gold)]
|
|
1163
|
-
|-- [PHASE 3 — Lead agent presents insights summary, sender chooses angles]
|
|
1164
|
-
|
|
|
1165
|
-
|-- [PHASE 4 — PARALLEL PAIR]
|
|
1166
|
-
|
|
|
1167
|
-
|-- Task Agent: hook-factory-A
|
|
1168
|
-
| When: Phase 4 (after insights summary approved)
|
|
1169
|
-
| Job: Generate 25 hooks for angle 1
|
|
1170
|
-
| Input: voice anchor, 5-7 hook templates from hook-analyzer,
|
|
1171
|
-
| scroll-stop formula, sender's top hooks, rendering rules,
|
|
1172
|
-
| interview transcript + insights summary
|
|
1173
|
-
| Output: 25 scored hooks
|
|
1174
|
-
|
|
|
1175
|
-
|-- Task Agent: hook-factory-B
|
|
1176
|
-
| When: Phase 4 (parallel with hook-factory-A)
|
|
1177
|
-
| Job: Generate 25 hooks for angles 2-3
|
|
1178
|
-
| Input: same as hook-factory-A
|
|
1179
|
-
| Output: 25 scored hooks per angle
|
|
1180
|
-
|
|
|
1181
|
-
|-- [PHASE 4 cont — Lead agent scores hooks, presents to sender, gets approval]
|
|
1182
|
-
|
|
|
1183
|
-
|-- [PHASE 5 — PARALLEL PAIR]
|
|
1184
|
-
|
|
|
1185
|
-
|-- Task Agent: body-builder-1
|
|
1186
|
-
| When: Phase 5 (after hooks approved by sender)
|
|
1187
|
-
| Job: Create + optimize 5 body variations for hooks 1-3
|
|
1188
|
-
| Input: voice anchor, viral post full texts (structural inspiration),
|
|
1189
|
-
| sender's top 5 full posts, winning hooks, interview transcript,
|
|
1190
|
-
| rendering rules
|
|
1191
|
-
| Output: 15 complete posts (5 per hook), mobile-optimized
|
|
1192
|
-
|
|
|
1193
|
-
|-- Task Agent: body-builder-2
|
|
1194
|
-
| When: Phase 5 (parallel with body-builder-1)
|
|
1195
|
-
| Job: Create + optimize 5 body variations for hooks 4-5
|
|
1196
|
-
| Input: same as body-builder-1
|
|
1197
|
-
| Output: 10 complete posts (5 per hook), mobile-optimized
|
|
1198
|
-
|
|
|
1199
|
-
|-- [PHASE 6 — Lead agent ranks all complete posts]
|
|
1200
|
-
|-- [PHASE 7 — Lead agent synthesizes best elements per hook]
|
|
1201
|
-
|-- [PHASE 8 — Lead agent presents top 5]
|
|
1202
|
-
|-- [PHASE 9 — Polish loop with sender feedback]
|
|
1203
|
-
|-- [PHASE 10 — Save all insights, stories, patterns to configs]
|
|
1204
|
-
```
|
|
153
|
+
- `unauthenticated`
|
|
154
|
+
- `no_active_workspace`
|
|
155
|
+
- `search_timeout_or_rate_limited`
|
|
156
|
+
- `zero_useful_hook_results`
|
|
157
|
+
- `full_text_unavailable`
|
|
1205
158
|
|
|
1206
|
-
|
|
159
|
+
## Step 1: Hook Research
|
|
1207
160
|
|
|
1208
|
-
|
|
1209
|
-
- Phase 1B: hook-analyzer = SEQUENTIAL after 1A — **most important agent, give it the most context**
|
|
1210
|
-
- Phase 2: Interview = SEQUENTIAL on lead agent (dig for contrarian takes, don't stop until gold)
|
|
1211
|
-
- Phase 3: Insights summary = SEQUENTIAL on lead agent (present + get sender's angle choices)
|
|
1212
|
-
- Phase 4: hook-factory-A + hook-factory-B = PARALLEL → then lead scores + presents hooks
|
|
1213
|
-
- Phase 5: body-builder-1 + body-builder-2 = PARALLEL (only for approved hooks)
|
|
1214
|
-
- Phases 6-9: Rank + Synthesize + Present + Polish = SEQUENTIAL on lead agent
|
|
1215
|
-
- Phase 10: Save insights = SEQUENTIAL on lead agent (persist everything)
|
|
161
|
+
Use `references/hook-research-playbook.md`.
|
|
1216
162
|
|
|
1217
|
-
|
|
163
|
+
Default flow:
|
|
1218
164
|
|
|
1219
|
-
|
|
165
|
+
1. Convert the idea into 3-8 search keywords.
|
|
166
|
+
2. Call `mcp__sellable__search_engagement_posts`.
|
|
167
|
+
3. Shortlist high-engagement posts by topic fit and hook strength.
|
|
168
|
+
4. Because search results may only include previews, call `mcp__sellable__fetch_linkedin_posts` for shortlisted authors/profile URLs and match recent posts by URL/activity ID when full text is needed.
|
|
169
|
+
5. If full text cannot be matched, record `full_text_unavailable` and use only the preview. Do not invent missing body details.
|
|
170
|
+
6. Extract hook structures, not wording.
|
|
171
|
+
7. Save the research with `mcp__sellable__save_hook_research`.
|
|
1220
172
|
|
|
1221
|
-
|
|
1222
|
-
2. The FULL rendering rules from `<linkedin_rendering>`
|
|
1223
|
-
3. The **5-7 hook templates** from hook-analyzer (the PRIMARY inspiration source)
|
|
1224
|
-
4. The **scroll-stop formula** from hook-analyzer (what's working THIS WEEK)
|
|
1225
|
-
5. The **sender's top 10 actual hooks** with engagement numbers (voice calibration)
|
|
1226
|
-
6. The **sender's top 5 full post texts** (so the agent can match cadence and length)
|
|
1227
|
-
7. The interview transcript + insights summary
|
|
1228
|
-
8. Their specific stage instructions
|
|
173
|
+
Record provenance:
|
|
1229
174
|
|
|
1230
|
-
|
|
175
|
+
- keywords
|
|
176
|
+
- filters
|
|
177
|
+
- source post URLs
|
|
178
|
+
- authors/profile URLs
|
|
179
|
+
- engagement totals
|
|
180
|
+
- full-text match status
|
|
181
|
+
- selected hook patterns
|
|
182
|
+
- why each pattern fits the user's idea and voice
|
|
1231
183
|
|
|
1232
|
-
|
|
184
|
+
## Step 2: Hook Candidates
|
|
1233
185
|
|
|
1234
|
-
|
|
186
|
+
Generate at least 12 hook candidates unless the user requested a smaller set.
|
|
1235
187
|
|
|
1236
|
-
|
|
188
|
+
Each hook must include:
|
|
1237
189
|
|
|
1238
|
-
|
|
190
|
+
- source hook pattern
|
|
191
|
+
- why it fits this idea
|
|
192
|
+
- mobile preview check
|
|
193
|
+
- proof/story dependency
|
|
194
|
+
- AI-tell risk
|
|
195
|
+
- score
|
|
1239
196
|
|
|
1240
|
-
|
|
197
|
+
Do not copy source wording. Copy only the structure.
|
|
1241
198
|
|
|
1242
|
-
|
|
1243
|
-
| -------- | ----------------------------------------- | -------------- | ------------------------------- |
|
|
1244
|
-
| 1 | Solo founder outperforming teams with AI | 40+ | David vs Goliath + AI leverage |
|
|
1245
|
-
| 2 | Personal vulnerability / founder journey | 30+ | Raw honesty creates connection |
|
|
1246
|
-
| 3 | GTM contrarian takes with specific data | 25+ | Challenges orthodoxy with proof |
|
|
1247
|
-
| 4 | "I replaced [expensive thing]" with AI | 15-20 | Makes categories obsolete |
|
|
1248
|
-
| 5 | Compute time = quality (contrarian speed) | emerging | Inverts "faster = better" |
|
|
1249
|
-
| 6 | Self-improving systems / AI that learns | emerging | "Magic moment = self-improving" |
|
|
1250
|
-
| 7 | Missed fortune / regret stories | 11+ | Visceral equity math |
|
|
199
|
+
## Step 3: Draft
|
|
1251
200
|
|
|
1252
|
-
|
|
201
|
+
Draft from:
|
|
1253
202
|
|
|
1254
|
-
-
|
|
1255
|
-
-
|
|
1256
|
-
-
|
|
1257
|
-
-
|
|
1258
|
-
-
|
|
1259
|
-
-
|
|
203
|
+
- exact raw idea
|
|
204
|
+
- selected hook
|
|
205
|
+
- hook research artifact
|
|
206
|
+
- user's core memory
|
|
207
|
+
- story/proof files
|
|
208
|
+
- post writing rules
|
|
1260
209
|
|
|
1261
|
-
|
|
210
|
+
If a claim cannot be traced to the raw idea, core memory, or user answer in the current session, remove it or ask.
|
|
1262
211
|
|
|
1263
|
-
|
|
212
|
+
## Step 4: Validation
|
|
1264
213
|
|
|
1265
|
-
|
|
214
|
+
Use `references/post-validation.md`.
|
|
1266
215
|
|
|
1267
|
-
|
|
216
|
+
Every saved draft needs a validation receipt with:
|
|
1268
217
|
|
|
1269
|
-
|
|
218
|
+
- source idea ID
|
|
219
|
+
- hook research ID
|
|
220
|
+
- candidate hooks considered
|
|
221
|
+
- selected hook and why
|
|
222
|
+
- proof claims used and source
|
|
223
|
+
- story/proof files consulted
|
|
224
|
+
- simplifier/concrete-language audit findings
|
|
225
|
+
- voice audit findings
|
|
226
|
+
- anti-AI audit findings
|
|
227
|
+
- finalizer changes
|
|
228
|
+
- blocked/retry-needed reasons, if any
|
|
1270
229
|
|
|
1271
|
-
|
|
1272
|
-
my competitor and i launched identical linkedin campaigns.
|
|
1273
|
-
same budget, same audience, same product category.
|
|
1274
|
-
i crushed him 8:1 on deal conversion.
|
|
230
|
+
If validation fails, do not save the draft as `ready`. Save as `needs_revision` or return blocked/retry-needed.
|
|
1275
231
|
|
|
1276
|
-
|
|
232
|
+
## Step 5: Save
|
|
1277
233
|
|
|
1278
|
-
|
|
1279
|
-
stronger brand recognition.
|
|
1280
|
-
more funding.
|
|
1281
|
-
bigger team.
|
|
234
|
+
Call `mcp__sellable__save_post_draft`.
|
|
1282
235
|
|
|
1283
|
-
|
|
236
|
+
Drafts live under:
|
|
1284
237
|
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
target the behavior.
|
|
238
|
+
```text
|
|
239
|
+
~/.sellable/content/linkedin/drafts/
|
|
1288
240
|
```
|
|
1289
241
|
|
|
1290
|
-
|
|
242
|
+
Ideas live under:
|
|
1291
243
|
|
|
244
|
+
```text
|
|
245
|
+
~/.sellable/content/linkedin/ideas/
|
|
1292
246
|
```
|
|
1293
|
-
me at 30:
|
|
1294
|
-
|
|
1295
|
-
lead growth engineer at headspace
|
|
1296
|
-
making safe six-figure decisions
|
|
1297
|
-
looking perfect on linkedin
|
|
1298
|
-
while dying inside
|
|
1299
|
-
|
|
1300
|
-
me at 33:
|
|
1301
247
|
|
|
1302
|
-
|
|
1303
|
-
making $500K ARR
|
|
1304
|
-
looking like a mess
|
|
1305
|
-
finally alive
|
|
248
|
+
Hook research lives under:
|
|
1306
249
|
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
sometimes the mess is the message.
|
|
250
|
+
```text
|
|
251
|
+
~/.sellable/content/linkedin/research/hooks/
|
|
1310
252
|
```
|
|
1311
253
|
|
|
1312
|
-
|
|
254
|
+
Published post records live under:
|
|
1313
255
|
|
|
256
|
+
```text
|
|
257
|
+
~/.sellable/content/linkedin/published/
|
|
1314
258
|
```
|
|
1315
|
-
|
|
1316
|
-
sounds impressive until you do the math:
|
|
1317
|
-
i created five $160K jobs and pay myself $40K to do them all:
|
|
259
|
+
</pipeline>
|
|
1318
260
|
|
|
1319
|
-
|
|
261
|
+
<legacy>
|
|
262
|
+
The old file `~/.sellable/configs/content/linkedin-posts-drafts.md` is legacy input only.
|
|
1320
263
|
|
|
1321
|
-
|
|
1322
|
-
|
|
264
|
+
You may mention it when helping migrate older notes. Do not append new ideas, research, drafts, or published records to it during the normal create-post flow.
|
|
265
|
+
</legacy>
|
|
1323
266
|
|
|
1324
|
-
|
|
267
|
+
<response_shape>
|
|
268
|
+
When the pipeline completes, return:
|
|
1325
269
|
|
|
270
|
+
```text
|
|
271
|
+
status: draft_saved | needs_revision | blocked | retry-needed | unsaved_preview
|
|
272
|
+
idea_id: <id or none>
|
|
273
|
+
hook_research_id: <id or none>
|
|
274
|
+
draft_id: <id or none>
|
|
275
|
+
draft_path: <path or none>
|
|
276
|
+
selected_hook: <hook>
|
|
277
|
+
validation_summary:
|
|
278
|
+
proof: pass | needs_user_input | blocked
|
|
279
|
+
voice: pass | needs_revision
|
|
280
|
+
anti_ai: pass | needs_revision
|
|
281
|
+
concrete_language: pass | needs_revision
|
|
282
|
+
next_step: <what the user should do next>
|
|
1326
283
|
```
|
|
1327
|
-
|
|
1328
|
-
The guy catching them: $6M ARR. 1 employee. $0 raised.
|
|
1329
|
-
```
|
|
1330
|
-
|
|
1331
|
-
</reference_posts>
|
|
1332
|
-
|
|
1333
|
-
<critical_rules>
|
|
1334
|
-
|
|
1335
|
-
## Critical Rules
|
|
1336
|
-
|
|
1337
|
-
1. **Never fabricate** stories, numbers, experience, or social proof. Every post must be grounded in the interview transcript, core identity memory, `story-bank.md`, `answer-bank.md`, `proof-ledger.md`, `wins-ledger.md`, `core/references/linkedin-posts/**`, or real sender data.
|
|
1338
|
-
2. **Don't proceed without gold** — the interview must surface a sharp contrarian take, real story, and specific numbers before ANY generation happens. Keep digging until the quality gate passes.
|
|
1339
|
-
3. **Insights summary before generation** — always present what was mined and let the sender choose angles before generating hooks. No silent assumptions.
|
|
1340
|
-
4. **Voice anchor at every stage** — reload core memory and the full voice specification before any generation step.
|
|
1341
|
-
5. **Mobile-first always** — optimize for phone screens, not desktop.
|
|
1342
|
-
6. **No CTA, no emojis, no hype** — these are the strongest anti-patterns for this sender's audience.
|
|
1343
|
-
7. **Specificity is non-negotiable** — every post must have 3+ specific numbers.
|
|
1344
|
-
8. **Quality gates are binary** — pass or fail, no "mostly passes." Failed gates trigger rewrites.
|
|
1345
|
-
9. **Agent teams must be self-contained** — each agent gets the full voice anchor copy-pasted, not referenced.
|
|
1346
|
-
10. **Synthesis has a fallback** — if combining drafts weakens the result, use the best individual draft.
|
|
1347
|
-
11. **Hooks before bodies** — analyze hooks (Phase 1B), generate hooks (Phase 4), get approval, THEN create bodies (Phase 5). Never build bodies for unapproved hooks.
|
|
1348
|
-
12. **Always save session insights** — Phase 10 is NOT optional. Every session must persist: winning hooks, patterns, scroll-stop formula, unused angles, interview material, and what's working/not working to both `configs/` and `insights/`. Cross-skill insights go to `insights/cross-skill.md`.
|
|
1349
|
-
13. **Save unused material** — stories, angles, contrarian takes, and interview quotes not used in this session get queued in configs for next time. Nothing discovered should be lost.
|
|
1350
|
-
14. **Update proven searches** — call `record_engage_proven_search` for every keyword used in discovery.
|
|
1351
|
-
15. **Read cross-skill context at bootstrap** — Phase 0 reads insight files from other skills. This is lightweight (local files only) and makes every session smarter by learning from other skills' results.
|
|
1352
|
-
|
|
1353
|
-
</critical_rules>
|
|
284
|
+
</response_shape>
|