@sellable/mcp 0.1.268 → 0.1.271

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.268",
3
+ "version": "0.1.271",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -55,8 +55,8 @@ Hard fail patterns:
55
55
  - drafts that skip raw idea capture
56
56
  - drafts that skip premise development
57
57
  - hooks copied verbatim from another creator
58
- - drafts that clone a living creator's voice instead of adapting their public
59
- hook/body mechanics into the user's voice
58
+ - final drafts that claim to be authored by a living creator, copy outside
59
+ wording, or borrow another creator's personal proof/status as the user's proof
60
60
  - using `~/.sellable/configs/content/linkedin-posts-drafts.md` as the normal save target
61
61
  </role>
62
62
 
@@ -234,7 +234,7 @@ Use when the user gives an existing idea ID.
234
234
  1. Call `mcp__sellable__get_post_idea({ ideaId })`.
235
235
  2. Treat the idea's raw source as immutable source material.
236
236
  3. Run hook research.
237
- 4. Run the configured thought-leader inspiration lab unless the user explicitly
237
+ 4. Run the configured thought-leader voice variant lab unless the user explicitly
238
238
  says to skip thought leaders or use only a named subset.
239
239
  5. Develop and select a premise card.
240
240
  6. Save hook research.
@@ -252,7 +252,7 @@ Use when the user gives a new rough idea, voice memo transcript, freestyle note,
252
252
  4. Distill only what the user actually said plus source-backed transcript
253
253
  worldview/proof ingredients. Label anything inferred from transcripts.
254
254
  5. Run hook research.
255
- 6. Run the configured thought-leader inspiration lab unless the user explicitly
255
+ 6. Run the configured thought-leader voice variant lab unless the user explicitly
256
256
  says to skip thought leaders or use only a named subset.
257
257
  7. Develop and select a premise card.
258
258
  8. Save hook research.
@@ -318,7 +318,7 @@ Space benchmark research:
318
318
 
319
319
  The approved pack is capped at 20 gold standards. If adding new approved examples would exceed 20, ask which existing item to replace or skip the overflow. Candidate lists can be longer, but approved saved standards cannot exceed 20.
320
320
 
321
- ## Thought Leader Inspiration Mode
321
+ ## Thought Leader Voice Variant Mode
322
322
 
323
323
  Use when the user names creators, thought leaders, profile URLs, or says to
324
324
  write variants using a specific person's recent best content as inspiration.
@@ -329,9 +329,41 @@ the configured active influencer list after the Transcript Worldview Packet and
329
329
  general hook research, unless the user explicitly says to skip thought leaders,
330
330
  skip external inspiration, or use only a named subset.
331
331
 
332
- This mode does not clone the person's voice. It extracts public, reusable
333
- mechanics from their recent posts and adapts those mechanics into the user's
334
- voice, proof, story, and product truth.
332
+ This mode is a role-play variant lab for internal synthesis. Each background
333
+ worker should assume that creator's public LinkedIn lens, taste, hook style,
334
+ rhythm, and editorial instincts, then draft the post the creator would likely
335
+ write from the user's idea and context. The worker may write in a voice-inspired
336
+ style for the private variant, but it must not claim the creator authored it,
337
+ copy source wording, copy personal proof, or invent facts about the user.
338
+
339
+ The final orchestrator does not publish a collage of creator personas. It takes
340
+ the best hooks, pressure, structure, rhythm, and proof moves from the role-played
341
+ variants, then synthesizes the most compelling post for Christian/Sellable.
342
+
343
+ Target fast flow:
344
+
345
+ ```text
346
+ +----------------------+ +----------------------+ +----------------------+
347
+ | Raw idea + memory | ---> | Active influencers | ---> | Parallel workers |
348
+ | 3-5 min | | 1 min | | 6-10 min wall clock |
349
+ +----------------------+ +----------------------+ +----------+-----------+
350
+ |
351
+ v
352
+ +----------------------+ +----------------------+ +----------------------+
353
+ | Save compact draft | <--- | Final synthesis | <--- | Voice-modeled posts |
354
+ | 1 min | | 3-5 min | | representative length|
355
+ +----------------------+ +----------------------+ +----------------------+
356
+ ```
357
+
358
+ Default output budget:
359
+
360
+ - main orchestrator receipt: 300-700 words
361
+ - each influencer worker: representative-length post plus compact notes
362
+ - each influencer post variant: match that creator's normal length, rhythm,
363
+ vocabulary, formatting, and close for this kind of idea
364
+ - final synthesized post: normal LinkedIn post length unless the user asks short
365
+ - do not return long research reports unless the user explicitly asks for them;
366
+ spend tokens on the actual voice-modeled post
335
367
 
