@sellable/mcp 0.1.19 → 0.1.21
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.21 --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.21 --host codex
|
|
94
94
|
sellable --verify-only --host codex
|
|
95
95
|
```
|
|
96
96
|
|
package/package.json
CHANGED
|
@@ -120,6 +120,12 @@ Validated draft directory:
|
|
|
120
120
|
or safe launch. Do not say "persist", "local draft folder", "artifact",
|
|
121
121
|
"mkdir", "campaign thesis", or "same approved campaign thesis" in
|
|
122
122
|
customer-facing progress copy.
|
|
123
|
+
- Every approval gate must include artifact access after the readable inline
|
|
124
|
+
content. Show a short `Open artifacts:` line with clickable markdown links
|
|
125
|
+
using absolute paths when the host supports them, plus the plain path for CLI
|
|
126
|
+
users. Do this for brief approval, lead-source approval/review, message review,
|
|
127
|
+
and final approval packet. Do not use the links as a substitute for rendering
|
|
128
|
+
the content inline; links are for deeper inspection.
|
|
123
129
|
- Do not treat the active Sellable workspace as the campaign subject. The
|
|
124
130
|
workspace only tells you where the campaign will be saved. Before buyer, CTA,
|
|
125
131
|
proof, or source questions, identify two things:
|
|
@@ -319,6 +325,8 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
|
|
|
319
325
|
user-facing choice should be approve/revise language, not "looks good".
|
|
320
326
|
Approval options should refer to what the user just read, e.g. `Approve this
|
|
321
327
|
brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
|
|
328
|
+
Include `Open artifacts:` links to `brief-v1.md` and `brief.md` before the
|
|
329
|
+
approval question.
|
|
322
330
|
|
|
323
331
|
- After the brief is approved or auto-confirmed, show the next progress line:
|
|
324
332
|
`Cool. Now I'm going to find people who are both a good fit and likely to
|
|
@@ -522,8 +530,8 @@ Required behavior:
|
|
|
522
530
|
such as `73% match` without the numerator, denominator, and sample basis, e.g.
|
|
523
531
|
`8 of 11 sampled engagers fit the ICP (73%)`. If the sample is small, say it is
|
|
524
532
|
directional. If an estimate depends on assumptions, show the math: `5 selected
|
|
525
|
-
|
|
526
|
-
|
|
533
|
+
posts x ~40-80 reachable engagers/post x 25-40% expected fit = ~50-160 likely
|
|
534
|
+
usable leads`.
|
|
527
535
|
- source progress updates should expose the confidence-building numbers as soon
|
|
528
536
|
as they exist: keyword lanes searched, timeframe used, post results by lane,
|
|
529
537
|
finalist posts reviewed, engagers fetched, sampled engagers, sampled fits,
|
|
@@ -578,7 +586,7 @@ Required behavior:
|
|
|
578
586
|
posts reviewed, number of selected posts, total engagers fetched, deduped
|
|
579
587
|
sampled people count, sampled fit count, and the estimated likely usable people
|
|
580
588
|
range. Explicitly distinguish `posts found`, `engagers sampled`, and `usable
|
|
581
|
-
|
|
589
|
+
people estimated`.
|
|
582
590
|
- source decision: best path, why it won, pros, cons/tradeoffs, and discarded
|
|
583
591
|
source paths with the reason each lost
|
|
584
592
|
- repeated false-positive patterns
|
|
@@ -637,6 +645,8 @@ visible response must include `## Source Decision`, `## Evidence Snapshot`,
|
|
|
637
645
|
`## Expected LinkedIn Funnel`, `## Pros`, `## Tradeoffs`, and `## Discarded
|
|
638
646
|
Paths`. For Signals-first campaigns it must also include `## Selected Signal
|
|
639
647
|
Posts` and `## Sample Leads`.
|
|
648
|
+
Include `Open artifacts:` links to `lead-review.md` and `lead-sample.json`
|
|
649
|
+
before moving to filter/message drafting or asking for any source revision.
|
|
640
650
|
|
|
641
651
|
For supplied profile CSVs and existing lead lists, `lead-review.md` must not
|
|
642
652
|
describe a generic TAM estimate or pretend the rows came from Sales Nav/Prospeo
|
|
@@ -851,22 +861,35 @@ Orchestration requirements:
|
|
|
851
861
|
with `Status: message-review` as the first visible line. Do not put a
|
|
852
862
|
markdown heading, preface, or summary before that status line. This is a
|
|
853
863
|
customer checkpoint, not an audit report: show the approved campaign message
|
|
854
|
-
template first, then show
|
|
855
|
-
|
|
864
|
+
template first, then show one filled sample prospect version immediately after
|
|
865
|
+
it so the user can judge whether the tokens are being used correctly. Then
|
|
866
|
+
show rendered examples that prove the tokens fill well and can be omitted
|
|
867
|
+
cleanly when row data is weak. Keep the detailed
|
|
856
868
|
gold-standard/rule audit inside `message-validation.md`, not in the
|
|
857
869
|
user-facing review. The review must use this exact label shape so the gate can
|
|
858
|
-
be parsed: `Subject: ...`, `
|
|
859
|
-
`
|
|
860
|
-
`My take: ...`, `Suggested adjustment: ...`,
|
|
870
|
+
be parsed: `Subject: ...`, `Tokenized template: ...`, `Sample prospect fill:
|
|
871
|
+
...`, `Rendered examples: ...`, `Good token fill: ...`, `Good omit: ...`,
|
|
872
|
+
`Token notes: ...`, `My take: ...`, `Suggested adjustment: ...`,
|
|
861
873
|
`Question: approve-message or revise-messaging?`, `Recommendation:
|
|
862
874
|
approve-message|revise-messaging`.
|
|
875
|
+
- Never ask the message approval question until the full message review is
|
|
876
|
+
visible in the chat. A summary like `Message review is ready` or `the draft
|
|
877
|
+
avoids a generic pitch` is not enough. The user must see the actual subject,
|
|
878
|
+
the actual tokenized message template, one filled sample prospect version, at
|
|
879
|
+
least one good filled example, one good omit example, token notes, your take,
|
|
880
|
+
and the suggested adjustment before any `approve-message` /
|
|
881
|
+
`revise-messaging` question appears. If you catch yourself wanting to offer
|
|
882
|
+
`show me message` as a choice, stop: render the message review first, then ask
|
|
883
|
+
only `approve-message` or `revise-messaging`.
|
|
884
|
+
Include `Open artifacts:` links to `message-review.md` and
|
|
885
|
+
`message-validation.md` before the approval question.
|
|
863
886
|
- `My take:` and `Suggested adjustment:` are mandatory customer-facing decision
|
|
864
887
|
fields, not optional summary text. They must appear after `Token notes:` and
|
|
865
888
|
before the question in every rendered message review. They must each be
|
|
866
889
|
non-empty, specific to the current message, and useful for one last manual
|
|
867
890
|
feedback pass. Never render a message review that jumps straight from token
|
|
868
891
|
notes to `Question:` or `Recommendation:`.
|
|
869
|
-
- `
|
|
892
|
+
- `Tokenized template:` in `message-review.md` must be a tokenized template with supported
|
|
870
893
|
enriched-row tokens such as `{{first_name}}`, `{{company}}`,
|
|
871
894
|
`{{workflow_context}}`, `{{headline}}`, `{{source_post_topic}}`, or
|
|
872
895
|
`{{row_proof_note}}`. It must not be a one-row-only raw sample. It must
|
|
@@ -874,12 +897,20 @@ approve-message|revise-messaging`.
|
|
|
874
897
|
enriched rows can actually fill or safely omit. If you cannot produce a
|
|
875
898
|
tokenized template from supported enriched-row fields, stop with
|
|
876
899
|
`Recommendation: revise-messaging`.
|
|
900
|
+
- `Sample prospect fill:` must render the same template for one named sample
|
|
901
|
+
prospect from `lead-sample.json` or the selected row used in
|
|
902
|
+
`message-validation.md`. It must show the complete subject and body the
|
|
903
|
+
prospect would receive, plus a one-line `Token fill basis:` naming which row
|
|
904
|
+
fields filled each token. This is the user-facing proof that the template
|
|
905
|
+
works. Do not ask for approval if the user cannot compare the template to a
|
|
906
|
+
concrete filled message.
|
|
877
907
|
- `{{profile_signal}}` is never a supported customer-facing token. It is an
|
|
878
|
-
internal enrichment label and must not appear in `Subject:`, `
|
|
879
|
-
rendered examples, `Token notes:`,
|
|
880
|
-
`approval-packet.md`. If a
|
|
881
|
-
|
|
882
|
-
`{{workflow_context}}` or
|
|
908
|
+
internal enrichment label and must not appear in `Subject:`, `Tokenized
|
|
909
|
+
template:`, `Sample prospect fill:`, rendered examples, `Token notes:`,
|
|
910
|
+
`message-validation.md` selected copy, or `approval-packet.md`. If a
|
|
911
|
+
profile-derived signal matters, translate it into a buyer-readable derived
|
|
912
|
+
token with a clear fill rule, such as `{{workflow_context}}` or
|
|
913
|
+
`{{row_proof_note}}`; otherwise omit the line.
|
|
883
914
|
- `Rendered examples:` must include at least one `Good token fill:` rendered
|
|
884
915
|
message where the row has a clean signal and one `Good omit:` rendered message
|
|
885
916
|
where an optional token line is omitted instead of forced. Each example must
|
|
@@ -916,12 +947,12 @@ approve-message|revise-messaging`.
|
|
|
916
947
|
`thought this was relevant enough`, `seemed close
|
|
917
948
|
enough`, `{{profile_signal}}`, `profile signal`, `is why I thought this might
|
|
918
949
|
be relevant`, `Austin's`, a sender/founder name in the subject, a one-row raw
|
|
919
|
-
sample under `
|
|
950
|
+
sample under `Tokenized template:`, rendered examples without full copy, a
|
|
920
951
|
mail-merge-sounding tokenized opener, missing or empty `My take:`, missing or
|
|
921
952
|
empty `Suggested adjustment:`, `My take:` that only says `looks good`,
|
|
922
953
|
`strong`, or `approved`, `Suggested adjustment:` that only says `none`, or no
|
|
923
|
-
literal `{{...}}` token in `
|
|
924
|
-
Do not output
|
|
954
|
+
literal `{{...}}` token in `Tokenized template:`, revise the message before
|
|
955
|
+
showing it. Do not output
|
|
925
956
|
`Recommendation: approve-message` when any hard-fail preflight item is
|
|
926
957
|
present.
|
|
927
958
|
- `My take` must be 1-3 short bullets or sentences, focused on what a founder
|
|
@@ -981,6 +1012,9 @@ proof:`, `p.s. useful proof:`, `p.s. proof:`, or `p.s. social proof:`.
|
|
|
981
1012
|
summarize the customer checkpoint from `message-review.md` and preserve the
|
|
982
1013
|
same literal `My take:`, `Suggested adjustment:`, and `Recommendation:`
|
|
983
1014
|
labels.
|
|
1015
|
+
Include `Open artifacts:` links to `approval-packet.md`,
|
|
1016
|
+
`message-review.md`, `lead-review.md`, and `brief.md` before the commit-gate
|
|
1017
|
+
question.
|
|
984
1018
|
- if `message-validation.md` contains an extractable `Selected Winner`, use
|
|
985
1019
|
that exact winner as the `## Approved Message Template` in
|
|
986
1020
|
`approval-packet.md` and in the campaign brief passed to `create_campaign`.
|
|
@@ -1063,7 +1097,9 @@ Do not:
|
|
|
1063
1097
|
|
|
1064
1098
|
- `Status: message-review`
|
|
1065
1099
|
- `Subject:` using the approved tokenized A + B + C subject shape
|
|
1066
|
-
- `
|
|
1100
|
+
- `Tokenized template:` followed by the tokenized approved message template
|
|
1101
|
+
- `Sample prospect fill:` with one concrete sample prospect's complete rendered
|
|
1102
|
+
subject + body and a `Token fill basis:` line
|
|
1067
1103
|
- `Rendered examples:`
|
|
1068
1104
|
- `Good token fill:` with a complete concrete rendered subject + body
|
|
1069
1105
|
- `Good omit:` with a complete concrete rendered subject + body where optional
|
|
@@ -1197,11 +1233,13 @@ Anchor validation (block `approve` when empty):
|
|
|
1197
1233
|
`Pass Rate`, `Recommendation`, and `Implementation Details`
|
|
1198
1234
|
- `message-validation.md` has `Status: confirmed`, `Mode: DRY MODE (no DB
|
|
1199
1235
|
mutation)`, a `Selected Winner`, and a non-empty `Token Adherence Table`
|
|
1200
|
-
- `message-review.md` has `Status: message-review`, `Subject:`,
|
|
1201
|
-
with at least one literal `{{...}}` token,
|
|
1202
|
-
`
|
|
1203
|
-
|
|
1204
|
-
|
|
1236
|
+
- `message-review.md` has `Status: message-review`, `Subject:`,
|
|
1237
|
+
`Tokenized template:` with at least one literal `{{...}}` token,
|
|
1238
|
+
`Sample prospect fill:` with a complete rendered subject + body and
|
|
1239
|
+
`Token fill basis:`, `Rendered examples:`, `Good token fill:` with a complete
|
|
1240
|
+
rendered subject + body, `Good omit:` with a complete rendered subject + body,
|
|
1241
|
+
`Token notes:`, `My take:`, `Suggested adjustment:`, `Question:
|
|
1242
|
+
approve-message or revise-messaging?`, and
|
|
1205
1243
|
`Recommendation: approve-message`
|
|
1206
1244
|
- `message-review-decision.md` is exactly `approve-message`
|
|
1207
1245
|
|
|
@@ -59,6 +59,17 @@ Approvals only feel safe when the user can see what they are approving. Before
|
|
|
59
59
|
any approve/revise question, show the relevant decision in plain language. For a
|
|
60
60
|
brief approval, render the brief itself, not just a direction summary.
|
|
61
61
|
|
|
62
|
+
Every approval should also give the user a way to inspect the source artifact.
|
|
63
|
+
After the readable inline content, include an `Open artifacts:` line with links
|
|
64
|
+
or plain paths to the files behind the decision. The artifact links are a backup
|
|
65
|
+
for inspection, not a replacement for showing the content in chat.
|
|
66
|
+
|
|
67
|
+
This applies especially to message approvals. Never ask someone to approve a
|
|
68
|
+
message they cannot see. Show the subject, tokenized template, a filled sample
|
|
69
|
+
prospect version, omit example, token notes, your take, and suggested adjustment
|
|
70
|
+
first. The user should be able to compare "here is the template" against "here
|
|
71
|
+
is what one real prospect would receive" before approving.
|
|
72
|
+
|
|
62
73
|
## Progress Updates
|
|
63
74
|
|
|
64
75
|
Every customer-facing update should answer one of these:
|
|
@@ -227,6 +227,8 @@
|
|
|
227
227
|
"then I will find good-fit leads"
|
|
228
228
|
],
|
|
229
229
|
"minimumVisibleBriefDetail": "full_readable_brief_before_question",
|
|
230
|
+
"requiredArtifactLinks": ["brief-v1.md", "brief.md"],
|
|
231
|
+
"artifactLinkTiming": "before_approval_question",
|
|
230
232
|
"avoidQuestionWhenOnlyUsefulAnswerIs": "looks good"
|
|
231
233
|
},
|
|
232
234
|
{
|
|
@@ -397,6 +399,8 @@
|
|
|
397
399
|
"confidence note"
|
|
398
400
|
],
|
|
399
401
|
"forbidPercentOnlyFitRates": true,
|
|
402
|
+
"requiredArtifactLinks": ["lead-review.md", "lead-sample.json"],
|
|
403
|
+
"artifactLinkTiming": "before_next_step_or_revision_question",
|
|
400
404
|
"doNotCompressToSummaryOnly": true,
|
|
401
405
|
"doNotRenderArtifactLinksOnly": true
|
|
402
406
|
},
|
|
@@ -599,7 +603,8 @@
|
|
|
599
603
|
"requiredInlineMarker": "Status: message-review",
|
|
600
604
|
"panels": [
|
|
601
605
|
"subject",
|
|
602
|
-
"
|
|
606
|
+
"tokenized template",
|
|
607
|
+
"sample prospect fill",
|
|
603
608
|
"rendered examples",
|
|
604
609
|
"token notes",
|
|
605
610
|
"my take",
|
|
@@ -607,9 +612,17 @@
|
|
|
607
612
|
"question",
|
|
608
613
|
"recommendation"
|
|
609
614
|
],
|
|
615
|
+
"mustRenderInlineBeforeQuestion": true,
|
|
616
|
+
"minimumVisibleMessageDetail": "full_message_review_before_question",
|
|
617
|
+
"requiredArtifactLinks": [
|
|
618
|
+
"message-review.md",
|
|
619
|
+
"message-validation.md"
|
|
620
|
+
],
|
|
621
|
+
"artifactLinkTiming": "before_approval_question",
|
|
610
622
|
"requiredLabels": [
|
|
611
623
|
"Subject:",
|
|
612
|
-
"
|
|
624
|
+
"Tokenized template:",
|
|
625
|
+
"Sample prospect fill:",
|
|
613
626
|
"Rendered examples:",
|
|
614
627
|
"Good token fill:",
|
|
615
628
|
"Good omit:",
|
|
@@ -629,6 +642,7 @@
|
|
|
629
642
|
"no generic signal tokens",
|
|
630
643
|
"no bracketed or deferred row instructions",
|
|
631
644
|
"tokenized template with rendered examples",
|
|
645
|
+
"tokenized template plus filled sample prospect",
|
|
632
646
|
"complete rendered subject plus body examples",
|
|
633
647
|
"message-review hard-fail preflight",
|
|
634
648
|
"A + B + C subject quality",
|
|
@@ -644,6 +658,21 @@
|
|
|
644
658
|
{
|
|
645
659
|
"action": "ask_message_review_choice",
|
|
646
660
|
"choices": ["approve-message", "revise-messaging"],
|
|
661
|
+
"questionPrerequisiteVisibleLabels": [
|
|
662
|
+
"Status: message-review",
|
|
663
|
+
"Subject:",
|
|
664
|
+
"Tokenized template:",
|
|
665
|
+
"Sample prospect fill:",
|
|
666
|
+
"Rendered examples:",
|
|
667
|
+
"Good token fill:",
|
|
668
|
+
"Good omit:",
|
|
669
|
+
"Token notes:",
|
|
670
|
+
"My take:",
|
|
671
|
+
"Suggested adjustment:",
|
|
672
|
+
"Recommendation:"
|
|
673
|
+
],
|
|
674
|
+
"forbiddenWhenMissingVisibleMessage": true,
|
|
675
|
+
"doNotOfferShowMessageChoice": true,
|
|
647
676
|
"stopAfterQuestion": true
|
|
648
677
|
},
|
|
649
678
|
{
|
|
@@ -726,6 +755,13 @@
|
|
|
726
755
|
"messages",
|
|
727
756
|
"risks and next action"
|
|
728
757
|
],
|
|
758
|
+
"requiredArtifactLinks": [
|
|
759
|
+
"approval-packet.md",
|
|
760
|
+
"message-review.md",
|
|
761
|
+
"lead-review.md",
|
|
762
|
+
"brief.md"
|
|
763
|
+
],
|
|
764
|
+
"artifactLinkTiming": "before_commit_gate_question",
|
|
729
765
|
"userFacing": true,
|
|
730
766
|
"doNotUseWords": ["anchor", "validation anchor", "lane"]
|
|
731
767
|
},
|
|
@@ -821,7 +857,14 @@
|
|
|
821
857
|
"lead sample",
|
|
822
858
|
"lead filter",
|
|
823
859
|
"message validation"
|
|
824
|
-
]
|
|
860
|
+
],
|
|
861
|
+
"requiredArtifactLinks": [
|
|
862
|
+
"approval-packet.md",
|
|
863
|
+
"message-review.md",
|
|
864
|
+
"lead-review.md",
|
|
865
|
+
"brief.md"
|
|
866
|
+
],
|
|
867
|
+
"artifactLinkTiming": "same_turn_before_commit_question"
|
|
825
868
|
},
|
|
826
869
|
{
|
|
827
870
|
"action": "ask_commit_choice",
|