@sellable/mcp 0.1.239 → 0.1.242
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/README.md +2 -1
- package/dist/server.js +13 -1
- package/dist/tools/content-posts.d.ts +315 -0
- package/dist/tools/content-posts.js +366 -15
- package/dist/tools/registry.d.ts +204 -0
- package/package.json +1 -1
- package/skills/create-post/SKILL.md +247 -17
- package/skills/create-post/references/gold-standard-post-pack.md +43 -2
- package/skills/create-post/references/hook-research-playbook.md +217 -2
- package/skills/create-post/references/post-file-contract.md +24 -2
- package/skills/create-post/references/post-validation.md +101 -6
- package/skills/create-post/references/premise-development.md +159 -0
|
@@ -35,6 +35,42 @@ Do not store gold standards under `~/.sellable/content/linkedin/**`. Content
|
|
|
35
35
|
folders are for ideas, hook research, drafts, published records, and future
|
|
36
36
|
comment history. Gold standards are durable writing memory.
|
|
37
37
|
|
|
38
|
+
## Creator Tracking
|
|
39
|
+
|
|
40
|
+
When an outside creator/person is approved as someone the user wants to keep
|
|
41
|
+
learning from, save the person separately from the gold-standard post.
|
|
42
|
+
|
|
43
|
+
Use:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
mcp__sellable__upsert_engage_tracked_person({
|
|
47
|
+
name,
|
|
48
|
+
linkedinUrl,
|
|
49
|
+
reason
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Tracked people live in:
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
~/.sellable/configs/discovery/influencers.md
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Gold-standard post records live in:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
~/.sellable/configs/core/references/linkedin-posts/
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Save both when both are approved:
|
|
66
|
+
|
|
67
|
+
- tracked person: "keep fetching this creator's new posts"
|
|
68
|
+
- gold-standard post: "use this specific post as decomposed writing memory"
|
|
69
|
+
|
|
70
|
+
Do not conflate the two. A person can be tracked without any one post becoming
|
|
71
|
+
a gold standard, and a post can be saved as a gold standard without tracking the
|
|
72
|
+
author.
|
|
73
|
+
|
|
38
74
|
## Import Modes
|
|
39
75
|
|
|
40
76
|
### Personal Best Import
|
|
@@ -65,7 +101,11 @@ gold standards.
|
|
|
65
101
|
reach, and examples that cannot be adapted to the user's voice.
|
|
66
102
|
5. Present candidates with a clear "should we use these as gold standards?"
|
|
67
103
|
approval gate.
|
|
68
|
-
6.
|
|
104
|
+
6. Include a `track person?` recommendation for authors with repeated strong
|
|
105
|
+
topic-fit posts or when the user says they like the person.
|
|
106
|
+
7. Add only the user-approved post selections.
|
|
107
|
+
8. Call `mcp__sellable__upsert_engage_tracked_person` only for user-approved
|
|
108
|
+
tracked people.
|
|
69
109
|
|
|
70
110
|
## Candidate Presentation
|
|
71
111
|
|
|
@@ -86,6 +126,7 @@ Show compact candidate cards. Include:
|
|
|
86
126
|
- voice fit
|
|
87
127
|
- risks
|
|
88
128
|
- allowed use recommendation
|
|
129
|
+
- track person recommendation and reason
|
|
89
130
|
|
|
90
131
|
Approval prompt:
|
|
91
132
|
|
|
@@ -93,7 +134,7 @@ Approval prompt:
|
|
|
93
134
|
Gold-standard pack: <current_count>/20 approved.
|
|
94
135
|
|
|
95
136
|
These look like candidates worth saving. Which should I add?
|
|
96
|
-
Reply with numbers to add, "skip all", or "replace <existing> with <new>" if the pack is full.
|
|
137
|
+
Reply with numbers to add, "track <author>", "skip all", or "replace <existing> with <new>" if the pack is full.
|
|
97
138
|
```
|
|
98
139
|
|
|
99
140
|
Do not write candidates to the approved pack before the user chooses.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Hook Research Playbook
|
|
2
2
|
|
|
3
|
-
Hook research must use current Sellable engagement data before drafting unless the user explicitly asks for `unsaved_preview`.
|
|
3
|
+
Hook research must use current Sellable engagement data before drafting unless the user explicitly asks for `unsaved_preview`. The goal is not only to find hooks. The goal is to find what the market is currently rewarding, what the audience implicitly believes/wants/resents/fears, which controversial angle the user can credibly test, and what premise would deliver real reader value.
|
|
4
4
|
|
|
5
5
|
## Search Inputs
|
|
6
6
|
|
|
@@ -11,6 +11,63 @@ Derive 3-8 keyword searches from:
|
|
|
11
11
|
- proven search terms in engage memory
|
|
12
12
|
- tracked people/inspiration references when relevant
|
|
13
13
|
|
|
14
|
+
When research reveals a creator/person the user likes, keep their profile URL
|
|
15
|
+
with the source post. If the user approves tracking them, save them with
|
|
16
|
+
`mcp__sellable__upsert_engage_tracked_person` so future sessions can fetch
|
|
17
|
+
their posts directly instead of rediscovering them ad hoc.
|
|
18
|
+
|
|
19
|
+
## Background Research Worker
|
|
20
|
+
|
|
21
|
+
Use a background research worker when the host supports it and the research
|
|
22
|
+
needs more than a small handful of posts. This keeps the main orchestrator
|
|
23
|
+
focused on decisions instead of carrying a large source corpus.
|
|
24
|
+
|
|
25
|
+
Worker owns:
|
|
26
|
+
|
|
27
|
+
- broad keyword search
|
|
28
|
+
- tracked-person post fetches
|
|
29
|
+
- full-text matching by URL/activity ID
|
|
30
|
+
- duplicate removal
|
|
31
|
+
- lead-magnet, giveaway, engagement-bait, and off-voice filtering
|
|
32
|
+
- market belief mapping across kept and rejected examples
|
|
33
|
+
- premise input extraction: real scenes, observed tensions, reader value, proof gaps
|
|
34
|
+
- hook opening measurement
|
|
35
|
+
- exact phrase-pattern extraction
|
|
36
|
+
- body-structure extraction
|
|
37
|
+
- rejected-example notes
|
|
38
|
+
- track-person and gold-standard recommendations
|
|
39
|
+
|
|
40
|
+
Orchestrator owns:
|
|
41
|
+
|
|
42
|
+
- deciding whether research is enough
|
|
43
|
+
- saving `mcp__sellable__save_hook_research`
|
|
44
|
+
- showing the `Research Learning Report`
|
|
45
|
+
- asking which direction to draft
|
|
46
|
+
- drafting and validation
|
|
47
|
+
|
|
48
|
+
Worker output must be a compressed research packet, not a data dump:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
Research packet:
|
|
52
|
+
- sources kept: max 8
|
|
53
|
+
- sources rejected: max 8
|
|
54
|
+
- market belief map: max 8 bullets
|
|
55
|
+
- controversy candidates: max 8
|
|
56
|
+
- premise inputs: max 8
|
|
57
|
+
- full adapted hook blocks: max 12
|
|
58
|
+
- exact phrase patterns: max 20
|
|
59
|
+
- body patterns: max 8
|
|
60
|
+
- source URLs and author profile URLs
|
|
61
|
+
- preview measurements
|
|
62
|
+
- confidence gaps
|
|
63
|
+
- save recommendations
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Do not return the full raw text of every post to the orchestrator. Include only
|
|
67
|
+
short source excerpts needed to explain a phrase pattern, plus URLs. Full text
|
|
68
|
+
belongs in the saved research artifact only when the user approves a specific
|
|
69
|
+
gold-standard candidate and it is safe to store.
|
|
70
|
+
|
|
14
71
|
## Default Search
|
|
15
72
|
|
|
16
73
|
Use `mcp__sellable__search_engagement_posts` with practical constraints:
|
|
@@ -61,6 +118,67 @@ Penalize lead-magnet and engagement-bait mechanics unless the user explicitly as
|
|
|
61
118
|
- "like and comment"
|
|
62
119
|
- broad giveaway framing that makes engagement inflate without proving the hook/body worked
|
|
63
120
|
|
|
121
|
+
## Market Belief Map
|
|
122
|
+
|
|
123
|
+
Before selecting a hook or writing a draft, synthesize a market belief map from
|
|
124
|
+
the kept and rejected posts. This is the step that prevents an internally
|
|
125
|
+
coherent post from becoming externally boring.
|
|
126
|
+
|
|
127
|
+
Record:
|
|
128
|
+
|
|
129
|
+
- resonating ideas: what topics or claims are repeatedly earning real
|
|
130
|
+
engagement in the last 30-120 days
|
|
131
|
+
- implicit beliefs: what the audience seems to already believe but may not say
|
|
132
|
+
directly
|
|
133
|
+
- audience wants: what they want to feel, learn, try, buy, avoid, or be early to
|
|
134
|
+
- audience resentments: what they are tired of, embarrassed by, or angry about
|
|
135
|
+
- audience fears: what risk would make them hesitate
|
|
136
|
+
- argument bait: what they will plausibly disagree with in comments
|
|
137
|
+
- credible controversy: what the user can argue without borrowing someone else's
|
|
138
|
+
proof or pretending to have data they do not have
|
|
139
|
+
- avoid list: ideas that are inflated by comment bait, stale category claims,
|
|
140
|
+
celebrity reach, giveaway mechanics, or poor voice fit
|
|
141
|
+
|
|
142
|
+
The selected direction must include:
|
|
143
|
+
|
|
144
|
+
```text
|
|
145
|
+
Selected controversy:
|
|
146
|
+
<one sentence>
|
|
147
|
+
|
|
148
|
+
Why this audience would engage:
|
|
149
|
+
<specific belief/want/resentment/fear>
|
|
150
|
+
|
|
151
|
+
Why this user can credibly say it:
|
|
152
|
+
<raw idea, memory, story, proof, or product mechanism>
|
|
153
|
+
|
|
154
|
+
What not to claim:
|
|
155
|
+
<unsupported metric, borrowed proof, or hype phrase to avoid>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
If the raw idea is true but the market belief map does not show a live tension,
|
|
159
|
+
do not draft from the raw idea as-is. Present stronger directions or reframe the
|
|
160
|
+
idea around the closest supported external tension.
|
|
161
|
+
|
|
162
|
+
## Premise Inputs
|
|
163
|
+
|
|
164
|
+
After the market belief map, extract the ingredients needed for premise
|
|
165
|
+
development. Do this before hook generation.
|
|
166
|
+
|
|
167
|
+
Record:
|
|
168
|
+
|
|
169
|
+
- real story or scene candidates from the raw idea, memory, transcript, or
|
|
170
|
+
current-session context
|
|
171
|
+
- observed pattern candidates when no first-person story is available
|
|
172
|
+
- visible tension: the uncomfortable gap, cost, contradiction, or tradeoff
|
|
173
|
+
- common belief: what the audience probably believes right now
|
|
174
|
+
- contrarian truth: what the user can credibly argue instead
|
|
175
|
+
- reader value: what the reader learns, sees differently, or can do
|
|
176
|
+
- proof available: what can be safely used
|
|
177
|
+
- proof missing: what cannot be claimed without user confirmation
|
|
178
|
+
|
|
179
|
+
If this section is weak, say so. Do not let the hook lab proceed as if a clever
|
|
180
|
+
opening can create value that the premise does not have.
|
|
181
|
+
|
|
64
182
|
## Full Text Reality
|
|
65
183
|
|
|
66
184
|
Search results may only include previews.
|
|
@@ -117,17 +235,23 @@ appears cut off or body context is unavailable.
|
|
|
117
235
|
|
|
118
236
|
## Hook Extraction
|
|
119
237
|
|
|
120
|
-
Extract structure, not
|
|
238
|
+
Extract structure and reusable language patterns, not copied prose. The goal is
|
|
239
|
+
to learn the exact kinds of words, phrase shapes, sentence rhythms, and body
|
|
240
|
+
moves that are working, then adapt them into the selected premise in the user's
|
|
241
|
+
voice. Hooks must come from a premise card, not from the raw idea alone.
|
|
121
242
|
|
|
122
243
|
For each shortlisted source post, record:
|
|
123
244
|
|
|
124
245
|
- URL
|
|
125
246
|
- author
|
|
247
|
+
- author profile URL when available
|
|
126
248
|
- engagement totals and available likes/comments/shares breakdown
|
|
127
249
|
- creator repeat evidence
|
|
128
250
|
- visible hook text or preview
|
|
129
251
|
- opening preview measurement fields from the section above
|
|
130
252
|
- hook mechanism
|
|
253
|
+
- exact hook language patterns: reusable words, phrase shapes, contrast forms,
|
|
254
|
+
sentence shapes, and transition moves
|
|
131
255
|
- story mechanism when the post is a story
|
|
132
256
|
- internal question created
|
|
133
257
|
- emotional trigger
|
|
@@ -135,6 +259,81 @@ For each shortlisted source post, record:
|
|
|
135
259
|
- lead magnet or engagement bait penalty
|
|
136
260
|
- weighted signal notes
|
|
137
261
|
- replicability score
|
|
262
|
+
- track person recommendation: `yes`, `no`, or `ask_user`
|
|
263
|
+
- tracking reason when recommended
|
|
264
|
+
|
|
265
|
+
## Specific Language Extraction
|
|
266
|
+
|
|
267
|
+
For each keeper, extract the source's specific language mechanics in this
|
|
268
|
+
format:
|
|
269
|
+
|
|
270
|
+
```text
|
|
271
|
+
Phrase pattern:
|
|
272
|
+
"<phrase or phrase shape>"
|
|
273
|
+
|
|
274
|
+
Role:
|
|
275
|
+
<what the words do: create contrast, compress pain, name the enemy, make timing
|
|
276
|
+
the villain, move from surface action to system outcome, etc.>
|
|
277
|
+
|
|
278
|
+
Source:
|
|
279
|
+
<author + URL>
|
|
280
|
+
|
|
281
|
+
Reusable forms:
|
|
282
|
+
- <template form 1>
|
|
283
|
+
- <template form 2>
|
|
284
|
+
- <template form 3>
|
|
285
|
+
|
|
286
|
+
Adapted to user's idea:
|
|
287
|
+
- <new phrase in the user's voice>
|
|
288
|
+
|
|
289
|
+
Do not copy:
|
|
290
|
+
<words, proof, joke, or company context that belongs to the source>
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Examples of the level of specificity required:
|
|
294
|
+
|
|
295
|
+
- "not because [obvious reason]. because [real reason]."
|
|
296
|
+
- "most teams stop at [surface step]."
|
|
297
|
+
- "the [thing] was [state]. you just never [saw/used/launched] it in time."
|
|
298
|
+
- "the maintenance is the tax."
|
|
299
|
+
- "[thing] does not fail in your head. it fails in the gap between [A] and [B]."
|
|
300
|
+
- "the important part is not that AI [surface action]. the important part is that [system outcome]."
|
|
301
|
+
- "one [constrained operator] can run the whole [machine] if [constraint]."
|
|
302
|
+
|
|
303
|
+
Never reduce this section to high-level labels like "contrarian" or
|
|
304
|
+
"founder story." Those labels are allowed only after the exact phrase mechanics
|
|
305
|
+
are captured.
|
|
306
|
+
|
|
307
|
+
## Body Structure Extraction
|
|
308
|
+
|
|
309
|
+
For each keeper with full text available, extract the body in this format:
|
|
310
|
+
|
|
311
|
+
```text
|
|
312
|
+
Body pattern:
|
|
313
|
+
<short name>
|
|
314
|
+
|
|
315
|
+
Source:
|
|
316
|
+
<author + URL>
|
|
317
|
+
|
|
318
|
+
Sequence:
|
|
319
|
+
1. <paragraph/job 1>
|
|
320
|
+
2. <paragraph/job 2>
|
|
321
|
+
3. <paragraph/job 3>
|
|
322
|
+
|
|
323
|
+
Exact language moves:
|
|
324
|
+
- "<phrase shape or transition>"
|
|
325
|
+
- "<sentence pattern>"
|
|
326
|
+
- "<closing move>"
|
|
327
|
+
|
|
328
|
+
Adapted body move:
|
|
329
|
+
<how this would show up in the user's post>
|
|
330
|
+
|
|
331
|
+
Replicability:
|
|
332
|
+
high | medium | low
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
If full text is unavailable, record `full_text_unavailable` and do not infer
|
|
336
|
+
body structure beyond the visible preview.
|
|
138
337
|
|
|
139
338
|
## Story Mechanism
|
|
140
339
|
|
|
@@ -165,3 +364,19 @@ Draft-ready output must block or retry when:
|
|
|
165
364
|
## Save Requirement
|
|
166
365
|
|
|
167
366
|
Save the research with `mcp__sellable__save_hook_research` before drafting.
|
|
367
|
+
|
|
368
|
+
The saved research must contain enough detail to support a user-visible
|
|
369
|
+
`Research Learning Report`: source examples, full adapted hook blocks, exact
|
|
370
|
+
phrase patterns, body structures, rejected examples, tracked-person
|
|
371
|
+
recommendations, and gold-standard recommendations.
|
|
372
|
+
|
|
373
|
+
If the user approves a creator/person as a recurring inspiration source, also
|
|
374
|
+
call `mcp__sellable__upsert_engage_tracked_person` with:
|
|
375
|
+
|
|
376
|
+
- `name`: display name
|
|
377
|
+
- `linkedinUrl`: canonical LinkedIn profile URL
|
|
378
|
+
- `reason`: concise lane and why they are worth tracking
|
|
379
|
+
|
|
380
|
+
Do not track a person only because one post was viral. Track them when they have
|
|
381
|
+
repeated strong posts, unusually high topic fit, or the user explicitly says
|
|
382
|
+
they like them.
|
|
@@ -31,6 +31,7 @@ Customer computer owns:
|
|
|
31
31
|
research_YYYYMMDD_slug.md
|
|
32
32
|
drafts/
|
|
33
33
|
draft_YYYYMMDD_slug_v1.md
|
|
34
|
+
draft_YYYYMMDD_slug_v2.md
|
|
34
35
|
published/
|
|
35
36
|
YYYY/
|
|
36
37
|
post_linkedinActivityId.md
|
|
@@ -69,10 +70,26 @@ Draft files must preserve:
|
|
|
69
70
|
|
|
70
71
|
- source idea ID
|
|
71
72
|
- hook research ID
|
|
73
|
+
- versioned draft ID, normally ending in `_v1`, `_v2`, `_v3`, etc.
|
|
74
|
+
- iteration metadata when there is a prior or baseline draft:
|
|
75
|
+
- `version`
|
|
76
|
+
- `priorDraftId`
|
|
77
|
+
- `changeIntent`
|
|
78
|
+
- `whatChanged`
|
|
79
|
+
- `whatImproved`
|
|
80
|
+
- `whatGotWorse`
|
|
81
|
+
- score fields for hook, proof, voice, specificity, skimmability, and publish confidence
|
|
82
|
+
- `verdict`: `baseline`, `keep`, `revise`, `reject`, `publish_candidate`, or a similarly explicit state
|
|
72
83
|
- draft body
|
|
73
84
|
- validation receipt, including LinkedIn preview pass/warn/fail status and
|
|
74
85
|
compact fallback when the selected hook carries a warning
|
|
75
|
-
- status: `draft`, `ready`, or `
|
|
86
|
+
- status: `draft`, `ready`, `needs_revision`, `published`, or `archived`
|
|
87
|
+
|
|
88
|
+
Multiple drafts for the same idea are expected. Keep the `ideaId` stable and
|
|
89
|
+
create a new versioned `draftId` for each materially different attempt. Do not
|
|
90
|
+
overwrite a prior version just to compare alternatives. Use
|
|
91
|
+
`update_post_draft` only for same-version receipt fixes, status changes, or
|
|
92
|
+
copy edits that should remain part of that version.
|
|
76
93
|
|
|
77
94
|
Published files must preserve:
|
|
78
95
|
|
|
@@ -80,7 +97,12 @@ Published files must preserve:
|
|
|
80
97
|
- publish URL
|
|
81
98
|
- LinkedIn activity ID when available
|
|
82
99
|
- published date
|
|
83
|
-
-
|
|
100
|
+
- future metrics placeholders and appended metric snapshots when available
|
|
101
|
+
|
|
102
|
+
When a draft is published, `mark_post_published` records the published post
|
|
103
|
+
separately and marks the source draft as `published` by default. Use
|
|
104
|
+
`update_published_post_metrics` to append later performance snapshots instead
|
|
105
|
+
of editing the draft.
|
|
84
106
|
|
|
85
107
|
## Safety
|
|
86
108
|
|
|
@@ -6,6 +6,8 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
6
6
|
|
|
7
7
|
- `sourceIdeaId`
|
|
8
8
|
- `hookResearchId`
|
|
9
|
+
- `iteration`
|
|
10
|
+
- `selectedPremiseCard`
|
|
9
11
|
- `candidateHooksConsidered`
|
|
10
12
|
- `selectedHook`
|
|
11
13
|
- `selectedHookWhy`
|
|
@@ -14,6 +16,8 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
14
16
|
- `storyFilesConsulted`
|
|
15
17
|
- `goldStandardsConsulted`
|
|
16
18
|
- `voiceRulesApplied`
|
|
19
|
+
- `marketBeliefAudit`
|
|
20
|
+
- `premiseValueAudit`
|
|
17
21
|
- `linkedinPreviewAudit`
|
|
18
22
|
- `simplifierConcreteLanguageAudit`
|
|
19
23
|
- `antiAiAudit`
|
|
@@ -23,6 +27,45 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
23
27
|
- `retryNeededReasons`
|
|
24
28
|
- `readyStatus`
|
|
25
29
|
|
|
30
|
+
## Iteration Receipt
|
|
31
|
+
|
|
32
|
+
Every saved draft needs iteration metadata, even the first draft. This lets the
|
|
33
|
+
content library show whether later drafts are actually improving.
|
|
34
|
+
|
|
35
|
+
For the first ready draft of an idea, record:
|
|
36
|
+
|
|
37
|
+
- `version: v1`
|
|
38
|
+
- `priorDraftId: none`
|
|
39
|
+
- `iterationRole: baseline`
|
|
40
|
+
- `changeIntent`
|
|
41
|
+
- `score`
|
|
42
|
+
- `verdict`
|
|
43
|
+
- `nextIterationTargets`
|
|
44
|
+
|
|
45
|
+
For later drafts, record:
|
|
46
|
+
|
|
47
|
+
- `version`
|
|
48
|
+
- `priorDraftId`
|
|
49
|
+
- `changeIntent`
|
|
50
|
+
- `whatChanged`
|
|
51
|
+
- `whatImproved`
|
|
52
|
+
- `whatGotWorse`
|
|
53
|
+
- `score`
|
|
54
|
+
- `verdict`
|
|
55
|
+
|
|
56
|
+
Use a score object with at least:
|
|
57
|
+
|
|
58
|
+
- `hook`
|
|
59
|
+
- `proof`
|
|
60
|
+
- `voice`
|
|
61
|
+
- `specificity`
|
|
62
|
+
- `skimmability`
|
|
63
|
+
- `publishConfidence`
|
|
64
|
+
|
|
65
|
+
Do not call a later draft better just because it is newer. If the hook is
|
|
66
|
+
stronger but proof, voice, or clarity got worse, say that in `whatGotWorse` and
|
|
67
|
+
set the verdict to `revise` or `reject`.
|
|
68
|
+
|
|
26
69
|
## Candidate Set
|
|
27
70
|
|
|
28
71
|
Generate multiple hook candidates before drafting. Do not lock onto the first draft.
|
|
@@ -30,6 +73,9 @@ Generate multiple hook candidates before drafting. Do not lock onto the first dr
|
|
|
30
73
|
Each candidate should include:
|
|
31
74
|
|
|
32
75
|
- hook text
|
|
76
|
+
- selected premise
|
|
77
|
+
- premise tension opened
|
|
78
|
+
- reader value implied
|
|
33
79
|
- source pattern
|
|
34
80
|
- score
|
|
35
81
|
- char count including newlines and first-line / first-two-line preview measurements
|
|
@@ -45,12 +91,61 @@ Each candidate should include:
|
|
|
45
91
|
After the first draft:
|
|
46
92
|
|
|
47
93
|
1. remove unsupported claims
|
|
48
|
-
2.
|
|
49
|
-
3.
|
|
50
|
-
4.
|
|
51
|
-
5.
|
|
52
|
-
6.
|
|
53
|
-
7.
|
|
94
|
+
2. verify the draft is anchored to the selected market belief and controversy
|
|
95
|
+
3. verify the real story/scene, tension, and reader value are visible early
|
|
96
|
+
4. tighten the hook
|
|
97
|
+
5. simplify abstract phrasing
|
|
98
|
+
6. replace generic language with concrete words only when supported
|
|
99
|
+
7. preserve the user's actual story and point
|
|
100
|
+
8. remove AI tells
|
|
101
|
+
9. re-check LinkedIn preview fit after edits
|
|
102
|
+
|
|
103
|
+
## Premise Value Audit
|
|
104
|
+
|
|
105
|
+
Before a draft can be `ready`, validate that the post is valuable, not just
|
|
106
|
+
well wrapped.
|
|
107
|
+
|
|
108
|
+
Record:
|
|
109
|
+
|
|
110
|
+
- `premise`: the selected premise in one sentence
|
|
111
|
+
- `realStoryOrScene`: the concrete scene, observation, or pattern used
|
|
112
|
+
- `targetReader`: who should care
|
|
113
|
+
- `commonBelief`: the belief the post argues against
|
|
114
|
+
- `contrarianTruth`: the sharper belief the post offers
|
|
115
|
+
- `visibleTension`: the uncomfortable gap or cost
|
|
116
|
+
- `readerValue`: what the reader learns, sees differently, or can do
|
|
117
|
+
- `proofAvailable`: source-backed proof used
|
|
118
|
+
- `proofMissing`: claims intentionally avoided or requiring user input
|
|
119
|
+
- `premiseQualityGates`: pass/fail for `specific_scene_or_pattern`,
|
|
120
|
+
`clear_reader`, `visible_tension`, `reader_value`, `credible_speaker`,
|
|
121
|
+
`proof_safety`, and `market_heat`
|
|
122
|
+
- `bodyOutline`: how the body delivers the premise before prose
|
|
123
|
+
|
|
124
|
+
If the draft has no specific scene or observed pattern, no visible tension, or
|
|
125
|
+
no reader value beyond "this is interesting," save as `needs_revision`. Do not
|
|
126
|
+
mark it `ready` because the hook passes preview limits.
|
|
127
|
+
|
|
128
|
+
## Market Belief Audit
|
|
129
|
+
|
|
130
|
+
Before a draft can be `ready`, validate that it is not merely an internally
|
|
131
|
+
coherent idea. It must be anchored to the saved research's market belief map.
|
|
132
|
+
|
|
133
|
+
Record:
|
|
134
|
+
|
|
135
|
+
- `resonatingIdea`: the current-space idea this draft enters
|
|
136
|
+
- `implicitBelief`: the belief the audience likely already holds
|
|
137
|
+
- `audienceWant`: what the audience wants permission, leverage, proof, or a new
|
|
138
|
+
category for
|
|
139
|
+
- `audienceResentmentOrFear`: what frustration or risk gives the post tension
|
|
140
|
+
- `selectedControversy`: the claim the post is testing
|
|
141
|
+
- `credibleWhyUs`: why the user can credibly say this from raw idea, memory,
|
|
142
|
+
story, proof, or product mechanism
|
|
143
|
+
- `engagementReason`: why someone would react, comment, repost, or argue
|
|
144
|
+
- `unsupportedHypeRemoved`: unsupported claims removed during finalizer
|
|
145
|
+
|
|
146
|
+
If `selectedControversy` is missing, if the audience belief is only a generic
|
|
147
|
+
label like "founders want growth," or if `credibleWhyUs` depends on borrowed
|
|
148
|
+
proof from another creator, save as `needs_revision`.
|
|
54
149
|
|
|
55
150
|
## LinkedIn Preview Audit
|
|
56
151
|
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Premise Development
|
|
2
|
+
|
|
3
|
+
A strong post is not an idea with a better hook. A strong post is a valuable
|
|
4
|
+
premise wrapped in a sharp opening.
|
|
5
|
+
|
|
6
|
+
Use this stage after market/hook research and before hook candidates. Do not
|
|
7
|
+
generate hook candidates until at least one `Premise Card` exists.
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Turn the raw idea into a real story, observed tension, or useful argument that a
|
|
12
|
+
specific reader would care about.
|
|
13
|
+
|
|
14
|
+
The premise must answer:
|
|
15
|
+
|
|
16
|
+
- who this is for
|
|
17
|
+
- what real scene, observation, or pattern created the idea
|
|
18
|
+
- what tension makes it worth reading
|
|
19
|
+
- what common belief it argues against
|
|
20
|
+
- what hidden truth or mechanism it reveals
|
|
21
|
+
- what value the reader gets
|
|
22
|
+
- why now
|
|
23
|
+
- why this user can credibly say it
|
|
24
|
+
- what proof is available and what proof is missing
|
|
25
|
+
|
|
26
|
+
If the premise has no real scene, no tension, and no reader value, stop before
|
|
27
|
+
drafting. Ask for the missing story or save only a `needs_revision` premise
|
|
28
|
+
artifact. Do not compensate with clever hooks.
|
|
29
|
+
|
|
30
|
+
## Real Story / Scene Search
|
|
31
|
+
|
|
32
|
+
Before writing premise cards, search the available source material:
|
|
33
|
+
|
|
34
|
+
- raw idea text
|
|
35
|
+
- voice memo or transcript if provided
|
|
36
|
+
- `core/story-bank.md`
|
|
37
|
+
- `core/answer-bank.md`
|
|
38
|
+
- `core/proof-ledger.md`
|
|
39
|
+
- `core/wins-ledger.md`
|
|
40
|
+
- approved references and gold standards
|
|
41
|
+
- current-session user corrections or rejections
|
|
42
|
+
|
|
43
|
+
Look for:
|
|
44
|
+
|
|
45
|
+
- a moment: "I saw X", "a founder said Y", "I opened Z and noticed..."
|
|
46
|
+
- a contradiction: the user wanted one thing but the workflow rewarded another
|
|
47
|
+
- a cost: time, attention, trust, missed learning, reputation, money
|
|
48
|
+
- a before/after: what changed in the user's belief
|
|
49
|
+
- a specific object: Slack note, customer call, campaign table, reply, list,
|
|
50
|
+
demo, failed draft, stale idea, messy workflow
|
|
51
|
+
|
|
52
|
+
If no real story is present, use an observed pattern only if it is traceable to
|
|
53
|
+
the raw source or memory. Mark the gap in the premise card. Do not fabricate a
|
|
54
|
+
customer, call, outcome, date, metric, or private scene.
|
|
55
|
+
|
|
56
|
+
## Premise Cards
|
|
57
|
+
|
|
58
|
+
Generate 3-5 premise cards before hooks. Each card must use this shape:
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
Premise Card
|
|
62
|
+
|
|
63
|
+
premise:
|
|
64
|
+
<one-sentence argument>
|
|
65
|
+
|
|
66
|
+
real story / scene:
|
|
67
|
+
<specific moment, observation, or pattern from source/memory>
|
|
68
|
+
|
|
69
|
+
target reader:
|
|
70
|
+
<who should care>
|
|
71
|
+
|
|
72
|
+
common belief:
|
|
73
|
+
<what the reader or market usually believes>
|
|
74
|
+
|
|
75
|
+
contrarian truth:
|
|
76
|
+
<what this post argues instead>
|
|
77
|
+
|
|
78
|
+
tension:
|
|
79
|
+
<why this is uncomfortable, costly, or worth arguing about>
|
|
80
|
+
|
|
81
|
+
reader value:
|
|
82
|
+
<what the reader learns, sees differently, or can do after reading>
|
|
83
|
+
|
|
84
|
+
why now / market heat:
|
|
85
|
+
<what current research says is resonating>
|
|
86
|
+
|
|
87
|
+
credible why-us:
|
|
88
|
+
<why this user can say it from source, memory, proof, or product mechanism>
|
|
89
|
+
|
|
90
|
+
proof available:
|
|
91
|
+
<specific usable proof or source>
|
|
92
|
+
|
|
93
|
+
proof missing:
|
|
94
|
+
<claims that cannot be made yet>
|
|
95
|
+
|
|
96
|
+
best frame:
|
|
97
|
+
story | contrarian take | teardown | founder confession | future thesis | lesson
|
|
98
|
+
|
|
99
|
+
hook territories:
|
|
100
|
+
- <territory 1>
|
|
101
|
+
- <territory 2>
|
|
102
|
+
- <territory 3>
|
|
103
|
+
|
|
104
|
+
risk:
|
|
105
|
+
<why this premise might still be weak>
|
|
106
|
+
|
|
107
|
+
score:
|
|
108
|
+
<1-100 with short reason>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Premise Quality Gate
|
|
112
|
+
|
|
113
|
+
A premise can move to hook generation only when it passes all of these:
|
|
114
|
+
|
|
115
|
+
- `specific_scene_or_pattern`: pass
|
|
116
|
+
- `clear_reader`: pass
|
|
117
|
+
- `visible_tension`: pass
|
|
118
|
+
- `reader_value`: pass
|
|
119
|
+
- `credible_speaker`: pass
|
|
120
|
+
- `proof_safety`: pass
|
|
121
|
+
- `market_heat`: pass or explained
|
|
122
|
+
|
|
123
|
+
If any gate fails:
|
|
124
|
+
|
|
125
|
+
- in research checkpoint mode, show the cards and ask for the missing story or
|
|
126
|
+
direction
|
|
127
|
+
- in immediate draft mode, save the draft as `needs_revision`, not `ready`
|
|
128
|
+
- never mark a draft `ready` because the hook is clever
|
|
129
|
+
|
|
130
|
+
## Hook Relationship
|
|
131
|
+
|
|
132
|
+
Hooks are generated from the selected premise, not from the raw idea alone.
|
|
133
|
+
|
|
134
|
+
For each hook candidate, include:
|
|
135
|
+
|
|
136
|
+
- selected premise ID or title
|
|
137
|
+
- which tension it opens
|
|
138
|
+
- which reader value it implies
|
|
139
|
+
- whether the real scene appears in the first screen or shortly after
|
|
140
|
+
|
|
141
|
+
Reject hooks that are accurate but do not reveal the premise's tension or value.
|
|
142
|
+
|
|
143
|
+
## Body Relationship
|
|
144
|
+
|
|
145
|
+
Before drafting prose, create a short body outline for the selected premise:
|
|
146
|
+
|
|
147
|
+
```text
|
|
148
|
+
body outline:
|
|
149
|
+
1. hook stack opens the tension
|
|
150
|
+
2. real scene or pattern makes it concrete
|
|
151
|
+
3. common belief gets named
|
|
152
|
+
4. contrarian truth lands
|
|
153
|
+
5. mechanism explains why
|
|
154
|
+
6. reader value becomes clear
|
|
155
|
+
7. close returns to the premise without summarizing
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
If this outline cannot be filled without inventing proof, return to premise
|
|
159
|
+
development.
|