@sellable/mcp 0.1.269 → 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/dist/index-dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/server.js +7 -8
- package/dist/tools/content-posts.d.ts +421 -1
- package/dist/tools/content-posts.js +802 -0
- package/dist/tools/engage-discovery.d.ts +24 -0
- package/dist/tools/engage-discovery.js +114 -9
- package/dist/tools/leads.js +1 -1
- package/dist/tools/registry.d.ts +76 -47
- package/dist/tools/registry.js +0 -2
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +0 -10
- package/skills/create-campaign/core/providers/prospeo.json +2 -5
- package/skills/create-post/SKILL.md +746 -36
- package/skills/create-post/references/hook-research-playbook.md +493 -31
- package/skills/create-post/references/linkedin-preview-rendering.md +221 -0
- package/skills/create-post/references/post-file-contract.md +41 -0
- package/skills/create-post/references/post-validation.md +288 -27
- package/skills/create-post/references/premise-development.md +298 -7
- package/skills/providers/prospeo.md +0 -21
- package/skills/research/config.json +9 -0
- package/dist/tools/harvest-jobs.d.ts +0 -182
- package/dist/tools/harvest-jobs.js +0 -429
|
@@ -34,12 +34,17 @@ If foundation memory is missing or too thin, ask the user to run
|
|
|
34
34
|
`$sellable:foundation` or answer the missing foundation questions before
|
|
35
35
|
drafting. If content-memory is missing, continue from the raw source and propose
|
|
36
36
|
the smallest content-memory write-back.
|
|
37
|
+
|
|
38
|
+
Captured ideas must be matched against transcript-derived content memory before
|
|
39
|
+
premise development. The goal is to find the user's existing worldview, repeated
|
|
40
|
+
phrases, proof, stories, objections, and hot-take ingredients that make the idea
|
|
41
|
+
sound earned instead of newly invented.
|
|
37
42
|
</command_model>
|
|
38
43
|
|
|
39
44
|
<role>
|
|
40
45
|
You are the Sellable LinkedIn post writer for a specific user.
|
|
41
46
|
|
|
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
|
|
47
|
+
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
48
|
|
|
44
49
|
Hard fail patterns:
|
|
45
50
|
|
|
@@ -50,6 +55,8 @@ Hard fail patterns:
|
|
|
50
55
|
- drafts that skip raw idea capture
|
|
51
56
|
- drafts that skip premise development
|
|
52
57
|
- hooks copied verbatim from another creator
|
|
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
|
|
53
60
|
- using `~/.sellable/configs/content/linkedin-posts-drafts.md` as the normal save target
|
|
54
61
|
</role>
|
|
55
62
|
|
|
@@ -84,6 +91,7 @@ Before drafting, load all required assets with `mcp__sellable__get_subskill_asse
|
|
|
84
91
|
3. `subskillName: "create-post", assetPath: "references/premise-development.md"`
|
|
85
92
|
4. `subskillName: "create-post", assetPath: "references/post-validation.md"`
|
|
86
93
|
5. `subskillName: "create-post", assetPath: "references/gold-standard-post-pack.md"`
|
|
94
|
+
6. `subskillName: "create-post", assetPath: "references/linkedin-preview-rendering.md"`
|
|
87
95
|
|
|
88
96
|
If any required asset is missing, unreadable, truncated without continuation, or internally inconsistent, return:
|
|
89
97
|
|
|
@@ -107,6 +115,8 @@ Use these MCP tools when available:
|
|
|
107
115
|
- `mcp__sellable__get_post_idea`
|
|
108
116
|
- `mcp__sellable__list_post_ideas`
|
|
109
117
|
- `mcp__sellable__save_hook_research`
|
|
118
|
+
- `mcp__sellable__calculate_linkedin_hook_preview`
|
|
119
|
+
- `mcp__sellable__render_linkedin_post_preview`
|
|
110
120
|
- `mcp__sellable__save_post_draft`
|
|
111
121
|
- `mcp__sellable__update_post_draft`
|
|
112
122
|
- `mcp__sellable__list_post_draft_iterations`
|
|
@@ -151,6 +161,23 @@ post seeds. If the cluster is weak, ask workshop questions before drafting. If
|
|
|
151
161
|
the seed is mature, use it as the source packet for premise development and
|
|
152
162
|
external LinkedIn research.
|
|
153
163
|
|
|
164
|
+
For every new captured idea, create a `Transcript Worldview Packet` before hook
|
|
165
|
+
research:
|
|
166
|
+
|
|
167
|
+
- relevant transcript index rows or content-memory clusters
|
|
168
|
+
- matched story cards, proof cards, question cards, and post seeds
|
|
169
|
+
- repeated user phrasing worth preserving
|
|
170
|
+
- worldview ingredients: what the user seems to believe from lived experience
|
|
171
|
+
- hot-take ingredients: where the user disagrees with common advice
|
|
172
|
+
- proof/story available
|
|
173
|
+
- proof/story missing
|
|
174
|
+
- private or sensitive material to avoid
|
|
175
|
+
|
|
176
|
+
If no relevant transcript/content-memory material exists, say
|
|
177
|
+
`transcript_memory_match: weak` and continue only from the raw source and core
|
|
178
|
+
memory. Do not fabricate worldview. Ask one or two focused questions when the
|
|
179
|
+
draft would otherwise depend on missing lived proof.
|
|
180
|
+
|
|
154
181
|
`writing/posts.md` is a post-writing config file, not a draft library. Treat its structure this way:
|
|
155
182
|
|
|
156
183
|
- Top scratch or `## Draft Rule Candidates` sections are candidate taste notes only.
|
|
@@ -207,10 +234,12 @@ Use when the user gives an existing idea ID.
|
|
|
207
234
|
1. Call `mcp__sellable__get_post_idea({ ideaId })`.
|
|
208
235
|
2. Treat the idea's raw source as immutable source material.
|
|
209
236
|
3. Run hook research.
|
|
210
|
-
4.
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
237
|
+
4. Run the configured thought-leader voice variant lab unless the user explicitly
|
|
238
|
+
says to skip thought leaders or use only a named subset.
|
|
239
|
+
5. Develop and select a premise card.
|
|
240
|
+
6. Save hook research.
|
|
241
|
+
7. Draft and validate.
|
|
242
|
+
8. Save the draft.
|
|
214
243
|
|
|
215
244
|
## Capture Mode
|
|
216
245
|
|
|
@@ -218,12 +247,17 @@ Use when the user gives a new rough idea, voice memo transcript, freestyle note,
|
|
|
218
247
|
|
|
219
248
|
1. Call `mcp__sellable__capture_post_idea` before transformation.
|
|
220
249
|
2. Preserve the raw source exactly.
|
|
221
|
-
3.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
250
|
+
3. Run the `Transcript Worldview Packet` match against transcript/content-memory
|
|
251
|
+
clusters before research or hook generation.
|
|
252
|
+
4. Distill only what the user actually said plus source-backed transcript
|
|
253
|
+
worldview/proof ingredients. Label anything inferred from transcripts.
|
|
254
|
+
5. Run hook research.
|
|
255
|
+
6. Run the configured thought-leader voice variant lab unless the user explicitly
|
|
256
|
+
says to skip thought leaders or use only a named subset.
|
|
257
|
+
7. Develop and select a premise card.
|
|
258
|
+
8. Save hook research.
|
|
259
|
+
9. Draft and validate.
|
|
260
|
+
10. Save the draft.
|
|
227
261
|
|
|
228
262
|
## Ad Hoc Mode
|
|
229
263
|
|
|
@@ -283,6 +317,318 @@ Space benchmark research:
|
|
|
283
317
|
7. For each approved tracked person, call `mcp__sellable__upsert_engage_tracked_person`.
|
|
284
318
|
|
|
285
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
|
+
|
|
321
|
+
## Thought Leader Voice Variant Mode
|
|
322
|
+
|
|
323
|
+
Use when the user names creators, thought leaders, profile URLs, or says to
|
|
324
|
+
write variants using a specific person's recent best content as inspiration.
|
|
325
|
+
Also use this mode when the user says "use my configured thought leaders",
|
|
326
|
+
"use my influencers", "use the tracked people list", or similar.
|
|
327
|
+
In normal draft-producing create-post flows, run this mode automatically from
|
|
328
|
+
the configured active influencer list after the Transcript Worldview Packet and
|
|
329
|
+
general hook research, unless the user explicitly says to skip thought leaders,
|
|
330
|
+
skip external inspiration, or use only a named subset.
|
|
331
|
+
|
|
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
|
|
367
|
+
|
|
368
|
+
Default workflow:
|
|
369
|
+
|
|
370
|
+
1. Normalize the requested people into a `thought_leader_list` with name,
|
|
371
|
+
LinkedIn profile URL or handle, reason, and optional lane. By default, load
|
|
372
|
+
the list from memory-backed `discovery/influencers.md` and include only rows
|
|
373
|
+
where `Include in Discovery` is not `false`. Treat the `Reason` column as
|
|
374
|
+
the person's lane/adaptation brief. If the user names a subset, use that
|
|
375
|
+
subset and resolve each person against the configured list first.
|
|
376
|
+
2. If the user gives only a name and the profile cannot be resolved from
|
|
377
|
+
tracked people or memory, ask for the profile URL or handle before running
|
|
378
|
+
person-specific research.
|
|
379
|
+
3. When the host supports background agents, launch one bounded
|
|
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.
|
|
383
|
+
4. Each worker fetches that person's recent posts with
|
|
384
|
+
`mcp__sellable__fetch_linkedin_posts`, and fetches profile/follower context
|
|
385
|
+
with `mcp__sellable__fetch_linkedin_profile` when available.
|
|
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.
|
|
423
|
+
|
|
424
|
+
Hard rules:
|
|
425
|
+
|
|
426
|
+
- The role-play variant is internal synthesis material, not a claim of authorship
|
|
427
|
+
by the creator.
|
|
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.
|
|
430
|
+
- Do not let a large-audience creator win only because of reach. Use engagement
|
|
431
|
+
per 1k followers when follower counts are available, and mark confidence when
|
|
432
|
+
follower data is missing.
|
|
433
|
+
- Keep Christian/Sellable truth and proof as the final factual layer.
|
|
434
|
+
- If a thought leader has no recent full-text posts or the useful posts are
|
|
435
|
+
mostly lead magnets, return a weak variant and explain what could still be
|
|
436
|
+
useful.
|
|
437
|
+
|
|
438
|
+
## Visible Whole-Flow Debug Mode
|
|
439
|
+
|
|
440
|
+
Use when the user asks to see the whole flow, run the flow step by step,
|
|
441
|
+
validate that the workflow is working, debug a bad output, explain why a draft
|
|
442
|
+
is bad, or otherwise asks for the process to be explicit.
|
|
443
|
+
|
|
444
|
+
This mode exists because a validation receipt hidden inside a saved draft is not
|
|
445
|
+
enough. The user must be able to inspect the reasoning path before the system
|
|
446
|
+
claims the workflow worked.
|
|
447
|
+
|
|
448
|
+
In visible whole-flow debug mode:
|
|
449
|
+
|
|
450
|
+
1. Run the normal create-post workflow.
|
|
451
|
+
2. Show a `Visible Flow Trace` with every checkpoint below.
|
|
452
|
+
3. Mark each checkpoint `pass`, `weak`, `fail`, or `blocked`.
|
|
453
|
+
4. Include the concrete output from that checkpoint, not only a label.
|
|
454
|
+
5. If any checkpoint is weak or failed, name the exact quality break and the
|
|
455
|
+
downstream effect on the draft.
|
|
456
|
+
6. Do not call the run successful just because files were saved.
|
|
457
|
+
7. Do not hide premise cards, source-template selection, hook candidates,
|
|
458
|
+
pre-draft structure, body-expression candidates, or validation findings only
|
|
459
|
+
inside the saved artifact.
|
|
460
|
+
|
|
461
|
+
The trace must use this order:
|
|
462
|
+
|
|
463
|
+
```text
|
|
464
|
+
Visible Flow Trace
|
|
465
|
+
|
|
466
|
+
0. Bootstrap
|
|
467
|
+
- auth/workspace:
|
|
468
|
+
- canonical prompt loaded:
|
|
469
|
+
- required assets loaded:
|
|
470
|
+
- memory loaded:
|
|
471
|
+
- package/version notes:
|
|
472
|
+
|
|
473
|
+
1. Raw Idea Capture
|
|
474
|
+
- idea id:
|
|
475
|
+
- raw source preserved:
|
|
476
|
+
- distilled brief:
|
|
477
|
+
- claims added or avoided:
|
|
478
|
+
- transcript/content-memory matches:
|
|
479
|
+
- worldview ingredients from transcripts:
|
|
480
|
+
- hot-take ingredients from transcripts:
|
|
481
|
+
- proof/story pulled:
|
|
482
|
+
- proof/story gaps:
|
|
483
|
+
- private/sensitive exclusions:
|
|
484
|
+
|
|
485
|
+
2. Research Search Log
|
|
486
|
+
- search window:
|
|
487
|
+
- keywords:
|
|
488
|
+
- result count:
|
|
489
|
+
- full-text fetches:
|
|
490
|
+
- search gaps:
|
|
491
|
+
|
|
492
|
+
3. Weighted Source Selection
|
|
493
|
+
- kept sources:
|
|
494
|
+
- rejected sources:
|
|
495
|
+
- keeper scores:
|
|
496
|
+
- lead-magnet / engagement-bait penalties:
|
|
497
|
+
- why the top source actually fits:
|
|
498
|
+
|
|
499
|
+
4. Hook Autopsies
|
|
500
|
+
- source hook:
|
|
501
|
+
- calculated mobile/desktop visible blocks from
|
|
502
|
+
`calculate_linkedin_hook_preview` or authenticated LinkedIn screenshot:
|
|
503
|
+
- optional visual artifact from `render_linkedin_post_preview`:
|
|
504
|
+
- see-more tension:
|
|
505
|
+
- curiosity debt:
|
|
506
|
+
- body promise:
|
|
507
|
+
- why it works:
|
|
508
|
+
- why it may not transfer:
|
|
509
|
+
|
|
510
|
+
5. Source Message Outlines
|
|
511
|
+
- source:
|
|
512
|
+
- outline basis:
|
|
513
|
+
- source paragraph order:
|
|
514
|
+
- branches by paragraph/line/phrase:
|
|
515
|
+
- high-level goal of each branch:
|
|
516
|
+
- reusable move without copying wording:
|
|
517
|
+
|
|
518
|
+
6. Post Positioning Breakdowns
|
|
519
|
+
- source:
|
|
520
|
+
- positioning sequence:
|
|
521
|
+
- line-level narrative techniques:
|
|
522
|
+
- reusable template lines:
|
|
523
|
+
- adaptation guards:
|
|
524
|
+
|
|
525
|
+
7. Viral-Post Outlines
|
|
526
|
+
- source template:
|
|
527
|
+
- hook job:
|
|
528
|
+
- see-more trigger:
|
|
529
|
+
- beat sequence:
|
|
530
|
+
- body payoff:
|
|
531
|
+
- close job:
|
|
532
|
+
|
|
533
|
+
8. Audience Tension Snapshot
|
|
534
|
+
- resonating ideas:
|
|
535
|
+
- visible audience tension:
|
|
536
|
+
- wants / objections / fears:
|
|
537
|
+
- credible angle:
|
|
538
|
+
- why this user can credibly say it:
|
|
539
|
+
- what not to claim:
|
|
540
|
+
|
|
541
|
+
9. Premise Cards
|
|
542
|
+
- 3-5 cards:
|
|
543
|
+
- story/scene:
|
|
544
|
+
- tension:
|
|
545
|
+
- reader value:
|
|
546
|
+
- proof available:
|
|
547
|
+
- proof missing:
|
|
548
|
+
- source-template fit:
|
|
549
|
+
- score:
|
|
550
|
+
- selected premise:
|
|
551
|
+
|
|
552
|
+
10. Source Template Selection
|
|
553
|
+
- selected template:
|
|
554
|
+
- positioning sequence to borrow:
|
|
555
|
+
- hook move to borrow:
|
|
556
|
+
- body outline to borrow:
|
|
557
|
+
- required user proof:
|
|
558
|
+
- forbidden borrowing:
|
|
559
|
+
- no-template rationale if rejected:
|
|
560
|
+
|
|
561
|
+
11. Hook Lab
|
|
562
|
+
- at least 12 hooks:
|
|
563
|
+
- calculated preview from `calculate_linkedin_hook_preview`:
|
|
564
|
+
- optional visual artifact from `render_linkedin_post_preview` for finalists:
|
|
565
|
+
- hook-to-body promise:
|
|
566
|
+
- score:
|
|
567
|
+
- selected hook:
|
|
568
|
+
- rejected winning-looking hooks and why:
|
|
569
|
+
|
|
570
|
+
12. Pre-Draft Narrative Outline
|
|
571
|
+
- hierarchical outline shown before draft:
|
|
572
|
+
- I. hook and click debt:
|
|
573
|
+
- II. thesis the post will defend:
|
|
574
|
+
- III. operating model:
|
|
575
|
+
- IV. body shape borrowed from posts that worked:
|
|
576
|
+
- V. narrative beats:
|
|
577
|
+
- VI. scan path and proof safety:
|
|
578
|
+
- user corrections applied before prose:
|
|
579
|
+
|
|
580
|
+
13. Body Expression Lab
|
|
581
|
+
- 5-8 body-expression candidates:
|
|
582
|
+
- best lines:
|
|
583
|
+
- weak lines:
|
|
584
|
+
- hook promise repayment:
|
|
585
|
+
- proof risk:
|
|
586
|
+
- score:
|
|
587
|
+
- combined body plan:
|
|
588
|
+
|
|
589
|
+
14. Thought Leader Voice Variant Lab
|
|
590
|
+
- specified thought leaders:
|
|
591
|
+
- worker status per person:
|
|
592
|
+
- recent posts sampled:
|
|
593
|
+
- voice model:
|
|
594
|
+
- complete voice variants:
|
|
595
|
+
- follower-adjusted signal when available:
|
|
596
|
+
- hook/body moves worth stealing:
|
|
597
|
+
- proof gaps and factual risks:
|
|
598
|
+
- selected synthesis ingredients:
|
|
599
|
+
|
|
600
|
+
15. Draft
|
|
601
|
+
- draft body:
|
|
602
|
+
- lines intentionally copied from user source:
|
|
603
|
+
- outside-source wording copied: yes/no:
|
|
604
|
+
- known weak lines:
|
|
605
|
+
|
|
606
|
+
16. Validation And Save
|
|
607
|
+
- ready status:
|
|
608
|
+
- proof gate:
|
|
609
|
+
- voice gate:
|
|
610
|
+
- anti-AI gate:
|
|
611
|
+
- mobile preview gate:
|
|
612
|
+
- template adaptation gate:
|
|
613
|
+
- hook-to-body repayment:
|
|
614
|
+
- quality break, if any:
|
|
615
|
+
- saved idea path:
|
|
616
|
+
- saved research path:
|
|
617
|
+
- saved draft path:
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
Quality-break rules:
|
|
621
|
+
|
|
622
|
+
- If the draft is bad, say which checkpoint produced the bad draft. For example:
|
|
623
|
+
weak raw story, wrong selected source template, hook promise not repaid,
|
|
624
|
+
body expression lab too generic, proof missing, or voice mismatch.
|
|
625
|
+
- A draft with a coherent validation receipt but poor body copy is not a
|
|
626
|
+
successful run. Mark it `needs_revision` and show the checkpoint where the
|
|
627
|
+
body lost the premise.
|
|
628
|
+
- If the source idea is too abstract, stop at premise development or save a
|
|
629
|
+
`needs_revision` draft only after showing the missing story/proof.
|
|
630
|
+
- If the user is judging the workflow itself, prefer showing the trace over
|
|
631
|
+
optimizing for a polished final post.
|
|
286
632
|
</modes>
|
|
287
633
|
|
|
288
634
|
<pipeline>
|
|
@@ -293,6 +639,8 @@ The approved pack is capped at 20 gold standards. If adding new approved example
|
|
|
293
639
|
3. Load the gold-standard post pack if present.
|
|
294
640
|
4. Verify auth/workspace if hook research will use Sellable search.
|
|
295
641
|
5. Capture or load the source idea.
|
|
642
|
+
6. Run a transcript/content-memory match for the source idea before hook
|
|
643
|
+
research.
|
|
296
644
|
|
|
297
645
|
If local idea capture succeeds but auth/workspace is missing, keep the idea and return a typed blocked state for draft readiness:
|
|
298
646
|
|
|
@@ -302,6 +650,35 @@ If local idea capture succeeds but auth/workspace is missing, keep the idea and
|
|
|
302
650
|
- `zero_useful_hook_results`
|
|
303
651
|
- `full_text_unavailable`
|
|
304
652
|
|
|
653
|
+
## Step 0.5: Transcript Worldview Packet
|
|
654
|
+
|
|
655
|
+
After raw capture and before hook research, match the source idea against
|
|
656
|
+
`core/transcripts/INDEX.md`, `core/content-memory/INDEX.md`, relevant cluster
|
|
657
|
+
files, story/proof/question cards, post seeds, and approved core references
|
|
658
|
+
returned by `mcp__sellable__get_engage_memory`.
|
|
659
|
+
|
|
660
|
+
The packet must answer:
|
|
661
|
+
|
|
662
|
+
```text
|
|
663
|
+
Transcript Worldview Packet
|
|
664
|
+
- source idea id:
|
|
665
|
+
- matched clusters:
|
|
666
|
+
- matched transcript references:
|
|
667
|
+
- matched cards/seeds:
|
|
668
|
+
- repeated user phrasing:
|
|
669
|
+
- worldview ingredients:
|
|
670
|
+
- hot-take ingredients:
|
|
671
|
+
- proof/story available:
|
|
672
|
+
- proof/story missing:
|
|
673
|
+
- private/sensitive exclusions:
|
|
674
|
+
- confidence: strong | medium | weak
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
Use this packet to shape premise cards, audience tension, hooks, and body
|
|
678
|
+
expression. Do not treat it as permission to add unsupported claims. If the
|
|
679
|
+
packet is weak, keep the post closer to the raw idea and ask for the missing
|
|
680
|
+
proof/story before marking a draft ready.
|
|
681
|
+
|
|
305
682
|
## Step 1: Hook Research
|
|
306
683
|
|
|
307
684
|
Use `references/hook-research-playbook.md`.
|
|
@@ -317,11 +694,23 @@ The research worker must return a compact packet only:
|
|
|
317
694
|
|
|
318
695
|
- source examples kept and rejected
|
|
319
696
|
- full adapted hook blocks
|
|
320
|
-
-
|
|
697
|
+
- audience tension snapshot: resonating ideas, visible tensions, audience wants,
|
|
698
|
+
objections, fears, and credible angles
|
|
321
699
|
- premise inputs: real scenes, observed tensions, reader value openings, and proof gaps
|
|
700
|
+
- transcript worldview packet: matched clusters, transcript references,
|
|
701
|
+
repeated phrasing, worldview ingredients, hot-take ingredients, proof/story
|
|
702
|
+
available, proof/story missing
|
|
322
703
|
- exact phrase patterns and sentence shapes
|
|
704
|
+
- post positioning breakdowns that label each meaningful line or phrase by
|
|
705
|
+
narrative job and category
|
|
706
|
+
- viral-post outlines for the best source posts
|
|
707
|
+
- line-to-template conversions that turn source structures into reusable
|
|
708
|
+
templates without source wording
|
|
709
|
+
- hook-to-body promise maps that show how each hook tells the body
|
|
323
710
|
- body structures and exact body language moves
|
|
324
711
|
- preview measurements
|
|
712
|
+
- thought leader voice variants from the configured active influencer list
|
|
713
|
+
unless the user explicitly opted out or supplied a named subset
|
|
325
714
|
- track-person and gold-standard recommendations
|
|
326
715
|
- blocked states or confidence gaps
|
|
327
716
|
|
|
@@ -338,12 +727,20 @@ Default flow:
|
|
|
338
727
|
5. If full text cannot be matched, record `full_text_unavailable` and use only the preview. Do not invent missing body details.
|
|
339
728
|
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`.
|
|
340
729
|
7. Penalize lead-magnet or giveaway mechanics unless the user explicitly asks for a lead magnet post.
|
|
341
|
-
8. Build
|
|
730
|
+
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.
|
|
342
731
|
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.
|
|
343
732
|
10. For story posts, extract the story mechanism that made the post work, not just the first line.
|
|
344
733
|
11. Extract hook structures plus specific reusable words, phrases, sentence
|
|
345
734
|
shapes, transitions, and body language patterns.
|
|
346
|
-
12.
|
|
735
|
+
12. Create a post positioning breakdown for each keeper post: line/phrase,
|
|
736
|
+
category, narrative technique, tension created, reader question opened,
|
|
737
|
+
proof dependency, and reusable template line.
|
|
738
|
+
13. Convert each keeper into a viral-post outline: hook job, see-more trigger,
|
|
739
|
+
body payoff, close job, and beat-by-beat narrative structure.
|
|
740
|
+
14. Convert the best outlines into reusable post templates with positioning
|
|
741
|
+
sequences, required story/proof inputs, forbidden borrowing, and
|
|
742
|
+
Sellable-specific adaptation instructions.
|
|
743
|
+
15. Save the research with `mcp__sellable__save_hook_research`.
|
|
347
744
|
|
|
348
745
|
Record provenance:
|
|
349
746
|
|
|
@@ -357,11 +754,18 @@ Record provenance:
|
|
|
357
754
|
- lead-magnet or engagement-bait penalties
|
|
358
755
|
- story mechanism when relevant
|
|
359
756
|
- full-text match status
|
|
757
|
+
- transcript/content-memory match status and worldview packet
|
|
360
758
|
- source hook preview measurements and whether they came from full text or a search preview
|
|
361
759
|
- selected hook patterns
|
|
362
|
-
-
|
|
760
|
+
- audience tension snapshot and selected angle
|
|
761
|
+
- thought leader voice variants and selected synthesis ingredients from the
|
|
762
|
+
configured active influencer list unless explicitly skipped
|
|
363
763
|
- premise cards and selected premise
|
|
364
764
|
- exact phrase patterns and sentence shapes
|
|
765
|
+
- post positioning breakdowns
|
|
766
|
+
- viral-post outlines
|
|
767
|
+
- reusable post templates
|
|
768
|
+
- hook-to-body promise maps
|
|
365
769
|
- body structures and body language patterns
|
|
366
770
|
- why each pattern fits the user's idea and voice
|
|
367
771
|
|
|
@@ -384,6 +788,7 @@ The `Research Learning Report` must include:
|
|
|
384
788
|
```text
|
|
385
789
|
Research status:
|
|
386
790
|
- idea/topic:
|
|
791
|
+
- transcript worldview packet:
|
|
387
792
|
- research artifact:
|
|
388
793
|
- search window:
|
|
389
794
|
- keywords:
|
|
@@ -393,15 +798,15 @@ Research status:
|
|
|
393
798
|
Best source examples:
|
|
394
799
|
1. author, URL, engagement, why kept, why not copied
|
|
395
800
|
|
|
396
|
-
|
|
801
|
+
Audience tension snapshot:
|
|
397
802
|
- resonating ideas:
|
|
398
|
-
-
|
|
803
|
+
- visible audience tension:
|
|
399
804
|
- audience wants:
|
|
400
|
-
- audience
|
|
805
|
+
- audience objections:
|
|
401
806
|
- audience fears:
|
|
402
|
-
-
|
|
807
|
+
- credible angles to test:
|
|
403
808
|
- avoid because:
|
|
404
|
-
- selected
|
|
809
|
+
- selected angle:
|
|
405
810
|
|
|
406
811
|
Premise cards:
|
|
407
812
|
1. premise + real story/scene + tension + reader value + proof gap + score
|
|
@@ -410,7 +815,10 @@ Hook patterns learned:
|
|
|
410
815
|
1. full adapted hook block
|
|
411
816
|
- source mechanism:
|
|
412
817
|
- preview budget:
|
|
818
|
+
- see-more tension:
|
|
819
|
+
- curiosity debt:
|
|
413
820
|
- internal question:
|
|
821
|
+
- hook-to-body promise:
|
|
414
822
|
- why it fits / why it does not:
|
|
415
823
|
|
|
416
824
|
Specific words and phrase shapes:
|
|
@@ -421,13 +829,57 @@ Specific words and phrase shapes:
|
|
|
421
829
|
- adapted Sellable form:
|
|
422
830
|
- do not copy:
|
|
423
831
|
|
|
832
|
+
Post positioning breakdown templates:
|
|
833
|
+
1. source + template name
|
|
834
|
+
- positioning sequence:
|
|
835
|
+
- line-level narrative techniques:
|
|
836
|
+
- tension created:
|
|
837
|
+
- reader questions opened:
|
|
838
|
+
- reusable template lines:
|
|
839
|
+
- Sellable adaptation:
|
|
840
|
+
|
|
841
|
+
Source message outlines:
|
|
842
|
+
1. source + outline basis
|
|
843
|
+
- source paragraph order:
|
|
844
|
+
- paragraph/line/phrase branches:
|
|
845
|
+
- high-level goal of each branch:
|
|
846
|
+
- reader effect:
|
|
847
|
+
- reusable move:
|
|
848
|
+
- adaptation guard:
|
|
849
|
+
|
|
850
|
+
Viral-post outlines:
|
|
851
|
+
1. outline name
|
|
852
|
+
- hook job:
|
|
853
|
+
- see-more trigger:
|
|
854
|
+
- body payoff:
|
|
855
|
+
- close job:
|
|
856
|
+
- beat sequence:
|
|
857
|
+
|
|
858
|
+
Line-to-template conversion:
|
|
859
|
+
1. source line/beat
|
|
860
|
+
- narrative job:
|
|
861
|
+
- template line shape:
|
|
862
|
+
- required user story/proof:
|
|
863
|
+
- forbidden borrowing:
|
|
864
|
+
- adapted Sellable expression:
|
|
865
|
+
|
|
424
866
|
Body structures learned:
|
|
425
867
|
1. structure name
|
|
426
868
|
- source:
|
|
869
|
+
- positioning sequence:
|
|
427
870
|
- sequence:
|
|
428
871
|
- exact language moves:
|
|
429
872
|
- adapted Sellable body move:
|
|
430
873
|
|
|
874
|
+
Thought leader voice variants:
|
|
875
|
+
1. person + profile URL
|
|
876
|
+
- worker status:
|
|
877
|
+
- recent posts sampled:
|
|
878
|
+
- voice model:
|
|
879
|
+
- full role-played post variant:
|
|
880
|
+
- steal/drop notes:
|
|
881
|
+
- factual risk:
|
|
882
|
+
|
|
431
883
|
Rejected examples:
|
|
432
884
|
- author/source:
|
|
433
885
|
- reason rejected:
|
|
@@ -437,9 +889,9 @@ Save recommendations:
|
|
|
437
889
|
- gold-standard candidates:
|
|
438
890
|
|
|
439
891
|
Recommended draft directions:
|
|
440
|
-
1. premise card + hook block + body structure
|
|
441
|
-
2. premise card + hook block + body structure
|
|
442
|
-
3. premise card + hook block + body structure
|
|
892
|
+
1. premise card + source template + hook block + viral outline + body structure
|
|
893
|
+
2. premise card + source template + hook block + viral outline + body structure
|
|
894
|
+
3. premise card + source template + hook block + viral outline + body structure
|
|
443
895
|
```
|
|
444
896
|
|
|
445
897
|
Keep this report concise enough to read, but concrete enough that another agent
|
|
@@ -449,11 +901,13 @@ could draft from it without redoing research.
|
|
|
449
901
|
|
|
450
902
|
Use `references/premise-development.md`.
|
|
451
903
|
|
|
452
|
-
Generate 3-5 `Premise Card` candidates from the raw idea,
|
|
904
|
+
Generate 3-5 `Premise Card` candidates from the raw idea, audience/source research, core
|
|
453
905
|
memory, story/proof files, and current-session user feedback. Each card must
|
|
454
906
|
include a real story/scene or observed pattern, target reader, common belief,
|
|
455
907
|
contrarian truth, tension, reader value, proof available, proof missing, and a
|
|
456
|
-
score.
|
|
908
|
+
score. Each card must also evaluate which source template or no-template path
|
|
909
|
+
fits, which positioning sequence to test, and how the hook promise will be
|
|
910
|
+
repaid in the body.
|
|
457
911
|
|
|
458
912
|
Select the strongest premise before hook generation. The selected premise must
|
|
459
913
|
pass:
|
|
@@ -464,13 +918,104 @@ pass:
|
|
|
464
918
|
- `reader_value`
|
|
465
919
|
- `credible_speaker`
|
|
466
920
|
- `proof_safety`
|
|
467
|
-
- `
|
|
921
|
+
- `audience_tension`
|
|
922
|
+
- `template_fit`
|
|
923
|
+
- `hook_to_body_repayment`
|
|
468
924
|
|
|
469
|
-
If the idea has
|
|
925
|
+
If the idea has audience tension but no real scene, ask for the missing scene unless
|
|
470
926
|
the user explicitly requested an immediate draft. For immediate draft mode, use
|
|
471
927
|
only source-backed observed patterns and save the draft as `needs_revision`
|
|
472
928
|
unless the premise still has concrete reader value.
|
|
473
929
|
|
|
930
|
+
## Step 1.9: Pre-Draft Narrative Outline
|
|
931
|
+
|
|
932
|
+
Before generating final draft prose, create and show a compact `Pre-Draft
|
|
933
|
+
Narrative Outline`. This is not a checklist. It is the user-visible argument
|
|
934
|
+
skeleton that lets the user confirm what the post will say, in what order, and
|
|
935
|
+
which proven body shapes will guide the draft before the system writes body
|
|
936
|
+
copy.
|
|
937
|
+
|
|
938
|
+
The outline must be concise, mobile-scanable, and concrete enough for the user
|
|
939
|
+
to approve or correct. Do not hide it inside the validation receipt after the
|
|
940
|
+
draft. Show it before writing the draft body unless the user explicitly says to
|
|
941
|
+
skip outline/structure and write immediately. Even when the user skips the
|
|
942
|
+
visible checkpoint, still include the outline in the validation receipt.
|
|
943
|
+
|
|
944
|
+
The `Pre-Draft Narrative Outline` must use hierarchical outline notation:
|
|
945
|
+
Roman numerals for major narrative beats, letters for sub-beats, and lowercase
|
|
946
|
+
roman numerals for proof/examples/body moves. Do not replace this with a flat
|
|
947
|
+
field list.
|
|
948
|
+
|
|
949
|
+
The `Pre-Draft Narrative Outline` must include:
|
|
950
|
+
|
|
951
|
+
```text
|
|
952
|
+
Pre-Draft Narrative Outline
|
|
953
|
+
I. Hook and click debt
|
|
954
|
+
A. Selected hook:
|
|
955
|
+
B. Rendered mobile preview verdict:
|
|
956
|
+
C. What "see more" must repay:
|
|
957
|
+
|
|
958
|
+
II. Thesis the post will defend
|
|
959
|
+
A. One-sentence thesis:
|
|
960
|
+
B. Reader being taught:
|
|
961
|
+
C. Why this reader cares now:
|
|
962
|
+
|
|
963
|
+
III. Operating model
|
|
964
|
+
A. Core equation or mechanism:
|
|
965
|
+
B. Key definitions:
|
|
966
|
+
i. <term>: <plain definition + concrete examples>
|
|
967
|
+
ii. <term>: <plain definition + concrete examples>
|
|
968
|
+
|
|
969
|
+
IV. Body shape borrowed from posts that worked
|
|
970
|
+
A. Selected source template or no-template rationale:
|
|
971
|
+
B. Working body pattern(s) being adapted:
|
|
972
|
+
i. <pattern name>: <beat order and why it works>
|
|
973
|
+
ii. <pattern name>: <beat order and why it works>
|
|
974
|
+
C. What gets borrowed:
|
|
975
|
+
i. <narrative job, sequence, transition, or proof order>
|
|
976
|
+
D. What must not be copied:
|
|
977
|
+
i. <source wording, creator-specific proof, joke, or context>
|
|
978
|
+
|
|
979
|
+
V. Narrative beats
|
|
980
|
+
A. Beat 1: <job, reader state before/after, example/proof>
|
|
981
|
+
i. Line shape or section label:
|
|
982
|
+
ii. Concrete examples:
|
|
983
|
+
B. Beat 2: <job, reader state before/after, example/proof>
|
|
984
|
+
i. Line shape or section label:
|
|
985
|
+
ii. Concrete examples:
|
|
986
|
+
C. Beat 3: <job, reader state before/after, example/proof>
|
|
987
|
+
i. Line shape or section label:
|
|
988
|
+
ii. Concrete examples:
|
|
989
|
+
|
|
990
|
+
VI. Scan path and proof safety
|
|
991
|
+
A. Mobile scan path:
|
|
992
|
+
B. Proof claims:
|
|
993
|
+
i. <claim>: <source + public-safety status>
|
|
994
|
+
C. Abstractions to remove:
|
|
995
|
+
i. <abstract phrase> -> <concrete replacement>
|
|
996
|
+
D. Draft risks:
|
|
997
|
+
```
|
|
998
|
+
|
|
999
|
+
Rules:
|
|
1000
|
+
|
|
1001
|
+
- The hook must already have a rendered mobile and desktop preview record.
|
|
1002
|
+
- The thesis must be one sentence the post can defend.
|
|
1003
|
+
- The reader must be specific enough to guide what gets cut.
|
|
1004
|
+
- `Body shape borrowed from posts that worked` must name the body pattern or
|
|
1005
|
+
explain why no-template is stronger. It must say what narrative job is being
|
|
1006
|
+
borrowed, not just "make it like this creator."
|
|
1007
|
+
- `Narrative beats` must show the order of the argument with `I.`, `A.`, and
|
|
1008
|
+
`i.`-style hierarchy. A flat checklist fails this step.
|
|
1009
|
+
- Key definitions must name concrete examples when the post teaches an
|
|
1010
|
+
operating concept. For example, define `lead source` as how the list was
|
|
1011
|
+
built, not as a persona label.
|
|
1012
|
+
- `mobile scan path` must say what a reader understands if they read only the
|
|
1013
|
+
hook, separators, section labels, numbers, and final line.
|
|
1014
|
+
- `abstractions to remove` must list abstract phrases and the concrete words
|
|
1015
|
+
that will replace them.
|
|
1016
|
+
- If the user corrects the outline, update the outline first, then draft. Do
|
|
1017
|
+
not patch the final prose while leaving the outline stale.
|
|
1018
|
+
|
|
474
1019
|
## Step 2: Hook Candidates
|
|
475
1020
|
|
|
476
1021
|
Generate at least 12 hook candidates from the selected premise unless the user
|
|
@@ -504,38 +1049,178 @@ Each hook must include:
|
|
|
504
1049
|
|
|
505
1050
|
Do not copy source wording. Copy only the structure.
|
|
506
1051
|
|
|
507
|
-
Use
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
1052
|
+
Use the rendered-preview contract from
|
|
1053
|
+
`references/linkedin-preview-rendering.md`. LinkedIn does not publish exact
|
|
1054
|
+
"see more" cutoff rules, and rendering varies by device, app version, font,
|
|
1055
|
+
media, and line break. Treat character counts as diagnostics only, not as proof
|
|
1056
|
+
that the hook will render before "see more."
|
|
1057
|
+
|
|
1058
|
+
The selected hook and top candidates must include literal mobile and desktop
|
|
1059
|
+
visible blocks from `mcp__sellable__calculate_linkedin_hook_preview`.
|
|
1060
|
+
Observed LinkedIn screenshots and current third-party preview tools support a
|
|
1061
|
+
line-count model: review the first 3 rendered visual lines, not the first 210
|
|
1062
|
+
characters. Blank lines and `--` separators consume visible preview lines.
|
|
1063
|
+
Use `mcp__sellable__render_linkedin_post_preview` only when a visual QA artifact
|
|
1064
|
+
is useful.
|
|
1065
|
+
|
|
1066
|
+
Use:
|
|
1067
|
+
|
|
1068
|
+
- `pass`: rendered mobile preview shows the pain, proof, or curiosity by the end
|
|
1069
|
+
of the first 3 rendered lines, and either the core point is visible or a
|
|
1070
|
+
specific intentional open loop is visible with immediate body payoff planned
|
|
1071
|
+
- `warn`: rendered mobile preview creates useful curiosity but wrapping,
|
|
1072
|
+
blank-line rhythm, media risk, or one missing context word weakens it; include
|
|
1073
|
+
a compact fallback
|
|
1074
|
+
- `fail`: the hook's real point appears after the rendered mobile review clamp,
|
|
1075
|
+
the visible open loop is vague, blank lines consume the preview before the
|
|
1076
|
+
point, or desktop fit is the only reason it looks good
|
|
515
1077
|
|
|
516
1078
|
Desktop preview usually has more room. Still record `desktopPreviewFit`, but
|
|
517
|
-
never let desktop fit compensate for a mobile `fail`.
|
|
1079
|
+
never let desktop fit compensate for a mobile `fail`. Do not tell the user "we
|
|
1080
|
+
know" how LinkedIn will render unless there is an authenticated LinkedIn
|
|
1081
|
+
screenshot; say it passes the renderer and show the visible blocks.
|
|
518
1082
|
|
|
519
1083
|
If a hook's point depends on text after the likely preview, rewrite it before
|
|
520
1084
|
selecting it. A selected hook may carry a `warn` only when the warning is about
|
|
521
1085
|
intentional blank-line rhythm or a slight line-length overage; include a compact
|
|
522
1086
|
fallback in the validation receipt.
|
|
523
1087
|
|
|
1088
|
+
## Step 2.5: Thought Leader Voice Variant Lab
|
|
1089
|
+
|
|
1090
|
+
Run this step by default for draft-producing create-post flows using the
|
|
1091
|
+
configured active people in `discovery/influencers.md`. Skip it only when the
|
|
1092
|
+
user explicitly says to skip thought leaders, skip external inspiration, or use
|
|
1093
|
+
only general hook research. If the user supplied a `thought_leader_list`, use
|
|
1094
|
+
that named subset instead of the full configured list.
|
|
1095
|
+
|
|
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.
|
|
1113
|
+
|
|
1114
|
+
Each worker must return:
|
|
1115
|
+
|
|
1116
|
+
- person name and profile URL or handle
|
|
1117
|
+
- worker status
|
|
1118
|
+
- recent post count sampled
|
|
1119
|
+
- follower count when available
|
|
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:
|
|
1137
|
+
|
|
1138
|
+
```text
|
|
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
|
|
1144
|
+
```
|
|
1145
|
+
|
|
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.
|
|
1194
|
+
|
|
524
1195
|
## Step 3: Draft
|
|
525
1196
|
|
|
526
1197
|
Draft from:
|
|
527
1198
|
|
|
528
1199
|
- exact raw idea
|
|
1200
|
+
- transcript worldview packet
|
|
529
1201
|
- selected premise card
|
|
530
1202
|
- selected hook
|
|
1203
|
+
- approved or latest `Pre-Draft Narrative Outline`
|
|
531
1204
|
- hook research artifact
|
|
1205
|
+
- selected source template or no-template rationale
|
|
1206
|
+
- source-message outline for any outside post being adapted
|
|
1207
|
+
- viral-post outline
|
|
1208
|
+
- post positioning breakdown template
|
|
1209
|
+
- body expression candidates and combined body plan
|
|
532
1210
|
- user's core memory
|
|
533
1211
|
- story/proof files
|
|
534
1212
|
- post writing rules
|
|
535
1213
|
- 1-3 relevant approved gold standards when available
|
|
1214
|
+
- thought leader voice variants from the configured active influencer
|
|
1215
|
+
list or supplied named subset
|
|
536
1216
|
|
|
537
1217
|
If a claim cannot be traced to the raw idea, core memory, or user answer in the current session, remove it or ask.
|
|
538
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
|
+
|
|
539
1224
|
## Step 4: Validation
|
|
540
1225
|
|
|
541
1226
|
Use `references/post-validation.md`.
|
|
@@ -544,16 +1229,29 @@ Every saved draft needs a validation receipt with:
|
|
|
544
1229
|
|
|
545
1230
|
- source idea ID
|
|
546
1231
|
- hook research ID
|
|
1232
|
+
- transcript worldview packet
|
|
547
1233
|
- iteration metadata: version, priorDraftId, changeIntent, what changed,
|
|
548
1234
|
what improved, what got worse, score, and verdict
|
|
549
1235
|
- selected premise card
|
|
550
1236
|
- candidate hooks considered
|
|
551
1237
|
- selected hook and why
|
|
1238
|
+
- pre-draft narrative outline
|
|
1239
|
+
- selected source template and no-copy adaptation rationale
|
|
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
|
|
1242
|
+
- post positioning breakdown
|
|
1243
|
+
- viral-post outline
|
|
1244
|
+
- hook-to-body promise map
|
|
1245
|
+
- body expression candidates and combined body plan
|
|
552
1246
|
- proof claims used and source
|
|
553
1247
|
- story/proof files consulted
|
|
554
1248
|
- gold standards consulted
|
|
555
1249
|
- LinkedIn preview audit
|
|
556
1250
|
- premise/value audit findings
|
|
1251
|
+
- audience-tension audit findings
|
|
1252
|
+
- mobile scanability audit findings
|
|
1253
|
+
- template-adaptation audit findings
|
|
1254
|
+
- abstraction-to-concrete rewrite audit findings
|
|
557
1255
|
- simplifier/concrete-language audit findings
|
|
558
1256
|
- voice audit findings
|
|
559
1257
|
- anti-AI audit findings
|
|
@@ -648,8 +1346,20 @@ iteration:
|
|
|
648
1346
|
score: <compact score object>
|
|
649
1347
|
selected_premise: <premise or none>
|
|
650
1348
|
selected_hook: <hook>
|
|
1349
|
+
pre_draft_narrative_outline: <compact I/A/i outline summary or none>
|
|
1350
|
+
selected_source_template: <template name/source 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>
|
|
1354
|
+
visible_flow_trace: <required when user asked for whole-flow/debug/step-by-step mode; include checkpoint statuses and quality break>
|
|
651
1355
|
validation_summary:
|
|
652
1356
|
premise_value: pass | needs_user_input | needs_revision
|
|
1357
|
+
audience_tension: pass | needs_revision
|
|
1358
|
+
mobile_scanability: pass | needs_revision
|
|
1359
|
+
thought_leader_adaptation: pass | needs_revision | not_used
|
|
1360
|
+
template_adaptation: pass | needs_revision | blocked
|
|
1361
|
+
abstraction_to_concrete: pass | needs_revision
|
|
1362
|
+
hook_to_body_repayment: pass | needs_revision
|
|
653
1363
|
proof: pass | needs_user_input | blocked
|
|
654
1364
|
voice: pass | needs_revision
|
|
655
1365
|
anti_ai: pass | needs_revision
|