@sellable/mcp 0.1.258 → 0.1.260
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.js +4 -1
- package/dist/tools/csv-dnc.d.ts +36 -0
- package/dist/tools/csv-dnc.js +94 -2
- package/dist/tools/engage-discovery.d.ts +21 -18
- package/dist/tools/engage-discovery.js +90 -112
- package/dist/tools/leads.d.ts +381 -21
- package/dist/tools/leads.js +219 -5
- package/dist/tools/registry.d.ts +213 -21
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +6 -0
- package/skills/create-campaign-v2/references/filter-leads.md +2 -0
- package/skills/create-campaign-v2/references/lead-validation-preview.md +2 -0
- package/skills/create-campaign-v2/references/step-13-import-leads.md +3 -1
- package/skills/create-post/SKILL.md +147 -120
- package/skills/create-post/references/gold-standard-post-pack.md +0 -11
- package/skills/create-post/references/hook-research-playbook.md +276 -311
- package/skills/create-post/references/post-file-contract.md +8 -16
- package/skills/create-post/references/post-validation.md +142 -211
- package/skills/create-post/references/premise-development.md +250 -5
- package/skills/find-leads/SKILL.md +6 -0
|
@@ -1,16 +1,42 @@
|
|
|
1
|
-
# Premise Development
|
|
1
|
+
# Premise Development V2
|
|
2
2
|
|
|
3
3
|
A strong post is not an idea with a better hook. A strong post is a valuable
|
|
4
4
|
premise wrapped in a sharp opening.
|
|
5
5
|
|
|
6
|
-
Use this stage after market/hook research and before hook candidates.
|
|
7
|
-
|
|
6
|
+
Use this stage after market/hook research and before hook candidates. V2 premise
|
|
7
|
+
development also consumes the source post templates from hook research:
|
|
8
|
+
post positioning breakdowns, viral-post outlines, hook-to-body promise maps, and
|
|
9
|
+
body expression inputs.
|
|
10
|
+
|
|
11
|
+
Do not generate hook candidates until at least one `Premise Card` exists and at
|
|
12
|
+
least one source template has either been selected or explicitly rejected as a
|
|
13
|
+
poor fit.
|
|
8
14
|
|
|
9
15
|
## Goal
|
|
10
16
|
|
|
11
17
|
Turn the raw idea into a real story, observed tension, or useful argument that a
|
|
12
18
|
specific reader would care about.
|
|
13
19
|
|
|
20
|
+
Use this post tension framework when evaluating whether the premise can hold
|
|
21
|
+
attention:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
Belief -> Contradiction -> Stakes -> Proof -> Mechanism -> Reframe -> Useful Move
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- `Belief`: what the reader already thinks or wants to be true
|
|
28
|
+
- `Contradiction`: what the source story reveals that does not fit the belief
|
|
29
|
+
- `Stakes`: what the reader loses if they keep believing the old version
|
|
30
|
+
- `Proof`: the scene, number, repeated pattern, or concrete artifact that makes
|
|
31
|
+
the contradiction credible
|
|
32
|
+
- `Mechanism`: why the thing actually works or fails
|
|
33
|
+
- `Reframe`: the sharper way to see the problem after the mechanism is clear
|
|
34
|
+
- `Useful Move`: what the reader can do, notice, stop doing, or test next
|
|
35
|
+
|
|
36
|
+
A post feels "edge of seat" when the hook creates a contradiction the target
|
|
37
|
+
reader cares about, the body delays the answer only while adding proof, and each
|
|
38
|
+
beat either raises tension or repays tension. If a beat does neither, cut it.
|
|
39
|
+
|
|
14
40
|
The premise must answer:
|
|
15
41
|
|
|
16
42
|
- who this is for
|
|
@@ -22,6 +48,8 @@ The premise must answer:
|
|
|
22
48
|
- why now
|
|
23
49
|
- why this user can credibly say it
|
|
24
50
|
- what proof is available and what proof is missing
|
|
51
|
+
- which source template, if any, should shape the narrative
|
|
52
|
+
- which positioning sequence the user's post should follow
|
|
25
53
|
|
|
26
54
|
If the premise has no real scene, no tension, and no reader value, stop before
|
|
27
55
|
drafting. Ask for the missing story or save only a `needs_revision` premise
|
|
@@ -96,11 +124,23 @@ proof missing:
|
|
|
96
124
|
best frame:
|
|
97
125
|
story | contrarian take | teardown | founder confession | future thesis | lesson
|
|
98
126
|
|
|
127
|
+
source template fit:
|
|
128
|
+
<selected source template name or none>
|
|
129
|
+
|
|
130
|
+
positioning sequence to test:
|
|
131
|
+
<Category -> Category -> Category -> ...>
|
|
132
|
+
|
|
133
|
+
viral outline to adapt:
|
|
134
|
+
<beat names from selected source template, rewritten for this user's story>
|
|
135
|
+
|
|
99
136
|
hook territories:
|
|
100
137
|
- <territory 1>
|
|
101
138
|
- <territory 2>
|
|
102
139
|
- <territory 3>
|
|
103
140
|
|
|
141
|
+
body expression inputs:
|
|
142
|
+
- <line shape, proof slot, story beat, mechanism explanation, or closing move>
|
|
143
|
+
|
|
104
144
|
risk:
|
|
105
145
|
<why this premise might still be weak>
|
|
106
146
|
|
|
@@ -108,6 +148,204 @@ score:
|
|
|
108
148
|
<1-100 with short reason>
|
|
109
149
|
```
|
|
110
150
|
|
|
151
|
+
## Template-Aware Premise Selection
|
|
152
|
+
|
|
153
|
+
Do not treat source templates as decoration. A source template is useful only
|
|
154
|
+
when its narrative engine matches something the user can credibly say.
|
|
155
|
+
|
|
156
|
+
For each premise card, compare it against the selected keeper templates from
|
|
157
|
+
hook research:
|
|
158
|
+
|
|
159
|
+
```text
|
|
160
|
+
Template fit check:
|
|
161
|
+
premise:
|
|
162
|
+
source_template:
|
|
163
|
+
template narrative engine:
|
|
164
|
+
matching user story/proof:
|
|
165
|
+
missing user story/proof:
|
|
166
|
+
positioning sequence fit:
|
|
167
|
+
hook promise fit:
|
|
168
|
+
body payoff fit:
|
|
169
|
+
voice fit:
|
|
170
|
+
borrow:
|
|
171
|
+
do not borrow:
|
|
172
|
+
fit verdict: strong | partial | weak | reject
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Reject a template when it depends on source-specific proof, celebrity reach,
|
|
176
|
+
personal context the user does not have, or a body structure that would force a
|
|
177
|
+
fake story. Prefer a less viral template that fits the user's real proof over a
|
|
178
|
+
more viral template that requires borrowed authority.
|
|
179
|
+
|
|
180
|
+
## Viral Narrative Structure
|
|
181
|
+
|
|
182
|
+
Once a premise and source template are selected, create the user's viral-post
|
|
183
|
+
outline before writing body prose.
|
|
184
|
+
|
|
185
|
+
Use this format:
|
|
186
|
+
|
|
187
|
+
```text
|
|
188
|
+
User viral-post outline:
|
|
189
|
+
selected_premise:
|
|
190
|
+
selected_source_template:
|
|
191
|
+
hook_promise:
|
|
192
|
+
see_more_tension:
|
|
193
|
+
body_payoff:
|
|
194
|
+
positioning_sequence:
|
|
195
|
+
<Category> -> <Category> -> <Category> -> ...
|
|
196
|
+
|
|
197
|
+
beats:
|
|
198
|
+
1.
|
|
199
|
+
beat_name:
|
|
200
|
+
narrative_job:
|
|
201
|
+
user_story_or_proof:
|
|
202
|
+
positioning_categories:
|
|
203
|
+
reader_state_before:
|
|
204
|
+
reader_state_after:
|
|
205
|
+
line_shape_to_test:
|
|
206
|
+
proof_safety:
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
The outline should preserve the source template's useful narrative jobs while
|
|
210
|
+
replacing all source-specific proof, scenes, status, jokes, and examples with
|
|
211
|
+
the user's material.
|
|
212
|
+
|
|
213
|
+
## Body Expression Lab
|
|
214
|
+
|
|
215
|
+
After the selected hook and viral-post outline exist, generate body expression
|
|
216
|
+
candidates before writing the final draft. This is where the system tests
|
|
217
|
+
different ways to express the same structure.
|
|
218
|
+
|
|
219
|
+
Generate 5-8 body expression candidates. Every candidate must use:
|
|
220
|
+
|
|
221
|
+
- the same selected hook or hook territory
|
|
222
|
+
- the same selected premise
|
|
223
|
+
- the same viral-post outline
|
|
224
|
+
- the same positioning sequence
|
|
225
|
+
- only user-sourced story and proof
|
|
226
|
+
|
|
227
|
+
Each candidate should vary the expression, not the facts:
|
|
228
|
+
|
|
229
|
+
```text
|
|
230
|
+
Body expression candidate:
|
|
231
|
+
name:
|
|
232
|
+
expression_strategy:
|
|
233
|
+
opening_after_hook:
|
|
234
|
+
beat_lines:
|
|
235
|
+
1. <line or paragraph>
|
|
236
|
+
2. <line or paragraph>
|
|
237
|
+
positioning_sequence_coverage:
|
|
238
|
+
hook_promise_repaid:
|
|
239
|
+
best_lines:
|
|
240
|
+
weak_lines:
|
|
241
|
+
proof_risk:
|
|
242
|
+
voice_risk:
|
|
243
|
+
score:
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Useful expression strategies:
|
|
247
|
+
|
|
248
|
+
- plain field guide
|
|
249
|
+
- founder confession
|
|
250
|
+
- proof-first roadmap
|
|
251
|
+
- teardown then replacement
|
|
252
|
+
- scene then lesson
|
|
253
|
+
- enemy naming then mechanism
|
|
254
|
+
- compact build-in-public note
|
|
255
|
+
|
|
256
|
+
Do not create candidates by changing the claim. Create candidates by changing
|
|
257
|
+
line order, amount of scene, proof placement, rhythm, and how the mechanism is
|
|
258
|
+
explained.
|
|
259
|
+
|
|
260
|
+
## Combine Pass
|
|
261
|
+
|
|
262
|
+
After body expression candidates are scored, combine the best parts into one
|
|
263
|
+
draft outline before prose.
|
|
264
|
+
|
|
265
|
+
Record:
|
|
266
|
+
|
|
267
|
+
```text
|
|
268
|
+
Combined body plan:
|
|
269
|
+
selected_hook:
|
|
270
|
+
selected_expression_parts:
|
|
271
|
+
lines_kept:
|
|
272
|
+
lines_rewritten:
|
|
273
|
+
lines_cut:
|
|
274
|
+
positioning_sequence_final:
|
|
275
|
+
hook_promise_repayment:
|
|
276
|
+
proof_gaps_remaining:
|
|
277
|
+
why_this_combination_wins:
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
If no candidate repays the hook promise with real user proof, return to premise
|
|
281
|
+
development or ask the user for the missing story. Do not save a `ready` draft.
|
|
282
|
+
|
|
283
|
+
## Pre-Draft Structure Brief
|
|
284
|
+
|
|
285
|
+
Before final prose, produce a compact `Pre-Draft Structure Brief`. This is the
|
|
286
|
+
user-visible outline that lets the user confirm the post is teaching the right
|
|
287
|
+
operating lesson before the system writes body copy.
|
|
288
|
+
|
|
289
|
+
Use this format:
|
|
290
|
+
|
|
291
|
+
```text
|
|
292
|
+
Pre-Draft Structure Brief
|
|
293
|
+
hook:
|
|
294
|
+
<selected hook with rendered mobile preview verdict>
|
|
295
|
+
|
|
296
|
+
thesis:
|
|
297
|
+
<one sentence the post will defend>
|
|
298
|
+
|
|
299
|
+
reader being taught:
|
|
300
|
+
<specific audience, not "founders" unless narrowed>
|
|
301
|
+
|
|
302
|
+
why this reader cares now:
|
|
303
|
+
<timely pain, belief, or decision>
|
|
304
|
+
|
|
305
|
+
core equation or mechanism:
|
|
306
|
+
<the operating model the post teaches>
|
|
307
|
+
|
|
308
|
+
key definitions:
|
|
309
|
+
- <term>: <plain definition + concrete examples>
|
|
310
|
+
|
|
311
|
+
proof claims:
|
|
312
|
+
- <claim>: <source + public-safety status>
|
|
313
|
+
|
|
314
|
+
source template or no-template rationale:
|
|
315
|
+
<template name or why the post should use a plain field-guide structure>
|
|
316
|
+
|
|
317
|
+
mobile scan path:
|
|
318
|
+
<what a skimmer understands from hook, separators, labels, numbers, and close>
|
|
319
|
+
|
|
320
|
+
section outline:
|
|
321
|
+
1. <section job>
|
|
322
|
+
2. <section job>
|
|
323
|
+
3. <section job>
|
|
324
|
+
|
|
325
|
+
body promise after see more:
|
|
326
|
+
<what the body must repay immediately>
|
|
327
|
+
|
|
328
|
+
concrete examples to include:
|
|
329
|
+
- <example, number, source, or phrasing>
|
|
330
|
+
|
|
331
|
+
abstractions to remove:
|
|
332
|
+
- <abstract phrase> -> <concrete replacement>
|
|
333
|
+
|
|
334
|
+
draft risks:
|
|
335
|
+
- <risk and how to avoid it>
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
Quality gate:
|
|
339
|
+
|
|
340
|
+
- The brief must explain the post before the draft exists.
|
|
341
|
+
- The brief must be useful to a reader who only scans the finished post.
|
|
342
|
+
- The brief must include proof claims and risk before prose.
|
|
343
|
+
- The brief must define any operating terms that could be misunderstood.
|
|
344
|
+
- If the post is a field guide, the section outline must show the hierarchy
|
|
345
|
+
before prose, such as best-to-worst, highest-to-lowest intent, or
|
|
346
|
+
source-to-outcome.
|
|
347
|
+
- If the brief cannot be made concrete, return to premise development.
|
|
348
|
+
|
|
111
349
|
## Premise Quality Gate
|
|
112
350
|
|
|
113
351
|
A premise can move to hook generation only when it passes all of these:
|
|
@@ -119,6 +357,9 @@ A premise can move to hook generation only when it passes all of these:
|
|
|
119
357
|
- `credible_speaker`: pass
|
|
120
358
|
- `proof_safety`: pass
|
|
121
359
|
- `market_heat`: pass or explained
|
|
360
|
+
- `template_fit`: pass or explicitly no-template
|
|
361
|
+
- `hook_to_body_repayment`: pass
|
|
362
|
+
- `pre_draft_structure`: pass
|
|
122
363
|
|
|
123
364
|
If any gate fails:
|
|
124
365
|
|
|
@@ -137,8 +378,11 @@ For each hook candidate, include:
|
|
|
137
378
|
- which tension it opens
|
|
138
379
|
- which reader value it implies
|
|
139
380
|
- whether the real scene appears in the first screen or shortly after
|
|
381
|
+
- source template or no-template rationale
|
|
382
|
+
- hook promise the body must repay
|
|
140
383
|
|
|
141
384
|
Reject hooks that are accurate but do not reveal the premise's tension or value.
|
|
385
|
+
Reject hooks that create a promise the selected viral-post outline cannot repay.
|
|
142
386
|
|
|
143
387
|
## Body Relationship
|
|
144
388
|
|
|
@@ -155,5 +399,6 @@ body outline:
|
|
|
155
399
|
7. close returns to the premise without summarizing
|
|
156
400
|
```
|
|
157
401
|
|
|
158
|
-
|
|
159
|
-
|
|
402
|
+
Replace this generic outline with the selected viral-post outline when a source
|
|
403
|
+
template is available. If the outline cannot be filled without inventing proof,
|
|
404
|
+
return to premise development.
|
|
@@ -90,6 +90,7 @@ should stay focused on source evidence.
|
|
|
90
90
|
- `mcp__sellable__search_prospeo`
|
|
91
91
|
- `mcp__sellable__search_prospeo_companies`
|
|
92
92
|
- `mcp__sellable__confirm_prospeo_company_accounts`
|
|
93
|
+
- `mcp__sellable__list_dnc_entries`
|
|
93
94
|
- `mcp__sellable__load_csv_dnc_entries`
|
|
94
95
|
- `mcp__sellable__load_csv_domains`
|
|
95
96
|
- `mcp__sellable__load_csv_linkedin_leads`
|
|
@@ -105,6 +106,9 @@ should stay focused on source evidence.
|
|
|
105
106
|
list after confirming the exact active workspace. Keep the mechanism to
|
|
106
107
|
Sellable DNC and `DNC Check`, not provider search work or Prospeo domain
|
|
107
108
|
filters.
|
|
109
|
+
- If the user asks to see the current DNC count, list names, or first page
|
|
110
|
+
before import, call `list_dnc_entries`. Report the active workspace name and
|
|
111
|
+
ID from the tool response before any DNC write.
|
|
108
112
|
- Do not infer sender identities from meeting attendance alone. Only treat someone as a sender when the source material explicitly identifies them as a sender or supplies their LinkedIn URL.
|
|
109
113
|
- Do not ask Layer 1 questions already answered by a transcript, ICP doc, or Layer 0 research.
|
|
110
114
|
- Do not include Apollo in the explorer set for this phase.
|
|
@@ -136,6 +140,8 @@ Execution flow:
|
|
|
136
140
|
DNC entries.
|
|
137
141
|
- Campaign creation already includes `DNC Check`, which checks domain/profile
|
|
138
142
|
before message generation.
|
|
143
|
+
- If the user wants the existing DNC count or first page first, call
|
|
144
|
+
`list_dnc_entries` before previewing the import.
|
|
139
145
|
3. If the user has a CSV of LinkedIn profile URLs on disk, call `load_csv_linkedin_leads` first.
|
|
140
146
|
- Preview, confirm, then review the resulting lead list before `confirm_lead_list`.
|
|
141
147
|
- Confirmed execution uploads the raw CSV file, starts the server-owned import job, and waits on lead-list readiness before returning.
|