@sellable/mcp 0.1.158 → 0.1.159
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/agents/source-scout-linkedin-engagement.md +8 -3
- package/dist/tools/bootstrap.js +1 -1
- package/dist/tools/leads.d.ts +20 -2
- package/dist/tools/leads.js +92 -31
- package/dist/tools/registry.d.ts +8 -2
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +45 -32
- package/skills/create-campaign-v2/SKILL.md +41 -16
- package/skills/create-campaign-v2/SOUL.md +9 -8
- package/skills/create-campaign-v2/core/flow.v2.json +1 -1441
- package/skills/create-campaign-v2/references/approval-gate-framing.md +12 -1
- package/skills/create-campaign-v2/references/filter-leads.md +26 -0
- package/skills/create-campaign-v2/references/final-handoff-contract.md +15 -0
- package/skills/create-campaign-v2/references/sample-validation-loop.md +26 -0
- package/skills/create-campaign-v2/references/watch-link-handoff.md +10 -5
- package/skills/providers/signal-discovery.md +5 -3
|
@@ -143,7 +143,12 @@ will use, what the first message says, and what happens if the user approves.
|
|
|
143
143
|
Keep implementation details available, but move them below the customer-facing
|
|
144
144
|
summary.
|
|
145
145
|
|
|
146
|
-
1. **brief** — `brief.md` thesis, product, ICP, offer
|
|
146
|
+
1. **brief** — `brief.md` thesis, product, ICP, offer. Label major strategic
|
|
147
|
+
choices with compact provenance tags when known: `[from you]`,
|
|
148
|
+
`[from LinkedIn]`, `[from website]`, `[from case study]`, or
|
|
149
|
+
`[Sellable recommendation]`. Include this correction affordance before
|
|
150
|
+
approval: "This is based on what I found. If your site or LinkedIn is stale,
|
|
151
|
+
tell me what to update before I build the lead list." Ask "Do you agree with this researched campaign direction?"
|
|
147
152
|
2. **lead sample** — first 5-10 rows from `lead-sample.json` rendered as
|
|
148
153
|
`Name / Title / Company` lines, plus the `lead-review.md` pass-rate
|
|
149
154
|
and supplied-source framing when `lead-source-intake.json` exists:
|
|
@@ -169,6 +174,12 @@ review in the pre-mint approval packet. Those are configured and reviewed after
|
|
|
169
174
|
the campaign is created in the autonomous tail. The pre-mint packet approves
|
|
170
175
|
only the brief, lead source, lead filter/rubric, and first message direction.
|
|
171
176
|
|
|
177
|
+
In the first strategic brief before leads exist, do not show quoted outreach
|
|
178
|
+
copy or speculative first-message examples. If a message-shape hint is useful,
|
|
179
|
+
keep it as non-final bullets and label it: "This is not the message yet; I will
|
|
180
|
+
write real examples after we find and filter leads." Real rendered message proof
|
|
181
|
+
belongs in message review after leads and sample rows exist.
|
|
182
|
+
|
|
172
183
|
Do not include or summarize post-accept DMs, connection-accepted follow-ups,
|
|
173
184
|
day-2 / day-7 follow-ups, second touches, reply branches, or any other
|
|
174
185
|
sequence-shaped copy in `message-review.md` or `approval-packet.md`. If
|
|
@@ -12,6 +12,32 @@ production rubrics, and protect the user from replies they would not want to
|
|
|
12
12
|
take. It should not re-run sourcing, create a second source plan, or build a
|
|
13
13
|
large scoring framework.
|
|
14
14
|
|
|
15
|
+
## Source Scouting Framing
|
|
16
|
+
|
|
17
|
+
Use "source scouting" for the pre-import source decision. Do not say "testing
|
|
18
|
+
sources" in first-time-facing copy. Explain the decision the user is approving:
|
|
19
|
+
which source is being tried, why it was recommended from the research, the
|
|
20
|
+
precision/scale tradeoff, what evidence quality it should prove, and what safe
|
|
21
|
+
bounded pilot volume looks like.
|
|
22
|
+
|
|
23
|
+
Source-scouting approval authorizes scouting/search only. It does not approve
|
|
24
|
+
lead import, filtering, messaging, sequence, sender selection, or sending.
|
|
25
|
+
Keep detailed LinkedIn account-safety reassurance for the sender/settings step.
|
|
26
|
+
|
|
27
|
+
## Filter Approval Framing
|
|
28
|
+
|
|
29
|
+
Before asking the user to approve saved filters, explain the value in plain
|
|
30
|
+
language:
|
|
31
|
+
|
|
32
|
+
- These rules prevent wasted sends before I score/import the list.
|
|
33
|
+
- They protect limited outbound capacity by blocking bad-fit rows early.
|
|
34
|
+
- Recommended because of the researched ICP, source sample, and repeated
|
|
35
|
+
false-positive patterns.
|
|
36
|
+
- Show one pass example and one block example when available.
|
|
37
|
+
|
|
38
|
+
Make the approval object explicit: the user is approving filter rules, not
|
|
39
|
+
message drafts, not sender connection, and not campaign launch.
|
|
40
|
+
|
|
15
41
|
## Inputs
|
|
16
42
|
|
|
17
43
|
Use only live campaign inputs supplied by the parent thread or scoped MCP tools:
|
|
@@ -35,6 +35,9 @@ order (all before waiting for the user):
|
|
|
35
35
|
4. Explain sender setup and Slack in normal customer language: Sellable needs a
|
|
36
36
|
connected LinkedIn sender for launch, and Slack reply review matters because
|
|
37
37
|
replies and approvals need a channel the team will monitor.
|
|
38
|
+
Before asking the user to connect or select a sender, include this sender
|
|
39
|
+
safety contract: lead research and filtering already happened outside the
|
|
40
|
+
user's LinkedIn account; the connected sender is not used for source scouting, scraping, or filtering; this account is only used for approved sending after final launch; final launch approval still happens at the Start step.
|
|
38
41
|
5. If no connected sender exists, surface the campaign Settings link
|
|
39
42
|
`/campaign-builder/{campaignId}/settings?mode=claude`, tell the user to
|
|
40
43
|
connect a sender there, and STOP. Do not attach sequence and do not start.
|
|
@@ -58,6 +61,12 @@ currentStep: "sequence" })` to attach the sender via the v3 senders route and
|
|
|
58
61
|
"what to do next" sentence.
|
|
59
62
|
11. Ask the final launch greenlight with the structured question function:
|
|
60
63
|
Start campaign, Review campaign first, or Pause here.
|
|
64
|
+
Before the Start choice, summarize launch confidence separately from quality
|
|
65
|
+
confidence: quality confidence means sample messages, prospect angle,
|
|
66
|
+
company/person match, token/person variables, and reputation-burn risk were
|
|
67
|
+
checked; launch confidence means sender, sequence, and final Start are ready.
|
|
68
|
+
Explain what happens after Start: approved messages begin sending according to the sequence, replies and meetings follow the connected settings, the user can monitor and pause, and no hidden extra approval disappears after
|
|
69
|
+
clicking Start.
|
|
61
70
|
12. STOP unless the user explicitly chooses Start campaign. Do not call
|
|
62
71
|
`start_campaign` from Step 16 itself.
|
|
63
72
|
|
|
@@ -68,7 +77,12 @@ The final handoff must answer five customer questions in plain language:
|
|
|
68
77
|
sequence after a sender is attached)
|
|
69
78
|
- whether the next UI step is Settings, Sequence, or Send
|
|
70
79
|
- why the selected LinkedIn sender and Slack reply review matter before launch
|
|
80
|
+
- that the connected LinkedIn account is not used for lead research, source
|
|
81
|
+
scouting, scraping, or filtering
|
|
82
|
+
- that this account is only used for approved sending after final launch
|
|
71
83
|
- what clicking Start does (approves/starts the campaign send path)
|
|
84
|
+
- the difference between quality confidence and launch confidence
|
|
85
|
+
- what happens after Start: approved messages begin sending according to the sequence, replies and meetings follow connected settings, the campaign can be monitored and paused, and no hidden approval disappears
|
|
72
86
|
- how to revise (reply with what to change, or use the campaign UI)
|
|
73
87
|
- current launch status and what the final Start action does
|
|
74
88
|
|
|
@@ -188,6 +202,7 @@ true:
|
|
|
188
202
|
- Sender is missing or disabled.
|
|
189
203
|
- `attach_recommended_sequence` never succeeded (no sequence bound to the
|
|
190
204
|
campaign).
|
|
205
|
+
- No approved generated message exists in the campaign table.
|
|
191
206
|
|
|
192
207
|
A refusal is NOT an escalation in the ladder sense — it's a pre-check
|
|
193
208
|
failure. Surface the specific reason so the user can fix it and say
|
|
@@ -13,6 +13,32 @@ judge this campaign?" Message generation starts earlier: the first row that
|
|
|
13
13
|
passes filters is enough to begin observing or queueing Generate Message for
|
|
14
14
|
that passing row.
|
|
15
15
|
|
|
16
|
+
## Sample Count Summary
|
|
17
|
+
|
|
18
|
+
When showing sample or message-review status, include concrete count math:
|
|
19
|
+
|
|
20
|
+
- `{checked} leads checked`
|
|
21
|
+
- `{passed} passed and have draft messages`
|
|
22
|
+
- `{blocked} blocked before sending`
|
|
23
|
+
- `full list remains paused until approval`
|
|
24
|
+
|
|
25
|
+
Use dynamic counts from campaign/table state when available. If counts are not
|
|
26
|
+
available yet, use the generic pattern: "I am checking the bounded sample now;
|
|
27
|
+
passed rows get draft messages, blocked rows stop before sending, and the full
|
|
28
|
+
list remains paused until approval."
|
|
29
|
+
|
|
30
|
+
When the UI/chat action would otherwise read like "Approve 11", make it precise:
|
|
31
|
+
approve these 11 draft rows for the next review step. This does not approve the
|
|
32
|
+
full campaign launch and does not approve the user's LinkedIn account for
|
|
33
|
+
sending yet; approval here does not approve the full campaign launch.
|
|
34
|
+
|
|
35
|
+
## Message QA Receipt
|
|
36
|
+
|
|
37
|
+
Before asking for sample/message approval, include this compact receipt:
|
|
38
|
+
"Before you approve, I checked: tokens resolved, company/person match, proof claim, prospect angle, language/tone when known, and obvious bad fits."
|
|
39
|
+
|
|
40
|
+
Also include the reputation guardrail: weak personalization can burn the sender's reputation, so this approval is only for the reviewed sample/message direction. The full list remains paused until approval, and final launch happens later. Use the plain heuristic: "Would I take this call?"
|
|
41
|
+
|
|
16
42
|
If the answer is yes, proceed to Step 15 messaging for the initial campaign rows. If
|
|
17
43
|
the answer is no, diagnose whether the brief is wrong or the list is wrong,
|
|
18
44
|
and either revise brief autonomously OR escalate to the user — never
|
|
@@ -34,15 +34,18 @@ Example skeleton:
|
|
|
34
34
|
|
|
35
35
|
```text
|
|
36
36
|
I created the campaign shell with the brief already in it.
|
|
37
|
-
|
|
37
|
+
I am creating the campaign through this chat. Open this link if you want to
|
|
38
|
+
watch the work being done and audit what changes.
|
|
38
39
|
|
|
39
|
-
I’ll pause at the next approval
|
|
40
|
+
You can still ask me to change anything here. I’ll pause at the next approval
|
|
41
|
+
gate before sourcing.
|
|
40
42
|
|
|
41
43
|
Watch link: [Open campaign]({watchUrl})
|
|
42
44
|
|
|
43
|
-
Click that link to watch the campaign.
|
|
44
|
-
you
|
|
45
|
-
|
|
45
|
+
Click that link to watch the campaign. The app is for inspection; this chat is
|
|
46
|
+
where you direct the campaign. If it opens in an in-app browser and asks you to
|
|
47
|
+
sign in, open the same link in your regular browser so you can watch real-time
|
|
48
|
+
updates from your signed-in session.
|
|
46
49
|
|
|
47
50
|
Command-Enter or click that link to watch it in Sellable.
|
|
48
51
|
|
|
@@ -65,6 +68,8 @@ clear:
|
|
|
65
68
|
|
|
66
69
|
- the campaign shell exists now
|
|
67
70
|
- the brief is already visible in the campaign
|
|
71
|
+
- chat is where the user directs changes
|
|
72
|
+
- the app link is for watching and auditing live work
|
|
68
73
|
- import, sequence, and start are still blocked
|
|
69
74
|
|
|
70
75
|
## Browser Choice
|
|
@@ -425,9 +425,11 @@ recommendation, estimate source capacity from real sample math:
|
|
|
425
425
|
|
|
426
426
|
Then select the smallest right-content post set that plausibly hits the source
|
|
427
427
|
target. Do not scrape every promoted sample post by default; promoted sampling
|
|
428
|
-
state and final scrape plan are separate. If
|
|
429
|
-
|
|
430
|
-
|
|
428
|
+
state and final scrape plan are separate. If one 1,200+ engager post clears a
|
|
429
|
+
~1,000-engager target, recommend scraping that one post rather than the 3-post
|
|
430
|
+
sample set. If the math says the warm post lane only supports a smaller first
|
|
431
|
+
batch, say that and name the Sales Nav or Prospeo scale fallback rather than
|
|
432
|
+
padding the selection with noisy posts. If the
|
|
431
433
|
sampled/projected headline-fit rate is below 10%, do not call
|
|
432
434
|
`import_leads`; move to Sales Nav recent activity.
|
|
433
435
|
|