336
368
  Default workflow:
337
369
 
@@ -345,42 +377,63 @@ Default workflow:
345
377
  tracked people or memory, ask for the profile URL or handle before running
346
378
  person-specific research.
347
379
  3. When the host supports background agents, launch one bounded
348
- `thought-leader-worker` per person. If not, process each person sequentially.
349
- Each configured person must receive full person-specific research; do not
350
- collapse the configured list into generic space research.
380
+ `influencer-voice-worker` per person. If not, process each person
381
+ sequentially. Each configured person must receive a person-specific voice
382
+ variant; do not collapse the configured list into generic space research.
351
383
  4. Each worker fetches that person's recent posts with
352
384
  `mcp__sellable__fetch_linkedin_posts`, and fetches profile/follower context
353
385
  with `mcp__sellable__fetch_linkedin_profile` when available.
354
- 5. Each worker scores that person's recent posts by topic fit, hook strength,
355
- body payoff, repeatability, engagement quality, follower-adjusted signal
356
- when follower counts are available, and adaptation fit for the user's idea.
357
- 6. Each worker returns a compact inspiration packet:
358
- - best recent posts, max 5
359
- - rejected posts, max 5
360
- - weighted score and normalization confidence
361
- - first-3-line hook previews
362
- - hook mechanics
363
- - body mechanics
364
- - sentence/rhythm moves
365
- - proof or status that cannot transfer
366
- - allowed adaptation moves
367
- - one adapted hook/body direction in the user's voice
368
- 7. The orchestrator compares all creator packets, chooses 1-3 useful
369
- inspiration adapters, and creates post variants from the current selected
370
- premise and outline.
371
- 8. The orchestrator must label each variant by `inspiration_adapter`, not
372
- "written in <person>'s voice."
386
+ 5. Each worker samples enough recent posts to understand the person's current
387
+ public voice. Score internally for topic fit, hook strength, body payoff,
388
+ repeated patterns, engagement quality, and follower-adjusted signal when
389
+ follower counts are available. Do not return the full scoring table.
390
+ 6. Each worker must build a `voice_model` before drafting:
391
+ - representative length range for similar posts
392
+ - average paragraph/line length and spacing rhythm
393
+ - hook posture and opening moves
394
+ - common vocabulary, recurring phrases, and taboo phrases
395
+ - proof style: story, numbers, teardown, checklist, confession, challenge
396
+ - formatting: bullets, numbering, questions, equations, parentheticals
397
+ - close style: command, reflection, CTA, punchline, open loop
398
+ - factual boundaries: what must come from Christian/Sellable context
399
+ 7. Each worker writes the complete post that this creator would likely write
400
+ from the user's idea and context. Match the inferred length/rhythm/style; do
401
+ not compress to a generic short draft.
402
+ 8. Each worker returns a compact voice variant:
403
+ - person and profile URL
404
+ - worker status
405
+ - recent post count sampled
406
+ - voice model, max 8 bullets
407
+ - complete post variant in that creator's inferred voice and representative
408
+ length
409
+ - hook options, max 3
410
+ - what to steal for the final Christian/Sellable post, max 5 bullets
411
+ - what to drop or avoid, max 5 bullets
412
+ - proof gaps and factual risks
413
+ - source URLs sampled, max 3
414
+ 9. The orchestrator compares all creator variants, chooses the strongest hooks,
415
+ structures, proof moves, and rhythm, then writes one synthesized final post.
416
+ 10. The orchestrator must label worker outputs as `voice_variant_from: <person>`
417
+ and final synthesis as `final_voice: Christian/Sellable`.
418
+ 11. In the final user-visible response, include a compact
419
+ `BACKGROUND_AGENT_DRAFT_REVIEW` section before the final post whenever this
420
+ lab ran. It must review every active person's private variant, state the
421
+ strongest move, what to drop, and what was selected for synthesis. Do not
422
+ hide this behind a boolean receipt when the user is validating the workflow.
373
423
 
374
424
  Hard rules:
375
425
 
376
- - Do not impersonate, clone, or claim to write as the thought leader.
426
+ - The role-play variant is internal synthesis material, not a claim of authorship
427
+ by the creator.
377
428
  - Do not copy outside wording, proof, jokes, personal stories, or status.
