@sellable/mcp 0.1.258 → 0.1.259

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.
@@ -60,9 +60,8 @@ Do:
60
60
 
61
61
  - capture rough ideas, voice memos, freestyle notes, and ad hoc prompts
62
62
  - research currently working LinkedIn hooks
63
- - reverse engineer why source hooks work, what shape to keep, and what not to copy
64
63
  - develop premise cards with real story/observed tension and reader value
65
- - explore many hook angle territories before choosing the winning hook
64
+ - generate hook candidates
66
65
  - draft a post body that stays true to the source idea
67
66
  - run validation before calling a draft ready
68
67
  - save ideas, hook research, drafts, and published records under `~/.sellable/content/linkedin/**`
@@ -85,7 +84,6 @@ Before drafting, load all required assets with `mcp__sellable__get_subskill_asse
85
84
  3. `subskillName: "create-post", assetPath: "references/premise-development.md"`
86
85
  4. `subskillName: "create-post", assetPath: "references/post-validation.md"`
87
86
  5. `subskillName: "create-post", assetPath: "references/gold-standard-post-pack.md"`
88
- 6. `subskillName: "create-post", assetPath: "references/linkedin-preview-rendering.md"`
89
87
 
90
88
  If any required asset is missing, unreadable, truncated without continuation, or internally inconsistent, return:
91
89
 
@@ -306,8 +304,7 @@ If local idea capture succeeds but auth/workspace is missing, keep the idea and
306
304
 
307
305
  ## Step 1: Hook Research
308
306
 
309
- Use `references/hook-research-playbook.md` and
310
- `references/linkedin-preview-rendering.md`.
307
+ Use `references/hook-research-playbook.md`.
311
308
 
312
309
  If the host supports background agents, delegate the search/fetch/autopsy work
313
310
  to one bounded `research-worker` before hook candidate generation. The worker
@@ -319,16 +316,12 @@ and drafting gate.
319
316
  The research worker must return a compact packet only:
320
317
 
321
318
  - source examples kept and rejected
322
- - hook reverse-engineering autopsies: why each source hook works, which shape to
323
- keep, what not to copy, and what payoff the body must deliver
324
319
  - full adapted hook blocks
325
- - angle territories tested before drafting
326
320
  - market belief map: resonating ideas, implicit beliefs, audience wants, resentments, fears, and credible controversy angles
327
321
  - premise inputs: real scenes, observed tensions, reader value openings, and proof gaps
328
- - reach-normalized signal notes, including follower-band fit when available
329
322
  - exact phrase patterns and sentence shapes
330
323
  - body structures and exact body language moves
331
- - rendered mobile and desktop preview records
324
+ - preview measurements
332
325
  - track-person and gold-standard recommendations
333
326
  - blocked states or confidence gaps
334
327
 
@@ -339,24 +332,18 @@ the exact extracted phrase shapes.
339
332
  Default flow:
340
333
 
341
334
  1. Convert the idea into 3-8 search keywords.
342
- 2. Call `mcp__sellable__search_engagement_posts` with an explicit multi-month window. Default to `maxAgeDays: 120`, tightening to 30-60 days only when the topic is trend-sensitive. When the user gives a follower range, pass it as `targetFollowerMin` and `targetFollowerMax`; for example, "8k-20k followers" means `targetFollowerMin: 8000` and `targetFollowerMax: 20000`.
343
- 3. Shortlist posts by topic fit, rendered hook strength, content pattern replicability, creator repeat evidence, weighted engagement quality, and reach-normalized signal quality. Do not sort by raw engagement alone, and do not let the numeric reach score choose the final hook by itself.
344
- 4. Because search results may only include previews, call `mcp__sellable__fetch_linkedin_posts` for shortlisted authors/profile URLs and match recent posts by URL/activity ID when full text is needed. If a promising source is missing follower count and the user requested reach normalization, call `mcp__sellable__fetch_linkedin_profile` on a bounded shortlist before treating the source as a keeper.
335
+ 2. Call `mcp__sellable__search_engagement_posts` with an explicit multi-month window. Default to `maxAgeDays: 120`, tightening to 30-60 days only when the topic is trend-sensitive.
336
+ 3. Shortlist high-engagement posts by topic fit, hook strength, creator repeat evidence, and weighted engagement quality.
337
+ 4. Because search results may only include previews, call `mcp__sellable__fetch_linkedin_posts` for shortlisted authors/profile URLs and match recent posts by URL/activity ID when full text is needed.
345
338
  5. If full text cannot be matched, record `full_text_unavailable` and use only the preview. Do not invent missing body details.
346
- 6. Weigh shares/reposts above comments, comments above reactions, and reactions as weak reach unless paired with stronger signals. Normalize engagement against follower count when available: record `authorFollowerCount`, `targetFollowerBand`, `followerBandFit`, `engagementPer1kFollowers`, `weightedEngagementPer1kFollowers`, `reachPenaltyMultiplier`, `reachAdjustedScore`, and `baselineLift` when repeated creator posts make it possible. If follower count is unavailable, record `follower_count_unavailable`; if shares/reposts are unavailable, record `repost_data_unavailable`.
339
+ 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`.
347
340
  7. Penalize lead-magnet or giveaway mechanics unless the user explicitly asks for a lead magnet post.
