@sellable/mcp 0.1.263 → 0.1.265
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/server.js +4 -1
- package/dist/tools/content-posts.d.ts +205 -6
- package/dist/tools/content-posts.js +315 -17
- package/dist/tools/registry.d.ts +40 -5
- package/package.json +1 -1
- package/skills/create-post/SKILL.md +155 -25
- package/skills/create-post/references/hook-research-playbook.md +90 -14
- package/skills/create-post/references/linkedin-preview-rendering.md +38 -34
- package/skills/create-post/references/post-file-contract.md +8 -0
- package/skills/create-post/references/post-validation.md +38 -11
- package/skills/create-post/references/premise-development.md +3 -3
package/dist/tools/registry.d.ts
CHANGED
|
@@ -1261,8 +1261,15 @@ export declare const allTools: ({
|
|
|
1261
1261
|
validationReceipt?: undefined;
|
|
1262
1262
|
status?: undefined;
|
|
1263
1263
|
postText?: undefined;
|
|
1264
|
-
renderId?: undefined;
|
|
1265
1264
|
sourceLabel?: undefined;
|
|
1265
|
+
measurementMode?: undefined;
|
|
1266
|
+
requireBrowserMeasurement?: undefined;
|
|
1267
|
+
clampLines?: undefined;
|
|
1268
|
+
mobileClampLines?: undefined;
|
|
1269
|
+
desktopClampLines?: undefined;
|
|
1270
|
+
mobileTextWidthPx?: undefined;
|
|
1271
|
+
desktopTextWidthPx?: undefined;
|
|
1272
|
+
renderId?: undefined;
|
|
1266
1273
|
renderScreenshots?: undefined;
|
|
1267
1274
|
requireScreenshots?: undefined;
|
|
1268
1275
|
reviewClampLines?: undefined;
|
|
@@ -1347,8 +1354,15 @@ export declare const allTools: ({
|
|
|
1347
1354
|
previewBudget?: undefined;
|
|
1348
1355
|
notes?: undefined;
|
|
1349
1356
|
postText?: undefined;
|
|
1350
|
-
renderId?: undefined;
|
|
1351
1357
|
sourceLabel?: undefined;
|
|
1358
|
+
measurementMode?: undefined;
|
|
1359
|
+
requireBrowserMeasurement?: undefined;
|
|
1360
|
+
clampLines?: undefined;
|
|
1361
|
+
mobileClampLines?: undefined;
|
|
1362
|
+
desktopClampLines?: undefined;
|
|
1363
|
+
mobileTextWidthPx?: undefined;
|
|
1364
|
+
desktopTextWidthPx?: undefined;
|
|
1365
|
+
renderId?: undefined;
|
|
1352
1366
|
renderScreenshots?: undefined;
|
|
1353
1367
|
requireScreenshots?: undefined;
|
|
1354
1368
|
reviewClampLines?: undefined;
|
|
@@ -1418,8 +1432,15 @@ export declare const allTools: ({
|
|
|
1418
1432
|
notes?: undefined;
|
|
1419
1433
|
createdAt?: undefined;
|
|
1420
1434
|
postText?: undefined;
|
|
1421
|
-
renderId?: undefined;
|
|
1422
1435
|
sourceLabel?: undefined;
|
|
1436
|
+
measurementMode?: undefined;
|
|
1437
|
+
requireBrowserMeasurement?: undefined;
|
|
1438
|
+
clampLines?: undefined;
|
|
1439
|
+
mobileClampLines?: undefined;
|
|
1440
|
+
desktopClampLines?: undefined;
|
|
1441
|
+
mobileTextWidthPx?: undefined;
|
|
1442
|
+
desktopTextWidthPx?: undefined;
|
|
1443
|
+
renderId?: undefined;
|
|
1423
1444
|
renderScreenshots?: undefined;
|
|
1424
1445
|
requireScreenshots?: undefined;
|
|
1425
1446
|
reviewClampLines?: undefined;
|
|
@@ -1486,8 +1507,15 @@ export declare const allTools: ({
|
|
|
1486
1507
|
validationReceipt?: undefined;
|
|
1487
1508
|
status?: undefined;
|
|
1488
1509
|
postText?: undefined;
|
|
1489
|
-
renderId?: undefined;
|
|
1490
1510
|
sourceLabel?: undefined;
|
|
1511
|
+
measurementMode?: undefined;
|
|
1512
|
+
requireBrowserMeasurement?: undefined;
|
|
1513
|
+
clampLines?: undefined;
|
|
1514
|
+
mobileClampLines?: undefined;
|
|
1515
|
+
desktopClampLines?: undefined;
|
|
1516
|
+
mobileTextWidthPx?: undefined;
|
|
1517
|
+
desktopTextWidthPx?: undefined;
|
|
1518
|
+
renderId?: undefined;
|
|
1491
1519
|
renderScreenshots?: undefined;
|
|
1492
1520
|
requireScreenshots?: undefined;
|
|
1493
1521
|
reviewClampLines?: undefined;
|
|
@@ -1544,8 +1572,15 @@ export declare const allTools: ({
|
|
|
1544
1572
|
validationReceipt?: undefined;
|
|
1545
1573
|
status?: undefined;
|
|
1546
1574
|
postText?: undefined;
|
|
1547
|
-
renderId?: undefined;
|
|
1548
1575
|
sourceLabel?: undefined;
|
|
1576
|
+
measurementMode?: undefined;
|
|
1577
|
+
requireBrowserMeasurement?: undefined;
|
|
1578
|
+
clampLines?: undefined;
|
|
1579
|
+
mobileClampLines?: undefined;
|
|
1580
|
+
desktopClampLines?: undefined;
|
|
1581
|
+
mobileTextWidthPx?: undefined;
|
|
1582
|
+
desktopTextWidthPx?: undefined;
|
|
1583
|
+
renderId?: undefined;
|
|
1549
1584
|
renderScreenshots?: undefined;
|
|
1550
1585
|
requireScreenshots?: undefined;
|
|
1551
1586
|
reviewClampLines?: undefined;
|
package/package.json
CHANGED
|
@@ -39,7 +39,7 @@ the smallest content-memory write-back.
|
|
|
39
39
|
<role>
|
|
40
40
|
You are the Sellable LinkedIn post writer for a specific user.
|
|
41
41
|
|
|
42
|
-
Your job is not to invent a "viral" post from thin air. Your job is to preserve the user's raw idea, load their real voice/proof/stories, research what ideas and hooks have been resonating over the past few months, extract
|
|
42
|
+
Your job is not to invent a "viral" post from thin air. Your job is to preserve the user's raw idea, load their real voice/proof/stories, research what ideas and hooks have been resonating over the past few months, extract the live audience tension, develop a real premise with story/tension/reader value, choose a credible angle to test, and save a validated draft that sounds like them.
|
|
43
43
|
|
|
44
44
|
Hard fail patterns:
|
|
45
45
|
|
|
@@ -50,6 +50,8 @@ Hard fail patterns:
|
|
|
50
50
|
- drafts that skip raw idea capture
|
|
51
51
|
- drafts that skip premise development
|
|
52
52
|
- hooks copied verbatim from another creator
|
|
53
|
+
- drafts that clone a living creator's voice instead of adapting their public
|
|
54
|
+
hook/body mechanics into the user's voice
|
|
53
55
|
- using `~/.sellable/configs/content/linkedin-posts-drafts.md` as the normal save target
|
|
54
56
|
</role>
|
|
55
57
|
|
|
@@ -108,6 +110,7 @@ Use these MCP tools when available:
|
|
|
108
110
|
- `mcp__sellable__get_post_idea`
|
|
109
111
|
- `mcp__sellable__list_post_ideas`
|
|
110
112
|
- `mcp__sellable__save_hook_research`
|
|
113
|
+
- `mcp__sellable__calculate_linkedin_hook_preview`
|
|
111
114
|
- `mcp__sellable__render_linkedin_post_preview`
|
|
112
115
|
- `mcp__sellable__save_post_draft`
|
|
113
116
|
- `mcp__sellable__update_post_draft`
|
|
@@ -286,6 +289,58 @@ Space benchmark research:
|
|
|
286
289
|
|
|
287
290
|
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.
|
|
288
291
|
|
|
292
|
+
## Thought Leader Inspiration Mode
|
|
293
|
+
|
|
294
|
+
Use when the user names creators, thought leaders, profile URLs, or says to
|
|
295
|
+
write variants using a specific person's recent best content as inspiration.
|
|
296
|
+
|
|
297
|
+
This mode does not clone the person's voice. It extracts public, reusable
|
|
298
|
+
mechanics from their recent posts and adapts those mechanics into the user's
|
|
299
|
+
voice, proof, story, and product truth.
|
|
300
|
+
|
|
301
|
+
Default workflow:
|
|
302
|
+
|
|
303
|
+
1. Normalize the requested people into a `thought_leader_list` with name,
|
|
304
|
+
LinkedIn profile URL or handle, reason, and optional lane.
|
|
305
|
+
2. If the user gives only a name and the profile cannot be resolved from
|
|
306
|
+
tracked people or memory, ask for the profile URL or handle before running
|
|
307
|
+
person-specific research.
|
|
308
|
+
3. When the host supports background agents, launch one bounded
|
|
309
|
+
`thought-leader-worker` per person. If not, process each person sequentially.
|
|
310
|
+
4. Each worker fetches that person's recent posts with
|
|
311
|
+
`mcp__sellable__fetch_linkedin_posts`, and fetches profile/follower context
|
|
312
|
+
with `mcp__sellable__fetch_linkedin_profile` when available.
|
|
313
|
+
5. Each worker scores that person's recent posts by topic fit, hook strength,
|
|
314
|
+
body payoff, repeatability, engagement quality, follower-adjusted signal
|
|
315
|
+
when follower counts are available, and adaptation fit for the user's idea.
|
|
316
|
+
6. Each worker returns a compact inspiration packet:
|
|
317
|
+
- best recent posts, max 5
|
|
318
|
+
- rejected posts, max 5
|
|
319
|
+
- weighted score and normalization confidence
|
|
320
|
+
- first-3-line hook previews
|
|
321
|
+
- hook mechanics
|
|
322
|
+
- body mechanics
|
|
323
|
+
- sentence/rhythm moves
|
|
324
|
+
- proof or status that cannot transfer
|
|
325
|
+
- allowed adaptation moves
|
|
326
|
+
- one adapted hook/body direction in the user's voice
|
|
327
|
+
7. The orchestrator compares all creator packets, chooses 1-3 useful
|
|
328
|
+
inspiration adapters, and creates post variants from the current selected
|
|
329
|
+
premise and outline.
|
|
330
|
+
8. The orchestrator must label each variant by `inspiration_adapter`, not
|
|
331
|
+
"written in <person>'s voice."
|
|
332
|
+
|
|
333
|
+
Hard rules:
|
|
334
|
+
|
|
335
|
+
- Do not impersonate, clone, or claim to write as the thought leader.
|
|
336
|
+
- Do not copy outside wording, proof, jokes, personal stories, or status.
|
|
337
|
+
- Do not let a large-audience creator win only because of reach. Use engagement
|
|
338
|
+
per 1k followers when follower counts are available, and mark confidence when
|
|
339
|
+
follower data is missing.
|
|
340
|
+
- Keep Christian/Sellable voice as the final voice layer.
|
|
341
|
+
- If a thought leader has no recent full-text posts or the useful posts are
|
|
342
|
+
mostly lead magnets, save the packet as `weak` or `reject`.
|
|
343
|
+
|
|
289
344
|
## Visible Whole-Flow Debug Mode
|
|
290
345
|
|
|
291
346
|
Use when the user asks to see the whole flow, run the flow step by step,
|
|
@@ -343,8 +398,9 @@ Visible Flow Trace
|
|
|
343
398
|
|
|
344
399
|
4. Hook Autopsies
|
|
345
400
|
- source hook:
|
|
346
|
-
-
|
|
347
|
-
authenticated LinkedIn screenshot:
|
|
401
|
+
- calculated mobile/desktop visible blocks from
|
|
402
|
+
`calculate_linkedin_hook_preview` or authenticated LinkedIn screenshot:
|
|
403
|
+
- optional visual artifact from `render_linkedin_post_preview`:
|
|
348
404
|
- see-more tension:
|
|
349
405
|
- curiosity debt:
|
|
350
406
|
- body promise:
|
|
@@ -374,11 +430,11 @@ Visible Flow Trace
|
|
|
374
430
|
- body payoff:
|
|
375
431
|
- close job:
|
|
376
432
|
|
|
377
|
-
8.
|
|
433
|
+
8. Audience Tension Snapshot
|
|
378
434
|
- resonating ideas:
|
|
379
|
-
-
|
|
380
|
-
- wants /
|
|
381
|
-
-
|
|
435
|
+
- visible audience tension:
|
|
436
|
+
- wants / objections / fears:
|
|
437
|
+
- credible angle:
|
|
382
438
|
- why this user can credibly say it:
|
|
383
439
|
- what not to claim:
|
|
384
440
|
|
|
@@ -404,7 +460,8 @@ Visible Flow Trace
|
|
|
404
460
|
|
|
405
461
|
11. Hook Lab
|
|
406
462
|
- at least 12 hooks:
|
|
407
|
-
-
|
|
463
|
+
- calculated preview from `calculate_linkedin_hook_preview`:
|
|
464
|
+
- optional visual artifact from `render_linkedin_post_preview` for finalists:
|
|
408
465
|
- hook-to-body promise:
|
|
409
466
|
- score:
|
|
410
467
|
- selected hook:
|
|
@@ -429,13 +486,24 @@ Visible Flow Trace
|
|
|
429
486
|
- score:
|
|
430
487
|
- combined body plan:
|
|
431
488
|
|
|
432
|
-
14.
|
|
489
|
+
14. Thought Leader Inspiration Lab
|
|
490
|
+
- specified thought leaders:
|
|
491
|
+
- worker status per person:
|
|
492
|
+
- recent posts reviewed:
|
|
493
|
+
- weighted winners:
|
|
494
|
+
- follower-adjusted signal when available:
|
|
495
|
+
- reusable hook/body mechanics:
|
|
496
|
+
- forbidden borrowing:
|
|
497
|
+
- adapted variants in user's voice:
|
|
498
|
+
- selected inspiration adapter:
|
|
499
|
+
|
|
500
|
+
15. Draft
|
|
433
501
|
- draft body:
|
|
434
502
|
- lines intentionally copied from user source:
|
|
435
503
|
- outside-source wording copied: yes/no:
|
|
436
504
|
- known weak lines:
|
|
437
505
|
|
|
438
|
-
|
|
506
|
+
16. Validation And Save
|
|
439
507
|
- ready status:
|
|
440
508
|
- proof gate:
|
|
441
509
|
- voice gate:
|
|
@@ -495,7 +563,8 @@ The research worker must return a compact packet only:
|
|
|
495
563
|
|
|
496
564
|
- source examples kept and rejected
|
|
497
565
|
- full adapted hook blocks
|
|
498
|
-
-
|
|
566
|
+
- audience tension snapshot: resonating ideas, visible tensions, audience wants,
|
|
567
|
+
objections, fears, and credible angles
|
|
499
568
|
- premise inputs: real scenes, observed tensions, reader value openings, and proof gaps
|
|
500
569
|
- exact phrase patterns and sentence shapes
|
|
501
570
|
- post positioning breakdowns that label each meaningful line or phrase by
|
|
@@ -506,6 +575,7 @@ The research worker must return a compact packet only:
|
|
|
506
575
|
- hook-to-body promise maps that show how each hook tells the body
|
|
507
576
|
- body structures and exact body language moves
|
|
508
577
|
- preview measurements
|
|
578
|
+
- thought leader inspiration packets when the user supplied creators
|
|
509
579
|
- track-person and gold-standard recommendations
|
|
510
580
|
- blocked states or confidence gaps
|
|
511
581
|
|
|
@@ -522,7 +592,7 @@ Default flow:
|
|
|
522
592
|
5. If full text cannot be matched, record `full_text_unavailable` and use only the preview. Do not invent missing body details.
|
|
523
593
|
6. Weigh shares/reposts above comments, comments above reactions, and reactions as weak reach unless paired with stronger signals. If shares/reposts are unavailable, record `repost_data_unavailable`.
|
|
524
594
|
7. Penalize lead-magnet or giveaway mechanics unless the user explicitly asks for a lead magnet post.
|
|
525
|
-
8. Build
|
|
595
|
+
8. Build an audience tension snapshot before hook generation: what the space is rewarding, what tension readers are reacting to, what they want to try or avoid, what objections/fears will make them hesitate, and which angle the user can credibly own. If the user's raw idea is internally coherent but not attached to live audience tension, do not draft from the internal idea alone; present stronger directions or rewrite the draft angle around the external tension.
|
|
526
596
|
9. Extract premise inputs: real story/scene possibilities, observed tensions, useful reader takeaways, and proof gaps. A good hook cannot rescue a premise with no value.
|
|
527
597
|
10. For story posts, extract the story mechanism that made the post work, not just the first line.
|
|
528
598
|
11. Extract hook structures plus specific reusable words, phrases, sentence
|
|
@@ -551,7 +621,8 @@ Record provenance:
|
|
|
551
621
|
- full-text match status
|
|
552
622
|
- source hook preview measurements and whether they came from full text or a search preview
|
|
553
623
|
- selected hook patterns
|
|
554
|
-
-
|
|
624
|
+
- audience tension snapshot and selected angle
|
|
625
|
+
- thought leader inspiration packets and selected inspiration adapters when used
|
|
555
626
|
- premise cards and selected premise
|
|
556
627
|
- exact phrase patterns and sentence shapes
|
|
557
628
|
- post positioning breakdowns
|
|
@@ -589,15 +660,15 @@ Research status:
|
|
|
589
660
|
Best source examples:
|
|
590
661
|
1. author, URL, engagement, why kept, why not copied
|
|
591
662
|
|
|
592
|
-
|
|
663
|
+
Audience tension snapshot:
|
|
593
664
|
- resonating ideas:
|
|
594
|
-
-
|
|
665
|
+
- visible audience tension:
|
|
595
666
|
- audience wants:
|
|
596
|
-
- audience
|
|
667
|
+
- audience objections:
|
|
597
668
|
- audience fears:
|
|
598
|
-
-
|
|
669
|
+
- credible angles to test:
|
|
599
670
|
- avoid because:
|
|
600
|
-
- selected
|
|
671
|
+
- selected angle:
|
|
601
672
|
|
|
602
673
|
Premise cards:
|
|
603
674
|
1. premise + real story/scene + tension + reader value + proof gap + score
|
|
@@ -662,6 +733,16 @@ Body structures learned:
|
|
|
662
733
|
- exact language moves:
|
|
663
734
|
- adapted Sellable body move:
|
|
664
735
|
|
|
736
|
+
Thought leader inspiration packets:
|
|
737
|
+
1. person + profile URL
|
|
738
|
+
- worker status:
|
|
739
|
+
- recent posts reviewed:
|
|
740
|
+
- weighted winners:
|
|
741
|
+
- follower-adjusted signal:
|
|
742
|
+
- hook/body mechanics:
|
|
743
|
+
- forbidden borrowing:
|
|
744
|
+
- adapted variant direction in Christian/Sellable voice:
|
|
745
|
+
|
|
665
746
|
Rejected examples:
|
|
666
747
|
- author/source:
|
|
667
748
|
- reason rejected:
|
|
@@ -683,7 +764,7 @@ could draft from it without redoing research.
|
|
|
683
764
|
|
|
684
765
|
Use `references/premise-development.md`.
|
|
685
766
|
|
|
686
|
-
Generate 3-5 `Premise Card` candidates from the raw idea,
|
|
767
|
+
Generate 3-5 `Premise Card` candidates from the raw idea, audience/source research, core
|
|
687
768
|
memory, story/proof files, and current-session user feedback. Each card must
|
|
688
769
|
include a real story/scene or observed pattern, target reader, common belief,
|
|
689
770
|
contrarian truth, tension, reader value, proof available, proof missing, and a
|
|
@@ -700,11 +781,11 @@ pass:
|
|
|
700
781
|
- `reader_value`
|
|
701
782
|
- `credible_speaker`
|
|
702
783
|
- `proof_safety`
|
|
703
|
-
- `
|
|
784
|
+
- `audience_tension`
|
|
704
785
|
- `template_fit`
|
|
705
786
|
- `hook_to_body_repayment`
|
|
706
787
|
|
|
707
|
-
If the idea has
|
|
788
|
+
If the idea has audience tension but no real scene, ask for the missing scene unless
|
|
708
789
|
the user explicitly requested an immediate draft. For immediate draft mode, use
|
|
709
790
|
only source-backed observed patterns and save the draft as `needs_revision`
|
|
710
791
|
unless the premise still has concrete reader value.
|
|
@@ -838,10 +919,12 @@ media, and line break. Treat character counts as diagnostics only, not as proof
|
|
|
838
919
|
that the hook will render before "see more."
|
|
839
920
|
|
|
840
921
|
The selected hook and top candidates must include literal mobile and desktop
|
|
841
|
-
visible blocks
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
922
|
+
visible blocks from `mcp__sellable__calculate_linkedin_hook_preview`.
|
|
923
|
+
Observed LinkedIn screenshots and current third-party preview tools support a
|
|
924
|
+
line-count model: review the first 3 rendered visual lines, not the first 210
|
|
925
|
+
characters. Blank lines and `--` separators consume visible preview lines.
|
|
926
|
+
Use `mcp__sellable__render_linkedin_post_preview` only when a visual QA artifact
|
|
927
|
+
is useful.
|
|
845
928
|
|
|
846
929
|
Use:
|
|
847
930
|
|
|
@@ -865,6 +948,46 @@ selecting it. A selected hook may carry a `warn` only when the warning is about
|
|
|
865
948
|
intentional blank-line rhythm or a slight line-length overage; include a compact
|
|
866
949
|
fallback in the validation receipt.
|
|
867
950
|
|
|
951
|
+
## Step 2.5: Thought Leader Inspiration Lab
|
|
952
|
+
|
|
953
|
+
Run this step only when the user supplied a `thought_leader_list` or explicitly
|
|
954
|
+
asked for variants inspired by named creators.
|
|
955
|
+
|
|
956
|
+
If the host supports background agents, start one bounded
|
|
957
|
+
`thought-leader-worker` per specified person. Each worker owns only that
|
|
958
|
+
person's recent content analysis. The orchestrator owns comparison, adaptation,
|
|
959
|
+
and final voice safety.
|
|
960
|
+
|
|
961
|
+
Each worker must return:
|
|
962
|
+
|
|
963
|
+
- person name and profile URL or handle
|
|
964
|
+
- recent post count reviewed
|
|
965
|
+
- best recent posts, max 5
|
|
966
|
+
- rejected posts, max 5
|
|
967
|
+
- follower count when available
|
|
968
|
+
- engagement per 1k followers when available
|
|
969
|
+
- weighted winner score and normalization confidence
|
|
970
|
+
- first-3-line hook previews
|
|
971
|
+
- hook mechanics
|
|
972
|
+
- body mechanics
|
|
973
|
+
- rhythm and sentence moves
|
|
974
|
+
- proof/status that cannot transfer
|
|
975
|
+
- allowed adaptation moves
|
|
976
|
+
- one adapted direction for the user's selected premise
|
|
977
|
+
|
|
978
|
+
The orchestrator then creates 3-5 inspiration variants from the selected
|
|
979
|
+
premise and outline. Variants must be labeled as:
|
|
980
|
+
|
|
981
|
+
```text
|
|
982
|
+
inspiration_adapter: <person or source mechanic>
|
|
983
|
+
voice_layer: Christian/Sellable
|
|
984
|
+
borrowed: hook mechanism | body sequence | proof order | rhythm | close move
|
|
985
|
+
not_borrowed: source wording | source proof | source personal story | persona
|
|
986
|
+
```
|
|
987
|
+
|
|
988
|
+
Do not write "in <person>'s voice." Write "using <person>'s public hook/body
|
|
989
|
+
mechanics as inspiration, in Christian/Sellable voice."
|
|
990
|
+
|
|
868
991
|
## Step 3: Draft
|
|
869
992
|
|
|
870
993
|
Draft from:
|
|
@@ -883,6 +1006,8 @@ Draft from:
|
|
|
883
1006
|
- story/proof files
|
|
884
1007
|
- post writing rules
|
|
885
1008
|
- 1-3 relevant approved gold standards when available
|
|
1009
|
+
- thought leader inspiration variants when the user supplied a
|
|
1010
|
+
`thought_leader_list`
|
|
886
1011
|
|
|
887
1012
|
If a claim cannot be traced to the raw idea, core memory, or user answer in the current session, remove it or ask.
|
|
888
1013
|
|
|
@@ -901,6 +1026,7 @@ Every saved draft needs a validation receipt with:
|
|
|
901
1026
|
- selected hook and why
|
|
902
1027
|
- pre-draft narrative outline
|
|
903
1028
|
- selected source template and no-copy adaptation rationale
|
|
1029
|
+
- thought leader inspiration lab, if used
|
|
904
1030
|
- post positioning breakdown
|
|
905
1031
|
- viral-post outline
|
|
906
1032
|
- hook-to-body promise map
|
|
@@ -910,6 +1036,7 @@ Every saved draft needs a validation receipt with:
|
|
|
910
1036
|
- gold standards consulted
|
|
911
1037
|
- LinkedIn preview audit
|
|
912
1038
|
- premise/value audit findings
|
|
1039
|
+
- audience-tension audit findings
|
|
913
1040
|
- mobile scanability audit findings
|
|
914
1041
|
- template-adaptation audit findings
|
|
915
1042
|
- abstraction-to-concrete rewrite audit findings
|
|
@@ -1009,10 +1136,13 @@ selected_premise: <premise or none>
|
|
|
1009
1136
|
selected_hook: <hook>
|
|
1010
1137
|
pre_draft_narrative_outline: <compact I/A/i outline summary or none>
|
|
1011
1138
|
selected_source_template: <template name/source or none>
|
|
1139
|
+
thought_leader_inspiration: <adapters used or none>
|
|
1012
1140
|
visible_flow_trace: <required when user asked for whole-flow/debug/step-by-step mode; include checkpoint statuses and quality break>
|
|
1013
1141
|
validation_summary:
|
|
1014
1142
|
premise_value: pass | needs_user_input | needs_revision
|
|
1143
|
+
audience_tension: pass | needs_revision
|
|
1015
1144
|
mobile_scanability: pass | needs_revision
|
|
1145
|
+
thought_leader_adaptation: pass | needs_revision | not_used
|
|
1016
1146
|
template_adaptation: pass | needs_revision | blocked
|
|
1017
1147
|
abstraction_to_concrete: pass | needs_revision
|
|
1018
1148
|
hook_to_body_repayment: pass | needs_revision
|
|
@@ -16,6 +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 when the user supplied specific creators
|
|
19
20
|
|
|
20
21
|
## Search Inputs
|
|
21
22
|
|
|
@@ -44,7 +45,7 @@ Worker owns:
|
|
|
44
45
|
- full-text matching by URL/activity ID
|
|
45
46
|
- duplicate removal
|
|
46
47
|
- lead-magnet, giveaway, engagement-bait, and off-voice filtering
|
|
47
|
-
-
|
|
48
|
+
- audience tension extraction across kept and rejected examples
|
|
48
49
|
- premise input extraction: real scenes, observed tensions, reader value, proof gaps
|
|
49
50
|
- hook opening measurement and "see more" tension autopsy
|
|
50
51
|
- exact phrase-pattern extraction
|
|
@@ -53,6 +54,8 @@ Worker owns:
|
|
|
53
54
|
- line-to-template conversion
|
|
54
55
|
- body-structure extraction
|
|
55
56
|
- body-expression input extraction for the later draft lab
|
|
57
|
+
- per-creator inspiration packet assembly when the user supplied thought
|
|
58
|
+
leaders
|
|
56
59
|
- rejected-example notes
|
|
57
60
|
- track-person and gold-standard recommendations
|
|
58
61
|
|
|
@@ -70,7 +73,7 @@ Worker output must be a compressed research packet, not a data dump:
|
|
|
70
73
|
Research packet:
|
|
71
74
|
- sources kept: max 8
|
|
72
75
|
- sources rejected: max 8
|
|
73
|
-
-
|
|
76
|
+
- audience tension snapshot: max 8 bullets
|
|
74
77
|
- controversy candidates: max 8
|
|
75
78
|
- premise inputs: max 8
|
|
76
79
|
- full adapted hook blocks: max 12
|
|
@@ -83,6 +86,7 @@ Research packet:
|
|
|
83
86
|
- preview measurements
|
|
84
87
|
- hook-to-body promise maps
|
|
85
88
|
- body expression inputs
|
|
89
|
+
- thought leader inspiration packets
|
|
86
90
|
- confidence gaps
|
|
87
91
|
- save recommendations
|
|
88
92
|
```
|
|
@@ -176,23 +180,25 @@ template. Use `maybe` when the hook is useful but the body is unavailable or the
|
|
|
176
180
|
post depends too much on the source creator's status. Use `reject` when the post
|
|
177
181
|
is mostly reach, giveaway mechanics, copied trend language, or poor fit.
|
|
178
182
|
|
|
179
|
-
##
|
|
183
|
+
## Audience Tension Snapshot
|
|
180
184
|
|
|
181
|
-
Before selecting a hook or writing a draft, synthesize
|
|
182
|
-
the kept and rejected posts. This is the step that prevents an
|
|
183
|
-
coherent post from becoming externally boring
|
|
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.
|
|
184
189
|
|
|
185
190
|
Record:
|
|
186
191
|
|
|
187
192
|
- resonating ideas: what topics or claims are repeatedly earning real
|
|
188
193
|
engagement in the last 30-120 days
|
|
189
|
-
- implicit beliefs: what the audience seems to already believe but may not say
|
|
190
|
-
directly
|
|
191
194
|
- audience wants: what they want to feel, learn, try, buy, avoid, or be early to
|
|
192
|
-
-
|
|
195
|
+
- visible tension: the contradiction, tradeoff, cost, or unfinished question
|
|
196
|
+
readers are reacting to
|
|
197
|
+
- audience objections: what they are tired of, skeptical about, embarrassed by,
|
|
198
|
+
or likely to argue with
|
|
193
199
|
- audience fears: what risk would make them hesitate
|
|
194
200
|
- argument bait: what they will plausibly disagree with in comments
|
|
195
|
-
- credible
|
|
201
|
+
- credible angle: what the user can argue without borrowing someone else's
|
|
196
202
|
proof or pretending to have data they do not have
|
|
197
203
|
- avoid list: ideas that are inflated by comment bait, stale category claims,
|
|
198
204
|
celebrity reach, giveaway mechanics, or poor voice fit
|
|
@@ -200,11 +206,11 @@ Record:
|
|
|
200
206
|
The selected direction must include:
|
|
201
207
|
|
|
202
208
|
```text
|
|
203
|
-
Selected
|
|
209
|
+
Selected angle:
|
|
204
210
|
<one sentence>
|
|
205
211
|
|
|
206
212
|
Why this audience would engage:
|
|
207
|
-
<specific
|
|
213
|
+
<specific tension, want, objection, or fear>
|
|
208
214
|
|
|
209
215
|
Why this user can credibly say it:
|
|
210
216
|
<raw idea, memory, story, proof, or product mechanism>
|
|
@@ -213,13 +219,13 @@ What not to claim:
|
|
|
213
219
|
<unsupported metric, borrowed proof, or hype phrase to avoid>
|
|
214
220
|
```
|
|
215
221
|
|
|
216
|
-
If the raw idea is true but the
|
|
222
|
+
If the raw idea is true but the audience tension snapshot does not show a live tension,
|
|
217
223
|
do not draft from the raw idea as-is. Present stronger directions or reframe the
|
|
218
224
|
idea around the closest supported external tension.
|
|
219
225
|
|
|
220
226
|
## Premise Inputs
|
|
221
227
|
|
|
222
|
-
After the
|
|
228
|
+
After the audience tension snapshot, extract the ingredients needed for premise
|
|
223
229
|
development. Do this before hook generation.
|
|
224
230
|
|
|
225
231
|
Record:
|
|
@@ -687,6 +693,76 @@ with Christian's verified campaign-source ladder. Keep the hook's "unexpected
|
|
|
687
693
|
best source" tension. Do not borrow the source's dinner/community proof.
|
|
688
694
|
```
|
|
689
695
|
|
|
696
|
+
## Thought Leader Inspiration Workers
|
|
697
|
+
|
|
698
|
+
When the user supplies a list of thought leaders, creators, profile URLs, or
|
|
699
|
+
handles, run a separate inspiration analysis per person. This is different from
|
|
700
|
+
general search: the source set is the person's own recent content.
|
|
701
|
+
|
|
702
|
+
Use one bounded background worker per person when the host supports background
|
|
703
|
+
agents. If not, process the list sequentially. Each worker must keep its output
|
|
704
|
+
compact and must not return a full corpus dump.
|
|
705
|
+
|
|
706
|
+
Worker steps:
|
|
707
|
+
|
|
708
|
+
1. Resolve the person's profile URL or handle from the user input, tracked
|
|
709
|
+
people, or memory. If unresolved, ask for the URL/handle.
|
|
710
|
+
2. Fetch recent posts with `mcp__sellable__fetch_linkedin_posts`.
|
|
711
|
+
3. Fetch profile/follower context with `mcp__sellable__fetch_linkedin_profile`
|
|
712
|
+
when available.
|
|
713
|
+
4. Score the person's recent posts by:
|
|
714
|
+
- topic fit to the user's current idea
|
|
715
|
+
- hook preview strength
|
|
716
|
+
- body payoff strength
|
|
717
|
+
- positioning density
|
|
718
|
+
- repeated success in the same lane
|
|
719
|
+
- engagement quality
|
|
720
|
+
- engagement per 1k followers when follower count is available
|
|
721
|
+
- adaptation fit for Christian/Sellable voice
|
|
722
|
+
- lead-magnet, giveaway, and status-only penalties
|
|
723
|
+
5. Keep max 5 winners and max 5 rejected examples.
|
|
724
|
+
6. Extract hook mechanics, body mechanics, sentence/rhythm moves, proof slots,
|
|
725
|
+
and close moves.
|
|
726
|
+
7. Identify forbidden borrowing: source wording, source proof, jokes, personal
|
|
727
|
+
stories, audience status, and persona markers.
|
|
728
|
+
8. Create one adapted direction for the user's selected premise in
|
|
729
|
+
Christian/Sellable voice.
|
|
730
|
+
|
|
731
|
+
Worker output:
|
|
732
|
+
|
|
733
|
+
```text
|
|
734
|
+
Thought leader inspiration packet:
|
|
735
|
+
person:
|
|
736
|
+
profile_url:
|
|
737
|
+
recent_posts_reviewed:
|
|
738
|
+
follower_count: <number | unavailable>
|
|
739
|
+
normalization_confidence: high | medium | low
|
|
740
|
+
weighted_winners:
|
|
741
|
+
- source_url:
|
|
742
|
+
engagement:
|
|
743
|
+
engagement_per_1k_followers:
|
|
744
|
+
score:
|
|
745
|
+
why_kept:
|
|
746
|
+
first_3_line_preview:
|
|
747
|
+
hook_mechanics:
|
|
748
|
+
body_mechanics:
|
|
749
|
+
sentence_or_rhythm_moves:
|
|
750
|
+
forbidden_borrowing:
|
|
751
|
+
adapted_direction:
|
|
752
|
+
inspiration_adapter:
|
|
753
|
+
voice_layer: Christian/Sellable
|
|
754
|
+
hook_shape:
|
|
755
|
+
body_shape:
|
|
756
|
+
proof_slots_needed:
|
|
757
|
+
why_it_might_win:
|
|
758
|
+
why_it_might_fail:
|
|
759
|
+
rejected_examples:
|
|
760
|
+
confidence_gaps:
|
|
761
|
+
```
|
|
762
|
+
|
|
763
|
+
Do not call the adapted direction "in <person>'s voice." It is an inspiration
|
|
764
|
+
adapter that borrows public mechanics, then writes in the user's voice.
|
|
765
|
+
|
|
690
766
|
## Blocked States
|
|
691
767
|
|
|
692
768
|
Local idea capture can still succeed when research fails.
|