429
+ - Do not invent user proof just because it would fit the creator's style.
378
430
  - Do not let a large-audience creator win only because of reach. Use engagement
379
431
  per 1k followers when follower counts are available, and mark confidence when
380
432
  follower data is missing.
381
- - Keep Christian/Sellable voice as the final voice layer.
433
+ - Keep Christian/Sellable truth and proof as the final factual layer.
382
434
  - If a thought leader has no recent full-text posts or the useful posts are
383
- mostly lead magnets, save the packet as `weak` or `reject`.
435
+ mostly lead magnets, return a weak variant and explain what could still be
436
+ useful.
384
437
 
385
438
  ## Visible Whole-Flow Debug Mode
386
439
 
@@ -533,16 +586,16 @@ Visible Flow Trace
533
586
  - score:
534
587
  - combined body plan:
535
588
 
536
- 14. Thought Leader Inspiration Lab
589
+ 14. Thought Leader Voice Variant Lab
537
590
  - specified thought leaders:
538
591
  - worker status per person:
539
- - recent posts reviewed:
540
- - weighted winners:
592
+ - recent posts sampled:
593
+ - voice model:
594
+ - complete voice variants:
541
595
  - follower-adjusted signal when available:
542
- - reusable hook/body mechanics:
543
- - forbidden borrowing:
544
- - adapted variants in user's voice:
545
- - selected inspiration adapter:
596
+ - hook/body moves worth stealing:
597
+ - proof gaps and factual risks:
598
+ - selected synthesis ingredients:
546
599
 
547
600
  15. Draft
548
601
  - draft body:
@@ -656,7 +709,7 @@ The research worker must return a compact packet only:
656
709
  - hook-to-body promise maps that show how each hook tells the body
657
710
  - body structures and exact body language moves
658
711
  - preview measurements
659
- - thought leader inspiration packets from the configured active influencer list
712
+ - thought leader voice variants from the configured active influencer list
660
713
  unless the user explicitly opted out or supplied a named subset
661
714
  - track-person and gold-standard recommendations
662
715
  - blocked states or confidence gaps
@@ -705,7 +758,7 @@ Record provenance:
705
758
  - source hook preview measurements and whether they came from full text or a search preview
706
759
  - selected hook patterns
707
760
  - audience tension snapshot and selected angle
708
- - thought leader inspiration packets and selected inspiration adapters from the
761
+ - thought leader voice variants and selected synthesis ingredients from the
709
762
  configured active influencer list unless explicitly skipped
710
763
  - premise cards and selected premise
711
764
  - exact phrase patterns and sentence shapes
@@ -818,15 +871,14 @@ Body structures learned:
818
871
  - exact language moves:
819
872
  - adapted Sellable body move:
820
873
 
821
- Thought leader inspiration packets:
874
+ Thought leader voice variants:
822
875
  1. person + profile URL
823
876
  - worker status:
824
- - recent posts reviewed:
825
- - weighted winners:
826
- - follower-adjusted signal:
827
- - hook/body mechanics:
828
- - forbidden borrowing:
829
- - adapted variant direction in Christian/Sellable voice:
877
+ - recent posts sampled:
878
+ - voice model:
879
+ - full role-played post variant:
880
+ - steal/drop notes:
881
+ - factual risk:
830
882
 
831
883
  Rejected examples:
832
884
  - author/source:
@@ -1033,7 +1085,7 @@ selecting it. A selected hook may carry a `warn` only when the warning is about
1033
1085
  intentional blank-line rhythm or a slight line-length overage; include a compact
1034
1086
  fallback in the validation receipt.
1035
1087
 
1036
- ## Step 2.5: Thought Leader Inspiration Lab
1088
+ ## Step 2.5: Thought Leader Voice Variant Lab
1037
1089
 
1038
1090
  Run this step by default for draft-producing create-post flows using the
1039
1091
  configured active people in `discovery/influencers.md`. Skip it only when the
@@ -1041,40 +1093,104 @@ user explicitly says to skip thought leaders, skip external inspiration, or use
1041
1093
  only general hook research. If the user supplied a `thought_leader_list`, use
1042
1094
  that named subset instead of the full configured list.
1043
1095
 