348
341
  8. Build a market belief map before hook generation: what the space is rewarding, what the audience implicitly believes, what they want permission to say, what they resent or fear, what they will argue with, and which controversial angle the user can credibly own. If the user's raw idea is internally coherent but not attached to a live market tension, do not draft from the internal idea alone; present stronger directions or rewrite the draft angle around the external tension.
349
342
  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.
350
343
  10. For story posts, extract the story mechanism that made the post work, not just the first line.
351
344
  11. Extract hook structures plus specific reusable words, phrases, sentence
352
345
  shapes, transitions, and body language patterns.
353
- 12. For each keeper, create a `hookAutopsy`: the source mechanism, open-loop
354
- type, click question, promised payoff, specificity anchor, tension opened,
355
- source shape to keep, source words not to copy, and adaptation rule for the
356
- user's idea.
357
- 13. Render each kept source hook and adapted hook block through the LinkedIn
358
- preview rendering contract. Character counts alone are not enough.
359
- 14. Save the research with `mcp__sellable__save_hook_research`.
346
+ 12. Save the research with `mcp__sellable__save_hook_research`.
360
347
 
361
348
  Record provenance:
362
349
 
@@ -365,29 +352,18 @@ Record provenance:
365
352
  - search window
366
353
  - source post URLs
367
354
  - authors/profile URLs
368
- - author follower counts and target follower-band fit when available
369
355
  - engagement totals and available likes/comments/shares breakdown
370
- - reach-normalized scoring fields and confidence notes
371
356
  - creator repeat evidence
372
357
  - lead-magnet or engagement-bait penalties
373
358
  - story mechanism when relevant
374
359
  - full-text match status
375
- - source hook rendered preview records and whether they came from full text,
376
- authenticated LinkedIn screenshots, or a search preview
360
+ - source hook preview measurements and whether they came from full text or a search preview
377
361
  - selected hook patterns
378
- - hook reverse-engineering autopsies, including `clickQuestion`,
379
- `promisedPayoff`, `sourceShapeToKeep`, `sourceWordsNotToCopy`, and
380
- `adaptationRule`
381
362
  - market belief map and selected controversy
382
363
  - premise cards and selected premise
383
364
  - exact phrase patterns and sentence shapes
384
365
  - body structures and body language patterns
385
366
  - why each pattern fits the user's idea and voice
386
- - `whyTheHookCarries`: why the selected hook works from the words, tension, and
387
- content pattern independent of the source creator's reach
388
- - `whyTheReachEvidenceIsTrustworthy`: follower-band fit, reach-adjusted score,
389
- baseline lift, share/comment quality, or why a large-account example is only
390
- secondary pattern evidence
391
367
 
392
368
  ## Step 1.5: Research Learning Report
393
369
 
@@ -413,9 +389,6 @@ Research status:
413
389
  - keywords:
414
390
  - full-text coverage:
415
391
  - repost/share data:
416
- - target follower band:
417
- - reach-normalized winners:
418
- - big-account examples used only as secondary pattern evidence:
419
392
 
420
393
  Best source examples:
421
394
  1. author, URL, engagement, why kept, why not copied
