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