1044
- If the host supports background agents, start one bounded
1045
- `thought-leader-worker` per specified person. Each worker owns only that
1046
- person's recent content analysis. The orchestrator owns comparison, adaptation,
1047
- and final voice safety.
1096
+ This is a draft-readiness gate, not an optional research note. Before final
1097
+ prose, resolve the active configured influencer list, record the expected person
1098
+ count, and produce one voice variant for every active person. A draft
1099
+ cannot be `ready` when the configured list was not loaded, when an active person
1100
+ is missing a variant, or when the lab is summarized as generic hook research. If
1101
+ a profile fetch or post fetch succeeds but produces weak material, keep a
1102
+ `weak` variant with the attempted fetches and confidence gaps. If a profile URL
1103
+ cannot be resolved or the research tool fails, return `retry-needed` or save
1104
+ only `needs_revision` unless the user explicitly opted out of the lab.
1105
+
1106
+ When the host supports background agents, fire one bounded
1107
+ `influencer-voice-worker` per specified person. This is the default execution
1108
+ mode. Do not process the configured influencer list sequentially just to keep
1109
+ the main orchestrator simple. Sequential processing is allowed only when the
1110
+ host has no background-agent mechanism; record that fallback in the receipt.
1111
+ Each worker owns only that person's voice role-play variant. The orchestrator
1112
+ owns comparison, synthesis, factual safety, and final Christian/Sellable proof.
1048
1113
 
1049
1114
  Each worker must return:
1050
1115
 
1051
1116
  - person name and profile URL or handle
1052
- - recent post count reviewed
1053
- - best recent posts, max 5
1054
- - rejected posts, max 5
1117
+ - worker status
1118
+ - recent post count sampled
1055
1119
  - follower count when available
1056
- - engagement per 1k followers when available
1057
- - weighted winner score and normalization confidence
1058
- - first-3-line hook previews
1059
- - hook mechanics
1060
- - body mechanics
1061
- - rhythm and sentence moves
1062
- - proof/status that cannot transfer
1063
- - allowed adaptation moves
1064
- - one adapted direction for the user's selected premise
1065
-
1066
- The orchestrator then creates 3-5 inspiration variants from the selected
1067
- premise and outline. Variants must be labeled as:
1120
+ - normalization confidence
1121
+ - voice model, max 8 bullets, including representative length, rhythm,
1122
+ vocabulary, formatting, proof style, and close style
1123
+ - complete role-played post variant in the creator's inferred voice and
1124
+ representative length
1125
+ - hook options, max 3
1126
+ - best lines or moves worth stealing, max 5 bullets
1127
+ - what to drop or avoid, max 5 bullets
1128
+ - proof gaps and factual risks
1129
+ - source URLs sampled, max 3
1130
+
1131
+ Do not return full research tables, long post autopsies, or full source text
1132
+ unless the user explicitly asks for the research report. The normal worker job is
1133
+ to draft the variant.
1134
+
1135
+ The orchestrator then synthesizes the final post from the voice variants.
1136
+ Variant labels must be:
1068
1137
 
1069
1138
  ```text
1070
- inspiration_adapter: <person or source mechanic>
1071
- voice_layer: Christian/Sellable
1072
- borrowed: hook mechanism | body sequence | proof order | rhythm | close move
1073
- not_borrowed: source wording | source proof | source personal story | persona
1139
+ voice_variant_from: <person>
1140
+ role_play_basis: public posts sampled + configured Reason lane
1141
+ post_variant: <complete variant>
1142
+ steal_for_final: hook | structure | proof order | rhythm | close move
1143
+ drop_for_final: copied wording | borrowed personal proof | fake user fact
1074
1144
  ```
1075
1145
 