@@ -436,15 +409,7 @@ Premise cards:
436
409
  Hook patterns learned:
437
410
  1. full adapted hook block
438
411
  - source mechanism:
439
- - open-loop type:
440
- - click question:
441
- - promised payoff:
442
- - source shape to keep:
443
- - source words not to copy:
444
- - rendered preview:
445
- - mobile visible block:
446
- - desktop visible block:
447
- - verdict:
412
+ - preview budget:
448
413
  - internal question:
449
414
  - why it fits / why it does not:
450
415
 
@@ -472,9 +437,9 @@ Save recommendations:
472
437
  - gold-standard candidates:
473
438
 
474
439
  Recommended draft directions:
475
- 1. premise card + hook territory + hook block + click question + body structure
476
- 2. premise card + hook territory + hook block + click question + body structure
477
- 3. premise card + hook territory + hook block + click question + body structure
440
+ 1. premise card + hook block + body structure
441
+ 2. premise card + hook block + body structure
442
+ 3. premise card + hook block + body structure
478
443
  ```
479
444
 
480
445
  Keep this report concise enough to read, but concrete enough that another agent
@@ -508,48 +473,17 @@ unless the premise still has concrete reader value.
508
473
 
509
474
  ## Step 2: Hook Candidates
510
475
 
511
- Generate a hook angle matrix from the selected premise before writing the post
512
- body. Do not generate hooks directly from the raw idea before the premise is
513
- selected.
514
-
515
- Minimum exploration:
516
-
517
- - normal drafting: at least 8 distinct angle territories and 24 hook candidates
518
- - hook-critical requests, "nail the hook," "a ton of angles," or space research:
519
- at least 12 distinct angle territories and 40 hook candidates
520
- - smaller set only when the user explicitly asks for fewer options
521
-
522
- Angle territories must be genuinely different. Use options such as enemy/tool
523
- contrast, hidden asset, first-person build proof, workflow reveal, contrarian
524
- category claim, mistake/confession, market timing, operator pain,
525
- asset/free-reveal without comment bait, specific person/company signal,
526
- before/after transformation, and question hook.
476
+ Generate at least 12 hook candidates from the selected premise unless the user
477
+ requested a smaller set. Do not generate hooks directly from the raw idea before
478
+ the premise is selected.
527
479
 
528
480
  Each hook must include:
529
481
 
530
482
  - selected premise
531
- - angle territory
532
483
  - premise tension opened
533
484
  - reader value implied
534
485
  - source hook pattern
535
- - source shape kept
536
- - source words not copied
537
486
  - why it fits this idea
538
- - `renderedPreview` using `references/linkedin-preview-rendering.md`
539
- - `mobileRenderedPreviewBlock`
540
- - `desktopRenderedPreviewBlock`
541
- - `mobileRenderedLines`
542
- - `desktopRenderedLines`
543
- - `firstScreenPromise`
544
- - `intentionalOpenLoop`
545
- - `specificClickQuestionVisible`
546
- - `seeMoreClickReason`
547
- - `clickQuestion`
548
- - `payoffAfterFold`
549
- - `bodyProofObligation`
550
- - `corePainProofOrCuriosityVisibleMobile`
551
- - `corePointVisibleMobile`
552
- - `pointAfterMobileClamp`
553
487
  - `charCount`
554
488
  - `charCountIncludingNewlines`
555
489
  - `firstLineChars`
@@ -566,50 +500,26 @@ Each hook must include:
566
500
  - `rewriteIfTruncated`
567
501
  - proof/story dependency
568
502
  - AI-tell risk
569
- - why it should win
570
- - why it should lose
571
503
  - score
572
504
 
573
505
  Do not copy source wording. Copy only the structure.
574
506
 
575
- Render every candidate before scoring it. The LinkedIn preview rendering
576
- contract is the gate; character counts are secondary diagnostics only. Use the
577
- deterministic CSS contract when no authenticated LinkedIn screenshot is
578
- available:
579
-
580
- - mobile text width: `308px`
581
- - desktop text width: `582px`
582
- - font size: `14px`
583
- - line height: `21px`
584
- - white space: `pre-wrap`
585
- - overflow wrap: `break-word`
586
- - review clamp: first 3 rendered text lines
587
-
588
- Use the rendered gates from `references/linkedin-preview-rendering.md`:
589
-
590
- - `pass`: the mobile rendered preview shows the pain, proof, or curiosity by
591
- the end of the first 3 rendered lines, and either the core point is
592
- understandable without opening "see more" or an intentional open loop creates
593
- a specific click question with an immediate planned payoff.
594
- - `warn`: the mobile rendered preview creates useful curiosity but the core
595
- point or click question is slightly softened by wrapping, blank-line rhythm,
596
- or one missing context word. A compact fallback is required.
597
- - `fail`: the hook's real point appears after the first 3 mobile rendered
598
- lines without an intentional open-loop plan, the visible open loop is vague,
599
- the first rendered line is generic setup, blank lines consume the preview
600
- before the reader sees the point, or desktop fit is the only reason it looks
601
- good.
507
+ Use this conservative mobile-first LinkedIn preview gate. LinkedIn does not
508
+ publish exact "see more" cutoff rules, and rendering varies by device, app
509
+ version, font, media, and line break. These are v1 safety budgets, not claims
510
+ about an official LinkedIn limit:
511
+
512
+ - `pass`: hook is <= 110 chars including newlines, every nonblank line is <= 45 chars, and the hook's core point lands before likely truncation.
513
+ - `warn`: hook is 111-140 chars including newlines, any nonblank line is 46-55 chars, or blank lines create visual-line risk. Blank lines are allowed, but they count as physical lines.
514
+ - `fail`: hook is > 140 chars including newlines, any nonblank line is > 55 chars, or the hook's point depends on text after likely truncation.
602
515
 
603
516
  Desktop preview usually has more room. Still record `desktopPreviewFit`, but
604
517
  never let desktop fit compensate for a mobile `fail`.
605
518
 
606
- If a hook's point depends on text after the rendered mobile preview clamp,
607
- rewrite it before selecting it unless the hook is intentionally using a
608
- see-more open loop. Intentional open loops must show a specific click question
609
- inside the mobile clamp and must define the first payoff line after the fold. A
610
- selected hook may carry a `warn` only when the warning is explicit and the
611
- validation receipt includes a compact fallback. A hook with no rendered mobile
612
- and desktop preview record cannot be selected.
519
+ If a hook's point depends on text after the likely preview, rewrite it before
520
+ selecting it. A selected hook may carry a `warn` only when the warning is about
521
+ intentional blank-line rhythm or a slight line-length overage; include a compact
522
+ fallback in the validation receipt.
613
523
 
614
524
  ## Step 3: Draft
615
525
 
@@ -639,14 +549,10 @@ Every saved draft needs a validation receipt with:
639
549
  - selected premise card
640
550
  - candidate hooks considered
641
551
  - selected hook and why
642
- - hook reverse-engineering audit
643
- - hook angle matrix summary
644
- - see-more click audit
645
552
  - proof claims used and source
646
553
  - story/proof files consulted
647
554
  - gold standards consulted
648
555
  - LinkedIn preview audit
649
- - rendered mobile and desktop hook preview blocks
650
556
  - premise/value audit findings
651
557
  - simplifier/concrete-language audit findings
652
558
  - voice audit findings
@@ -119,8 +119,6 @@ Show compact candidate cards. Include:
119
119
  - why it might belong in the pack
120
120
  - hook mechanism
121
121
  - hook preview budget status and measurement basis
122
- - rendered mobile preview block and verdict
123
- - rendered desktop preview block and verdict
124
122
  - content/body mechanism
125
123
  - rhythm notes
126
124
  - sentence-structure notes
@@ -196,15 +194,6 @@ Tags:
196
194
  - longest nonblank line chars:
197
195
  - blank-line visual risk:
198
196
  - source text basis:
199
- - render basis:
200
- - css contract version:
201
- - mobile rendered preview block:
202
- - desktop rendered preview block:
203
- - mobile rendered lines:
204
- - desktop rendered lines:
205
- - core pain/proof/curiosity visible on mobile:
206
- - core point visible on mobile:
207
- - point after mobile clamp:
208
197
  - preview budget status:
209
198
  - mobile preview fit:
210
199
  - desktop preview fit: