@sellable/mcp 0.1.210 → 0.1.211
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 +4 -5
- package/agents/registry.json +0 -149
- package/dist/tools/prompts.js +4 -4
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +12 -8
- package/skills/create-campaign-v2/SKILL.md +2 -2
- package/skills/create-campaign-v2/SOUL.md +5 -5
- package/skills/find-leads/SKILL.md +24 -60
- package/agents/source-scout-linkedin-engagement.md +0 -116
- package/agents/source-scout-prospeo-contact.md +0 -63
- package/agents/source-scout-sales-nav.md +0 -88
package/README.md
CHANGED
|
@@ -262,11 +262,10 @@ Provider preflight contract:
|
|
|
262
262
|
|
|
263
263
|
Parallel execution contract:
|
|
264
264
|
|
|
265
|
-
- Source
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
explicit source-comparison/debug
|
|
269
|
-
stays inline in the parent thread with the active provider MCP tools.
|
|
265
|
+
- Source work stays inline in the parent thread with active provider MCP tools.
|
|
266
|
+
`get_source_scout_registry` intentionally returns no custom source-scout
|
|
267
|
+
agents in the normal package; do not add source scouts back without an
|
|
268
|
+
explicit source-comparison/debug requirement.
|
|
270
269
|
- `get_post_find_leads_scout_registry` returns only the Message Drafting worker
|
|
271
270
|
for normal create-campaign runs. After `confirm_lead_list` imports a non-empty
|
|
272
271
|
review batch and rows are proven, ask the filter-choice question immediately.
|
package/agents/registry.json
CHANGED
|
@@ -1,155 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
3
|
"agents": [
|
|
4
|
-
{
|
|
5
|
-
"id": "linkedin-engagement",
|
|
6
|
-
"name": "source-scout-linkedin-engagement",
|
|
7
|
-
"kind": "source-scout",
|
|
8
|
-
"promptFile": "source-scout-linkedin-engagement.md",
|
|
9
|
-
"displayName": "LinkedIn Source Discovery",
|
|
10
|
-
"provider": "signal-discovery",
|
|
11
|
-
"lane": "linkedin-engagement",
|
|
12
|
-
"legacy": {
|
|
13
|
-
"codex": [
|
|
14
|
-
{
|
|
15
|
-
"name": "linkedin_engagement_scout",
|
|
16
|
-
"filename": "linkedin-engagement-scout.toml"
|
|
17
|
-
}
|
|
18
|
-
],
|
|
19
|
-
"claude": [
|
|
20
|
-
{
|
|
21
|
-
"name": "lead-explorer-signals",
|
|
22
|
-
"filename": "lead-explorer-signals.md"
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
},
|
|
26
|
-
"codex": {
|
|
27
|
-
"description": "Sellable lead-source scout for LinkedIn post engagement and active conversation signals.",
|
|
28
|
-
"model": "gpt-5.5",
|
|
29
|
-
"modelReasoningEffort": "high",
|
|
30
|
-
"sandboxMode": "read-only",
|
|
31
|
-
"nicknameCandidates": [
|
|
32
|
-
"LinkedIn Engagement Scout",
|
|
33
|
-
"Post Scout",
|
|
34
|
-
"Engager Scout"
|
|
35
|
-
]
|
|
36
|
-
},
|
|
37
|
-
"claude": {
|
|
38
|
-
"description": "Use proactively as a background Sellable source scout when find-leads or create-campaign needs LinkedIn post engagement, Signals, or active conversation evidence.",
|
|
39
|
-
"model": "inherit",
|
|
40
|
-
"background": true,
|
|
41
|
-
"maxTurns": 8,
|
|
42
|
-
"color": "blue",
|
|
43
|
-
"tools": [
|
|
44
|
-
"Read",
|
|
45
|
-
"Grep",
|
|
46
|
-
"Glob",
|
|
47
|
-
"mcp__sellable__get_provider_prompt",
|
|
48
|
-
"mcp__sellable__search_signals",
|
|
49
|
-
"mcp__sellable__select_promising_posts",
|
|
50
|
-
"mcp__sellable__fetch_post_engagers"
|
|
51
|
-
]
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": "sales-nav",
|
|
56
|
-
"name": "source-scout-sales-nav",
|
|
57
|
-
"kind": "source-scout",
|
|
58
|
-
"promptFile": "source-scout-sales-nav.md",
|
|
59
|
-
"displayName": "Sales Nav Source Discovery",
|
|
60
|
-
"provider": "sales-nav",
|
|
61
|
-
"lane": "sales-nav",
|
|
62
|
-
"legacy": {
|
|
63
|
-
"codex": [
|
|
64
|
-
{
|
|
65
|
-
"name": "sales_nav_scout",
|
|
66
|
-
"filename": "sales-nav-scout.toml"
|
|
67
|
-
}
|
|
68
|
-
],
|
|
69
|
-
"claude": [
|
|
70
|
-
{
|
|
71
|
-
"name": "lead-explorer-sales-nav",
|
|
72
|
-
"filename": "lead-explorer-sales-nav.md"
|
|
73
|
-
}
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
"codex": {
|
|
77
|
-
"description": "Sellable lead-source scout for Sales Navigator role, company, and activity filters.",
|
|
78
|
-
"model": "gpt-5.5",
|
|
79
|
-
"modelReasoningEffort": "high",
|
|
80
|
-
"sandboxMode": "read-only",
|
|
81
|
-
"nicknameCandidates": [
|
|
82
|
-
"Sales Nav Scout",
|
|
83
|
-
"Role Filter Scout",
|
|
84
|
-
"Activity Scout"
|
|
85
|
-
]
|
|
86
|
-
},
|
|
87
|
-
"claude": {
|
|
88
|
-
"description": "Use proactively as a background Sellable source scout when find-leads or create-campaign needs Sales Navigator title, company, geography, or activity-filter evidence.",
|
|
89
|
-
"model": "inherit",
|
|
90
|
-
"background": true,
|
|
91
|
-
"maxTurns": 8,
|
|
92
|
-
"color": "cyan",
|
|
93
|
-
"tools": [
|
|
94
|
-
"Read",
|
|
95
|
-
"Grep",
|
|
96
|
-
"Glob",
|
|
97
|
-
"mcp__sellable__get_provider_prompt",
|
|
98
|
-
"mcp__sellable__lookup_sales_nav_filter",
|
|
99
|
-
"mcp__sellable__search_sales_nav"
|
|
100
|
-
]
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
"id": "prospeo-contact",
|
|
105
|
-
"name": "source-scout-prospeo-contact",
|
|
106
|
-
"kind": "source-scout",
|
|
107
|
-
"promptFile": "source-scout-prospeo-contact.md",
|
|
108
|
-
"displayName": "Prospeo Source Discovery",
|
|
109
|
-
"provider": "prospeo",
|
|
110
|
-
"lane": "prospeo-contact",
|
|
111
|
-
"legacy": {
|
|
112
|
-
"codex": [
|
|
113
|
-
{
|
|
114
|
-
"name": "prospeo_contact_scout",
|
|
115
|
-
"filename": "prospeo-contact-scout.toml"
|
|
116
|
-
}
|
|
117
|
-
],
|
|
118
|
-
"claude": [
|
|
119
|
-
{
|
|
120
|
-
"name": "lead-explorer-prospeo",
|
|
121
|
-
"filename": "lead-explorer-prospeo.md"
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
},
|
|
125
|
-
"codex": {
|
|
126
|
-
"description": "Sellable lead-source scout for Prospeo account/domain and broad contact expansion.",
|
|
127
|
-
"model": "gpt-5.5",
|
|
128
|
-
"modelReasoningEffort": "high",
|
|
129
|
-
"sandboxMode": "read-only",
|
|
130
|
-
"nicknameCandidates": [
|
|
131
|
-
"Prospeo Contact Scout",
|
|
132
|
-
"Domain Scout",
|
|
133
|
-
"Contact Scout"
|
|
134
|
-
]
|
|
135
|
-
},
|
|
136
|
-
"claude": {
|
|
137
|
-
"description": "Use proactively as a background Sellable source scout when find-leads or create-campaign needs Prospeo account, domain-list, CSV-domain, or verified-contact evidence.",
|
|
138
|
-
"model": "inherit",
|
|
139
|
-
"background": true,
|
|
140
|
-
"maxTurns": 8,
|
|
141
|
-
"color": "green",
|
|
142
|
-
"tools": [
|
|
143
|
-
"Read",
|
|
144
|
-
"Grep",
|
|
145
|
-
"Glob",
|
|
146
|
-
"mcp__sellable__get_provider_prompt",
|
|
147
|
-
"mcp__sellable__load_csv_domains",
|
|
148
|
-
"mcp__sellable__save_domain_filters",
|
|
149
|
-
"mcp__sellable__search_prospeo"
|
|
150
|
-
]
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
4
|
{
|
|
154
5
|
"id": "message-generation",
|
|
155
6
|
"name": "post-find-leads-message-scout",
|
package/dist/tools/prompts.js
CHANGED
|
@@ -257,9 +257,9 @@ export function getSourceScoutRegistry() {
|
|
|
257
257
|
legacy: agent.legacy,
|
|
258
258
|
})),
|
|
259
259
|
usage: {
|
|
260
|
-
codex: "Source finding is parent-thread and sequential
|
|
261
|
-
claude: "Source finding is parent-thread and sequential
|
|
262
|
-
parentThreadRule: "Normal create-campaign source work stays inline in the parent thread with MCP provider tools. Default fallback order: Signal Discovery / LinkedIn engagement, then Sales Nav recent activity, then broader Sales Nav title search, then Prospeo account/contact search. Do not preload every provider prompt; load only the provider prompt for the active sequential source.",
|
|
260
|
+
codex: "Source finding is parent-thread and sequential in create-campaign. The packaged normal path installs only Message Drafting as a background agent, so this registry intentionally returns no source-scout agents.",
|
|
261
|
+
claude: "Source finding is parent-thread and sequential in create-campaign. Do not invoke source-scout Task/Agent workers; use MCP provider tools in the parent thread.",
|
|
262
|
+
parentThreadRule: "Normal create-campaign source work stays inline in the parent thread with MCP provider tools. Do not invoke source-scout Task/Agent workers. Default fallback order: Signal Discovery / LinkedIn engagement, then Sales Nav recent activity, then broader Sales Nav title search, then Prospeo account/contact search. Do not preload every provider prompt; load only the provider prompt for the active sequential source.",
|
|
263
263
|
},
|
|
264
264
|
};
|
|
265
265
|
}
|
|
@@ -356,7 +356,7 @@ export function getPostFindLeadsScoutRegistry() {
|
|
|
356
356
|
usage: {
|
|
357
357
|
codex: "After confirm_lead_list copies source rows and the initial campaign-table execution slice exists, ask the filter-choice question immediately. Do not spawn anything before that question. After the answer, launch only Message Drafting whenever Codex agent-launch policy is satisfied. If filters are chosen, the parent stays on Filter Rules and drafts/saves rubrics with MCP tools while Message Drafting runs in the background. If filters are skipped, move to Messages/message review after Message Drafting is ready. Treat YOLO/autonomous mode as campaign-scoped permission for this single post-import worker. If the user has not enabled YOLO and has not explicitly asked for background agents/subagents/parallel agents/delegation/message bg agent in this campaign, ask once before loading the long message prompt in the parent. If permission is granted and the named Message Drafting custom agent is unavailable, spawn a generic gpt-5.5 xhigh Message Drafting background agent with the same lean campaign/table basis.",
|
|
358
358
|
claude: "After confirm_lead_list copies source rows and the initial campaign-table execution slice exists, ask the filter-choice question immediately. Do not invoke any Task/Agent before that question. After the answer, invoke only Message Drafting. If filters are chosen, parent drafts/saves rubrics with MCP tools while Message Drafting runs, asks filter approval, then joins Message Drafting. If filters are skipped, invoke only Message Drafting and move to Messages/message review.",
|
|
359
|
-
parentThreadRule: 'The only normal
|
|
359
|
+
parentThreadRule: 'The only normal background worker is Message Drafting; source work and filter work stay in the parent thread with MCP tools. After the filter-choice answer, launch post-find-leads-message-scout only. If filters are chosen, the parent thread remains the filter writer: keep the browser on Filter Rules, load the filter reference, draft/save rubrics through MCP tools, ask filter approval, then move to Filter Leads while waiting for Message Drafting if needed. Do not move into message review, queue cells, or call update_campaign_brief until saved filters are approved when filters are enabled and messageDraftRecommendation is ready. If filters are skipped, launch only Message Drafting. In Codex, YOLO/autonomous mode counts as campaign-scoped permission for this single post-import worker; if the user has not enabled YOLO and has not explicitly asked for background agents/subagents/parallel agents/delegation/message bg agent in this campaign, ask once for permission before loading the long message prompt in the parent. If Message Drafting is allowed but the named worker is unavailable, use a generic gpt-5.5 xhigh Message Drafting background agent. Do not silently fall back to parent-thread message drafting. The Message Drafting handoff must be lean: campaignId, workflowTableId, brief summary, source summary/source-use rule, and 3-5 sample workflow-table rows with rowId/name/title/company/signal; optional campaignName, selectedLeadListId, and filter choice are allowed. Do not paste copied row counts, brief hashes, review-batch hashes, full reviewBatchRowIds, broad row data, or local debug artifacts into the message spawn prompt. The message branch must load current campaign brief/context, provided sample rows, the full generate-messages prompt, every referenced asset through get_subskill_asset, and before returning get_subskill_prompt({ subskillName: "create-campaign-v2-validation" }) for the internal validation gate. Local markdown/json files are not normal-path inputs. Message reference assets must be loaded with get_subskill_asset from the installed MCP package; do not use shell/local filesystem reads, repo paths, plugin-cache paths, or /Users paths to satisfy message references. The filter-choice question is the first post-import user gate; do not load this registry or filter references before it. Message drafting starts after the filter-choice answer and must reject mismatched workflowTableId/campaign/workspace input. Do not use any alternate or examples-only message prompt. User copy feedback, message QA, or rewrite requests before approve-message must be routed back to Message Drafting with the current recommendation, lean campaign/table basis, and latest user text; the parent must not rewrite or QA the template from memory and must not call update_campaign_brief before approve-message. The worker validates internally and returns only templateRecommendation, tokenFillRules, renderedGoodSample, status, approveOrReviseRecommendation, validationStatus, outputAt, outputHash, and blocked/retry detail. Do not render renderedFallbackSample, concerns, or a qaReceipt on the normal happy path. On the filter path, the parent thread keeps the browser on Filter Rules after save_rubrics so the user can approve the saved criteria; only then move to Filter Leads, show `Filters saved + waiting for message approval`, and wait there for message approval. Enrichment, filtering, Generate Message cells, sender setup, sequence attach, and launch wait for template approval on the Use Template path. On the skip path, move to Messages/message review and wait for message approval before enrichment or Settings. Do not render message review from checklist or shortcut instructions; message review requires a messageDraftRecommendation whose basis proves the generate-messages prompt, assets, and validation prompt ran for the current campaign/table execution slice. Do not automatically rerun Message Drafting after filters/enrichment finish; show the initial draft by default and offer an enriched rewrite only with explicit user opt-in.',
|
|
360
360
|
},
|
|
361
361
|
};
|
|
362
362
|
}
|
package/package.json
CHANGED
|
@@ -132,7 +132,7 @@ data, compare sources by source volume, sampled ICP fit, activity/warmth
|
|
|
132
132
|
signals, cleanup risk, and confidence basis. If a user asks for a forecast,
|
|
133
133
|
label it explicitly as not estimated from this run.
|
|
134
134
|
|
|
135
|
-
Before any provider prompt, search,
|
|
135
|
+
Before any provider prompt, search, or signal-discovery call, show
|
|
136
136
|
one source-plan gate and ask for approval. Write this like a fifth grader could
|
|
137
137
|
understand it: short sentences, no internal labels, and no GTM shorthand. The
|
|
138
138
|
order is strict: first show the plan in chat, then open the approval question.
|
|
@@ -184,8 +184,9 @@ conversations look unlikely, recommend the specific Sales Nav or Prospeo path
|
|
|
184
184
|
instead and explain it in plain words once. Do not call `search_signals`,
|
|
185
185
|
`search_sales_nav`,
|
|
186
186
|
`search_prospeo`,
|
|
187
|
-
`fetch_post_engagers
|
|
188
|
-
source
|
|
187
|
+
or `fetch_post_engagers` until the user approves this source plan or explicitly
|
|
188
|
+
chooses a different source. Source work stays in the parent thread; do not
|
|
189
|
+
launch source-scout or provider-scoped subagents.
|
|
189
190
|
|
|
190
191
|
If the user answers a provider approval such as "Approve Prospeo plan" after
|
|
191
192
|
seeing the source plan, that answer satisfies the source-plan gate. Persist the
|
|
@@ -250,9 +251,8 @@ summary should be a compact `## Source Recommendation` block with:
|
|
|
250
251
|
|
|
251
252
|
Source discovery stays inline in the parent thread for normal create-campaign
|
|
252
253
|
runs. Use the approved provider prompt and MCP tools sequentially; do not spawn
|
|
253
|
-
source-scout background agents
|
|
254
|
-
|
|
255
|
-
install status to the customer. In chat, call the downstream copy stage
|
|
254
|
+
source-scout background agents. The packaged normal path installs only Message
|
|
255
|
+
Drafting as a background agent. In chat, call the downstream copy stage
|
|
256
256
|
`message generation`; message validation/QA is owned by Message Drafting.
|
|
257
257
|
|
|
258
258
|
For campaign-attached Signal Discovery sampling, promote/select the exact posts
|
|
@@ -756,8 +756,12 @@ updates.
|
|
|
756
756
|
5. For message generation, keep the parent thread as a lean orchestrator and
|
|
757
757
|
use the `post-find-leads-message-scout` compatibility agent for Message
|
|
758
758
|
Drafting whenever the host exposes it
|
|
759
|
-
and the current host policy allows agent launch. The worker must load
|
|
760
|
-
`mcp__sellable__get_subskill_prompt({ subskillName: "generate-messages" })
|
|
759
|
+
and the current host policy allows agent launch. The worker must load the
|
|
760
|
+
full `mcp__sellable__get_subskill_prompt({ subskillName: "generate-messages" })`
|
|
761
|
+
prompt, every referenced message asset through
|
|
762
|
+
`mcp__sellable__get_subskill_asset`, and before returning
|
|
763
|
+
`mcp__sellable__get_subskill_prompt({ subskillName: "create-campaign-v2-validation" })`
|
|
764
|
+
as the internal validation gate.
|
|
761
765
|
In Codex, YOLO/autonomous mode counts as campaign-scoped permission to use
|
|
762
766
|
this single Message Drafting background agent. If the user has not enabled
|
|
763
767
|
YOLO and has not explicitly asked for background agents, subagents, parallel
|
|
@@ -208,8 +208,8 @@ Only then persist `leadSourceType`, `leadSourceProvider`, and provider `currentS
|
|
|
208
208
|
Source work stays inline in the parent thread in normal create-campaign runs.
|
|
209
209
|
Do not launch source-scout background agents. Run the approved provider probes
|
|
210
210
|
with MCP tools, loading only the provider prompt for the active sequential
|
|
211
|
-
source.
|
|
212
|
-
|
|
211
|
+
source. The packaged normal path installs only Message Drafting as a background
|
|
212
|
+
agent.
|
|
213
213
|
Use a 10% planning floor after cleanup. If LinkedIn engagement falls below it,
|
|
214
214
|
move to Sales Nav, then Prospeo. If Prospeo also falls below 10%, tighten the
|
|
215
215
|
ICP/source direction instead of inventing another provider.
|
|
@@ -276,11 +276,11 @@ gate; tell the customer what happens next instead.
|
|
|
276
276
|
## Parallelism + Naming
|
|
277
277
|
|
|
278
278
|
After the Find Buyers Plan is approved, source selection stays in the parent
|
|
279
|
-
thread for normal create-campaign runs.
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
279
|
+
thread for normal create-campaign runs. The packaged normal path installs only
|
|
280
|
+
Message Drafting as a background agent. Only try a fallback after the current
|
|
281
|
+
place fails, the user asks for comparison, or the first place is borderline.
|
|
282
|
+
Keep fallback copy plain: people talking on LinkedIn, recent LinkedIn titles,
|
|
283
|
+
broader LinkedIn titles, then company/contact search.
|
|
284
284
|
Use a 10% planning floor after conservative cleanup. If LinkedIn engagement falls
|
|
285
285
|
below that floor, move to Sales Nav. If Sales Nav falls below that floor after
|
|
286
286
|
reasonable refinement, move to Prospeo. Prospeo is the terminal fallback; if it
|
|
@@ -65,43 +65,19 @@ The kickoff doc is the resume surface. Re-open it before repeating discovery wor
|
|
|
65
65
|
|
|
66
66
|
## Execution Backend Routing
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- `source-scout-prospeo-contact` (display: Prospeo Contact Scout) for Prospeo
|
|
82
|
-
account/domain and verified-contact expansion.
|
|
83
|
-
- Common parallel comparisons are LinkedIn Engagement + Sales Nav, LinkedIn
|
|
84
|
-
Engagement + Prospeo Contact, or all three when each lane is credible.
|
|
85
|
-
- If Claude `Task`/`Agent` is available and the current Claude session lists
|
|
86
|
-
the returned source-scout names, deep exploration uses the file-backed Claude
|
|
87
|
-
explorer agents installed from the same canonical Sellable agent registry.
|
|
88
|
-
Launch every credible lane in the same assistant message so Claude Code can
|
|
89
|
-
run them concurrently/background:
|
|
90
|
-
- `~/.claude/agents/source-scout-linkedin-engagement.md`
|
|
91
|
-
- `~/.claude/agents/source-scout-sales-nav.md`
|
|
92
|
-
- `~/.claude/agents/source-scout-prospeo-contact.md`
|
|
93
|
-
- These Claude agents must have explicit Sellable MCP tool allowlists and must
|
|
94
|
-
load the matching provider prompt before searching. They are optional
|
|
95
|
-
acceleration: if the names are absent, do not mention the missing install or
|
|
96
|
-
agent availability in customer-facing output. Run the same provider probes
|
|
97
|
-
from the parent thread with MCP tools and keep `lead-review.md` focused on
|
|
98
|
-
source evidence.
|
|
99
|
-
- The parent thread should not preload every provider prompt before launching
|
|
100
|
-
scouts. Spawn the credible scouts first; each scout loads only the provider
|
|
101
|
-
prompt for its lane and returns structured evidence.
|
|
102
|
-
- Else if `multi_tool_use.parallel` is available, run independent discovery calls in parallel and synthesize locally.
|
|
103
|
-
- Else run sequentially.
|
|
104
|
-
- Never claim agents were used when they were not.
|
|
68
|
+
Run source work in the parent thread with MCP provider tools. The packaged
|
|
69
|
+
Sellable install exposes only one normal background agent, Message Drafting, so
|
|
70
|
+
do not dispatch custom source-scout subagents for source comparison.
|
|
71
|
+
|
|
72
|
+
When two or more source angles are viable, compare them with bounded provider
|
|
73
|
+
probes from the parent thread. Load only the provider prompt for the active
|
|
74
|
+
provider, run the relevant search/import-preview tool, inspect a small sample,
|
|
75
|
+
then synthesize `lead-review.md` from the tool evidence.
|
|
76
|
+
|
|
77
|
+
If `multi_tool_use.parallel` is available, independent provider reads/searches
|
|
78
|
+
may run in parallel as tool calls. Otherwise run sequentially. Do not claim
|
|
79
|
+
agent work or missing install status to the customer; customer-facing output
|
|
80
|
+
should stay focused on source evidence.
|
|
105
81
|
|
|
106
82
|
## Core Tools
|
|
107
83
|
|
|
@@ -129,7 +105,7 @@ The kickoff doc is the resume surface. Re-open it before repeating discovery wor
|
|
|
129
105
|
- Default source order for reply-likelihood-first outbound is `Signals -> Sales Nav -> Prospeo` unless the ask explicitly points elsewhere.
|
|
130
106
|
- If the user is explicit about the goal, route from that goal first.
|
|
131
107
|
- If the user is not explicit, infer the first hypothesis from the brief, then validate it with sample probes before recommending a lane.
|
|
132
|
-
- Before the first provider prompt, search,
|
|
108
|
+
- Before the first provider prompt, search, or signal-discovery
|
|
133
109
|
call, show the user a compact source plan and get approval. Write it in plain
|
|
134
110
|
customer language: which buyer groups or places you could check, the best
|
|
135
111
|
place to start, why the right buyers are likely to be there, what signs the
|
|
@@ -276,17 +252,10 @@ Use the existing provider tools to run a small, directional probe:
|
|
|
276
252
|
|
|
277
253
|
If the first probe is weak or noisy and enough context exists, try 1-2 alternate hypotheses before returning.
|
|
278
254
|
If the first probe has good quality but insufficient scale, iterate 1-2 times to widen intelligently before returning.
|
|
279
|
-
When two or more source angles are viable, run
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
For Claude Code, explicitly invoke the matching `source-scout-*` Task/Agent
|
|
284
|
-
subagents in one message only when the current session exposes them, instead of
|
|
285
|
-
probing one lane, waiting, then probing the next. Examples: LinkedIn Engagement
|
|
286
|
-
|
|
287
|
-
- Sales Nav, LinkedIn Engagement + Prospeo Contact, or Sales Nav + Prospeo
|
|
288
|
-
Contact. If the host cannot run them in parallel, run the same probes
|
|
289
|
-
sequentially and do not claim they ran in parallel.
|
|
255
|
+
When two or more source angles are viable, run bounded parent-thread probes for
|
|
256
|
+
each credible lane. Examples: LinkedIn Engagement + Sales Nav, LinkedIn
|
|
257
|
+
Engagement + Prospeo Contact, or Sales Nav + Prospeo Contact. Compare the live
|
|
258
|
+
provider evidence and recommend the best source.
|
|
290
259
|
|
|
291
260
|
Treat refinement as a measured loop:
|
|
292
261
|
|
|
@@ -320,6 +289,10 @@ Use first when the value is in conversation opportunity, competitor engagers, co
|
|
|
320
289
|
inventory. If the sampled pass rate is good but the projected pool is below
|
|
321
290
|
target, recommend adding/scraping more similar posts as the expansion lever
|
|
322
291
|
before discarding Signals.
|
|
292
|
+
- Use `select_promising_posts` before the first `fetch_post_engagers` call when
|
|
293
|
+
Signals returns multiple candidate posts. That selection shows the
|
|
294
|
+
promoted posts, why they were chosen, and the post-level math the parent
|
|
295
|
+
thread will use for the Start Import recommendation.
|
|
323
296
|
- Sample a representative first page only, scoring the first 25-40 engagers across the chosen posts against a rough yes/no headline rubric or `headlineICPCriteria`.
|
|
324
297
|
- Use headline and display-name cues only for the spot-check sample; do not enrich people during this phase.
|
|
325
298
|
- Base `estimatedReachableLeads` on the sampled engager pass rate, not only on a guessed discount from post themes.
|
|
@@ -459,17 +432,8 @@ Show the light-touch results and ask whether to deep-dispatch or iterate.
|
|
|
459
432
|
|
|
460
433
|
## Layer 3: Selective deep exploration
|
|
461
434
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
agent names, so source scouting is concurrent when the runtime supports it. If
|
|
465
|
-
they are absent, run the validated provider probes from the parent thread
|
|
466
|
-
without telling the customer about host-agent install state.
|
|
467
|
-
|
|
468
|
-
- `source-scout-linkedin-engagement`
|
|
469
|
-
- `source-scout-sales-nav`
|
|
470
|
-
- `source-scout-prospeo-contact`
|
|
471
|
-
|
|
472
|
-
Each explorer must return:
|
|
435
|
+
Run only the validated paths from Gate 1 with parent-thread provider probes.
|
|
436
|
+
Each explored lane must return:
|
|
473
437
|
|
|
474
438
|
- hypothesis tested
|
|
475
439
|
- search recipe / filters
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
You are the LinkedIn Engagement Scout for Sellable find-leads.
|
|
2
|
-
|
|
3
|
-
Your job is to test whether active LinkedIn posts and engagers can produce a warm first-send list for the campaign. Work only on this source lane. Do not import leads, create campaigns, write campaign artifacts, draft messages, ask the user questions, or make the final source decision.
|
|
4
|
-
|
|
5
|
-
Required first step:
|
|
6
|
-
|
|
7
|
-
- Load the canonical provider prompt before searching. If the parent supplies a
|
|
8
|
-
draft `campaignOfferId`, call `get_provider_prompt({ provider:
|
|
9
|
-
"signal-discovery", campaignOfferId, confirmed: true })` and include that same
|
|
10
|
-
`campaignOfferId` plus `currentStep: "signal-discovery"` in `search_signals`
|
|
11
|
-
so the owning search route can show the source lane with current find-leads
|
|
12
|
-
narration and user options. Treat that as a campaign-attached persisted search;
|
|
13
|
-
do not run a post-mint search without the campaign ID. If no campaign
|
|
14
|
-
ID is supplied, run campaignless preview mode.
|
|
15
|
-
|
|
16
|
-
Use the inherited Sellable MCP tools when available:
|
|
17
|
-
|
|
18
|
-
- `search_signals` to find recent post lanes. Include `campaignOfferId` whenever
|
|
19
|
-
the parent provides one so selected searches/lists stay attached to the
|
|
20
|
-
campaign.
|
|
21
|
-
- `select_promising_posts` to promote the exact posts you will sample into the
|
|
22
|
-
campaign UI before fetching engagers. In campaign-attached runs, do this
|
|
23
|
-
before the first `fetch_post_engagers` call so the user can see which posts
|
|
24
|
-
are being sampled.
|
|
25
|
-
- `fetch_post_engagers` to sample engagers from promoted/selected posts.
|
|
26
|
-
|
|
27
|
-
Process:
|
|
28
|
-
|
|
29
|
-
1. Read the campaign brief, kickoff doc, or lane prompt supplied by the parent.
|
|
30
|
-
2. Generate 3-5 intersection keyword/topic lanes, favoring fresh posts from the
|
|
31
|
-
last 7-14 days. Each lane should combine the campaign anchor with the buyer
|
|
32
|
-
pain, use case, or ICP role so fit is high before sampling. For example, for
|
|
33
|
-
a Claude + GTM/outbound campaign, prefer `Claude outbound`, `Claude Code
|
|
34
|
-
LinkedIn outreach`, `AI SDR Claude`, `GTM automation Claude`, and `founder-led
|
|
35
|
-
sales Claude`; do not treat broad anchor-only lanes like `Claude Code`, `MCP`,
|
|
36
|
-
`AI agents`, or `agentic coding` as selectable unless they also include the
|
|
37
|
-
GTM/outbound wedge or the narrower lanes fail.
|
|
38
|
-
3. Inspect finalist posts by content type before final selection. Prefer posts
|
|
39
|
-
where the topic matches the campaign wedge, not generic high-engagement news.
|
|
40
|
-
4. If Round 1 produced broad anchor-only inventory, retarget immediately around
|
|
41
|
-
the wedge before sampling. Do not promote or sample broad posts when there are
|
|
42
|
-
narrower posts about the actual campaign pain/use case.
|
|
43
|
-
5. Promote the first narrow sample set when campaign-attached. If a
|
|
44
|
-
`campaignOfferId` was supplied, call `select_promising_posts({
|
|
45
|
-
campaignOfferId, selectionMode: "replace", selections, headlineICPCriteria,
|
|
46
|
-
scrapePlanMode: "all-selected", currentStep: "signal-discovery" })` before sampling so the watched Signal
|
|
47
|
-
Discovery table shows the promoted posts and the exact posts being tested.
|
|
48
|
-
Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
|
|
49
|
-
visible transition after Start Import approval.
|
|
50
|
-
6. Fetch or sample engagers for promoted posts and score rough ICP fit from
|
|
51
|
-
visible headline/display-name cues only. Do not enrich people during
|
|
52
|
-
viability estimation.
|
|
53
|
-
7. Compute capacity before recommending the source: source target good-fit
|
|
54
|
-
leads (default 300 for Signal Discovery unless the parent supplies a target),
|
|
55
|
-
reachable engagers, sampled headline-fit rate as `n/N` plus an easy
|
|
56
|
-
percentage/range, expected headline-fit prospects per 100 engagers, required
|
|
57
|
-
engagers to scrape (`source target / sampled headline-fit rate`), average
|
|
58
|
-
reachable engagers per right-content post, expected headline-fit prospects
|
|
59
|
-
per right-content post, posts needed to hit the target, and whether
|
|
60
|
-
sampled/projected headline-fit rate clears the 10% planning floor. Treat the
|
|
61
|
-
10% floor as a reject threshold, not as the scrape-count denominator when the
|
|
62
|
-
actual sample rate is higher.
|
|
63
|
-
8. Select/promote enough right-content posts to plausibly hit the target. After
|
|
64
|
-
the sample math is known, treat the promoted sample set and final scrape set
|
|
65
|
-
as separate: recommend the smallest right-content post subset whose
|
|
66
|
-
scrapable/reachable engagers clears the required engager count, with a modest
|
|
67
|
-
buffer when needed. If one 1,200+ engager post clears a ~1,000-engager target,
|
|
68
|
-
recommend scraping that one post, not all 3 sample posts. If the warm Signals
|
|
69
|
-
pool is useful but too small, return the expected warm range and recommend
|
|
70
|
-
Sales Nav/Prospeo for scale instead of padding with noisy posts.
|
|
71
|
-
9. Return false positives and dead ends explicitly.
|
|
72
|
-
|
|
73
|
-
Return a concise structured result with:
|
|
74
|
-
|
|
75
|
-
- `source_lane`
|
|
76
|
-
- `provider_prompt_loaded`
|
|
77
|
-
- `keyword_lanes` with timeframe, raw posts found, finalist posts reviewed
|
|
78
|
-
- `selected_posts` with URL/title, author/topic, age, engager count, sampled engagers, good fits as n/N, estimated usable prospects per post, use/discard
|
|
79
|
-
- `sample_leads`, if any
|
|
80
|
-
- `approval_math` with eligible posts, source target good-fit leads, sampled
|
|
81
|
-
engagers, headline-fit rate as `n/N` plus percentage/range, headline-fit
|
|
82
|
-
prospects per 100 engagers, required engagers to scrape, average reachable
|
|
83
|
-
engagers per post, expected headline-fit prospects per post, posts needed for
|
|
84
|
-
target, whether the 10% planning floor clears, selected post count, internal
|
|
85
|
-
campaign-table execution-slice size, expected headline-fit lead range, and
|
|
86
|
-
scale fallback
|
|
87
|
-
- `estimated_good_fit_range`
|
|
88
|
-
- `message_context_strength`, directional and source-specific
|
|
89
|
-
- `false_positive_patterns`
|
|
90
|
-
- `recommendation`
|
|
91
|
-
- `confidence`
|
|
92
|
-
|
|
93
|
-
Evidence standards:
|
|
94
|
-
|
|
95
|
-
- Do not trust raw post volume without inspecting finalist post quality.
|
|
96
|
-
- Prefer sample-based pass rates over intuition.
|
|
97
|
-
- Prefer narrow intersection topics over broad audience topics. A post about
|
|
98
|
-
the anchor technology alone is not enough; the post should also express the
|
|
99
|
-
GTM/outbound/buyer pain, workflow, or role context that makes the campaign
|
|
100
|
-
relevant.
|
|
101
|
-
- Do not make the user infer capacity. Say, plainly, how many eligible posts
|
|
102
|
-
exist, how many sampled engagers passed the headline ICP rubric, what
|
|
103
|
-
headline-fit rate that implies per 100 engagers, how many headline-fit
|
|
104
|
-
prospects one right-content post should yield, how many engagers must be
|
|
105
|
-
scraped for the 300 headline-fit source target using the sampled pass rate
|
|
106
|
-
(or the 20% working assumption only when there is no stronger sample), how
|
|
107
|
-
many posts are needed for that source target, and which posts you would use.
|
|
108
|
-
Also say the source list is copied into the campaign and only the first
|
|
109
|
-
campaign-table execution slice is processed internally for filter and message
|
|
110
|
-
setup.
|
|
111
|
-
- If `fetch_post_engagers` is unavailable or fails, report that explicitly and mark the estimate lower-confidence.
|
|
112
|
-
- Keep LinkedIn Engagement viable when selected posts can produce roughly 300+
|
|
113
|
-
headline-fit warm prospects before final filtering, even if Sales Nav is more
|
|
114
|
-
scalable.
|
|
115
|
-
- If sampled/projected headline-fit rate is below 10%, reject the Signals
|
|
116
|
-
scrape path and recommend Sales Nav recent activity as the next source.
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
You are the Prospeo Contact Scout for Sellable find-leads.
|
|
2
|
-
|
|
3
|
-
Your job is to test whether Prospeo can produce verified-contact scale for the campaign through account/domain targeting, hiring-led company job-posting filters, or broad persona expansion. Work only on this source lane. Do not import leads, create campaigns, write campaign artifacts, draft messages, ask the user questions, or make the final source decision.
|
|
4
|
-
|
|
5
|
-
Required first step:
|
|
6
|
-
|
|
7
|
-
- Load the canonical provider prompt before searching. If the parent supplies a
|
|
8
|
-
draft `campaignOfferId`, call `get_provider_prompt({ provider: "prospeo",
|
|
9
|
-
campaignOfferId, confirmed: true })` and include that same `campaignOfferId`
|
|
10
|
-
plus `currentStep: "prospeo"` in `search_prospeo` so the user can watch source
|
|
11
|
-
work in the campaign UI with source-lane narration owned by the search route.
|
|
12
|
-
If no campaign ID is supplied, run campaignless preview mode. Treat post-mint
|
|
13
|
-
searches with `campaignOfferId` as campaign-attached persisted search tabs;
|
|
14
|
-
do not run a live campaign search without the campaign ID.
|
|
15
|
-
Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
|
|
16
|
-
visible transition after Start Import approval.
|
|
17
|
-
|
|
18
|
-
Use the inherited Sellable MCP tools when available:
|
|
19
|
-
|
|
20
|
-
- `load_csv_domains` when the parent supplies a CSV on disk and no `domainFilterId` exists.
|
|
21
|
-
- `save_domain_filters` when the parent supplies pasted/raw include or exclude domains and no `domainFilterId` exists.
|
|
22
|
-
- `search_prospeo` for people previews. Include `campaignOfferId` whenever the
|
|
23
|
-
parent provides one so selected searches/lists stay attached to the campaign.
|
|
24
|
-
|
|
25
|
-
Process:
|
|
26
|
-
|
|
27
|
-
1. Read the campaign brief, source intake, kickoff doc, or lane prompt supplied by the parent.
|
|
28
|
-
2. Identify whether this is domain/account targeting, hiring-led targeting, or broad persona expansion.
|
|
29
|
-
3. For domain targeting, use or create the standalone `domainFilterId` before searching; never pass raw domains directly into `search_prospeo`.
|
|
30
|
-
4. For hiring-led targeting, use `company_job_posting_hiring_for` for the target open-role themes and `company_job_posting_quantity` when the brief needs an active hiring floor. Pair those company hiring filters with buyer/referrer person filters; do not treat hiring-led targeting as Sales Nav-only.
|
|
31
|
-
5. Run the narrowest useful Prospeo people preview and 1-2 refinements if quality or scale is unclear. Check scale against the source target good-fit lead count (default about 300 usable prospects unless the parent supplies a different target) and cap source candidates at the provider limit. Use the first-page sample to compute projected good fits from a source-list export, not to recommend importing only the internal campaign-table execution slice.
|
|
32
|
-
6. If `raw_result_count * projected_fit_rate_after_cleanup` is below the source target, do not recommend import yet. Tighten or broaden filters and retry until the projected usable pool clears target, or clearly report that the lane is too constrained.
|
|
33
|
-
7. Call out that Prospeo gives contact/account and hiring-signal coverage but usually weaker LinkedIn intent than LinkedIn Engagement or Sales Nav activity slices.
|
|
34
|
-
|
|
35
|
-
Return a concise structured result with:
|
|
36
|
-
|
|
37
|
-
- `source_lane`
|
|
38
|
-
- `provider_prompt_loaded`
|
|
39
|
-
- `mode`
|
|
40
|
-
- `domain_filter_or_account_inputs`
|
|
41
|
-
- `exact_search_recipe`
|
|
42
|
-
- `raw_result_count`
|
|
43
|
-
- `sampled_people` and good fits as n/N
|
|
44
|
-
- `estimated_good_fit_range_after_cleanup`
|
|
45
|
-
- `source_export_math` with target good-fit count, conservative projected fit rate, recommended `targetLeadCount` for `import_leads`, and projected good fits from that export
|
|
46
|
-
- `expected_reply_rate_range`, directional if inferred
|
|
47
|
-
- `sample_leads`
|
|
48
|
-
- `false_positive_patterns`
|
|
49
|
-
- `recommendation`
|
|
50
|
-
- `confidence`
|
|
51
|
-
|
|
52
|
-
Evidence standards:
|
|
53
|
-
|
|
54
|
-
- Never pass raw domains, company website arrays, or company-name arrays into `search_prospeo`.
|
|
55
|
-
- If the user supplied company names rather than domains, report that domain resolution is required before this lane can run safely.
|
|
56
|
-
- Prospeo is the terminal fallback. If projected good-fit after cleanup remains
|
|
57
|
-
below 10% after reasonable refinement, recommend tightening the ICP/source
|
|
58
|
-
direction rather than switching providers again.
|
|
59
|
-
- Never recommend "import 25 leads" as the Prospeo source action. Recommend
|
|
60
|
-
Start Import for the approved source list; the parent thread later
|
|
61
|
-
copies the confirmed source rows into the campaign and internally uses the
|
|
62
|
-
first campaign-table execution slice for filter and message setup.
|
|
63
|
-
- Treat Prospeo as an account/contact and company hiring-signal lane, not as proof of fresh LinkedIn intent.
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
You are the Sales Nav Scout for Sellable find-leads.
|
|
2
|
-
|
|
3
|
-
Your job is to test whether Sales Navigator filters can produce a scalable, high-fit lead pool for the campaign. Work only on this source lane. Do not import leads, create campaigns, write campaign artifacts, draft messages, ask the user questions, or make the final source decision.
|
|
4
|
-
|
|
5
|
-
Required first step:
|
|
6
|
-
|
|
7
|
-
- Load the canonical provider prompt before searching. If the parent supplies a
|
|
8
|
-
draft `campaignOfferId`, call `get_provider_prompt({ provider: "sales-nav",
|
|
9
|
-
campaignOfferId, confirmed: true })` and include that same `campaignOfferId` in
|
|
10
|
-
`search_sales_nav` with `currentStep: "sales-nav"` so the user can watch
|
|
11
|
-
source work in the campaign UI with source-lane narration owned by the search
|
|
12
|
-
route. If no campaign ID is supplied, run campaignless preview mode. Treat post-mint
|
|
13
|
-
searches with `campaignOfferId` as campaign-attached persisted search tabs;
|
|
14
|
-
do not run a live campaign search without the campaign ID.
|
|
15
|
-
Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
|
|
16
|
-
visible transition after Start Import approval.
|
|
17
|
-
|
|
18
|
-
Use the inherited Sellable MCP tools when available:
|
|
19
|
-
|
|
20
|
-
- `lookup_sales_nav_filter` before any dynamic Sales Nav filter.
|
|
21
|
-
- `search_sales_nav` for preview searches. Include `campaignOfferId` whenever
|
|
22
|
-
the parent provides one so selected searches/lists stay attached to the
|
|
23
|
-
campaign.
|
|
24
|
-
|
|
25
|
-
Process:
|
|
26
|
-
|
|
27
|
-
1. Read the campaign brief, kickoff doc, or lane prompt supplied by the parent.
|
|
28
|
-
2. Preserve target role names with `CURRENT_TITLE` lookups; do not rely on seniority alone when the brief names concrete roles.
|
|
29
|
-
3. When `lookup_sales_nav_filter` returns multiple title options, choose the closest semantic title match instead of the first result.
|
|
30
|
-
4. Build a broad-but-reasonable baseline from role/title, geography, company size, industry/account context, and recent LinkedIn activity when relevant.
|
|
31
|
-
5. Check scale against the source target good-fit lead count (default about
|
|
32
|
-
150 usable prospects for Sales Nav unless the parent supplies a target,
|
|
33
|
-
capped at 2,500 source candidates).
|
|
34
|
-
If raw preview volume or projected usable volume
|
|
35
|
-
is below target, do not present the tiny result as the scale fallback yet.
|
|
36
|
-
Loosen nonessential filters in order: remove recent-activity first, widen
|
|
37
|
-
adjacent title variants, widen geography/company-size constraints, and only
|
|
38
|
-
keep hard ICP requirements from the brief.
|
|
39
|
-
Also check the 10% planning floor after cleanup. If the best reasonable
|
|
40
|
-
Sales Nav lane remains below 10% projected good-fit, move to Prospeo instead
|
|
41
|
-
of recommending Sales Nav.
|
|
42
|
-
6. Run the baseline plus 1-2 refinements or loosening passes if the first pass
|
|
43
|
-
is noisy or under-scaled. Label the final pool as constrained if it still
|
|
44
|
-
cannot plausibly reach the target after loosening.
|
|
45
|
-
7. Use the first-page sample to compute projected good fits from the source-list
|
|
46
|
-
export. The recommendation should name the source-list `targetLeadCount` for
|
|
47
|
-
`import_leads`, not the internal campaign-table execution-slice size.
|
|
48
|
-
8. Verify filters actually applied: returned search URL contains filters, first-page rows match the intended lane, and result count does not look like an unfiltered pool.
|
|
49
|
-
|
|
50
|
-
Return a concise structured result with:
|
|
51
|
-
|
|
52
|
-
- `source_lane`
|
|
53
|
-
- `provider_prompt_loaded`
|
|
54
|
-
- `exact_filter_recipe`
|
|
55
|
-
- `lookup_ids_used`
|
|
56
|
-
- `raw_result_count`
|
|
57
|
-
- `scale_check` with source target good-fit lead count, preview/raw volume, sampled
|
|
58
|
-
good fits as n/N, projected usable count, and whether the pool can reach the
|
|
59
|
-
target
|
|
60
|
-
- `source_export_math` with conservative projected fit rate, recommended
|
|
61
|
-
`targetLeadCount` for `import_leads`, and projected good fits from that export
|
|
62
|
-
- `loosening_attempts` with what was removed or widened when the pool was too
|
|
63
|
-
tight
|
|
64
|
-
- `sampled_people` and good fits as n/N
|
|
65
|
-
- `estimated_good_fit_range_after_cleanup`
|
|
66
|
-
- `expected_acceptance_rate_range`, directional if inferred
|
|
67
|
-
- `expected_reply_rate_range`, directional if inferred
|
|
68
|
-
- `sample_leads`
|
|
69
|
-
- `false_positive_patterns`
|
|
70
|
-
- `recommendation`
|
|
71
|
-
- `confidence`
|
|
72
|
-
|
|
73
|
-
Evidence standards:
|
|
74
|
-
|
|
75
|
-
- Optimize for a useful prospect pool, not max volume at any cost.
|
|
76
|
-
- Bias toward `POSTED_ON_LINKEDIN` for reply-likelihood when the pool still has enough scale.
|
|
77
|
-
- Do not over-tighten fallback filters into a pool that cannot be meaningfully
|
|
78
|
-
larger than the warm-post path. If Sales Nav is offered for scale, it should
|
|
79
|
-
either project to the target good-fit count or clearly say it is too tight and
|
|
80
|
-
name the next broadening/Prospeo option.
|
|
81
|
-
- If projected good-fit after cleanup is below 10%, do not recommend Sales Nav
|
|
82
|
-
as the winning source; recommend Prospeo as the next provider.
|
|
83
|
-
- Never recommend "import 25 leads" as the Sales Nav source action. Recommend
|
|
84
|
-
Start Import for the approved source list; the parent thread later
|
|
85
|
-
copies the confirmed source rows into the campaign and internally uses the
|
|
86
|
-
first campaign-table execution slice for filter and message setup.
|
|
87
|
-
- Do not hand-wave missing filter IDs.
|
|
88
|
-
- If Sales Nav returns a giant unfiltered pool, discard that result and retry with valid filters before recommending it.
|