1076
- Do not write "in <person>'s voice." Write "using <person>'s public hook/body
1077
- mechanics as inspiration, in Christian/Sellable voice."
1146
+ It is acceptable for the worker to write the private variant "in <person>'s
1147
+ voice" for synthesis. It is not acceptable to publish the variant as that
1148
+ person, copy their wording, or borrow their personal proof/status. The final
1149
+ draft should be the most compelling synthesis, grounded in Christian/Sellable
1150
+ context.
1151
+
1152
+ Before drafting, record:
1153
+
1154
+ - `activeInfluencerSource`: `discovery/influencers.md` or named subset
1155
+ - `expectedActiveInfluencerCount`
1156
+ - `actualVoiceVariantCount`
1157
+ - `missingVoiceVariants`
1158
+ - `weakVoiceVariants`
1159
+ - `selectedSynthesisIngredients`
1160
+ - `voiceVariantsGeneratedBeforeFinalProse: yes | no`
1161
+ - `workerExecutionMode: background_agents | sequential_fallback`
1162
+ - `backgroundWorkerIds` or worker labels when available
1163
+
1164
+ If `actualVoiceVariantCount` is lower than
1165
+ `expectedActiveInfluencerCount`, do not save the draft as `ready`.
1166
+
1167
+ When returning the completed draft, show the synthesis review in this shape
1168
+ before the final post:
1169
+
1170
+ ```text
1171
+ BACKGROUND_AGENT_DRAFT_REVIEW
1172
+ workerExecutionMode: background_agents | sequential_fallback
1173
+ expectedActiveInfluencerCount: <number>
1174
+ actualVoiceVariantCount: <number>
1175
+
1176
+ 1. <person>
1177
+ - worker_status:
1178
+ - draft_review:
1179
+ - strongest_move:
1180
+ - weakness_or_drop:
1181
+ - synthesis_decision:
1182
+
1183
+ SYNTHESIS_INGREDIENTS
1184
+ - hook:
1185
+ - structure:
1186
+ - rhythm:
1187
+ - proof_order:
1188
+ - close:
1189
+ - dropped:
1190
+ ```
1191
+
1192
+ The review must cover every active configured person, not only the winning
1193
+ variant. Then return `FINAL_POST` in Christian/Sellable voice.
1078
1194
 
1079
1195
  ## Step 3: Draft
1080
1196
 
@@ -1095,11 +1211,16 @@ Draft from:
1095
1211
  - story/proof files
1096
1212
  - post writing rules
1097
1213
  - 1-3 relevant approved gold standards when available
1098
- - thought leader inspiration variants from the configured active influencer
1214
+ - thought leader voice variants from the configured active influencer
1099
1215
  list or supplied named subset
1100
1216
 
1101
1217
  If a claim cannot be traced to the raw idea, core memory, or user answer in the current session, remove it or ask.
1102
1218
 
1219
+ Do not write final draft prose until the Thought Leader Voice Variant Lab has
1220
+ either completed for every active configured influencer or the validation
1221
+ receipt has an explicit user opt-out reason. A light source-research summary
1222
+ does not satisfy this gate.
1223
+
1103
1224
  ## Step 4: Validation
1104
1225
 
1105
1226
  Use `references/post-validation.md`.
@@ -1116,7 +1237,8 @@ Every saved draft needs a validation receipt with:
1116
1237
  - selected hook and why
1117
1238
  - pre-draft narrative outline
1118
1239
  - selected source template and no-copy adaptation rationale
1119
- - thought leader inspiration lab, including skipped/opt-out reason when omitted
1240
+ - thought leader voice variant lab, including skipped/opt-out reason when
1241
+ omitted and expected-vs-actual variant counts for the active configured list
1120
1242
  - post positioning breakdown
1121
1243
  - viral-post outline
1122
1244
  - hook-to-body promise map
@@ -1226,7 +1348,9 @@ selected_premise: <premise or none>
1226
1348
  selected_hook: <hook>
1227
1349
  pre_draft_narrative_outline: <compact I/A/i outline summary or none>
1228
1350
  selected_source_template: <template name/source or none>
1229
- thought_leader_inspiration: <adapters used or none>
1351
+ thought_leader_voice_variants: <variants and synthesis ingredients used or none>
1352
+ background_agent_draft_review: <per-person review and synthesis decision when the lab ran>
1353
+ final_post: <complete final post in Christian/Sellable voice>
1230
1354
  visible_flow_trace: <required when user asked for whole-flow/debug/step-by-step mode; include checkpoint statuses and quality break>
1231
1355
  validation_summary:
1232
1356
  premise_value: pass | needs_user_input | needs_revision
@@ -7,7 +7,7 @@ readers click "see more," decompose each post into a reusable narrative and
7
7
  positioning template, and then adapt those templates to the user's real story
8
8
  without copying source wording.
9
9
 
10
- V2 research has five outputs:
10
+ V2 research has six outputs:
11
11
 
12
12
  1. weighted source winners: the best recent posts to learn from
13
13
  2. hook autopsies: exact preview measurements, open loops, and tension created
@@ -16,7 +16,7 @@ V2 research has five outputs:
16
16
  4. viral-post outlines: the reusable narrative structure of each source post
17
17
  5. post positioning breakdown templates: line-level positioning and narrative
18
18
  technique maps that can be adapted into the user's draft
