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