@sellable/mcp 0.1.17 → 0.1.19
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
CHANGED
|
@@ -83,14 +83,14 @@ The token is provided when you generate it. Use `list_workspaces` +
|
|
|
83
83
|
For customer/package installs, use the public installer:
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
npx -y @sellable/install@0.1.
|
|
86
|
+
npx -y @sellable/install@0.1.19 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
If you already have `~/.sellable/config.json`, rerun/verify without rewriting
|
|
90
90
|
auth:
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
npx -y @sellable/install@0.1.
|
|
93
|
+
npx -y @sellable/install@0.1.19 --host codex
|
|
94
94
|
sellable --verify-only --host codex
|
|
95
95
|
```
|
|
96
96
|
|
package/package.json
CHANGED
|
@@ -280,9 +280,46 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
|
|
|
280
280
|
Do not mention internal artifact names, local folders, shell commands, or
|
|
281
281
|
persistence in this preamble.
|
|
282
282
|
|
|
283
|
-
-
|
|
283
|
+
- Before asking for brief approval, render the actual readable brief in the chat.
|
|
284
|
+
Do not ask the user to approve a one-paragraph direction, a risk note, or a
|
|
285
|
+
hidden artifact they cannot inspect. The user must be able to read what they
|
|
286
|
+
are approving without opening files. Include these sections:
|
|
287
|
+
|
|
288
|
+
```text
|
|
289
|
+
Campaign brief
|
|
290
|
+
|
|
291
|
+
Who we are targeting:
|
|
292
|
+
...
|
|
293
|
+
|
|
294
|
+
Why they should care:
|
|
295
|
+
...
|
|
296
|
+
|
|
297
|
+
Offer / CTA:
|
|
298
|
+
...
|
|
299
|
+
|
|
300
|
+
Proof to use:
|
|
301
|
+
...
|
|
302
|
+
|
|
303
|
+
Lead source hypothesis:
|
|
304
|
+
...
|
|
305
|
+
|
|
306
|
+
Message angle:
|
|
307
|
+
...
|
|
308
|
+
|
|
309
|
+
Risks / assumptions:
|
|
310
|
+
...
|
|
311
|
+
|
|
312
|
+
What happens after approval:
|
|
313
|
+
I’ll find good-fit LinkedIn leads, show you the source decision and sample, then
|
|
314
|
+
draft the first message for review before anything goes live.
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
After rendering that brief, ask for brief approval when there is a real
|
|
284
318
|
strategic choice or the user has not already made the direction obvious. The
|
|
285
319
|
user-facing choice should be approve/revise language, not "looks good".
|
|
320
|
+
Approval options should refer to what the user just read, e.g. `Approve this
|
|
321
|
+
brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
|
|
322
|
+
|
|
286
323
|
- After the brief is approved or auto-confirmed, show the next progress line:
|
|
287
324
|
`Cool. Now I'm going to find people who are both a good fit and likely to
|
|
288
325
|
reply on LinkedIn. I'll compare source paths by expected volume, likely
|
|
@@ -307,6 +344,7 @@ should test for this campaign. Those can run in parallel and usually take
|
|
|
307
344
|
because the brief becomes the source of truth for the leads and messages. I’ll
|
|
308
345
|
show you the draft next so you can approve it or change it.
|
|
309
346
|
```
|
|
347
|
+
|
|
310
348
|
- In hosted/rehearsal runs, `Bash` is only for safe local draft-directory
|
|
311
349
|
housekeeping before approval: `mkdir`, `ls`, `find`, `test`, `pwd`, `echo`,
|
|
312
350
|
`cat`, or copying `brief-v1.md` to `brief.md` inside the repo. Do not use
|
|
@@ -480,6 +518,17 @@ Required behavior:
|
|
|
480
518
|
keyword lanes; it does not mean 492 prospects. The source decision must name
|
|
481
519
|
the actual posts we would use, show why they won, and estimate usable engagers
|
|
482
520
|
from those posts after headline/sample filtering
|
|
521
|
+
- user-facing source logic must use numbers, not vibes. Never write a percentage
|
|
522
|
+
such as `73% match` without the numerator, denominator, and sample basis, e.g.
|
|
523
|
+
`8 of 11 sampled engagers fit the ICP (73%)`. If the sample is small, say it is
|
|
524
|
+
directional. If an estimate depends on assumptions, show the math: `5 selected
|
|
525
|
+
posts x ~40-80 reachable engagers/post x 25-40% expected fit = ~50-160 likely
|
|
526
|
+
usable leads`.
|
|
527
|
+
- source progress updates should expose the confidence-building numbers as soon
|
|
528
|
+
as they exist: keyword lanes searched, timeframe used, post results by lane,
|
|
529
|
+
finalist posts reviewed, engagers fetched, sampled engagers, sampled fits,
|
|
530
|
+
estimated usable leads, and what is still unknown. Do not wait until the final
|
|
531
|
+
approval packet to show those numbers.
|
|
483
532
|
- Signals source decisions should prefer fresh posts. Default to posts from the
|
|
484
533
|
last 30 days, prefer the last 7-14 days when quality is comparable, and call
|
|
485
534
|
out any older post as a deliberate tradeoff. Do not hide post age inside the
|
|
@@ -508,12 +557,14 @@ Required behavior:
|
|
|
508
557
|
- validation status: `confirmed`, `rejected`, or `unclear`
|
|
509
558
|
- confidence
|
|
510
559
|
- provider path used
|
|
560
|
+
- search lanes tested, with keyword/filter names and the timeframe used
|
|
561
|
+
- post/result counts by lane for discovery sources
|
|
511
562
|
- supplied source type when applicable (`normal-discovery`,
|
|
512
563
|
`supplied-linkedin-profiles`, `supplied-domains`, or `existing-lead-list`)
|
|
513
564
|
- row/domain counts, invalid counts, duplicate counts, and sample method for
|
|
514
565
|
supplied sources
|
|
515
566
|
- preview count
|
|
516
|
-
- ICP match rate
|
|
567
|
+
- ICP match rate with numerator/denominator and sample basis; never percent-only
|
|
517
568
|
- volume comparison
|
|
518
569
|
- expected LinkedIn funnel: likely connection acceptance range, likely reply
|
|
519
570
|
range, and whether the estimate is sample-backed, historical, founder-supplied,
|
|
@@ -523,6 +574,11 @@ Required behavior:
|
|
|
523
574
|
sampled engager count per selected post, sampled fit count per selected post,
|
|
524
575
|
estimated usable engagers per selected post, and why each selected post is
|
|
525
576
|
better than discarded posts
|
|
577
|
+
- for Signals-first paths: total raw post results by lane, number of finalist
|
|
578
|
+
posts reviewed, number of selected posts, total engagers fetched, deduped
|
|
579
|
+
sampled people count, sampled fit count, and the estimated likely usable people
|
|
580
|
+
range. Explicitly distinguish `posts found`, `engagers sampled`, and `usable
|
|
581
|
+
people estimated`.
|
|
526
582
|
- source decision: best path, why it won, pros, cons/tradeoffs, and discarded
|
|
527
583
|
source paths with the reason each lost
|
|
528
584
|
- repeated false-positive patterns
|
|
@@ -534,6 +590,7 @@ For normal LinkedIn discovery, `lead-review.md` must include these
|
|
|
534
590
|
customer-visible sections with literal headings:
|
|
535
591
|
|
|
536
592
|
- `## Source Decision`
|
|
593
|
+
- `## Evidence Snapshot`
|
|
537
594
|
- `## Selected Signal Posts` for Signals-first campaigns
|
|
538
595
|
- `## Expected LinkedIn Funnel`
|
|
539
596
|
- `## Sample Leads` for Signals-first campaigns
|
|
@@ -554,6 +611,17 @@ table with one row per selected or finalist post:
|
|
|
554
611
|
- estimated usable leads
|
|
555
612
|
- why use / why discard
|
|
556
613
|
|
|
614
|
+
`## Evidence Snapshot` must include a compact numbers-first table:
|
|
615
|
+
|
|
616
|
+
- source lane / keyword or filter
|
|
617
|
+
- timeframe searched
|
|
618
|
+
- raw results found
|
|
619
|
+
- finalist posts or preview rows reviewed
|
|
620
|
+
- sampled people
|
|
621
|
+
- sampled fits, shown as `n/N (%)`
|
|
622
|
+
- estimated usable people
|
|
623
|
+
- confidence note (`sample-backed`, `directional`, or `needs more sample`)
|
|
624
|
+
|
|
557
625
|
For Signals-first campaigns, `## Sample Leads` must group representative sample
|
|
558
626
|
rows by source post when possible, so the user can see not just that the search
|
|
559
627
|
found posts, but which posts produce believable prospects.
|
|
@@ -565,10 +633,10 @@ directional range and label it `directional`, not definitive.
|
|
|
565
633
|
|
|
566
634
|
When showing `lead-review.md` to the user, render the customer-visible sections
|
|
567
635
|
inline. Do not compress it to a short summary or artifact links only. The
|
|
568
|
-
visible response must include `## Source Decision`, `##
|
|
569
|
-
Funnel`, `## Pros`, `## Tradeoffs`, and `## Discarded
|
|
570
|
-
Signals-first campaigns it must also include `## Selected Signal
|
|
571
|
-
`## Sample Leads`.
|
|
636
|
+
visible response must include `## Source Decision`, `## Evidence Snapshot`,
|
|
637
|
+
`## Expected LinkedIn Funnel`, `## Pros`, `## Tradeoffs`, and `## Discarded
|
|
638
|
+
Paths`. For Signals-first campaigns it must also include `## Selected Signal
|
|
639
|
+
Posts` and `## Sample Leads`.
|
|
572
640
|
|
|
573
641
|
For supplied profile CSVs and existing lead lists, `lead-review.md` must not
|
|
574
642
|
describe a generic TAM estimate or pretend the rows came from Sales Nav/Prospeo
|
|
@@ -55,6 +55,10 @@ turn anchored to that:
|
|
|
55
55
|
8. Ask for approval.
|
|
56
56
|
9. Create the campaign.
|
|
57
57
|
|
|
58
|
+
Approvals only feel safe when the user can see what they are approving. Before
|
|
59
|
+
any approve/revise question, show the relevant decision in plain language. For a
|
|
60
|
+
brief approval, render the brief itself, not just a direction summary.
|
|
61
|
+
|
|
58
62
|
## Progress Updates
|
|
59
63
|
|
|
60
64
|
Every customer-facing update should answer one of these:
|
|
@@ -64,6 +68,34 @@ Every customer-facing update should answer one of these:
|
|
|
64
68
|
- What will the user see next?
|
|
65
69
|
- What is protected until approval?
|
|
66
70
|
|
|
71
|
+
Before a brief approval, the user should see:
|
|
72
|
+
|
|
73
|
+
- who we are targeting
|
|
74
|
+
- why they should care
|
|
75
|
+
- the offer / CTA
|
|
76
|
+
- proof to use
|
|
77
|
+
- lead source hypothesis
|
|
78
|
+
- message angle
|
|
79
|
+
- risks / assumptions
|
|
80
|
+
- what happens after approval
|
|
81
|
+
|
|
82
|
+
For lead-source decisions, confidence comes from concrete counts. Do not say
|
|
83
|
+
"strong sample", "73% match", or "meaningful concentration" without showing the
|
|
84
|
+
sample size and what was counted. Prefer:
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
I searched 4 signal lanes over the last 30 days. The best 5 posts produced 62
|
|
88
|
+
sampled engagers; 31 looked like real ICP fits, so I’d treat this as directional
|
|
89
|
+
50% sample fit, not a guaranteed audience. That gives us roughly 150-300 likely
|
|
90
|
+
usable people if the remaining engagers behave similarly.
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Avoid:
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
The sample passed roughly 73% headline fit.
|
|
97
|
+
```
|
|
98
|
+
|
|
67
99
|
Good:
|
|
68
100
|
|
|
69
101
|
```text
|
|
@@ -213,10 +213,20 @@
|
|
|
213
213
|
{
|
|
214
214
|
"action": "render_brief_approval_checkpoint",
|
|
215
215
|
"requiredVisibleContent": [
|
|
216
|
+
"Campaign brief",
|
|
217
|
+
"Who we are targeting",
|
|
218
|
+
"Why they should care",
|
|
219
|
+
"Offer / CTA",
|
|
220
|
+
"Proof to use",
|
|
221
|
+
"Lead source hypothesis",
|
|
222
|
+
"Message angle",
|
|
223
|
+
"Risks / assumptions",
|
|
224
|
+
"What happens after approval",
|
|
216
225
|
"approve this brief",
|
|
217
226
|
"revise the brief",
|
|
218
227
|
"then I will find good-fit leads"
|
|
219
228
|
],
|
|
229
|
+
"minimumVisibleBriefDetail": "full_readable_brief_before_question",
|
|
220
230
|
"avoidQuestionWhenOnlyUsefulAnswerIs": "looks good"
|
|
221
231
|
},
|
|
222
232
|
{
|
|
@@ -267,6 +277,10 @@
|
|
|
267
277
|
"likely reply rate",
|
|
268
278
|
"signal quality",
|
|
269
279
|
"tradeoffs",
|
|
280
|
+
"search lanes",
|
|
281
|
+
"timeframe",
|
|
282
|
+
"sample size",
|
|
283
|
+
"estimated usable leads",
|
|
270
284
|
"source decision + sample",
|
|
271
285
|
"before anything goes live"
|
|
272
286
|
],
|
|
@@ -352,6 +366,7 @@
|
|
|
352
366
|
"artifact": "lead-review.md",
|
|
353
367
|
"renderInlineSections": [
|
|
354
368
|
"## Source Decision",
|
|
369
|
+
"## Evidence Snapshot",
|
|
355
370
|
"## Selected Signal Posts",
|
|
356
371
|
"## Expected LinkedIn Funnel",
|
|
357
372
|
"## Sample Leads",
|
|
@@ -367,9 +382,21 @@
|
|
|
367
382
|
"engagement or estimated engagers",
|
|
368
383
|
"sampled engagers",
|
|
369
384
|
"sampled fits",
|
|
385
|
+
"sampled fits as n/N",
|
|
370
386
|
"estimated usable leads",
|
|
371
387
|
"why use or discard"
|
|
372
388
|
],
|
|
389
|
+
"evidenceSnapshotRequiredFields": [
|
|
390
|
+
"source lane or keyword",
|
|
391
|
+
"timeframe searched",
|
|
392
|
+
"raw results found",
|
|
393
|
+
"finalist posts or preview rows reviewed",
|
|
394
|
+
"sampled people",
|
|
395
|
+
"sampled fits as n/N (%)",
|
|
396
|
+
"estimated usable people",
|
|
397
|
+
"confidence note"
|
|
398
|
+
],
|
|
399
|
+
"forbidPercentOnlyFitRates": true,
|
|
373
400
|
"doNotCompressToSummaryOnly": true,
|
|
374
401
|
"doNotRenderArtifactLinksOnly": true
|
|
375
402
|
},
|