19
- 6. thought leader inspiration packets from the configured active influencer
19
+ 6. thought leader voice variants from the configured active influencer
20
20
  list, unless the user explicitly skipped thought leaders or supplied a
21
21
  named subset
22
22
 
@@ -56,7 +56,7 @@ Worker owns:
56
56
  - line-to-template conversion
57
57
  - body-structure extraction
58
58
  - body-expression input extraction for the later draft lab
59
- - per-creator inspiration packet assembly when the user supplied thought
59
+ - per-creator voice variant assembly when the user supplied thought
60
60
  leaders
61
61
  - rejected-example notes
62
62
  - track-person and gold-standard recommendations
@@ -88,7 +88,7 @@ Research packet:
88
88
  - preview measurements
89
89
  - hook-to-body promise maps
90
90
  - body expression inputs
91
- - thought leader inspiration packets
91
+ - thought leader voice variants
92
92
  - confidence gaps
93
93
  - save recommendations
94
94
  ```
@@ -698,9 +698,9 @@ with Christian's verified campaign-source ladder. Keep the hook's "unexpected
698
698
  best source" tension. Do not borrow the source's dinner/community proof.
699
699
  ```
700
700
 
701
- ## Thought Leader Inspiration Workers
701
+ ## Thought Leader Voice Variant Workers
702
702
 
703
- Run a separate inspiration analysis per person for the configured active
703
+ Run a separate voice-variant worker per person for the configured active
704
704
  thought-leader list by default during draft-producing create-post flows, unless
705
705
  the user explicitly says to skip thought leaders, skip external inspiration, or
706
706
  use only a named subset. Also do this when the user supplies a list of thought
@@ -710,9 +710,31 @@ memory-backed `discovery/influencers.md`; include only rows where
710
710
  person's lane/adaptation brief. This is different from general search: the
711
711
  source set is the person's own recent content.
712
712
 
713
+ This is a hard drafting dependency. General hook research, space benchmark
714
+ research, or a single combined "influencer takeaways" paragraph does not satisfy
715
+ the thought-leader step. The research artifact must record the active
716
+ configured list, expected active person count, actual voice variant count,
717
+ missing variants, weak variants, and selected synthesis ingredients. Ready
718
+ drafts require one voice variant per active configured person unless the user
719
+ explicitly opted out or supplied a smaller named subset.
720
+
713
721
  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.
722
+ agents. This is required for Codex/Claude hosts that expose background agents or
723
+ Task workers. If the host does not expose a worker mechanism, process the list
724
+ sequentially and record `workerExecutionMode: sequential_fallback` plus the
725
+ reason. Each worker must keep its output compact and must not return a full
726
+ corpus dump or long research report.
727
+
728
+ Runtime budget:
729
+
730
+ ```text
731
+ per worker target: representative-length post + compact notes
732
+ post variant target: match the creator's normal length for this type of idea
733
+ source samples returned: max 3 URLs
734
+ hook options returned: max 3
735
+ steal/drop notes: max 5 bullets each
736
+ normal wall-clock: one background wave, 6-10 minutes total for 6-10 people
737
+ ```
716
738
 
717
739
  Worker steps:
718
740
 
@@ -722,7 +744,7 @@ Worker steps:
722
744
  2. Fetch recent posts with `mcp__sellable__fetch_linkedin_posts`.
723
745
  3. Fetch profile/follower context with `mcp__sellable__fetch_linkedin_profile`
724
746
  when available.
725
- 4. Score the person's recent posts by:
747
+ 4. Sample and score the person's recent posts internally by:
726
748
  - topic fit to the user's current idea
727
749
  - hook preview strength
728
750
  - body payoff strength
@@ -732,54 +754,61 @@ Worker steps:
732
754
  - engagement per 1k followers when follower count is available
733
755
  - adaptation fit for Christian/Sellable voice
734
756
  - 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
