@sellable/mcp 0.1.267 → 0.1.269
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/dist/index-dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/server.js +8 -7
- package/dist/tools/content-posts.d.ts +1 -421
- package/dist/tools/content-posts.js +0 -802
- package/dist/tools/engage-discovery.d.ts +0 -24
- package/dist/tools/engage-discovery.js +9 -114
- package/dist/tools/harvest-jobs.d.ts +182 -0
- package/dist/tools/harvest-jobs.js +429 -0
- package/dist/tools/leads.js +1 -1
- package/dist/tools/registry.d.ts +47 -76
- package/dist/tools/registry.js +2 -0
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +10 -0
- package/skills/create-campaign/core/providers/prospeo.json +5 -2
- package/skills/create-post/SKILL.md +32 -605
- package/skills/create-post/references/hook-research-playbook.md +31 -460
- package/skills/create-post/references/post-file-contract.md +0 -36
- package/skills/create-post/references/post-validation.md +27 -258
- package/skills/create-post/references/premise-development.md +7 -298
- package/skills/providers/prospeo.md +21 -0
- package/skills/create-post/references/linkedin-preview-rendering.md +0 -221
- package/skills/research/config.json +0 -9
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
# Hook Research Playbook
|
|
2
|
-
|
|
3
|
-
Hook research must use current Sellable engagement data before drafting unless
|
|
4
|
-
the user explicitly asks for `unsaved_preview`. The goal is not only to find
|
|
5
|
-
hooks. The goal is to find the weighted best posts, understand why they made
|
|
6
|
-
readers click "see more," decompose each post into a reusable narrative and
|
|
7
|
-
positioning template, and then adapt those templates to the user's real story
|
|
8
|
-
without copying source wording.
|
|
9
|
-
|
|
10
|
-
V2 research has five outputs:
|
|
11
|
-
|
|
12
|
-
1. weighted source winners: the best recent posts to learn from
|
|
13
|
-
2. hook autopsies: exact preview measurements, open loops, and tension created
|
|
14
|
-
3. source-message outlines: the paragraph/line/phrase structure of each source
|
|
15
|
-
post in its original order
|
|
16
|
-
4. viral-post outlines: the reusable narrative structure of each source post
|
|
17
|
-
5. post positioning breakdown templates: line-level positioning and narrative
|
|
18
|
-
technique maps that can be adapted into the user's draft
|
|
19
|
-
6. thought leader inspiration packets when the user supplied specific creators
|
|
1
|
+
# Hook Research Playbook
|
|
2
|
+
|
|
3
|
+
Hook research must use current Sellable engagement data before drafting unless the user explicitly asks for `unsaved_preview`. The goal is not only to find hooks. The goal is to find what the market is currently rewarding, what the audience implicitly believes/wants/resents/fears, which controversial angle the user can credibly test, and what premise would deliver real reader value.
|
|
20
4
|
|
|
21
5
|
## Search Inputs
|
|
22
6
|
|
|
@@ -45,17 +29,11 @@ Worker owns:
|
|
|
45
29
|
- full-text matching by URL/activity ID
|
|
46
30
|
- duplicate removal
|
|
47
31
|
- lead-magnet, giveaway, engagement-bait, and off-voice filtering
|
|
48
|
-
-
|
|
32
|
+
- market belief mapping across kept and rejected examples
|
|
49
33
|
- premise input extraction: real scenes, observed tensions, reader value, proof gaps
|
|
50
|
-
- hook opening measurement
|
|
34
|
+
- hook opening measurement
|
|
51
35
|
- exact phrase-pattern extraction
|
|
52
|
-
- post positioning breakdown by line and phrase
|
|
53
|
-
- viral-post outline extraction
|
|
54
|
-
- line-to-template conversion
|
|
55
36
|
- body-structure extraction
|
|
56
|
-
- body-expression input extraction for the later draft lab
|
|
57
|
-
- per-creator inspiration packet assembly when the user supplied thought
|
|
58
|
-
leaders
|
|
59
37
|
- rejected-example notes
|
|
60
38
|
- track-person and gold-standard recommendations
|
|
61
39
|
|
|
@@ -73,20 +51,14 @@ Worker output must be a compressed research packet, not a data dump:
|
|
|
73
51
|
Research packet:
|
|
74
52
|
- sources kept: max 8
|
|
75
53
|
- sources rejected: max 8
|
|
76
|
-
-
|
|
54
|
+
- market belief map: max 8 bullets
|
|
77
55
|
- controversy candidates: max 8
|
|
78
56
|
- premise inputs: max 8
|
|
79
57
|
- full adapted hook blocks: max 12
|
|
80
58
|
- exact phrase patterns: max 20
|
|
81
|
-
- post positioning breakdowns: max 8
|
|
82
|
-
- viral-post outlines: max 8
|
|
83
|
-
- reusable post templates: max 8
|
|
84
59
|
- body patterns: max 8
|
|
85
60
|
- source URLs and author profile URLs
|
|
86
61
|
- preview measurements
|
|
87
|
-
- hook-to-body promise maps
|
|
88
|
-
- body expression inputs
|
|
89
|
-
- thought leader inspiration packets
|
|
90
62
|
- confidence gaps
|
|
91
63
|
- save recommendations
|
|
92
64
|
```
|
|
@@ -146,59 +118,23 @@ Penalize lead-magnet and engagement-bait mechanics unless the user explicitly as
|
|
|
146
118
|
- "like and comment"
|
|
147
119
|
- broad giveaway framing that makes engagement inflate without proving the hook/body worked
|
|
148
120
|
|
|
149
|
-
##
|
|
150
|
-
|
|
151
|
-
Only promote a source post into template analysis when it clears a practical
|
|
152
|
-
keeper threshold. A post does not have to be perfect, but it must be useful
|
|
153
|
-
enough that copying its structure would teach the draft something.
|
|
154
|
-
|
|
155
|
-
Keeper fields:
|
|
121
|
+
## Market Belief Map
|
|
156
122
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
hook_preview_strength: 1-10
|
|
161
|
-
see_more_tension: 1-10
|
|
162
|
-
body_payoff_strength: 1-10 | full_text_unavailable
|
|
163
|
-
positioning_density: 1-10
|
|
164
|
-
creator_repeat_success: 1-10 | unknown
|
|
165
|
-
engagement_quality: 1-10
|
|
166
|
-
replicability_for_user: 1-10
|
|
167
|
-
voice_fit: 1-10
|
|
168
|
-
penalties:
|
|
169
|
-
lead_magnet:
|
|
170
|
-
engagement_bait:
|
|
171
|
-
celebrity_or_account_size_only:
|
|
172
|
-
borrowed_proof:
|
|
173
|
-
body_unavailable:
|
|
174
|
-
verdict: keeper | maybe | reject
|
|
175
|
-
why:
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
Use `keeper` only when the post has enough hook and body visibility to create a
|
|
179
|
-
template. Use `maybe` when the hook is useful but the body is unavailable or the
|
|
180
|
-
post depends too much on the source creator's status. Use `reject` when the post
|
|
181
|
-
is mostly reach, giveaway mechanics, copied trend language, or poor fit.
|
|
182
|
-
|
|
183
|
-
## Audience Tension Snapshot
|
|
184
|
-
|
|
185
|
-
Before selecting a hook or writing a draft, synthesize an audience tension
|
|
186
|
-
snapshot from the kept and rejected posts. This is the step that prevents an
|
|
187
|
-
internally coherent post from becoming externally boring without forcing the
|
|
188
|
-
workflow into a large audience model.
|
|
123
|
+
Before selecting a hook or writing a draft, synthesize a market belief map from
|
|
124
|
+
the kept and rejected posts. This is the step that prevents an internally
|
|
125
|
+
coherent post from becoming externally boring.
|
|
189
126
|
|
|
190
127
|
Record:
|
|
191
128
|
|
|
192
129
|
- resonating ideas: what topics or claims are repeatedly earning real
|
|
193
130
|
engagement in the last 30-120 days
|
|
131
|
+
- implicit beliefs: what the audience seems to already believe but may not say
|
|
132
|
+
directly
|
|
194
133
|
- audience wants: what they want to feel, learn, try, buy, avoid, or be early to
|
|
195
|
-
-
|
|
196
|
-
readers are reacting to
|
|
197
|
-
- audience objections: what they are tired of, skeptical about, embarrassed by,
|
|
198
|
-
or likely to argue with
|
|
134
|
+
- audience resentments: what they are tired of, embarrassed by, or angry about
|
|
199
135
|
- audience fears: what risk would make them hesitate
|
|
200
136
|
- argument bait: what they will plausibly disagree with in comments
|
|
201
|
-
- credible
|
|
137
|
+
- credible controversy: what the user can argue without borrowing someone else's
|
|
202
138
|
proof or pretending to have data they do not have
|
|
203
139
|
- avoid list: ideas that are inflated by comment bait, stale category claims,
|
|
204
140
|
celebrity reach, giveaway mechanics, or poor voice fit
|
|
@@ -206,11 +142,11 @@ Record:
|
|
|
206
142
|
The selected direction must include:
|
|
207
143
|
|
|
208
144
|
```text
|
|
209
|
-
Selected
|
|
145
|
+
Selected controversy:
|
|
210
146
|
<one sentence>
|
|
211
147
|
|
|
212
148
|
Why this audience would engage:
|
|
213
|
-
<specific
|
|
149
|
+
<specific belief/want/resentment/fear>
|
|
214
150
|
|
|
215
151
|
Why this user can credibly say it:
|
|
216
152
|
<raw idea, memory, story, proof, or product mechanism>
|
|
@@ -219,21 +155,19 @@ What not to claim:
|
|
|
219
155
|
<unsupported metric, borrowed proof, or hype phrase to avoid>
|
|
220
156
|
```
|
|
221
157
|
|
|
222
|
-
If the raw idea is true but the
|
|
158
|
+
If the raw idea is true but the market belief map does not show a live tension,
|
|
223
159
|
do not draft from the raw idea as-is. Present stronger directions or reframe the
|
|
224
160
|
idea around the closest supported external tension.
|
|
225
161
|
|
|
226
162
|
## Premise Inputs
|
|
227
163
|
|
|
228
|
-
After the
|
|
164
|
+
After the market belief map, extract the ingredients needed for premise
|
|
229
165
|
development. Do this before hook generation.
|
|
230
166
|
|
|
231
167
|
Record:
|
|
232
168
|
|
|
233
169
|
- real story or scene candidates from the raw idea, memory, transcript, or
|
|
234
170
|
current-session context
|
|
235
|
-
- transcript worldview packet matches: clusters, transcript references, cards,
|
|
236
|
-
repeated phrasing, worldview ingredients, and hot-take ingredients
|
|
237
171
|
- observed pattern candidates when no first-person story is available
|
|
238
172
|
- visible tension: the uncomfortable gap, cost, contradiction, or tradeoff
|
|
239
173
|
- common belief: what the audience probably believes right now
|
|
@@ -241,7 +175,6 @@ Record:
|
|
|
241
175
|
- reader value: what the reader learns, sees differently, or can do
|
|
242
176
|
- proof available: what can be safely used
|
|
243
177
|
- proof missing: what cannot be claimed without user confirmation
|
|
244
|
-
- private/sensitive transcript material to exclude
|
|
245
178
|
|
|
246
179
|
If this section is weak, say so. Do not let the hook lab proceed as if a clever
|
|
247
180
|
opening can create value that the premise does not have.
|
|
@@ -265,33 +198,19 @@ Measure the visible opening for every shortlisted source post before extracting
|
|
|
265
198
|
the hook pattern. This makes the study useful for LinkedIn, not just generally
|
|
266
199
|
"good writing."
|
|
267
200
|
|
|
268
|
-
LinkedIn does not publish exact "see more" cutoff rules. Treat
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
-
|
|
275
|
-
|
|
276
|
-
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
Use `references/linkedin-preview-rendering.md` as the required gate. Character
|
|
280
|
-
budgets are diagnostics only:
|
|
281
|
-
|
|
282
|
-
- `pass`: rendered mobile preview shows the pain, proof, or curiosity by the end
|
|
283
|
-
of the first 3 rendered lines, and the hook creates a specific click reason
|
|
284
|
-
- `warn`: rendered mobile preview creates useful curiosity but loses one useful
|
|
285
|
-
context word, wraps awkwardly, or spends a visible line on blank space or a
|
|
286
|
-
separator; include a compact fallback
|
|
287
|
-
- `fail`: the hook's real point appears after the rendered mobile review clamp,
|
|
288
|
-
the visible open loop is vague, blank lines consume the preview before the
|
|
289
|
-
point, or desktop fit is the only reason it looks good
|
|
201
|
+
LinkedIn does not publish exact "see more" cutoff rules. Treat these as
|
|
202
|
+
conservative v1 planning budgets:
|
|
203
|
+
|
|
204
|
+
- `pass`: opening hook is <= 110 chars including newlines, every nonblank line
|
|
205
|
+
is <= 45 chars, and the hook's core point lands before likely truncation.
|
|
206
|
+
- `warn`: opening hook is 111-140 chars including newlines, any nonblank line is
|
|
207
|
+
46-55 chars, or blank lines create visual-line risk. Blank lines are allowed,
|
|
208
|
+
but they count as physical lines.
|
|
209
|
+
- `fail`: opening hook is > 140 chars including newlines, any nonblank line is
|
|
210
|
+
> 55 chars, or the hook's core point depends on text after likely truncation.
|
|
290
211
|
|
|
291
212
|
Desktop preview has more room, so record it separately, but never let desktop
|
|
292
|
-
fit compensate for a mobile `fail`.
|
|
293
|
-
the hook unless there is an authenticated LinkedIn screenshot. Say the hook
|
|
294
|
-
`passes the renderer` and show the mobile/desktop visible blocks.
|
|
213
|
+
fit compensate for a mobile `fail`.
|
|
295
214
|
|
|
296
215
|
For each source, record:
|
|
297
216
|
|
|
@@ -305,19 +224,10 @@ For each source, record:
|
|
|
305
224
|
- `firstTwoContentLinesChars`
|
|
306
225
|
- `longestNonblankLineChars`
|
|
307
226
|
- `blankLineCountBeforeFold`
|
|
308
|
-
- `renderedPreview`: literal mobile and desktop visible blocks from
|
|
309
|
-
`references/linkedin-preview-rendering.md`
|
|
310
227
|
- `mobilePreviewBudget`: `pass`, `warn`, or `fail`
|
|
311
228
|
- `desktopPreviewBudget`: `pass`, `warn`, or `fail`
|
|
312
229
|
- `blankLineVisualRisk`
|
|
313
230
|
- `corePointBeforeLikelyTruncation`
|
|
314
|
-
- `seeMoreTension`: what question, contradiction, missing proof, or unfinished
|
|
315
|
-
story makes the reader want the next line
|
|
316
|
-
- `curiosityDebt`: what the hook promises the body must repay
|
|
317
|
-
- `firstScreenPayoffRisk`: whether the hook creates curiosity without enough
|
|
318
|
-
substance to repay it
|
|
319
|
-
- `readerClickReason`: the specific reason a target reader would click "see
|
|
320
|
-
more," not a generic label like "curiosity"
|
|
321
231
|
|
|
322
232
|
If only a search preview is available, do not pretend the opening is complete.
|
|
323
233
|
Record `sourceTextBasis: search_preview` and lower confidence when the hook
|
|
@@ -340,9 +250,6 @@ For each shortlisted source post, record:
|
|
|
340
250
|
- visible hook text or preview
|
|
341
251
|
- opening preview measurement fields from the section above
|
|
342
252
|
- hook mechanism
|
|
343
|
-
- hook promise: what the body is now obligated to prove, reveal, or resolve
|
|
344
|
-
- see-more tension: what makes the reader want the body
|
|
345
|
-
- curiosity debt: what must be repaid quickly after the fold
|
|
346
253
|
- exact hook language patterns: reusable words, phrase shapes, contrast forms,
|
|
347
254
|
sentence shapes, and transition moves
|
|
348
255
|
- story mechanism when the post is a story
|
|
@@ -397,218 +304,6 @@ Never reduce this section to high-level labels like "contrarian" or
|
|
|
397
304
|
"founder story." Those labels are allowed only after the exact phrase mechanics
|
|
398
305
|
are captured.
|
|
399
306
|
|
|
400
|
-
## Post Positioning Categories
|
|
401
|
-
|
|
402
|
-
For post research, use the familiar copy-breakdown categories, but apply them to
|
|
403
|
-
public narrative posts instead of landing pages or outbound emails. Assign one
|
|
404
|
-
primary category to every meaningful line or phrase, and add a secondary
|
|
405
|
-
category only when the same phrase clearly does two jobs.
|
|
406
|
-
|
|
407
|
-
Core categories:
|
|
408
|
-
|
|
409
|
-
- `Context`: setup, scene, timing, environment, or "why this is being said now"
|
|
410
|
-
- `Persona`: who the post is for or who appears in the story
|
|
411
|
-
- `Problem`: pain, friction, failure mode, risk, or gap
|
|
412
|
-
- `Alternative`: the old behavior, competitor, default advice, or common path
|
|
413
|
-
- `Belief`: the assumption, status game, worldview, or market consensus being
|
|
414
|
-
entered
|
|
415
|
-
- `Tension`: contradiction, tradeoff, discomfort, open loop, or argument bait
|
|
416
|
-
- `Proof`: numbers, named events, observed outcomes, screenshots, customers,
|
|
417
|
-
repeated experience, or hard-won authority
|
|
418
|
-
- `Mechanism`: the causal explanation for why the thing works or fails
|
|
419
|
-
- `Capability`: the new action the reader, product, or system can perform
|
|
420
|
-
- `Benefit`: positive outcome, leverage, speed, money, clarity, trust, or relief
|
|
421
|
-
- `Feature`: concrete product/workflow object that powers the mechanism
|
|
422
|
-
- `Identity`: founder confession, status shift, taste, vulnerability, or role
|
|
423
|
-
- `Offer`: CTA, invitation, ask, or proposed next step
|
|
424
|
-
- `Bridge`: transition line that moves the reader from hook to proof, from
|
|
425
|
-
proof to lesson, or from lesson to product
|
|
426
|
-
|
|
427
|
-
Do not hide useful detail behind a category label. The category says what the
|
|
428
|
-
line does; the technique notes must explain how the exact words do it.
|
|
429
|
-
|
|
430
|
-
## Post Positioning Breakdown
|
|
431
|
-
|
|
432
|
-
For every keeper post with enough text, create a line-level breakdown. This is
|
|
433
|
-
the post version of the admin copy-breakdown view: every line becomes a
|
|
434
|
-
positioning and narrative unit that can be templated.
|
|
435
|
-
|
|
436
|
-
Use this format:
|
|
437
|
-
|
|
438
|
-
```text
|
|
439
|
-
Post positioning breakdown:
|
|
440
|
-
source: <author + URL>
|
|
441
|
-
text_basis: full_text | search_preview | manual_user_source
|
|
442
|
-
overall_positioning_sequence:
|
|
443
|
-
<Category> -> <Category> -> <Category> -> ...
|
|
444
|
-
|
|
445
|
-
line_map:
|
|
446
|
-
1.
|
|
447
|
-
source_line:
|
|
448
|
-
char_count:
|
|
449
|
-
line_role:
|
|
450
|
-
primary_category:
|
|
451
|
-
secondary_category:
|
|
452
|
-
narrative_technique:
|
|
453
|
-
tension_created:
|
|
454
|
-
reader_question_opened:
|
|
455
|
-
body_promise:
|
|
456
|
-
proof_or_story_dependency:
|
|
457
|
-
why_this_exact_wording_works:
|
|
458
|
-
reusable_template_line:
|
|
459
|
-
adaptation_guard:
|
|
460
|
-
sellable_version_candidate:
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
Break long lines into phrase-level segments when one line contains multiple
|
|
464
|
-
jobs. Use short anchors or paraphrased line labels for outside source posts; do
|
|
465
|
-
not reproduce the full outside post. Never copy source wording into the draft
|
|
466
|
-
unless it is the user's own approved post.
|
|
467
|
-
|
|
468
|
-
## Source Message Outline
|
|
469
|
-
|
|
470
|
-
Before converting a source post into a reusable template, outline the source
|
|
471
|
-
message as it is. This is the branch map of the original post, not the adapted
|
|
472
|
-
draft plan.
|
|
473
|
-
|
|
474
|
-
The outline must preserve the source post's order and branch each paragraph,
|
|
475
|
-
line, or phrase into the high-level rhetorical goal it serves. If a paragraph
|
|
476
|
-
contains several jobs, split it into phrase-level branches.
|
|
477
|
-
|
|
478
|
-
Use this format:
|
|
479
|
-
|
|
480
|
-
```text
|
|
481
|
-
Source Message Outline:
|
|
482
|
-
source: <author + URL>
|
|
483
|
-
outline_basis: full_text | excerpt_only | screenshot | user_supplied_text
|
|
484
|
-
copyright_safety: use short anchors/paraphrases; do not reproduce the full source
|
|
485
|
-
|
|
486
|
-
P1. <short paragraph anchor or paraphrase>
|
|
487
|
-
goal: <what this paragraph makes the reader think/feel/wonder>
|
|
488
|
-
why_here: <why it appears at this point in the sequence>
|
|
489
|
-
branches:
|
|
490
|
-
A. <phrase/line anchor or paraphrase>
|
|
491
|
-
job: <high-level job of this phrase/line>
|
|
492
|
-
reader_effect: <what changes in the reader>
|
|
493
|
-
reusable_move: <what can be adapted without copying wording>
|
|
494
|
-
B. <phrase/line anchor or paraphrase>
|
|
495
|
-
job:
|
|
496
|
-
reader_effect:
|
|
497
|
-
reusable_move:
|
|
498
|
-
|
|
499
|
-
P2. <short paragraph anchor or paraphrase>
|
|
500
|
-
goal:
|
|
501
|
-
why_here:
|
|
502
|
-
branches:
|
|
503
|
-
A.
|
|
504
|
-
job:
|
|
505
|
-
reader_effect:
|
|
506
|
-
reusable_move:
|
|
507
|
-
```
|
|
508
|
-
|
|
509
|
-
Quality rules:
|
|
510
|
-
|
|
511
|
-
- Do not summarize the whole post first and then invent a cleaner outline.
|
|
512
|
-
- Do not skip ordinary body paragraphs; the point is to learn the source's real
|
|
513
|
-
sequence, including setup, repetition, proof, turns, and close.
|
|
514
|
-
- Every branch must answer: "What is this exact line/paragraph/phrase doing?"
|
|
515
|
-
- Use `P1`, `P2`, `A`, `B`, and `i` structure so the user can compare it
|
|
516
|
-
against the source post.
|
|
517
|
-
- If only an excerpt is available, label `outline_basis: excerpt_only` and do
|
|
518
|
-
not infer hidden body structure.
|
|
519
|
-
- After the source-message outline, then create the viral-post outline and
|
|
520
|
-
template. The adapted outline cannot replace the source-message outline.
|
|
521
|
-
|
|
522
|
-
## Viral-Post Outline
|
|
523
|
-
|
|
524
|
-
After the source-message outline and line-level breakdown, convert each keeper
|
|
525
|
-
into a viral-post outline. The viral-post outline is the reusable narrative
|
|
526
|
-
skeleton beneath the exact words, not a replacement for the source-message
|
|
527
|
-
outline.
|
|
528
|
-
|
|
529
|
-
Use this format:
|
|
530
|
-
|
|
531
|
-
```text
|
|
532
|
-
Viral-post outline:
|
|
533
|
-
source: <author + URL>
|
|
534
|
-
outline_name:
|
|
535
|
-
best_for:
|
|
536
|
-
not_good_for:
|
|
537
|
-
hook_job:
|
|
538
|
-
see_more_trigger:
|
|
539
|
-
body_payoff:
|
|
540
|
-
close_job:
|
|
541
|
-
|
|
542
|
-
beats:
|
|
543
|
-
1.
|
|
544
|
-
beat_name:
|
|
545
|
-
source_lines:
|
|
546
|
-
narrative_job:
|
|
547
|
-
positioning_categories:
|
|
548
|
-
reader_state_before:
|
|
549
|
-
reader_state_after:
|
|
550
|
-
tension_or_open_loop:
|
|
551
|
-
proof_needed:
|
|
552
|
-
reusable_instruction:
|
|
553
|
-
```
|
|
554
|
-
|
|
555
|
-
Examples of outline names:
|
|
556
|
-
|
|
557
|
-
- proof-first roadmap
|
|
558
|
-
- confession to operating rule
|
|
559
|
-
- enemy naming to mechanism
|
|
560
|
-
- teardown to replacement behavior
|
|
561
|
-
- status reversal to concrete lesson
|
|
562
|
-
- personal scene to category thesis
|
|
563
|
-
|
|
564
|
-
## Line-To-Template Conversion
|
|
565
|
-
|
|
566
|
-
Convert the source outline into reusable templates that preserve the narrative
|
|
567
|
-
job, not the source creator's language.
|
|
568
|
-
|
|
569
|
-
Use this format:
|
|
570
|
-
|
|
571
|
-
```text
|
|
572
|
-
Post template:
|
|
573
|
-
source:
|
|
574
|
-
template_name:
|
|
575
|
-
positioning_sequence:
|
|
576
|
-
<Category> -> <Category> -> <Category> -> ...
|
|
577
|
-
required_story_inputs:
|
|
578
|
-
- <input the user must actually have>
|
|
579
|
-
required_proof_inputs:
|
|
580
|
-
- <proof needed to make the template credible>
|
|
581
|
-
forbidden_borrowing:
|
|
582
|
-
- <source proof, joke, phrase, or status that cannot transfer>
|
|
583
|
-
|
|
584
|
-
template_lines:
|
|
585
|
-
1.
|
|
586
|
-
job:
|
|
587
|
-
line_shape:
|
|
588
|
-
allowed_moves:
|
|
589
|
-
disallowed_moves:
|
|
590
|
-
example_user_adaptation:
|
|
591
|
-
```
|
|
592
|
-
|
|
593
|
-
The template should be specific enough that another agent can draft from it
|
|
594
|
-
without re-reading the source post. If the template only says "use a contrarian
|
|
595
|
-
hook" or "tell a story," it failed.
|
|
596
|
-
|
|
597
|
-
## Hook-To-Body Promise Map
|
|
598
|
-
|
|
599
|
-
Every keeper hook must include a map from the preview to the body. This prevents
|
|
600
|
-
the later draft from using a strong opening that the body does not repay.
|
|
601
|
-
|
|
602
|
-
Record:
|
|
603
|
-
|
|
604
|
-
- hook promise: what the hook says or implies the reader will get
|
|
605
|
-
- curiosity debt: what the reader is waiting to learn after clicking
|
|
606
|
-
- first body beat: the first line or paragraph that repays the debt
|
|
607
|
-
- payoff speed: immediate | delayed | too slow
|
|
608
|
-
- tension carried forward: how the body keeps the hook's question alive
|
|
609
|
-
- body betrayal risk: where the body changes topic, gets generic, or overclaims
|
|
610
|
-
- adaptation instruction: how the user's draft must repay the same kind of debt
|
|
611
|
-
|
|
612
307
|
## Body Structure Extraction
|
|
613
308
|
|
|
614
309
|
For each keeper with full text available, extract the body in this format:
|
|
@@ -620,9 +315,6 @@ Body pattern:
|
|
|
620
315
|
Source:
|
|
621
316
|
<author + URL>
|
|
622
317
|
|
|
623
|
-
Positioning sequence:
|
|
624
|
-
<Context -> Proof -> Problem -> Mechanism -> Benefit ...>
|
|
625
|
-
|
|
626
318
|
Sequence:
|
|
627
319
|
1. <paragraph/job 1>
|
|
628
320
|
2. <paragraph/job 2>
|
|
@@ -636,13 +328,6 @@ Exact language moves:
|
|
|
636
328
|
Adapted body move:
|
|
637
329
|
<how this would show up in the user's post>
|
|
638
330
|
|
|
639
|
-
Body expression inputs:
|
|
640
|
-
- hook promise to repay:
|
|
641
|
-
- narrative beats to preserve:
|
|
642
|
-
- line shapes worth adapting:
|
|
643
|
-
- proof/story slots required:
|
|
644
|
-
- candidate Sellable body lines:
|
|
645
|
-
|
|
646
331
|
Replicability:
|
|
647
332
|
high | medium | low
|
|
648
333
|
```
|
|
@@ -664,119 +349,6 @@ For story posts, do not reduce the source to "strong first line" or a generic le
|
|
|
664
349
|
|
|
665
350
|
If the source story only works because of celebrity, outrage, giveaway mechanics, or an unavailable body section, mark it as low-replicability or `full_text_unavailable`.
|
|
666
351
|
|
|
667
|
-
## Template Selection For Drafting
|
|
668
|
-
|
|
669
|
-
After all keeper posts are broken down, select 1-3 source templates for the
|
|
670
|
-
user's idea. Selection is based on fit, not raw engagement.
|
|
671
|
-
|
|
672
|
-
For each selected template, record:
|
|
673
|
-
|
|
674
|
-
```text
|
|
675
|
-
Selected source template:
|
|
676
|
-
template_name:
|
|
677
|
-
source:
|
|
678
|
-
why_this_template_fits_the_user_story:
|
|
679
|
-
why_it_might_fail:
|
|
680
|
-
positioning_sequence_to_borrow:
|
|
681
|
-
hook_move_to_borrow:
|
|
682
|
-
body_outline_to_borrow:
|
|
683
|
-
line_shapes_to_test:
|
|
684
|
-
required_user_inputs:
|
|
685
|
-
required_proof:
|
|
686
|
-
do_not_copy:
|
|
687
|
-
draft_lab_instruction:
|
|
688
|
-
```
|
|
689
|
-
|
|
690
|
-
The draft lab instruction should tell the later premise/drafting stage exactly
|
|
691
|
-
how to use the template, for example:
|
|
692
|
-
|
|
693
|
-
```text
|
|
694
|
-
Use the source's proof-first roadmap sequence, but replace its revenue proof
|
|
695
|
-
with Christian's verified campaign-source ladder. Keep the hook's "unexpected
|
|
696
|
-
best source" tension. Do not borrow the source's dinner/community proof.
|
|
697
|
-
```
|
|
698
|
-
|
|
699
|
-
## Thought Leader Inspiration Workers
|
|
700
|
-
|
|
701
|
-
When the user supplies a list of thought leaders, creators, profile URLs, or
|
|
702
|
-
handles, run a separate inspiration analysis per person. Also do this when the
|
|
703
|
-
user asks for configured thought leaders, influencers, or tracked people. The
|
|
704
|
-
configured source is memory-backed `discovery/influencers.md`; include only
|
|
705
|
-
rows where `Include in Discovery` is not `false`, and treat each row's `Reason`
|
|
706
|
-
as that person's lane/adaptation brief. This is different from general search:
|
|
707
|
-
the source set is the person's own recent content.
|
|
708
|
-
|
|
709
|
-
Use one bounded background worker per person when the host supports background
|
|
710
|
-
agents. If not, process the list sequentially. Each worker must keep its output
|
|
711
|
-
compact and must not return a full corpus dump.
|
|
712
|
-
|
|
713
|
-
Worker steps:
|
|
714
|
-
|
|
715
|
-
1. Resolve the person's profile URL or handle from the user input, tracked
|
|
716
|
-
people, or memory. If the user asked for the configured list, resolve from
|
|
717
|
-
`discovery/influencers.md` first. If unresolved, ask for the URL/handle.
|
|
718
|
-
2. Fetch recent posts with `mcp__sellable__fetch_linkedin_posts`.
|
|
719
|
-
3. Fetch profile/follower context with `mcp__sellable__fetch_linkedin_profile`
|
|
720
|
-
when available.
|
|
721
|
-
4. Score the person's recent posts by:
|
|
722
|
-
- topic fit to the user's current idea
|
|
723
|
-
- hook preview strength
|
|
724
|
-
- body payoff strength
|
|
725
|
-
- positioning density
|
|
726
|
-
- repeated success in the same lane
|
|
727
|
-
- engagement quality
|
|
728
|
-
- engagement per 1k followers when follower count is available
|
|
729
|
-
- adaptation fit for Christian/Sellable voice
|
|
730
|
-
- lead-magnet, giveaway, and status-only penalties
|
|
731
|
-
5. Keep max 5 winners and max 5 rejected examples.
|
|
732
|
-
6. Extract hook mechanics, body mechanics, sentence/rhythm moves, proof slots,
|
|
733
|
-
and close moves.
|
|
734
|
-
7. Identify forbidden borrowing: source wording, source proof, jokes, personal
|
|
735
|
-
stories, audience status, and persona markers.
|
|
736
|
-
8. Create one adapted direction for the user's selected premise in
|
|
737
|
-
Christian/Sellable voice.
|
|
738
|
-
|
|
739
|
-
Each configured person must receive a full person-specific packet. Do not
|
|
740
|
-
summarize the group as a single "GTM influencers" research pass. The later
|
|
741
|
-
drafting stage should be able to compare how Alex, Zayd, Tas, Anthony, or any
|
|
742
|
-
other configured person would structurally pressure-test the same Christian
|
|
743
|
-
idea without copying their voice, proof, jokes, or persona.
|
|
744
|
-
|
|
745
|
-
Worker output:
|
|
746
|
-
|
|
747
|
-
```text
|
|
748
|
-
Thought leader inspiration packet:
|
|
749
|
-
person:
|
|
750
|
-
profile_url:
|
|
751
|
-
recent_posts_reviewed:
|
|
752
|
-
follower_count: <number | unavailable>
|
|
753
|
-
normalization_confidence: high | medium | low
|
|
754
|
-
weighted_winners:
|
|
755
|
-
- source_url:
|
|
756
|
-
engagement:
|
|
757
|
-
engagement_per_1k_followers:
|
|
758
|
-
score:
|
|
759
|
-
why_kept:
|
|
760
|
-
first_3_line_preview:
|
|
761
|
-
hook_mechanics:
|
|
762
|
-
body_mechanics:
|
|
763
|
-
sentence_or_rhythm_moves:
|
|
764
|
-
forbidden_borrowing:
|
|
765
|
-
adapted_direction:
|
|
766
|
-
inspiration_adapter:
|
|
767
|
-
voice_layer: Christian/Sellable
|
|
768
|
-
hook_shape:
|
|
769
|
-
body_shape:
|
|
770
|
-
proof_slots_needed:
|
|
771
|
-
why_it_might_win:
|
|
772
|
-
why_it_might_fail:
|
|
773
|
-
rejected_examples:
|
|
774
|
-
confidence_gaps:
|
|
775
|
-
```
|
|
776
|
-
|
|
777
|
-
Do not call the adapted direction "in <person>'s voice." It is an inspiration
|
|
778
|
-
adapter that borrows public mechanics, then writes in the user's voice.
|
|
779
|
-
|
|
780
352
|
## Blocked States
|
|
781
353
|
|
|
782
354
|
Local idea capture can still succeed when research fails.
|
|
@@ -795,9 +367,8 @@ Save the research with `mcp__sellable__save_hook_research` before drafting.
|
|
|
795
367
|
|
|
796
368
|
The saved research must contain enough detail to support a user-visible
|
|
797
369
|
`Research Learning Report`: source examples, full adapted hook blocks, exact
|
|
798
|
-
phrase patterns,
|
|
799
|
-
|
|
800
|
-
tracked-person recommendations, and gold-standard recommendations.
|
|
370
|
+
phrase patterns, body structures, rejected examples, tracked-person
|
|
371
|
+
recommendations, and gold-standard recommendations.
|
|
801
372
|
|
|
802
373
|
If the user approves a creator/person as a recurring inspiration source, also
|
|
803
374
|
call `mcp__sellable__upsert_engage_tracked_person` with:
|