@sellable/mcp 0.1.257 → 0.1.258
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/create-post/SKILL.md +67 -19
- package/skills/create-post/references/hook-research-playbook.md +116 -7
- package/skills/create-post/references/linkedin-preview-rendering.md +24 -11
- package/skills/create-post/references/post-file-contract.md +9 -0
- package/skills/create-post/references/post-validation.md +115 -12
package/package.json
CHANGED
|
@@ -60,8 +60,9 @@ 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
|
|
63
64
|
- develop premise cards with real story/observed tension and reader value
|
|
64
|
-
-
|
|
65
|
+
- explore many hook angle territories before choosing the winning hook
|
|
65
66
|
- draft a post body that stays true to the source idea
|
|
66
67
|
- run validation before calling a draft ready
|
|
67
68
|
- save ideas, hook research, drafts, and published records under `~/.sellable/content/linkedin/**`
|
|
@@ -318,7 +319,10 @@ and drafting gate.
|
|
|
318
319
|
The research worker must return a compact packet only:
|
|
319
320
|
|
|
320
321
|
- 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
|
|
321
324
|
- full adapted hook blocks
|
|
325
|
+
- angle territories tested before drafting
|
|
322
326
|
- market belief map: resonating ideas, implicit beliefs, audience wants, resentments, fears, and credible controversy angles
|
|
323
327
|
- premise inputs: real scenes, observed tensions, reader value openings, and proof gaps
|
|
324
328
|
- reach-normalized signal notes, including follower-band fit when available
|
|
@@ -346,9 +350,13 @@ Default flow:
|
|
|
346
350
|
10. For story posts, extract the story mechanism that made the post work, not just the first line.
|
|
347
351
|
11. Extract hook structures plus specific reusable words, phrases, sentence
|
|
348
352
|
shapes, transitions, and body language patterns.
|
|
349
|
-
12.
|
|
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
|
|
350
358
|
preview rendering contract. Character counts alone are not enough.
|
|
351
|
-
|
|
359
|
+
14. Save the research with `mcp__sellable__save_hook_research`.
|
|
352
360
|
|
|
353
361
|
Record provenance:
|
|
354
362
|
|
|
@@ -367,6 +375,9 @@ Record provenance:
|
|
|
367
375
|
- source hook rendered preview records and whether they came from full text,
|
|
368
376
|
authenticated LinkedIn screenshots, or a search preview
|
|
369
377
|
- selected hook patterns
|
|
378
|
+
- hook reverse-engineering autopsies, including `clickQuestion`,
|
|
379
|
+
`promisedPayoff`, `sourceShapeToKeep`, `sourceWordsNotToCopy`, and
|
|
380
|
+
`adaptationRule`
|
|
370
381
|
- market belief map and selected controversy
|
|
371
382
|
- premise cards and selected premise
|
|
372
383
|
- exact phrase patterns and sentence shapes
|
|
@@ -425,6 +436,11 @@ Premise cards:
|
|
|
425
436
|
Hook patterns learned:
|
|
426
437
|
1. full adapted hook block
|
|
427
438
|
- source mechanism:
|
|
439
|
+
- open-loop type:
|
|
440
|
+
- click question:
|
|
441
|
+
- promised payoff:
|
|
442
|
+
- source shape to keep:
|
|
443
|
+
- source words not to copy:
|
|
428
444
|
- rendered preview:
|
|
429
445
|
- mobile visible block:
|
|
430
446
|
- desktop visible block:
|
|
@@ -456,9 +472,9 @@ Save recommendations:
|
|
|
456
472
|
- gold-standard candidates:
|
|
457
473
|
|
|
458
474
|
Recommended draft directions:
|
|
459
|
-
1. premise card + hook block + body structure
|
|
460
|
-
2. premise card + hook block + body structure
|
|
461
|
-
3. premise card + hook block + body structure
|
|
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
|
|
462
478
|
```
|
|
463
479
|
|
|
464
480
|
Keep this report concise enough to read, but concrete enough that another agent
|
|
@@ -492,16 +508,32 @@ unless the premise still has concrete reader value.
|
|
|
492
508
|
|
|
493
509
|
## Step 2: Hook Candidates
|
|
494
510
|
|
|
495
|
-
Generate
|
|
496
|
-
|
|
497
|
-
|
|
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.
|
|
498
527
|
|
|
499
528
|
Each hook must include:
|
|
500
529
|
|
|
501
530
|
- selected premise
|
|
531
|
+
- angle territory
|
|
502
532
|
- premise tension opened
|
|
503
533
|
- reader value implied
|
|
504
534
|
- source hook pattern
|
|
535
|
+
- source shape kept
|
|
536
|
+
- source words not copied
|
|
505
537
|
- why it fits this idea
|
|
506
538
|
- `renderedPreview` using `references/linkedin-preview-rendering.md`
|
|
507
539
|
- `mobileRenderedPreviewBlock`
|
|
@@ -509,6 +541,12 @@ Each hook must include:
|
|
|
509
541
|
- `mobileRenderedLines`
|
|
510
542
|
- `desktopRenderedLines`
|
|
511
543
|
- `firstScreenPromise`
|
|
544
|
+
- `intentionalOpenLoop`
|
|
545
|
+
- `specificClickQuestionVisible`
|
|
546
|
+
- `seeMoreClickReason`
|
|
547
|
+
- `clickQuestion`
|
|
548
|
+
- `payoffAfterFold`
|
|
549
|
+
- `bodyProofObligation`
|
|
512
550
|
- `corePainProofOrCuriosityVisibleMobile`
|
|
513
551
|
- `corePointVisibleMobile`
|
|
514
552
|
- `pointAfterMobileClamp`
|
|
@@ -528,6 +566,8 @@ Each hook must include:
|
|
|
528
566
|
- `rewriteIfTruncated`
|
|
529
567
|
- proof/story dependency
|
|
530
568
|
- AI-tell risk
|
|
569
|
+
- why it should win
|
|
570
|
+
- why it should lose
|
|
531
571
|
- score
|
|
532
572
|
|
|
533
573
|
Do not copy source wording. Copy only the structure.
|
|
@@ -548,23 +588,28 @@ available:
|
|
|
548
588
|
Use the rendered gates from `references/linkedin-preview-rendering.md`:
|
|
549
589
|
|
|
550
590
|
- `pass`: the mobile rendered preview shows the pain, proof, or curiosity by
|
|
551
|
-
the end of the first 3 rendered lines, and the core point is
|
|
552
|
-
without opening "see more"
|
|
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.
|
|
553
594
|
- `warn`: the mobile rendered preview creates useful curiosity but the core
|
|
554
|
-
point is slightly softened by wrapping, blank-line rhythm,
|
|
555
|
-
context word. A compact fallback is required.
|
|
595
|
+
point or click question is slightly softened by wrapping, blank-line rhythm,
|
|
596
|
+
or one missing context word. A compact fallback is required.
|
|
556
597
|
- `fail`: the hook's real point appears after the first 3 mobile rendered
|
|
557
|
-
lines
|
|
558
|
-
|
|
559
|
-
looks
|
|
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.
|
|
560
602
|
|
|
561
603
|
Desktop preview usually has more room. Still record `desktopPreviewFit`, but
|
|
562
604
|
never let desktop fit compensate for a mobile `fail`.
|
|
563
605
|
|
|
564
606
|
If a hook's point depends on text after the rendered mobile preview clamp,
|
|
565
|
-
rewrite it before selecting it
|
|
566
|
-
|
|
567
|
-
|
|
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.
|
|
568
613
|
|
|
569
614
|
## Step 3: Draft
|
|
570
615
|
|
|
@@ -594,6 +639,9 @@ Every saved draft needs a validation receipt with:
|
|
|
594
639
|
- selected premise card
|
|
595
640
|
- candidate hooks considered
|
|
596
641
|
- selected hook and why
|
|
642
|
+
- hook reverse-engineering audit
|
|
643
|
+
- hook angle matrix summary
|
|
644
|
+
- see-more click audit
|
|
597
645
|
- proof claims used and source
|
|
598
646
|
- story/proof files consulted
|
|
599
647
|
- gold standards consulted
|
|
@@ -55,7 +55,9 @@ Research packet:
|
|
|
55
55
|
- market belief map: max 8 bullets
|
|
56
56
|
- controversy candidates: max 8
|
|
57
57
|
- premise inputs: max 8
|
|
58
|
+
- hook reverse-engineering autopsies: max 12
|
|
58
59
|
- full adapted hook blocks: max 12
|
|
60
|
+
- angle territories tested: max 12
|
|
59
61
|
- exact phrase patterns: max 20
|
|
60
62
|
- body patterns: max 8
|
|
61
63
|
- source URLs and author profile URLs
|
|
@@ -261,6 +263,104 @@ Penalize lead-magnet and engagement-bait mechanics unless the user explicitly as
|
|
|
261
263
|
- "like and comment"
|
|
262
264
|
- broad giveaway framing that makes engagement inflate without proving the hook/body worked
|
|
263
265
|
|
|
266
|
+
## Hook Reverse Engineering Autopsy
|
|
267
|
+
|
|
268
|
+
For any space or LinkedIn topic, do not stop at "this is a good hook." Reverse
|
|
269
|
+
engineer why the opening earned attention, which shape can be reused, and which
|
|
270
|
+
parts belong to the source and must not be copied.
|
|
271
|
+
|
|
272
|
+
For each keeper source hook, record a `hookAutopsy`:
|
|
273
|
+
|
|
274
|
+
```text
|
|
275
|
+
hookAutopsy:
|
|
276
|
+
sourceHook: <exact visible opening used for analysis>
|
|
277
|
+
renderedFirstScreen: <mobile and desktop visible blocks>
|
|
278
|
+
sourceMechanism: <what the hook does structurally>
|
|
279
|
+
openLoopType: none | hidden_payoff | contradiction | proof_gap | workflow_reveal | asset_reveal | story_gap
|
|
280
|
+
clickQuestion: <the question a reader has before clicking see more>
|
|
281
|
+
promisedPayoff: <what the body/video must deliver after the click>
|
|
282
|
+
curiosityGap: <what is withheld and why that is fair>
|
|
283
|
+
specificityAnchor: <tool, person, number, object, scene, or enemy named>
|
|
284
|
+
tensionOpened: <belief, resentment, fear, status, cost, or contradiction>
|
|
285
|
+
proofImplied: <what proof the source suggests in the first screen>
|
|
286
|
+
whyItWorks: <specific words and structure, not a vibe label>
|
|
287
|
+
whyItMightBeInflated: <reach, giveaway, celebrity, outrage, or topic heat>
|
|
288
|
+
sourceShapeToKeep: <portable structure, written as a template>
|
|
289
|
+
sourceWordsNotToCopy: <phrases, jokes, proof, or context owned by source>
|
|
290
|
+
adaptationRule: <how to make it true for the user's idea and voice>
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Good `sourceShapeToKeep` examples:
|
|
294
|
+
|
|
295
|
+
- "The best [desired asset] I have right now is not in [default tool]."
|
|
296
|
+
- "I gave [system/person] one prompt: [specific request]."
|
|
297
|
+
- "[Common vanity metric] is useless until it becomes [business outcome]."
|
|
298
|
+
- "I built [familiar workflow] inside [new interface]."
|
|
299
|
+
- "Most teams [surface behavior]. Then they miss [hidden opportunity]."
|
|
300
|
+
|
|
301
|
+
Bad autopsies:
|
|
302
|
+
|
|
303
|
+
- "contrarian hook"
|
|
304
|
+
- "strong curiosity"
|
|
305
|
+
- "good storytelling"
|
|
306
|
+
- "viral format"
|
|
307
|
+
|
|
308
|
+
Those labels are allowed only after the concrete shape, click question, and
|
|
309
|
+
payoff obligation are recorded.
|
|
310
|
+
|
|
311
|
+
## Angle Exploration Before Drafting
|
|
312
|
+
|
|
313
|
+
After selecting a premise, create a hook angle matrix before drafting the post.
|
|
314
|
+
This is mandatory when the user asks to nail the hook, study hooks, explore a
|
|
315
|
+
space, or write from a specific idea.
|
|
316
|
+
|
|
317
|
+
Default matrix:
|
|
318
|
+
|
|
319
|
+
- at least 8 angle territories for normal drafting
|
|
320
|
+
- at least 12 angle territories when the user asks for "a ton of angles" or
|
|
321
|
+
says the hook is the main constraint
|
|
322
|
+
- at least 24 generated hooks across those territories for normal drafting
|
|
323
|
+
- at least 40 generated hooks when the user explicitly asks to optimize hooks
|
|
324
|
+
|
|
325
|
+
Angle territories should be materially different, not synonyms. Use territories
|
|
326
|
+
such as:
|
|
327
|
+
|
|
328
|
+
- enemy/tool contrast
|
|
329
|
+
- hidden asset
|
|
330
|
+
- first-person build proof
|
|
331
|
+
- workflow reveal
|
|
332
|
+
- contrarian category claim
|
|
333
|
+
- mistake/confession
|
|
334
|
+
- market timing
|
|
335
|
+
- customer/operator pain
|
|
336
|
+
- asset/free reveal without comment bait
|
|
337
|
+
- specific person/company signal
|
|
338
|
+
- before/after transformation
|
|
339
|
+
- question hook
|
|
340
|
+
|
|
341
|
+
For each territory, record:
|
|
342
|
+
|
|
343
|
+
```text
|
|
344
|
+
angleTerritory:
|
|
345
|
+
name:
|
|
346
|
+
sourceShapesUsed:
|
|
347
|
+
premiseTensionOpened:
|
|
348
|
+
readerValueImplied:
|
|
349
|
+
bestHook:
|
|
350
|
+
mobileRenderedPreview:
|
|
351
|
+
desktopRenderedPreview:
|
|
352
|
+
clickQuestion:
|
|
353
|
+
payoffAfterFold:
|
|
354
|
+
whyThisAngleShouldWin:
|
|
355
|
+
whyThisAngleShouldLose:
|
|
356
|
+
proofNeeded:
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Do not write the post body until the winning hook territory is chosen. The post
|
|
360
|
+
body must then pay off the selected hook quickly. If the best hook says the list
|
|
361
|
+
is not in Apollo, the next lines must reveal where it is. If the hook says "I
|
|
362
|
+
gave Sellable one prompt," the next lines must show the prompt or the demo.
|
|
363
|
+
|
|
264
364
|
## Market Belief Map
|
|
265
365
|
|
|
266
366
|
Before selecting a hook or writing a draft, synthesize a market belief map from
|
|
@@ -382,6 +482,12 @@ For each source, record:
|
|
|
382
482
|
- `corePainProofOrCuriosityVisibleDesktop`
|
|
383
483
|
- `corePointVisibleMobile`
|
|
384
484
|
- `corePointVisibleDesktop`
|
|
485
|
+
- `intentionalOpenLoop`
|
|
486
|
+
- `specificClickQuestionVisible`
|
|
487
|
+
- `payoffPlannedImmediatelyAfterClamp`
|
|
488
|
+
- `seeMoreClickReason`
|
|
489
|
+
- `clickQuestion`
|
|
490
|
+
- `payoffAfterFold`
|
|
385
491
|
- `pointAfterMobileClamp`
|
|
386
492
|
- `charCountIncludingNewlines`
|
|
387
493
|
- `physicalLineCount`
|
|
@@ -395,6 +501,7 @@ For each source, record:
|
|
|
395
501
|
- `desktopPreviewBudget`: `pass`, `warn`, or `fail`
|
|
396
502
|
- `blankLineVisualRisk`
|
|
397
503
|
- `corePointBeforeLikelyTruncation`
|
|
504
|
+
- `openLoopType`
|
|
398
505
|
- `renderedPreviewVerdict`: `pass`, `warn`, or `fail`
|
|
399
506
|
|
|
400
507
|
If only a search preview is available, do not pretend the opening is complete.
|
|
@@ -404,15 +511,17 @@ appears cut off or body context is unavailable.
|
|
|
404
511
|
Pass/warn/fail is based on rendered output:
|
|
405
512
|
|
|
406
513
|
- `pass`: the mobile rendered preview shows the pain, proof, or curiosity by
|
|
407
|
-
the end of the first 3 rendered lines, and the core point is
|
|
408
|
-
without opening "see more"
|
|
514
|
+
the end of the first 3 rendered lines, and either the core point is
|
|
515
|
+
understandable without opening "see more" or an intentional open loop creates
|
|
516
|
+
a specific click question with an immediate planned payoff.
|
|
409
517
|
- `warn`: the mobile rendered preview creates useful curiosity but the core
|
|
410
|
-
point is slightly softened by wrapping, blank-line rhythm,
|
|
411
|
-
context word. A compact fallback is required.
|
|
518
|
+
point or click question is slightly softened by wrapping, blank-line rhythm,
|
|
519
|
+
or one missing context word. A compact fallback is required.
|
|
412
520
|
- `fail`: the hook's real point appears after the first 3 mobile rendered
|
|
413
|
-
lines
|
|
414
|
-
|
|
415
|
-
looks
|
|
521
|
+
lines without an intentional open-loop plan, the visible open loop is vague,
|
|
522
|
+
the first rendered line is generic setup, blank lines consume the preview
|
|
523
|
+
before the reader sees the point, or desktop fit is the only reason it looks
|
|
524
|
+
good.
|
|
416
525
|
|
|
417
526
|
## Hook Extraction
|
|
418
527
|
|
|
@@ -63,6 +63,10 @@ renderedPreview:
|
|
|
63
63
|
blankLinesBeforeClamp: <number>
|
|
64
64
|
corePainProofOrCuriosityVisible: true | false
|
|
65
65
|
corePointVisible: true | false
|
|
66
|
+
intentionalOpenLoop: true | false
|
|
67
|
+
specificClickQuestionVisible: true | false
|
|
68
|
+
payoffPlannedImmediatelyAfterClamp: true | false
|
|
69
|
+
seeMoreClickReason: <why a reader would click see more>
|
|
66
70
|
seeMoreRisk: pass | warn | fail
|
|
67
71
|
screenshotPath: <optional local path>
|
|
68
72
|
desktop:
|
|
@@ -88,6 +92,7 @@ renderedPreview:
|
|
|
88
92
|
longestNonblankLineChars: <number>
|
|
89
93
|
blankLineVisualRisk: none | low | medium | high
|
|
90
94
|
pointAfterMobileClamp: true | false
|
|
95
|
+
openLoopType: none | hidden_payoff | contradiction | proof_gap | workflow_reveal | asset_reveal | story_gap
|
|
91
96
|
rewriteIfTruncated: <short fallback>
|
|
92
97
|
```
|
|
93
98
|
|
|
@@ -112,31 +117,39 @@ For generated hooks:
|
|
|
112
117
|
|
|
113
118
|
- Generate the hook from the selected premise first.
|
|
114
119
|
- Render the hook for mobile and desktop before scoring it.
|
|
115
|
-
- Score the rendered first-screen
|
|
116
|
-
-
|
|
120
|
+
- Score the rendered first-screen click reason before scoring cleverness.
|
|
121
|
+
- If the goal is see-more clicks, the hook may intentionally hide the payoff
|
|
122
|
+
after the mobile clamp, but the visible block must create a specific question
|
|
123
|
+
the target reader wants answered.
|
|
124
|
+
- Rewrite any candidate whose real point appears after the mobile clamp unless
|
|
125
|
+
that point is the planned payoff for an intentional open loop.
|
|
117
126
|
|
|
118
127
|
## Pass, Warn, Fail
|
|
119
128
|
|
|
120
129
|
Use these rendered gates:
|
|
121
130
|
|
|
122
131
|
- `pass`: the mobile rendered preview shows the pain, proof, or curiosity by the
|
|
123
|
-
end of the first 3 rendered lines, and the core point is
|
|
124
|
-
without opening "see more"
|
|
132
|
+
end of the first 3 rendered lines, and either the core point is
|
|
133
|
+
understandable without opening "see more" or an intentional open loop creates
|
|
134
|
+
a specific click question with an immediate planned payoff.
|
|
125
135
|
- `warn`: the mobile rendered preview creates useful curiosity but the core
|
|
126
|
-
point is slightly softened by wrapping, blank-line rhythm,
|
|
127
|
-
context word. A compact fallback is required.
|
|
136
|
+
point or click question is slightly softened by wrapping, blank-line rhythm,
|
|
137
|
+
or one missing context word. A compact fallback is required.
|
|
128
138
|
- `fail`: the hook's real point appears after the first 3 mobile rendered lines,
|
|
129
|
-
the first rendered line is generic setup,
|
|
130
|
-
before the reader sees the point, or desktop
|
|
131
|
-
good.
|
|
139
|
+
the visible open loop is vague, the first rendered line is generic setup,
|
|
140
|
+
blank lines consume the preview before the reader sees the point, or desktop
|
|
141
|
+
fit is the only reason it looks good.
|
|
132
142
|
|
|
133
143
|
A draft cannot be `ready` when the selected hook has:
|
|
134
144
|
|
|
135
145
|
- no `renderedPreview`
|
|
136
146
|
- `mobile.seeMoreRisk: fail`
|
|
137
147
|
- `mobile.corePainProofOrCuriosityVisible: false`
|
|
138
|
-
- `mobile.corePointVisible: false`
|
|
139
|
-
|
|
148
|
+
- `mobile.corePointVisible: false` unless `mobile.intentionalOpenLoop: true`,
|
|
149
|
+
`mobile.specificClickQuestionVisible: true`, and
|
|
150
|
+
`mobile.payoffPlannedImmediatelyAfterClamp: true`
|
|
151
|
+
- `pointAfterMobileClamp: true` unless the point after the clamp is the
|
|
152
|
+
intentional payoff for a specific open loop
|
|
140
153
|
|
|
141
154
|
## Report Format
|
|
142
155
|
|
|
@@ -72,6 +72,12 @@ Hook research files must preserve:
|
|
|
72
72
|
including literal mobile/desktop preview blocks, rendered line wraps, render
|
|
73
73
|
basis, CSS contract version, text widths, first-screen promise visibility,
|
|
74
74
|
core point visibility, and whether the point lands after the mobile clamp
|
|
75
|
+
- hook reverse-engineering autopsies for kept source hooks, including source
|
|
76
|
+
mechanism, open-loop type, click question, promised payoff, specificity
|
|
77
|
+
anchor, source shape to keep, source words not to copy, and adaptation rule
|
|
78
|
+
- hook angle matrix summary, including angle territories tested, top generated
|
|
79
|
+
hooks, winning territory, runner-up territories, and why the winning angle
|
|
80
|
+
beat the alternatives
|
|
75
81
|
- extracted hook patterns
|
|
76
82
|
- selected hook basis
|
|
77
83
|
|
|
@@ -92,6 +98,9 @@ Draft files must preserve:
|
|
|
92
98
|
- draft body
|
|
93
99
|
- validation receipt, including LinkedIn preview pass/warn/fail status and
|
|
94
100
|
compact fallback when the selected hook carries a warning
|
|
101
|
+
- selected hook reverse-engineering audit, hook angle matrix summary, and
|
|
102
|
+
see-more click audit when the selected hook intentionally hides the payoff
|
|
103
|
+
after the mobile fold
|
|
95
104
|
- rendered mobile and desktop preview blocks for the selected hook; drafts
|
|
96
105
|
cannot be ready when this rendered-preview audit is missing or fails mobile
|
|
97
106
|
visibility
|
|
@@ -12,6 +12,9 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
12
12
|
- `selectedHook`
|
|
13
13
|
- `selectedHookWhy`
|
|
14
14
|
- `sourceHookReachAudit`
|
|
15
|
+
- `hookReverseEngineeringAudit`
|
|
16
|
+
- `hookAngleMatrix`
|
|
17
|
+
- `seeMoreClickAudit`
|
|
15
18
|
- `proofClaimsUsed`
|
|
16
19
|
- `proofClaimSources`
|
|
17
20
|
- `storyFilesConsulted`
|
|
@@ -69,15 +72,29 @@ set the verdict to `revise` or `reject`.
|
|
|
69
72
|
|
|
70
73
|
## Candidate Set
|
|
71
74
|
|
|
72
|
-
Generate
|
|
75
|
+
Generate many hook candidates before drafting. Do not lock onto the first draft.
|
|
76
|
+
|
|
77
|
+
Minimum candidate set:
|
|
78
|
+
|
|
79
|
+
- normal drafting: at least 8 angle territories and 24 hook candidates
|
|
80
|
+
- hook-critical requests: at least 12 angle territories and 40 hook candidates
|
|
81
|
+
- smaller set only when the user explicitly asks for fewer options
|
|
82
|
+
|
|
83
|
+
An angle territory is a distinct reason the reader might care, such as hidden
|
|
84
|
+
asset, tool/enemy contrast, first-person build proof, workflow reveal,
|
|
85
|
+
contrarian category claim, mistake/confession, market timing, operator pain,
|
|
86
|
+
specific person/company signal, before/after transformation, or question hook.
|
|
73
87
|
|
|
74
88
|
Each candidate should include:
|
|
75
89
|
|
|
76
90
|
- hook text
|
|
77
91
|
- selected premise
|
|
92
|
+
- angle territory
|
|
78
93
|
- premise tension opened
|
|
79
94
|
- reader value implied
|
|
80
95
|
- source pattern
|
|
96
|
+
- source shape kept
|
|
97
|
+
- source words not copied
|
|
81
98
|
- source pattern reach signals: author follower count when available, target
|
|
82
99
|
follower band, follower-band fit, engagement per 1k followers, weighted
|
|
83
100
|
engagement per 1k followers, reach-adjusted score, baseline lift, and
|
|
@@ -87,6 +104,12 @@ Each candidate should include:
|
|
|
87
104
|
- literal mobile and desktop rendered preview blocks
|
|
88
105
|
- mobile and desktop rendered line wraps
|
|
89
106
|
- first-screen promise: pain, proof, or curiosity visible by the mobile clamp
|
|
107
|
+
- `intentionalOpenLoop`
|
|
108
|
+
- `specificClickQuestionVisible`
|
|
109
|
+
- `seeMoreClickReason`
|
|
110
|
+
- `clickQuestion`
|
|
111
|
+
- `payoffAfterFold`
|
|
112
|
+
- `bodyProofObligation`
|
|
90
113
|
- whether the core point is visible in the mobile rendered preview
|
|
91
114
|
- whether the point lands after the mobile clamp
|
|
92
115
|
- char count including newlines and first-line / first-two-line preview measurements
|
|
@@ -97,6 +120,55 @@ Each candidate should include:
|
|
|
97
120
|
- AI-tell risk
|
|
98
121
|
- why it should win or lose
|
|
99
122
|
|
|
123
|
+
## Hook Reverse Engineering Audit
|
|
124
|
+
|
|
125
|
+
Before a draft can be `ready`, validate that the selected hook came from a real
|
|
126
|
+
source-shape analysis, not from generic brainstorming.
|
|
127
|
+
|
|
128
|
+
Record:
|
|
129
|
+
|
|
130
|
+
- `sourceHooksStudied`
|
|
131
|
+
- `sourceHookAutopsies`
|
|
132
|
+
- `selectedSourceShape`
|
|
133
|
+
- `sourceShapeKept`
|
|
134
|
+
- `sourceWordsNotCopied`
|
|
135
|
+
- `whyItWorks`
|
|
136
|
+
- `openLoopType`: `none`, `hidden_payoff`, `contradiction`, `proof_gap`,
|
|
137
|
+
`workflow_reveal`, `asset_reveal`, or `story_gap`
|
|
138
|
+
- `clickQuestion`
|
|
139
|
+
- `promisedPayoff`
|
|
140
|
+
- `specificityAnchor`
|
|
141
|
+
- `tensionOpened`
|
|
142
|
+
- `proofImplied`
|
|
143
|
+
- `adaptationRule`
|
|
144
|
+
- `bodyPayoffObligation`
|
|
145
|
+
|
|
146
|
+
The selected draft cannot be `ready` if the hook was copied verbatim from
|
|
147
|
+
another creator, if the receipt only says "contrarian" or "curiosity" without
|
|
148
|
+
the concrete shape, or if the body does not pay off the hook quickly.
|
|
149
|
+
|
|
150
|
+
## Hook Angle Matrix Audit
|
|
151
|
+
|
|
152
|
+
Before a draft can be `ready`, validate that the hook was chosen after exploring
|
|
153
|
+
materially different angles.
|
|
154
|
+
|
|
155
|
+
Record:
|
|
156
|
+
|
|
157
|
+
- `angleTerritoriesTested`
|
|
158
|
+
- `hookCandidatesGenerated`
|
|
159
|
+
- `winningTerritory`
|
|
160
|
+
- `runnerUpTerritories`
|
|
161
|
+
- `whyWinningAngleBeatsAlternatives`
|
|
162
|
+
- `whyRejectedHooksLost`
|
|
163
|
+
- `mobileRenderedPreviewBlocksForTopCandidates`
|
|
164
|
+
- `desktopRenderedPreviewBlocksForTopCandidates`
|
|
165
|
+
- `proofNeededByWinningAngle`
|
|
166
|
+
|
|
167
|
+
If the user asked to "nail the hook," "focus on hooks," or explore "a ton of
|
|
168
|
+
angles," the draft cannot be `ready` unless at least 12 territories and 40 hook
|
|
169
|
+
candidates were considered or the receipt explains why the user explicitly
|
|
170
|
+
requested fewer.
|
|
171
|
+
|
|
100
172
|
## Finalizer Pass
|
|
101
173
|
|
|
102
174
|
After the first draft:
|
|
@@ -216,15 +288,17 @@ review clamp: first 3 rendered text lines
|
|
|
216
288
|
Use rendered gates:
|
|
217
289
|
|
|
218
290
|
- `pass`: the mobile rendered preview shows the pain, proof, or curiosity by
|
|
219
|
-
the end of the first 3 rendered lines, and the core point is
|
|
220
|
-
without opening "see more"
|
|
291
|
+
the end of the first 3 rendered lines, and either the core point is
|
|
292
|
+
understandable without opening "see more" or an intentional open loop creates
|
|
293
|
+
a specific click question with an immediate planned payoff.
|
|
221
294
|
- `warn`: the mobile rendered preview creates useful curiosity but the core
|
|
222
|
-
point is slightly softened by wrapping, blank-line rhythm,
|
|
223
|
-
context word. A compact fallback is required.
|
|
295
|
+
point or click question is slightly softened by wrapping, blank-line rhythm,
|
|
296
|
+
or one missing context word. A compact fallback is required.
|
|
224
297
|
- `fail`: the hook's real point appears after the first 3 mobile rendered
|
|
225
|
-
lines
|
|
226
|
-
|
|
227
|
-
looks
|
|
298
|
+
lines without an intentional open-loop plan, the visible open loop is vague,
|
|
299
|
+
the first rendered line is generic setup, blank lines consume the preview
|
|
300
|
+
before the reader sees the point, or desktop fit is the only reason it looks
|
|
301
|
+
good.
|
|
228
302
|
|
|
229
303
|
Desktop preview usually has more room. Still record desktop fit, but never let
|
|
230
304
|
desktop fit compensate for a mobile `fail`.
|
|
@@ -247,6 +321,12 @@ Record:
|
|
|
247
321
|
- `corePainProofOrCuriosityVisibleDesktop`
|
|
248
322
|
- `corePointVisibleMobile`
|
|
249
323
|
- `corePointVisibleDesktop`
|
|
324
|
+
- `intentionalOpenLoop`
|
|
325
|
+
- `specificClickQuestionVisible`
|
|
326
|
+
- `payoffPlannedImmediatelyAfterClamp`
|
|
327
|
+
- `seeMoreClickReason`
|
|
328
|
+
- `clickQuestion`
|
|
329
|
+
- `payoffAfterFold`
|
|
250
330
|
- `pointAfterMobileClamp`
|
|
251
331
|
- `charCount`
|
|
252
332
|
- `charCountIncludingNewlines`
|
|
@@ -270,10 +350,33 @@ If the hook only works after the rendered mobile clamp, rewrite it. A draft
|
|
|
270
350
|
cannot be `ready` with `previewBudgetStatus: fail`,
|
|
271
351
|
`mobilePreviewFit: fail`, missing `renderedPreview`,
|
|
272
352
|
`corePainProofOrCuriosityVisibleMobile: false`,
|
|
273
|
-
`corePointVisibleMobile: false
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
353
|
+
`corePointVisibleMobile: false` unless the receipt has
|
|
354
|
+
`intentionalOpenLoop: true`, `specificClickQuestionVisible: true`, and
|
|
355
|
+
`payoffPlannedImmediatelyAfterClamp: true`, or `pointAfterMobileClamp: true`
|
|
356
|
+
unless the post is intentionally hiding the payoff for a specific see-more
|
|
357
|
+
click. A draft may be `ready` with `previewBudgetStatus: warn` only when the
|
|
358
|
+
warning is explicit, usually because the user prefers blank-line rhythm, and
|
|
359
|
+
the receipt includes a compact fallback.
|
|
360
|
+
|
|
361
|
+
## See-More Click Audit
|
|
362
|
+
|
|
363
|
+
When the selected hook intentionally hides the payoff after the mobile fold,
|
|
364
|
+
record:
|
|
365
|
+
|
|
366
|
+
- `intentionalOpenLoop: true`
|
|
367
|
+
- `openLoopType`
|
|
368
|
+
- `visibleBeforeFold`
|
|
369
|
+
- `clickQuestion`
|
|
370
|
+
- `payoffAfterFold`
|
|
371
|
+
- `firstPayoffLine`
|
|
372
|
+
- `payoffArrivesWithinFirstBodySection`
|
|
373
|
+
- `readerValueAfterClick`
|
|
374
|
+
- `baitRisk`
|
|
375
|
+
- `baitRiskMitigation`
|
|
376
|
+
|
|
377
|
+
Open loops are allowed only when the body actually delivers the promised payoff.
|
|
378
|
+
If the hook withholds the answer but the body switches topics, save as
|
|
379
|
+
`needs_revision`.
|
|
277
380
|
|
|
278
381
|
## Simplifier / Concrete-Language Audit
|
|
279
382
|
|