757
+ 5. Build a `voice_model` before drafting. It must infer:
758
+ - representative post length range for similar ideas
759
+ - paragraph and line rhythm
760
+ - hook posture and opening moves
761
+ - vocabulary and recurring phrases
762
+ - formatting habits: bullets, numbering, equations, parentheticals, spacing
763
+ - proof style: story, metric, teardown, confession, field guide, challenge
764
+ - close style: command, reflection, CTA, punchline, or open loop
765
+ - factual boundaries that must come from Christian/Sellable
766
+ 6. Assume and role-play the person's public LinkedIn voice for a private
767
+ synthesis variant. This means adopting their likely length, vocabulary,
768
+ hook tension, pacing, section shape, directness, humor level, proof style,
769
+ formatting, and editorial instincts.
770
+ 7. Write the complete post that this creator would likely write from the user's
771
+ selected premise and context. Do not compress it into a short generic draft.
772
+ 8. Identify what the final synthesis should steal and what it must drop.
773
+ 9. Keep factual claims grounded in the user's context. Do not invent user proof.
774
+
775
+ Each configured person must receive a full person-specific variant. Do not
744
776
  summarize the group as a single "GTM influencers" research pass. The later
745
777
  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.
778
+ other configured person would actually write the same Christian idea, then
779
+ combine the strongest pieces.
780
+
781
+ If a person's recent posts are weak or off-topic, still return a packet with
782
+ `worker_status: weak`, the reviewed post count, a weaker voice variant if
783
+ possible, confidence gaps, and a clear reason the person should not strongly
784
+ influence the final synthesis. If the profile or posts cannot be fetched because
785
+ of a tool failure, record `worker_status: retry_needed` and do not allow a
786
+ `ready` draft.
748
787
 
749
788
  Worker output:
750
789
 
751
790
  ```text
752
- Thought leader inspiration packet:
791
+ Thought leader voice variant:
753
792
  person:
754
793
  profile_url:
755
- recent_posts_reviewed:
794
+ worker_id_or_label:
795
+ worker_status: pass | weak | retry_needed | blocked
796
+ recent_posts_sampled:
756
797
  follower_count: <number | unavailable>
757
798
  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:
799
+ voice_model: [max 8 bullets covering length, rhythm, vocabulary, formatting, proof style, close]
800
+ hook_options: [max 3]
801
+ post_variant: <complete post in the creator's inferred voice and representative length>
802
+ steal_for_final: [max 5 bullets]
803
+ drop_for_final: [max 5 bullets]
804
+ source_urls_sampled: [max 3]
778
805
  confidence_gaps:
779
806
  ```
780
807
 
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.
808
+ The worker may call the private draft "in <person>'s voice" because that is the
809
+ role-play job. The orchestrator must not claim the creator authored it, must not
810
+ copy exact outside wording into the final, and must ground final claims in
811
+ Christian/Sellable context.
783
812
 
784
813
  ## Blocked States
785
814
 
@@ -74,10 +74,13 @@ Hook research files must preserve:
74
74
  - rendered preview records for kept source hooks and adapted hook blocks,
75
75
  including literal mobile/desktop preview blocks and whether the first-screen
76
76
  promise is visible
77
- - thought leader inspiration packets from the configured active influencer list
78
- or supplied named subset, including worker status, profile URL/handle, recent
79
- posts reviewed, weighted winners, follower-adjusted signal when available,
80
- allowed mechanics to adapt, and forbidden borrowing
77
+ - thought leader voice variants from the configured active influencer list or
78
+ supplied named subset, including worker status, profile URL/handle, recent
79
+ posts sampled, inferred voice model, representative-length role-played post
80
+ variant, source URLs sampled, steal/drop notes, factual risk notes,
81
+ `workerExecutionMode`, expected active influencer count, actual variant count,
82
+ missing variants, weak variants, and background worker IDs or labels when
83
+ available
81
84
  - source-message outlines for keeper posts, preserving source paragraph order
82
85
  and branching each paragraph, line, or phrase into high-level goal, reader
83
86
  effect, reusable move, and adaptation guard without reproducing the full
@@ -104,9 +107,11 @@ Draft files must preserve:
104
107
  - draft body
105
108
  - source-message outline for any outside post being adapted, when the draft's
106
109
  body shape was learned from a specific source post
107
- - thought leader inspiration lab by default, including the selected inspiration
108
- adapter, variants considered, Christian/Sellable voice layer,
109
- copying/voice-clone risk, and skipped/opt-out reason when omitted
110
+ - thought leader voice variant lab by default, including voice models, variants
111
+ considered, selected synthesis ingredients, final Christian/Sellable voice,
112
+ style-simulation risk, active configured influencer list, expected-vs-actual
113
+ variant counts, `workerExecutionMode`, background worker IDs or labels, and
114
+ skipped/opt-out reason when omitted
110
115
  - pre-draft narrative outline: hierarchical `I.`, `A.`, `i.` outline covering
111
116
  hook debt, thesis, reader, core mechanism, definitions, proof claims,
