@sellable/mcp 0.1.121 → 0.1.123
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 +20 -6
- package/package.json +1 -1
- package/skills/create-campaign-v2/SKILL.md +22 -5
- package/skills/create-campaign-v2/core/flow.v2.json +7 -4
- package/skills/create-campaign-v2/references/watch-guide-narration.md +16 -3
- package/skills/providers/signal-discovery.md +28 -0
|
@@ -26,26 +26,36 @@ Use the inherited Sellable MCP tools when available:
|
|
|
26
26
|
Process:
|
|
27
27
|
|
|
28
28
|
1. Read the campaign brief, kickoff doc, or lane prompt supplied by the parent.
|
|
29
|
-
2.
|
|
29
|
+
2. Generate 3-5 intersection keyword/topic lanes, favoring fresh posts from the
|
|
30
|
+
last 7-14 days. Each lane should combine the campaign anchor with the buyer
|
|
31
|
+
pain, use case, or ICP role so fit is high before sampling. For example, for
|
|
32
|
+
a Claude + GTM/outbound campaign, prefer `Claude outbound`, `Claude Code
|
|
33
|
+
LinkedIn outreach`, `AI SDR Claude`, `GTM automation Claude`, and `founder-led
|
|
34
|
+
sales Claude`; do not treat broad anchor-only lanes like `Claude Code`, `MCP`,
|
|
35
|
+
`AI agents`, or `agentic coding` as selectable unless they also include the
|
|
36
|
+
GTM/outbound wedge or the narrower lanes fail.
|
|
30
37
|
3. Inspect finalist posts by content type before final selection. Prefer posts
|
|
31
38
|
where the topic matches the campaign wedge, not generic high-engagement news.
|
|
32
|
-
4.
|
|
39
|
+
4. If Round 1 produced broad anchor-only inventory, retarget immediately around
|
|
40
|
+
the wedge before sampling. Do not promote or sample broad posts when there are
|
|
41
|
+
narrower posts about the actual campaign pain/use case.
|
|
42
|
+
5. Promote the first narrow sample set when campaign-attached. If a
|
|
33
43
|
`campaignOfferId` was supplied, call `select_promising_posts({
|
|
34
44
|
campaignOfferId, selectionMode: "replace", selections, headlineICPCriteria,
|
|
35
45
|
currentStep: "signal-discovery" })` before sampling so the watched Signal
|
|
36
46
|
Discovery table shows the exact posts being tested.
|
|
37
|
-
|
|
47
|
+
6. Fetch or sample engagers for promoted posts and score rough ICP fit from
|
|
38
48
|
visible headline/display-name cues only. Do not enrich people during
|
|
39
49
|
viability estimation.
|
|
40
|
-
|
|
50
|
+
7. Compute capacity before recommending the source: target good-fit leads
|
|
41
51
|
(default 500 unless the parent supplies a target), reachable engagers,
|
|
42
52
|
sampled ICP-fit rate as `n/N` plus an easy percentage/range, expected usable
|
|
43
53
|
leads per right-content post after dedupe/cleanup, and posts needed to hit
|
|
44
54
|
the target.
|
|
45
|
-
|
|
55
|
+
8. Select/promote enough right-content posts to plausibly hit the target. If the
|
|
46
56
|
warm Signals pool is useful but too small, return the expected warm range and
|
|
47
57
|
recommend Sales Nav/Prospeo for scale instead of padding with noisy posts.
|
|
48
|
-
|
|
58
|
+
9. Return false positives and dead ends explicitly.
|
|
49
59
|
|
|
50
60
|
Return a concise structured result with:
|
|
51
61
|
|
|
@@ -67,6 +77,10 @@ Evidence standards:
|
|
|
67
77
|
|
|
68
78
|
- Do not trust raw post volume without inspecting finalist post quality.
|
|
69
79
|
- Prefer sample-based pass rates over intuition.
|
|
80
|
+
- Prefer narrow intersection topics over broad audience topics. A post about
|
|
81
|
+
the anchor technology alone is not enough; the post should also express the
|
|
82
|
+
GTM/outbound/buyer pain, workflow, or role context that makes the campaign
|
|
83
|
+
relevant.
|
|
70
84
|
- Do not make the user infer capacity. Say, plainly, how many eligible posts
|
|
71
85
|
exist, what percent of sampled engagers looked in-ICP, how many posts are
|
|
72
86
|
needed for 500+ good-fit leads, and which posts you would use.
|
package/package.json
CHANGED
|
@@ -433,7 +433,10 @@ brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
|
|
|
433
433
|
campaign brief. Do not wait for file-write chrome before asking for approval.
|
|
434
434
|
Before Find Leads, call `update_campaign({ campaignId, campaignBrief,
|
|
435
435
|
currentStep: "pick-provider", watchNarration: { ... } })` after approval so
|
|
436
|
-
the watch link moves out of Plan while the main thread
|
|
436
|
+
the watch link moves out of Plan while the main thread explains the source
|
|
437
|
+
path. This must be a visible Pick Provider checkpoint before the watched
|
|
438
|
+
browser moves into Signal Discovery, Sales Nav, Prospeo, or another provider
|
|
439
|
+
lane.
|
|
437
440
|
|
|
438
441
|
- After the brief is approved, show the next progress line. When the user has
|
|
439
442
|
not given a specific source direction, use the default sequential source
|
|
@@ -444,6 +447,11 @@ that gives the strongest message context if enough ICP-looking people are
|
|
|
444
447
|
engaging. If that does not clear a quick viability check, I'll switch to Sales
|
|
445
448
|
Nav with recent activity, then broader Sales Nav, and use Prospeo only as the
|
|
446
449
|
fallback. No leads import until you approve the source.`
|
|
450
|
+
The watched campaign should still be on Pick Provider while this source logic
|
|
451
|
+
is being explained. If the default first lane is Signal Discovery, say clearly
|
|
452
|
+
that Codex is about to test Signal Discovery as a viability path, not import
|
|
453
|
+
leads: it will look for relevant posts, sample engagers, estimate ICP fit, and
|
|
454
|
+
only continue if the source math works.
|
|
447
455
|
- If the user's request already points to a source, do not force the default
|
|
448
456
|
funnel. Start with the matching lane and say why:
|
|
449
457
|
- specific posts, creators, topics, comments, or engagement signals ->
|
|
@@ -453,8 +461,9 @@ fallback. No leads import until you approve the source.`
|
|
|
453
461
|
search, or target accounts -> Prospeo
|
|
454
462
|
- supplied CSV/profile list -> existing/supplied list preview
|
|
455
463
|
- explicit compare request -> compare only the requested sources
|
|
456
|
-
- In watch mode, do not
|
|
457
|
-
|
|
464
|
+
- In watch mode, do not skip the Pick Provider checkpoint. First move the
|
|
465
|
+
campaign to `pick-provider` and narrate the source-selection reasoning there.
|
|
466
|
+
After that visible checkpoint, move the campaign to the first source lane that
|
|
458
467
|
will actually be tested (`signal-discovery`, `sales-nav`, `prospeo`, or the
|
|
459
468
|
user-directed lane), then run the campaign-attached provider prompt + provider
|
|
460
469
|
search in the parent thread with `campaignOfferId`, `confirmed: true`, and
|
|
@@ -807,8 +816,9 @@ Required behavior:
|
|
|
807
816
|
then stop on the first viable source unless the user asked to compare.
|
|
808
817
|
1. Start with LinkedIn Engagement / active LinkedIn posts (internal provider:
|
|
809
818
|
Signals / `signal-discovery`) because recent engagement gives the strongest
|
|
810
|
-
message context and expected reply-rate upside. Search
|
|
811
|
-
lanes
|
|
819
|
+
message context and expected reply-rate upside. Search intersection keyword
|
|
820
|
+
lanes that combine the campaign anchor with the buyer pain/use case/ICP
|
|
821
|
+
role, review finalist posts, promote a narrow sample set with
|
|
812
822
|
`select_promising_posts` before fetching engagers when a campaign shell
|
|
813
823
|
exists, fetch top-post engagers, estimate ICP-fit rate, compute posts
|
|
814
824
|
needed for the target good-fit lead count, and only then recommend the
|
|
@@ -859,6 +869,13 @@ Required behavior:
|
|
|
859
869
|
keyword lanes; it does not mean 492 prospects. The source decision must name
|
|
860
870
|
the actual posts we would use, show why they won, and estimate usable engagers
|
|
861
871
|
from those posts after headline/sample filtering
|
|
872
|
+
- for Signals-first campaigns, keyword lanes must be intersection-first. If the
|
|
873
|
+
campaign anchor is `Claude`, `MCP`, `AI agents`, or another broad technology,
|
|
874
|
+
do not make broad anchor-only lanes the main test. Combine the anchor with the
|
|
875
|
+
specific wedge and buyer pain, such as outbound, GTM automation, LinkedIn
|
|
876
|
+
outreach, AI SDR skepticism, founder-led sales, RevOps, or the ICP role. Treat
|
|
877
|
+
broad anchor-only lanes as fallback inventory only, and retarget before
|
|
878
|
+
sampling if the first pass is broad.
|
|
862
879
|
- Signals viability is based on estimated ICP-fit reachable engagers, not raw
|
|
863
880
|
post count and not whether it beats Sales Nav scale. If 5-8 selected posts can
|
|
864
881
|
plausibly produce ~150+ ICP-fit warm prospects before final filtering, keep
|
|
@@ -546,7 +546,9 @@
|
|
|
546
546
|
"watchNarration.stage": "find-leads"
|
|
547
547
|
},
|
|
548
548
|
"when": "before_sequential_source_funnel",
|
|
549
|
-
"
|
|
549
|
+
"requiresVisibleCheckpointBeforeProviderLane": true,
|
|
550
|
+
"forbidDirectPlanToProviderLane": true,
|
|
551
|
+
"chatRenderRule": "Move the campaign watch view to the Pick Provider step before the main thread starts source viability work. This must be a distinct visible checkpoint: do not jump directly from Plan to Signal Discovery, Sales Nav, Prospeo, or another provider lane in the same visible beat. While the watched browser is on Pick Provider, explain the source-selection logic. If the user did not specify a source, explain the default order: start with warm LinkedIn post engagement because it gives stronger message context and expected reply-rate upside when enough ICP-looking engagers exist; if it is not viable, switch to Sales Nav with recent activity, then broader Sales Nav, and use Prospeo only as the fallback. If starting with Signal Discovery, explicitly say this is a viability test: Codex will look for relevant posts, sample engagers, estimate ICP fit, and only continue if the source math works. If the user did specify hiring signals, domains/accounts, supplied lists, posts/comments, or titles/personas, explain that the matching source overrides the default funnel. State that no leads import until a source is approved. The watchNarration headline/body must name the first lane being considered, why this lane now, the quick viability gate, and the safety boundary. Do not mention MCP or local artifacts."
|
|
550
552
|
},
|
|
551
553
|
{
|
|
552
554
|
"action": "advance_watch_to_initial_source_lane",
|
|
@@ -564,8 +566,9 @@
|
|
|
564
566
|
"existingList": "saved-lists",
|
|
565
567
|
"uploadedDomains": "prospeo"
|
|
566
568
|
},
|
|
567
|
-
"when": "
|
|
568
|
-
"
|
|
569
|
+
"when": "after_source_selection_checkpoint_before_first_source_attempt",
|
|
570
|
+
"requiresPriorVisibleStep": "pick-provider",
|
|
571
|
+
"rule": "Choose the first visible source lane from explicit source direction when present, otherwise default to Signal Discovery. Only run this after the Pick Provider source-selection checkpoint has been made visible and explained in chat/watchNarration. Send watchNarration with stage find-leads that says why this lane is being tried now, what quick sample or filter gate will pass/fail it, and why that helps this campaign. For Signal Discovery sampling, make it clear this is a viability path before lead import: generate intersection-first keyword lanes that combine the campaign anchor with the buyer pain/use case/ICP role, not broad anchor-only lanes. For Claude/GTM campaigns, prefer lanes like Claude outbound, Claude Code LinkedIn outreach, AI SDR Claude, GTM automation Claude, and founder-led sales Claude over generic Claude Code, MCP, AI agents, or agentic coding. If the first pass is broad, retarget around the campaign wedge before selecting posts. Promote/select the first narrow sample posts with select_promising_posts before fetch_post_engagers so the watched table shows the exact posts being sampled; the guide copy should say Codex is pulling sample engagers from these posts to confirm the ICP is actually engaging and estimate whether enough right-content posts exist for the target lead count. Before final source approval, compute eligible posts, sampled ICP-fit rate, target good-fit lead count, posts needed, selected posts, expected good-fit range, and scale fallback. If the lane fails, update currentStep and watchNarration before moving to Sales Nav recent activity, normal Sales Nav, or Prospeo."
|
|
569
572
|
},
|
|
570
573
|
{
|
|
571
574
|
"action": "run_first_campaign_attached_source_search",
|
|
@@ -614,7 +617,7 @@
|
|
|
614
617
|
"action": "run_subskill",
|
|
615
618
|
"target": "find-leads",
|
|
616
619
|
"mode": "campaign-attached-required",
|
|
617
|
-
"sourceScoutRule": "Shell-first flow requires the CampaignOffer campaignId from durable state. Pass campaignId as campaignOfferId into every provider prompt/search that can persist source state (`get_provider_prompt({ provider, campaignOfferId, confirmed: true })`, `search_signals`, `search_sales_nav`, `search_prospeo`) and include currentStep for tools that accept it so the user can watch the selected source inside the campaign. Use the default sequential source viability funnel when the user did not specify a source: Signal Discovery first, then Sales Nav with recent activity, then general Sales Nav, then Prospeo only as fallback. For Signal Discovery,
|
|
620
|
+
"sourceScoutRule": "Shell-first flow requires the CampaignOffer campaignId from durable state. Pass campaignId as campaignOfferId into every provider prompt/search that can persist source state (`get_provider_prompt({ provider, campaignOfferId, confirmed: true })`, `search_signals`, `search_sales_nav`, `search_prospeo`) and include currentStep for tools that accept it so the user can watch the selected source inside the campaign. Use the default sequential source viability funnel when the user did not specify a source: Signal Discovery first, then Sales Nav with recent activity, then general Sales Nav, then Prospeo only as fallback. For Signal Discovery, use intersection-first keyword lanes that combine the campaign anchor with the buyer pain/use case/ICP role; broad anchor-only lanes are fallback inventory, not selectable source lanes while narrower wedge lanes exist. Do not recommend from raw post count; sample engagers, calculate ICP-fit rate, target good-fit lead count, posts needed, selected posts, expected good-fit range, and scale fallback. Stop on the first viable source unless the user explicitly asked to compare. If the user names hiring signals, domains/accounts, supplied lists, posts/comments, or title/persona filters, start with the matching source instead. Parallel source scouts only when the user requested comparison, an existing parallel run is being resumed, or the first viable source is borderline and one cheap fallback check is needed. The later import_leads call must use the same campaignOfferId. Do not import, confirm, enrich, queue, or start leads during source discovery."
|
|
618
621
|
},
|
|
619
622
|
{
|
|
620
623
|
"action": "optional_debug_artifacts",
|
|
@@ -79,14 +79,27 @@ Default source funnel:
|
|
|
79
79
|
```json
|
|
80
80
|
{
|
|
81
81
|
"stage": "find-leads",
|
|
82
|
-
"headline": "
|
|
83
|
-
"visibleState": "
|
|
84
|
-
"agentIntent": "
|
|
82
|
+
"headline": "Choosing the lead source",
|
|
83
|
+
"visibleState": "The browser is on Pick Provider while Codex explains the source path before opening a provider lane.",
|
|
84
|
+
"agentIntent": "Codex will start with Signal Discovery when warm LinkedIn engagement looks plausible, then switch to Sales Nav or Prospeo only if the quick viability math fails.",
|
|
85
85
|
"nextAction": "Review source",
|
|
86
86
|
"safety": "No leads import until you approve the source."
|
|
87
87
|
}
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
+
Signal Discovery viability handoff:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"stage": "find-leads",
|
|
95
|
+
"headline": "Checking Signal Discovery viability",
|
|
96
|
+
"visibleState": "The browser is moving from Pick Provider into Signal Discovery so the exact posts and sample math are visible.",
|
|
97
|
+
"agentIntent": "Codex is testing whether relevant posts have enough ICP-looking engagers before recommending this as the source.",
|
|
98
|
+
"nextAction": "Review source math",
|
|
99
|
+
"safety": "No leads import until you approve the source."
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
90
103
|
Source direction override:
|
|
91
104
|
|
|
92
105
|
```json
|
|
@@ -43,6 +43,9 @@ When `find-leads` is using Signals during preview, treat this as a spot check:
|
|
|
43
43
|
### Round 1: Initial Discovery
|
|
44
44
|
|
|
45
45
|
- Generate 5 strategic keywords based on their ICP
|
|
46
|
+
- Prefer intersection keywords that combine the campaign's anchor topic with
|
|
47
|
+
the ICP pain/use case/role. Do not lead with broad anchor-only terms when the
|
|
48
|
+
campaign is narrower.
|
|
46
49
|
- Cast a slightly wider net to understand the landscape
|
|
47
50
|
- After results, analyze what's working
|
|
48
51
|
- Estimate whether the results are likely to produce a usable conversation lane
|
|
@@ -122,6 +125,27 @@ Use conservative logic:
|
|
|
122
125
|
|
|
123
126
|
You're NOT looking for generic buying intent keywords. You're looking for topics that attract YOUR SPECIFIC ICP:
|
|
124
127
|
|
|
128
|
+
### Intersection-First Rule
|
|
129
|
+
|
|
130
|
+
When the campaign has an anchor technology, category, community, or named tool,
|
|
131
|
+
do not search only the anchor. Combine it with the campaign's buyer pain, use
|
|
132
|
+
case, workflow, or role so the resulting posts are likely to attract the right
|
|
133
|
+
ICP before any engager filtering.
|
|
134
|
+
|
|
135
|
+
For a campaign about Claude/AI workflows for GTM, better first-round keywords
|
|
136
|
+
look like:
|
|
137
|
+
|
|
138
|
+
- "Claude outbound"
|
|
139
|
+
- "Claude Code LinkedIn outreach"
|
|
140
|
+
- "AI SDR Claude"
|
|
141
|
+
- "GTM automation Claude"
|
|
142
|
+
- "founder led sales Claude"
|
|
143
|
+
|
|
144
|
+
Broad anchor-only keywords such as "Claude Code", "MCP", "AI agents", or
|
|
145
|
+
"agentic coding" are inventory probes only. Use them after narrow lanes fail or
|
|
146
|
+
as diagnostic context; do not select/promote broad posts when narrower
|
|
147
|
+
campaign-wedge posts exist.
|
|
148
|
+
|
|
125
149
|
### For Founder/Executive ICPs:
|
|
126
150
|
|
|
127
151
|
- "founder mode", "founder led sales", "founder brand"
|
|
@@ -149,6 +173,10 @@ You're NOT looking for generic buying intent keywords. You're looking for topics
|
|
|
149
173
|
- Each round must have DIFFERENT keywords (no repeats across rounds)
|
|
150
174
|
- Use SINGLE keywords or short phrases only
|
|
151
175
|
- DO NOT use boolean operators (OR, AND, NOT)
|
|
176
|
+
- At least 3 first-round keywords must be intersection keywords that include
|
|
177
|
+
both the anchor topic and the campaign pain/use case/ICP context.
|
|
178
|
+
- If search results come back broad, immediately run a refined round around the
|
|
179
|
+
campaign wedge before selecting posts or sampling engagers.
|
|
152
180
|
|
|
153
181
|
Examples of GOOD keywords:
|
|
154
182
|
|