@sellable/mcp 0.1.49 → 0.1.51
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-campaign/SKILL.md +10 -2
- package/skills/create-campaign-v2/SKILL.md +69 -23
- package/skills/create-campaign-v2/SOUL.md +17 -4
- package/skills/create-campaign-v2/core/flow.v2.json +5 -1
- package/skills/create-campaign-v2/references/validation-criteria.md +14 -0
package/package.json
CHANGED
|
@@ -92,8 +92,16 @@ clear business decisions, tradeoffs, and approval gates. Use product language:
|
|
|
92
92
|
When explaining lead-source decisions, show the concrete counts behind the
|
|
93
93
|
logic: lanes searched, timeframe, raw result counts, finalist posts or preview
|
|
94
94
|
rows, sampled people, sampled fits as n/N (%), estimated usable people, and the
|
|
95
|
-
confidence basis.
|
|
96
|
-
|
|
95
|
+
confidence basis. Break estimates out by provider/source angle in bullet form
|
|
96
|
+
instead of showing only one raw total. Each angle should show raw pool, sampled
|
|
97
|
+
fits as n/N, estimated good-fit range after cleanup, expected reply-rate range,
|
|
98
|
+
and confidence basis. Never show a percent like "73% match" without the
|
|
99
|
+
numerator, denominator, and sample basis.
|
|
100
|
+
|
|
101
|
+
Use rendered Markdown for campaign brief and lead-source chat, not fenced code
|
|
102
|
+
blocks. Keep lines short, use indexed section labels, and translate internal
|
|
103
|
+
sourcing terms into plain language. For example, explain "signal discovery" as
|
|
104
|
+
"looking for LinkedIn activity from people already talking about this problem."
|
|
97
105
|
|
|
98
106
|
Every approval gate must include artifact access after the readable inline
|
|
99
107
|
content. Show an `Open artifact:` line with the one key clickable markdown link
|
|
@@ -318,39 +318,63 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
|
|
|
318
318
|
persistence in this preamble.
|
|
319
319
|
|
|
320
320
|
- Before asking for brief approval, render a slim approval brief in the chat and
|
|
321
|
-
keep the rich current brief in `brief.md`.
|
|
321
|
+
keep the rich current brief in `brief.md`. Use rendered Markdown directly:
|
|
322
|
+
`##` heading, bold field labels, numbered section labels, and short bullets.
|
|
323
|
+
Do not wrap the user-facing approval view in a fenced code block because that
|
|
324
|
+
creates horizontal scrolling in Claude Code and Codex. Do not ask the user to
|
|
322
325
|
approve a one-paragraph direction, a risk note, or hidden artifact they cannot
|
|
323
326
|
inspect. The chat approval view should be skimmable in under 45 seconds; full
|
|
324
327
|
reasoning, source notes, and robustness stay in the artifacts. Include these
|
|
325
|
-
sections, with
|
|
328
|
+
sections, with short wrapped lines:
|
|
326
329
|
|
|
327
330
|
```text
|
|
328
|
-
Campaign brief
|
|
331
|
+
## Campaign brief
|
|
329
332
|
|
|
330
|
-
|
|
331
|
-
... (include concrete role/title names, not just a broad persona)
|
|
333
|
+
**Decision:** ... (one sentence)
|
|
332
334
|
|
|
333
|
-
|
|
334
|
-
...
|
|
335
|
+
**1. Target**
|
|
336
|
+
- ... (include concrete role/title names, not just a broad persona)
|
|
337
|
+
- ...
|
|
335
338
|
|
|
336
|
-
|
|
337
|
-
...
|
|
339
|
+
**2. Pain**
|
|
340
|
+
- ...
|
|
341
|
+
- ...
|
|
338
342
|
|
|
339
|
-
|
|
340
|
-
...
|
|
343
|
+
**3. Offer**
|
|
344
|
+
- ...
|
|
345
|
+
- ...
|
|
341
346
|
|
|
342
|
-
|
|
343
|
-
...
|
|
347
|
+
**4. Proof**
|
|
348
|
+
- ...
|
|
349
|
+
- ...
|
|
344
350
|
|
|
345
|
-
|
|
346
|
-
|
|
351
|
+
**5. Lead plan**
|
|
352
|
+
I’ll look for people who are already showing signs this problem matters:
|
|
353
|
+
- people talking about ...
|
|
354
|
+
- people with roles like ...
|
|
355
|
+
- companies likely to feel ...
|
|
347
356
|
|
|
348
|
-
|
|
349
|
-
|
|
357
|
+
If that pool is too small or noisy, I’ll switch to broader LinkedIn title and
|
|
358
|
+
company filters.
|
|
350
359
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
360
|
+
**6. Risks**
|
|
361
|
+
- ...
|
|
362
|
+
- ...
|
|
363
|
+
|
|
364
|
+
**7. After approval**
|
|
365
|
+
I’ll find good-fit LinkedIn leads, show the source decision and sample, then
|
|
366
|
+
draft the first message for review. Nothing goes live without approval.
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
In the `Lead plan` section, do not expose internal provider shorthand as the
|
|
370
|
+
explanation. Avoid bare phrases like `signal discovery`, `founder-led GTM`,
|
|
371
|
+
`RevOps`, `outbound systems`, or `pipeline architecture` unless they are
|
|
372
|
+
translated into what the user can understand. For example:
|
|
373
|
+
|
|
374
|
+
```text
|
|
375
|
+
I’ll start by looking for LinkedIn activity from founders and revenue leaders
|
|
376
|
+
who are talking about pipeline problems, CRM handoffs, outbound tooling, or
|
|
377
|
+
messy sales processes.
|
|
354
378
|
```
|
|
355
379
|
|
|
356
380
|
Do not paste the full rich brief into chat for approval unless the user asks.
|
|
@@ -691,12 +715,17 @@ table with one row per selected or finalist post:
|
|
|
691
715
|
`## Evidence Snapshot` must include a compact numbers-first table:
|
|
692
716
|
|
|
693
717
|
- source lane / keyword or filter
|
|
718
|
+
- provider/source angle label, e.g. `Signals / AI outbound posts`,
|
|
719
|
+
`Sales Nav / active SaaS founders + GTM leaders`, or
|
|
720
|
+
`Prospeo / domain-filtered agencies`
|
|
694
721
|
- timeframe searched
|
|
695
722
|
- raw results found
|
|
696
723
|
- finalist posts or preview rows reviewed
|
|
697
724
|
- sampled people
|
|
698
725
|
- sampled fits, shown as `n/N (%)`
|
|
699
726
|
- estimated usable people
|
|
727
|
+
- estimated good-fit range after cleanup
|
|
728
|
+
- expected reply-rate range
|
|
700
729
|
- confidence note (`sample-backed`, `directional`, or `needs more sample`)
|
|
701
730
|
|
|
702
731
|
For Signals-first campaigns, `## Sample Leads` must group representative sample
|
|
@@ -709,13 +738,16 @@ range, and estimate basis. If exact performance data is unavailable, use a
|
|
|
709
738
|
directional range and label it `directional`, not definitive.
|
|
710
739
|
|
|
711
740
|
When showing `lead-review.md` to the user, render a slim decision summary in
|
|
712
|
-
chat, not the full evidence table.
|
|
741
|
+
chat, not the full evidence table. Use rendered Markdown directly with short
|
|
742
|
+
bullet lines; do not use fenced code blocks for the user-facing lead review.
|
|
743
|
+
The visible response must include:
|
|
713
744
|
|
|
714
745
|
- `Lead source decision`
|
|
715
746
|
- `Chosen source`
|
|
716
747
|
- `Why it won`
|
|
717
|
-
- `
|
|
718
|
-
|
|
748
|
+
- `Quick numbers` as bullet points, with one provider/source angle per bullet.
|
|
749
|
+
Each bullet must include raw volume, sampled fit rate as `n/N`, estimated
|
|
750
|
+
good-fit range after cleanup, and expected reply-rate range when available.
|
|
719
751
|
- `Sample leads` with 3-5 representative `Name — Title, Company` rows
|
|
720
752
|
- `Tradeoff`
|
|
721
753
|
- `Open artifact: lead-review.md`
|
|
@@ -724,6 +756,20 @@ Keep `## Evidence Snapshot`, selected posts, discarded paths, full sample rows,
|
|
|
724
756
|
and `lead-sample.json` details in artifacts. Do not show raw filesystem paths
|
|
725
757
|
unless links cannot be created or the user asks.
|
|
726
758
|
|
|
759
|
+
Use this chat shape for the quick-number bullets:
|
|
760
|
+
|
|
761
|
+
```text
|
|
762
|
+
**1. Quick numbers**
|
|
763
|
+
- **Signals / AI outbound posts:** 249 posts found. Sampled 40 engagers; 18/40
|
|
764
|
+
looked usable. Estimate: 100-250 good warm fits. Expected reply: 6-12%.
|
|
765
|
+
- **Sales Nav / active SaaS founders + GTM leaders:** 27,454 active profiles before
|
|
766
|
+
filtering. First 25 had 12 strong/probable fits. Estimate: 300-800 good fits
|
|
767
|
+
after title/company cleanup. Expected reply: 4-9%.
|
|
768
|
+
- **Prospeo / domain-filtered agencies:** 1,000+ likely contacts if we need scale,
|
|
769
|
+
but weaker LinkedIn activity. Estimate: 500-1,000 contacts. Expected reply:
|
|
770
|
+
2-5%.
|
|
771
|
+
```
|
|
772
|
+
|
|
727
773
|
After the lead source is set, use this progress copy before the parallel
|
|
728
774
|
filter/message work:
|
|
729
775
|
|
|
@@ -122,10 +122,23 @@ sampled engagers; 31 looked like real ICP fits, so I’d treat this as direction
|
|
|
122
122
|
usable people if the remaining engagers behave similarly.
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
Lead review chat should be short and numeric
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
Lead review chat should be short and numeric. It must use rendered Markdown,
|
|
126
|
+
not a fenced code block, and include bullet-pointed provider/source-angle
|
|
127
|
+
estimates, one bullet per angle, so the sourcing logic is easy to scan:
|
|
128
|
+
|
|
129
|
+
```text
|
|
130
|
+
**1. Quick numbers**
|
|
131
|
+
- **Signals / AI outbound posts:** 249 posts found. Sampled 40 engagers; 18/40
|
|
132
|
+
looked usable. Estimate: 100-250 good warm fits.
|
|
133
|
+
- **Sales Nav / active SaaS founders + GTM leaders:** 27,454 active profiles before
|
|
134
|
+
filtering. First 25 had 12 strong/probable fits. Estimate: 300-800 good fits.
|
|
135
|
+
- **Sales Nav / agencies + GTM consultants:** Smaller but higher intent. Estimate:
|
|
136
|
+
150-400 good fits.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Then show chosen source, why it won, expected connection acceptance, expected
|
|
140
|
+
reply rate, 3-5 sample leads, and one tradeoff. Full tables belong in
|
|
141
|
+
`lead-review.md`.
|
|
129
142
|
|
|
130
143
|
Lead filter chat should always show what changed: keep, exclude, why, expected
|
|
131
144
|
impact, and `Open artifact: lead-filter.md`.
|
|
@@ -227,6 +227,7 @@
|
|
|
227
227
|
"minimumVisibleBriefDetail": "slim_approval_brief_before_question",
|
|
228
228
|
"requiredArtifactLinks": ["brief.md"],
|
|
229
229
|
"artifactLinkTiming": "before_approval_question",
|
|
230
|
+
"chatRenderRule": "Show the brief as rendered Markdown, never as a fenced code block. Use ## Campaign brief, a one-sentence bold Decision, indexed bold section labels, and short bullets. In Lead plan, translate provider shorthand into plain user-facing language about who will be searched for and why; do not rely on bare terms like signal discovery, RevOps, outbound systems, or pipeline architecture.",
|
|
230
231
|
"avoidQuestionWhenOnlyUsefulAnswerIs": "looks good"
|
|
231
232
|
},
|
|
232
233
|
{
|
|
@@ -385,6 +386,7 @@
|
|
|
385
386
|
"why use or discard"
|
|
386
387
|
],
|
|
387
388
|
"evidenceSnapshotRequiredFields": [
|
|
389
|
+
"provider/source angle label",
|
|
388
390
|
"source lane or keyword",
|
|
389
391
|
"timeframe searched",
|
|
390
392
|
"raw results found",
|
|
@@ -392,12 +394,14 @@
|
|
|
392
394
|
"sampled people",
|
|
393
395
|
"sampled fits as n/N (%)",
|
|
394
396
|
"estimated usable people",
|
|
397
|
+
"estimated good-fit range after cleanup",
|
|
398
|
+
"expected reply-rate range",
|
|
395
399
|
"confidence note"
|
|
396
400
|
],
|
|
397
401
|
"forbidPercentOnlyFitRates": true,
|
|
398
402
|
"requiredArtifactLinks": ["lead-review.md"],
|
|
399
403
|
"artifactLinkTiming": "before_next_step_or_revision_question",
|
|
400
|
-
"chatRenderRule": "Show a slim decision summary only: chosen source, why it won, raw volume, sampled fit rate as n/N, estimated
|
|
404
|
+
"chatRenderRule": "Show a slim rendered-Markdown decision summary only, never a fenced code block. Use indexed sections and short bullets: chosen source, why it won, bullet-pointed Quick numbers with one provider/source angle per bullet, raw volume, sampled fit rate as n/N, estimated good-fit range after cleanup, expected connection acceptance range, expected reply rate range, 3-5 representative sample leads, and one tradeoff. Keep evidence tables, selected posts, discarded paths, full sample rows, and lead-sample.json details in lead-review.md. Do not show plain filesystem paths unless links cannot be created."
|
|
401
405
|
},
|
|
402
406
|
{
|
|
403
407
|
"action": "render_post_lead_parallel_progress",
|
|
@@ -131,6 +131,20 @@ usable leads after filtering, likely connection acceptance range, likely reply
|
|
|
131
131
|
range, and estimate basis. If exact performance data is unavailable, use a
|
|
132
132
|
directional range and label it `directional`, not definitive.
|
|
133
133
|
|
|
134
|
+
`## Evidence Snapshot` and the visible lead-review chat must break estimates out
|
|
135
|
+
by provider/source angle. Do not collapse everything into one raw count. Use
|
|
136
|
+
one row or bullet per angle. The visible chat version should be rendered
|
|
137
|
+
Markdown with indexed sections and short bullets, not a fenced code block. For
|
|
138
|
+
example:
|
|
139
|
+
|
|
140
|
+
- `Signals / AI outbound posts`
|
|
141
|
+
- `Sales Nav / active SaaS founders + GTM leaders`
|
|
142
|
+
- `Sales Nav / agencies + GTM consultants`
|
|
143
|
+
- `Prospeo / domain-filtered agencies`
|
|
144
|
+
|
|
145
|
+
Each angle must show raw pool, sampled fits as `n/N`, estimated good-fit range
|
|
146
|
+
after cleanup, expected reply-rate range, and confidence basis.
|
|
147
|
+
|
|
134
148
|
`lead-sample.json` must include enough structured lead data for downstream
|
|
135
149
|
filtering:
|
|
136
150
|
|