112
117
  working body patterns adapted, narrative beats, mobile scan path, body
@@ -334,31 +334,59 @@ If `selectedAngle` is missing, if the audience tension is only a generic label
334
334
  like "founders want growth," or if `credibleWhyUs` depends on borrowed proof
335
335
  from another creator, save as `needs_revision`.
336
336
 
337
- ## Thought Leader Inspiration Audit
337
+ ## Thought Leader Voice Variant Audit
338
338
 
339
339
  For draft-producing create-post flows, validate the configured thought-leader
340
- inspiration lab by default. If it was skipped, record the explicit opt-out
341
- reason. When thought leaders or creators were used, validate that inspiration
342
- was used as structural adaptation, not persona cloning.
340
+ voice variant lab by default. If it was skipped, record the explicit opt-out
341
+ reason. When thought leaders or creators were used, validate that background
342
+ workers produced complete role-play variants before final prose was synthesized.
343
+
344
+ This audit is a ready-status gate. It is not enough to mention that creators
345
+ were reviewed. The receipt must prove that the configured influencer workflow
346
+ ran before prose was drafted.
343
347
 
344
348
  Record:
345
349
 
350
+ - `activeInfluencerSource`: `discovery/influencers.md` | named subset | user
351
+ opt-out
352
+ - `expectedActiveInfluencerCount`
353
+ - `actualVoiceVariantCount`
354
+ - `missingVoiceVariants`
355
+ - `weakVoiceVariants`
356
+ - `workerExecutionMode`: `background_agents` | `sequential_fallback`
357
+ - `backgroundWorkerIds`: worker IDs or labels when available
346
358
  - `thoughtLeaderList`: names and profile URLs or handles
347
- - `workerPackets`: one packet per person, or `not_available` with reason
348
- - `weightedWinners`: best posts used, with follower-adjusted signal when
349
- available
359
+ - `voiceModels`: inferred length, rhythm, vocabulary, formatting, proof style,
360
+ and close style per person
361
+ - `voiceVariants`: one representative-length role-played post per person, or
362
+ `not_available` with reason
350
363
  - `normalizationConfidence`: high | medium | low
351
- - `inspirationAdapters`: hook/body mechanics selected for adaptation
352
- - `voiceLayer`: must be `Christian/Sellable`
353
- - `forbiddenBorrowingAvoided`: source wording, proof, jokes, personal stories,
354
- status, and persona markers avoided
355
- - `variantsConsidered`: adapted variants generated from the selected premise
356
- - `selectedVariant`: winning adapter and why
357
- - `copyingOrVoiceCloneRisk`: pass | needs_revision | blocked
358
-
359
- Save as `needs_revision` when a draft imitates a living person's voice, borrows
360
- their proof/status, copies outside wording, or lets a creator with a giant
361
- audience win without any follower-adjusted or confidence-adjusted signal.
364
+ - `selectedSynthesisIngredients`: hooks, body moves, proof order, rhythm, close
365
+ - `finalVoice`: usually `Christian/Sellable`
366
+ - `forbiddenBorrowingAvoided`: exact outside wording, proof, jokes, personal
367
+ stories, status, and fake user facts avoided
368
+ - `voiceVariantsGeneratedBeforeFinalProse`: yes | no
369
+ - `selectedSynthesis`: what won and why
370
+ - `styleSimulationRisk`: pass | needs_revision | blocked
371
+
372
+ Save as `needs_revision` when a final draft copies exact outside wording,
373
+ borrows another creator's proof/status as if it were the user's, invents user
374
+ facts, or lets a creator with a giant audience win without any
375
+ confidence-adjusted reason.
376
+
377
+ Save as `needs_revision` when `actualVoiceVariantCount` is lower than
378
+ `expectedActiveInfluencerCount`, when the active configured list was not loaded,
379
+ when variants are replaced by a generic influencer summary, or when voice
380
+ variants were generated after final prose instead of before final prose. Return
381
+ `retry-needed` when a tool/package/search failure prevents fetching configured
382
+ profiles or posts.
383
+ Only mark `thought_leader_adaptation: not_used` when the user explicitly opted
384
+ out before drafting.
385
+
386
+ Save as `needs_revision` when the host supports background agents but the
387
+ configured influencers were processed sequentially without a recorded fallback
388
+ reason. The default expected value is `workerExecutionMode:
389
+ background_agents`.
362
390
 
363
391
  ## LinkedIn Preview Audit
364
392