@sellable/mcp 0.1.122 → 0.1.124
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.
|
@@ -26,26 +26,38 @@ 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
|
|
53
|
+
leads per 100 engagers before and after a conservative dedupe/cleanup
|
|
54
|
+
factor, average reachable engagers per right-content post, expected usable
|
|
43
55
|
leads per right-content post after dedupe/cleanup, and posts needed to hit
|
|
44
56
|
the target.
|
|
45
|
-
|
|
57
|
+
8. Select/promote enough right-content posts to plausibly hit the target. If the
|
|
46
58
|
warm Signals pool is useful but too small, return the expected warm range and
|
|
47
59
|
recommend Sales Nav/Prospeo for scale instead of padding with noisy posts.
|
|
48
|
-
|
|
60
|
+
9. Return false positives and dead ends explicitly.
|
|
49
61
|
|
|
50
62
|
Return a concise structured result with:
|
|
51
63
|
|
|
@@ -55,8 +67,10 @@ Return a concise structured result with:
|
|
|
55
67
|
- `selected_posts` with URL/title, author/topic, age, engager count, sampled engagers, good fits as n/N, estimated usable prospects per post, use/discard
|
|
56
68
|
- `sample_leads`, if any
|
|
57
69
|
- `approval_math` with eligible posts, target good-fit leads, sampled engagers,
|
|
58
|
-
ICP-fit rate as `n/N` plus percentage/range,
|
|
59
|
-
|
|
70
|
+
ICP-fit rate as `n/N` plus percentage/range, good-fit prospects per 100
|
|
71
|
+
engagers, average reachable engagers per post, expected usable prospects per
|
|
72
|
+
post after cleanup, posts needed for target, selected post count, expected
|
|
73
|
+
usable lead range, and scale fallback
|
|
60
74
|
- `estimated_good_fit_range`
|
|
61
75
|
- `message_context_strength`, directional and source-specific
|
|
62
76
|
- `false_positive_patterns`
|
|
@@ -67,8 +81,14 @@ Evidence standards:
|
|
|
67
81
|
|
|
68
82
|
- Do not trust raw post volume without inspecting finalist post quality.
|
|
69
83
|
- Prefer sample-based pass rates over intuition.
|
|
84
|
+
- Prefer narrow intersection topics over broad audience topics. A post about
|
|
85
|
+
the anchor technology alone is not enough; the post should also express the
|
|
86
|
+
GTM/outbound/buyer pain, workflow, or role context that makes the campaign
|
|
87
|
+
relevant.
|
|
70
88
|
- Do not make the user infer capacity. Say, plainly, how many eligible posts
|
|
71
|
-
exist,
|
|
72
|
-
|
|
89
|
+
exist, how many sampled engagers looked in-ICP, how many good-fit prospects
|
|
90
|
+
that implies per 100 engagers, how many usable prospects one right-content
|
|
91
|
+
post should yield after cleanup, how many posts are needed for 500+ good-fit
|
|
92
|
+
leads, and which posts you would use.
|
|
73
93
|
- If `fetch_post_engagers` is unavailable or fails, report that explicitly and mark the estimate lower-confidence.
|
|
74
94
|
- Keep LinkedIn Engagement viable when selected posts can produce roughly 150+ ICP-fit warm prospects before final filtering, even if Sales Nav is more scalable.
|
|
@@ -26,8 +26,16 @@ Process:
|
|
|
26
26
|
2. Preserve target role names with `CURRENT_TITLE` lookups; do not rely on seniority alone when the brief names concrete roles.
|
|
27
27
|
3. When `lookup_sales_nav_filter` returns multiple title options, choose the closest semantic title match instead of the first result.
|
|
28
28
|
4. Build a broad-but-reasonable baseline from role/title, geography, company size, industry/account context, and recent LinkedIn activity when relevant.
|
|
29
|
-
5.
|
|
30
|
-
|
|
29
|
+
5. Check scale against the target good-fit lead count (default 500 unless the
|
|
30
|
+
parent supplies a target). If raw preview volume or projected usable volume
|
|
31
|
+
is below target, do not present the tiny result as the scale fallback yet.
|
|
32
|
+
Loosen nonessential filters in order: remove recent-activity first, widen
|
|
33
|
+
adjacent title variants, widen geography/company-size constraints, and only
|
|
34
|
+
keep hard ICP requirements from the brief.
|
|
35
|
+
6. Run the baseline plus 1-2 refinements or loosening passes if the first pass
|
|
36
|
+
is noisy or under-scaled. Label the final pool as constrained if it still
|
|
37
|
+
cannot plausibly reach the target after loosening.
|
|
38
|
+
7. 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.
|
|
31
39
|
|
|
32
40
|
Return a concise structured result with:
|
|
33
41
|
|
|
@@ -36,6 +44,11 @@ Return a concise structured result with:
|
|
|
36
44
|
- `exact_filter_recipe`
|
|
37
45
|
- `lookup_ids_used`
|
|
38
46
|
- `raw_result_count`
|
|
47
|
+
- `scale_check` with target good-fit lead count, preview/raw volume, sampled
|
|
48
|
+
good fits as n/N, projected usable count, and whether the pool can reach the
|
|
49
|
+
target
|
|
50
|
+
- `loosening_attempts` with what was removed or widened when the pool was too
|
|
51
|
+
tight
|
|
39
52
|
- `sampled_people` and good fits as n/N
|
|
40
53
|
- `estimated_good_fit_range_after_cleanup`
|
|
41
54
|
- `expected_acceptance_rate_range`, directional if inferred
|
|
@@ -49,5 +62,9 @@ Evidence standards:
|
|
|
49
62
|
|
|
50
63
|
- Optimize for a useful prospect pool, not max volume at any cost.
|
|
51
64
|
- Bias toward `POSTED_ON_LINKEDIN` for reply-likelihood when the pool still has enough scale.
|
|
65
|
+
- Do not over-tighten fallback filters into a pool that cannot be meaningfully
|
|
66
|
+
larger than the warm-post path. If Sales Nav is offered for scale, it should
|
|
67
|
+
either project to the target good-fit count or clearly say it is too tight and
|
|
68
|
+
name the next broadening/Prospeo option.
|
|
52
69
|
- Do not hand-wave missing filter IDs.
|
|
53
70
|
- If Sales Nav returns a giant unfiltered pool, discard that result and retry with valid filters before recommending it.
|
package/package.json
CHANGED
|
@@ -816,8 +816,9 @@ Required behavior:
|
|
|
816
816
|
then stop on the first viable source unless the user asked to compare.
|
|
817
817
|
1. Start with LinkedIn Engagement / active LinkedIn posts (internal provider:
|
|
818
818
|
Signals / `signal-discovery`) because recent engagement gives the strongest
|
|
819
|
-
message context and expected reply-rate upside. Search
|
|
820
|
-
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
|
|
821
822
|
`select_promising_posts` before fetching engagers when a campaign shell
|
|
822
823
|
exists, fetch top-post engagers, estimate ICP-fit rate, compute posts
|
|
823
824
|
needed for the target good-fit lead count, and only then recommend the
|
|
@@ -825,7 +826,9 @@ Required behavior:
|
|
|
825
826
|
2. If Signals does not have enough recent, relevant, ICP-looking engagers,
|
|
826
827
|
switch to Sales Nav with recent activity when the target can be expressed
|
|
827
828
|
as title/persona/company filters. Run preview filters, inspect preview rows,
|
|
828
|
-
validate the filters applied, and estimate scalable-fit volume.
|
|
829
|
+
validate the filters applied, and estimate scalable-fit volume. If the
|
|
830
|
+
preview/projected usable pool is below the target good-fit count, loosen
|
|
831
|
+
nonessential filters before presenting Sales Nav as the scale fallback.
|
|
829
832
|
3. If recent-activity Sales Nav is too small or noisy, broaden to normal Sales
|
|
830
833
|
Nav title + company filters and call out the weaker activity context.
|
|
831
834
|
4. Use Prospeo Contact only when the campaign has a domain/account path, the
|
|
@@ -868,6 +871,13 @@ Required behavior:
|
|
|
868
871
|
keyword lanes; it does not mean 492 prospects. The source decision must name
|
|
869
872
|
the actual posts we would use, show why they won, and estimate usable engagers
|
|
870
873
|
from those posts after headline/sample filtering
|
|
874
|
+
- for Signals-first campaigns, keyword lanes must be intersection-first. If the
|
|
875
|
+
campaign anchor is `Claude`, `MCP`, `AI agents`, or another broad technology,
|
|
876
|
+
do not make broad anchor-only lanes the main test. Combine the anchor with the
|
|
877
|
+
specific wedge and buyer pain, such as outbound, GTM automation, LinkedIn
|
|
878
|
+
outreach, AI SDR skepticism, founder-led sales, RevOps, or the ICP role. Treat
|
|
879
|
+
broad anchor-only lanes as fallback inventory only, and retarget before
|
|
880
|
+
sampling if the first pass is broad.
|
|
871
881
|
- Signals viability is based on estimated ICP-fit reachable engagers, not raw
|
|
872
882
|
post count and not whether it beats Sales Nav scale. If 5-8 selected posts can
|
|
873
883
|
plausibly produce ~150+ ICP-fit warm prospects before final filtering, keep
|
|
@@ -1017,8 +1027,9 @@ not a research memo. It must include only:
|
|
|
1017
1027
|
activity filters. For Signals, name the selected post set. For Prospeo, name
|
|
1018
1028
|
the account/domain and title recipe.
|
|
1019
1029
|
- `Math:` with these labels and values:
|
|
1020
|
-
`Eligible posts`, `Sample`, `ICP-fit`, `
|
|
1021
|
-
`
|
|
1030
|
+
`Eligible posts`, `Sample`, `ICP-fit`, `Good-fit / 100 engagers`,
|
|
1031
|
+
`Avg engagers/post`, `Good-fit / post`, `Target`, `Posts needed`,
|
|
1032
|
+
`Selected`, `Expected good-fit leads`, and `Scale option`.
|
|
1022
1033
|
- `Why this source:` with at most two bullets.
|
|
1023
1034
|
- `Watch link: {watchUrl}` only when the campaign shell exists and the host
|
|
1024
1035
|
needs a handoff link.
|
|
@@ -1028,14 +1039,20 @@ Do not include keyword-lane tables, LinkedIn-post-sampled tables, sample-lead
|
|
|
1028
1039
|
lists, or long tradeoff prose in the default approval packet. Keep those details
|
|
1029
1040
|
in `lead-review.md` or campaign/source decision state. The math block is the
|
|
1030
1041
|
bottom-line arithmetic that makes the recommendation obvious. For example:
|
|
1031
|
-
`Eligible posts:
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1042
|
+
`Eligible posts: 18 outbound + Claude posts. Sample: 31/125 ICP fits. ICP-fit:
|
|
1043
|
+
~25%, directional. Good-fit / 100 engagers: ~25 before cleanup, ~15-18 after
|
|
1044
|
+
dedupe/cleanup. Avg engagers/post: ~480 reachable. Good-fit / post: ~72-86
|
|
1045
|
+
usable. Target: 500 good-fit leads. Posts needed: about 6-7 right-content posts.
|
|
1046
|
+
Selected: 7 posts. Expected good-fit leads: ~500-600 after dedupe/cleanup. Scale
|
|
1047
|
+
option: Sales Nav can broaden to founder/GTM/RevOps filters if you want colder
|
|
1048
|
+
scale, but loses the engaged-with-this-content message hook.` If the selected
|
|
1049
|
+
posts only support the 15-row review batch or a smaller warm pilot, say that
|
|
1050
|
+
plainly and do not imply the lane can hit 500. For Sales Nav/Prospeo
|
|
1051
|
+
alternatives, include preview/raw volume, sampled usable rows as `n/N` plus
|
|
1052
|
+
percentage/range, estimated usable range, and the warmth or context tradeoff.
|
|
1053
|
+
If Sales Nav preview volume is too tight, broaden nonessential filters before
|
|
1054
|
+
using it as the scale option, or label it constrained and name the next fallback.
|
|
1055
|
+
Do not use percent-only fit rates or unsupported reply-rate claims.
|
|
1039
1056
|
|
|
1040
1057
|
The first sentence of the visible decision must make the actual choice clear:
|
|
1041
1058
|
`I recommend {primary source} using {exact filter/source recipe}. The runner-up
|
|
@@ -1083,12 +1100,14 @@ For Signals, default to a quick capacity test before final recommendation. Pick
|
|
|
1083
1100
|
a narrow first sample of fresh, high-density posts, and in campaign-attached
|
|
1084
1101
|
watch runs promote those posts with `select_promising_posts` before sampling so
|
|
1085
1102
|
the user sees which posts are being tested. Then sample engagers, show ICP-fit
|
|
1086
|
-
rate as `n/N` plus percentage/range,
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1103
|
+
rate as `n/N` plus percentage/range, convert that to good-fit prospects per 100
|
|
1104
|
+
engagers, estimate average reachable engagers per right-content post, apply a
|
|
1105
|
+
conservative dedupe/cleanup factor, calculate good-fit prospects per post, then
|
|
1106
|
+
calculate how many right-content posts are needed to reach the target good-fit
|
|
1107
|
+
lead count. Select/promote enough right-content posts if the lane can hit the
|
|
1108
|
+
target. If the first sample is good but volume is low, say how many more posts
|
|
1109
|
+
would be needed and offer the Sales Nav/Prospeo scale alternative instead of
|
|
1110
|
+
recommending an under-sized source as if it can produce 500+ leads.
|
|
1092
1111
|
|
|
1093
1112
|
Keep discarded paths and full sample rows in the campaign/source decision
|
|
1094
1113
|
context. In explicit debug/UAT runs they may also be copied into
|
|
@@ -525,7 +525,7 @@
|
|
|
525
525
|
"suppliedProfilesOrCsv": "supplied-list",
|
|
526
526
|
"explicitCompare": "compare-requested-sources"
|
|
527
527
|
},
|
|
528
|
-
"quickViabilityRule": "Run only enough of the current lane to decide whether it can supply relevant, reachable ICP-looking leads. For Signals, viability requires sampled ICP-fit rate
|
|
528
|
+
"quickViabilityRule": "Run only enough of the current lane to decide whether it can supply relevant, reachable ICP-looking leads. For Signals, viability requires sampled ICP-fit rate normalized to good-fit prospects per 100 engagers, average reachable engagers per right-content post, projected good-fit prospects per post after cleanup, and posts-needed math against the target good-fit lead count, not raw post count. Stop on the first viable source unless the user asked for comparison.",
|
|
529
529
|
"parallelAllowedOnlyWhen": [
|
|
530
530
|
"user explicitly requested source comparison",
|
|
531
531
|
"resuming already-started parallel scouts",
|
|
@@ -568,7 +568,7 @@
|
|
|
568
568
|
},
|
|
569
569
|
"when": "after_source_selection_checkpoint_before_first_source_attempt",
|
|
570
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:
|
|
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, good-fit prospects per 100 engagers, average reachable engagers per right-content post, expected good-fit prospects per post after cleanup, 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."
|
|
572
572
|
},
|
|
573
573
|
{
|
|
574
574
|
"action": "run_first_campaign_attached_source_search",
|
|
@@ -617,7 +617,7 @@
|
|
|
617
617
|
"action": "run_subskill",
|
|
618
618
|
"target": "find-leads",
|
|
619
619
|
"mode": "campaign-attached-required",
|
|
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,
|
|
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, good-fit prospects per 100 engagers, average reachable engagers per right-content post, expected good-fit prospects per post after cleanup, target good-fit lead count, posts needed, selected posts, expected good-fit range, and scale fallback. For Sales Nav fallback, do not over-tighten filters into a tiny pool; if preview/projected usable volume is below the target, loosen nonessential filters before presenting Sales Nav as the scale option and label it constrained if it still cannot reach the target. 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."
|
|
621
621
|
},
|
|
622
622
|
{
|
|
623
623
|
"action": "optional_debug_artifacts",
|
|
@@ -720,6 +720,9 @@
|
|
|
720
720
|
"Eligible posts",
|
|
721
721
|
"Sample",
|
|
722
722
|
"ICP-fit",
|
|
723
|
+
"Good-fit / 100 engagers",
|
|
724
|
+
"Avg engagers/post",
|
|
725
|
+
"Good-fit / post",
|
|
723
726
|
"Target",
|
|
724
727
|
"Posts needed",
|
|
725
728
|
"Selected",
|
|
@@ -764,6 +767,10 @@
|
|
|
764
767
|
"reachable engagers count",
|
|
765
768
|
"sampled engagers count",
|
|
766
769
|
"sampled ICP fits as n/N plus percentage or range",
|
|
770
|
+
"good-fit prospects per 100 engagers",
|
|
771
|
+
"average reachable engagers per post",
|
|
772
|
+
"expected good-fit prospects per post after cleanup",
|
|
773
|
+
"dedupe or cleanup factor",
|
|
767
774
|
"target good-fit lead count",
|
|
768
775
|
"posts needed for target",
|
|
769
776
|
"selected posts count",
|
|
@@ -771,6 +778,7 @@
|
|
|
771
778
|
"scale alternative source",
|
|
772
779
|
"scale alternative raw or preview volume",
|
|
773
780
|
"scale alternative sampled usable rows as n/N plus percentage or range",
|
|
781
|
+
"Sales Nav broadening or loosening attempts when fallback volume is too tight",
|
|
774
782
|
"warmth or message-context tradeoff",
|
|
775
783
|
"what to choose if the user wants more volume"
|
|
776
784
|
],
|
|
@@ -794,7 +802,7 @@
|
|
|
794
802
|
"doNotCompressToSummaryOnly": false,
|
|
795
803
|
"doNotRenderArtifactLinksOnly": true,
|
|
796
804
|
"sourceRecommendationReadyWatchRule": "When the source recommendation decision card is ready in chat with counts and sample quality, and before asking for source approval, call update_campaign with leadSourceType `new`, leadSourceProvider set to the recommended primary provider, currentStep set to that provider lane (`sales-nav`, `signal-discovery`, or `prospeo`), and find-leads watchNarration. If the recommendation changed from the lane last sampled, switch the watched provider page to the recommended lane first so the user can inspect what they are approving. Use a headline like `Review the source in Codex`, body copy that says the browser is showing the evaluated source/results, and nextAction like `Approve in Codex`. Do not keep future-tense copy like `I'll show a source recommendation` after the decision is visible. Include a safety note that no leads import until the user approves the source.",
|
|
797
|
-
"chatRenderRule": "Show a compact rendered-Markdown decision card only, never a fenced code block. The first sentence must make the decision explicit: 'I recommend {primary source} using {exact filter/source recipe}. The runner-up is {source} because {reason}.' Use only these sections: Lead source decision, Source recommendation, Math, Why this source, and the concrete approval question. The Math section must include labeled lines for Eligible posts, Sample, ICP-fit, Target, Posts needed, Selected, Expected good-fit leads, and Scale option. Show fit as n/N plus an easy percentage or range, never percent-only. Do not include keyword-lane tables, LinkedIn-post-sampled tables, sample-lead lists, or long tradeoff prose in the default approval packet; keep those details in lead-review.md or campaign/source decision state. Do not forecast connection acceptance rates, reply rates, meetings, pipeline, revenue, or ROI unless the user supplied verified benchmark data for this exact workspace/sender. For Signals, do not recommend from raw post count. Compute eligible right-content posts, reachable engagers, sampled ICP-fit rate, target good-fit lead count, posts needed, selected posts, expected good-fit range, and scale fallback. If the user wants more volume than the warm post-engagement estimate, explicitly say which Sales Nav or Prospeo alternative provides that volume and what message-context warmth is lost. If no engagers could be fetched, say that explicitly and lower confidence. Do not show plain filesystem paths unless links cannot be created."
|
|
805
|
+
"chatRenderRule": "Show a compact rendered-Markdown decision card only, never a fenced code block. The first sentence must make the decision explicit: 'I recommend {primary source} using {exact filter/source recipe}. The runner-up is {source} because {reason}.' Use only these sections: Lead source decision, Source recommendation, Math, Why this source, and the concrete approval question. The Math section must include labeled lines for Eligible posts, Sample, ICP-fit, Good-fit / 100 engagers, Avg engagers/post, Good-fit / post, Target, Posts needed, Selected, Expected good-fit leads, and Scale option. Show fit as n/N plus an easy percentage or range, never percent-only. Do not include keyword-lane tables, LinkedIn-post-sampled tables, sample-lead lists, or long tradeoff prose in the default approval packet; keep those details in lead-review.md or campaign/source decision state. Do not forecast connection acceptance rates, reply rates, meetings, pipeline, revenue, or ROI unless the user supplied verified benchmark data for this exact workspace/sender. For Signals, do not recommend from raw post count. Compute eligible right-content posts, reachable engagers, sampled ICP-fit rate, good-fit prospects per 100 engagers, average reachable engagers per right-content post, expected good-fit prospects per post after cleanup, target good-fit lead count, posts needed, selected posts, expected good-fit range, and scale fallback. If the selected warm posts only support a review batch or smaller pilot, say they do not hit 500 instead of calling them scalable. If the user wants more volume than the warm post-engagement estimate, explicitly say which Sales Nav or Prospeo alternative provides that volume and what message-context warmth is lost; Sales Nav must be broadened/loosened before it is presented as the scale option if the initial filter pool is too tight. If no engagers could be fetched, say that explicitly and lower confidence. Do not show plain filesystem paths unless links cannot be created."
|
|
798
806
|
},
|
|
799
807
|
{
|
|
800
808
|
"action": "render_post_lead_parallel_progress",
|
|
@@ -816,7 +824,7 @@
|
|
|
816
824
|
{
|
|
817
825
|
"action": "ask_continue_revise_or_confirm_only_if_needed",
|
|
818
826
|
"approvalQuestionRule": "If asking the user, the question and options must name the concrete decision. Prefer: 'Approve Sales Nav with {filters}, or use warmer Signals instead?' over 'Approve this lead source?' Option labels must name the source choice, such as 'Approve Sales Nav filters', 'Use warmer Signals posts', 'Try Prospeo/account search', and 'Revise source'.",
|
|
819
|
-
"approvalMathRule": "Immediately above the approval question, render the compact Math block: given this many eligible relevant posts, this many reachable engagers, this sampled ICP fit as n/N plus percentage/range, this target good-fit lead count, and this many posts needed, we expect this usable lead range from the selected posts; if the user wants more volume, name the Sales Nav or Prospeo alternative, its preview/sample math, and the colder/weaker-context tradeoff. Do not ask the approval question until this math is visible.",
|
|
827
|
+
"approvalMathRule": "Immediately above the approval question, render the compact Math block: given this many eligible relevant posts, this many reachable engagers, this sampled ICP fit as n/N plus percentage/range, this many good-fit prospects per 100 engagers, this average reachable engagers per post, this expected good-fit prospects per post after cleanup, this target good-fit lead count, and this many posts needed, we expect this usable lead range from the selected posts; if the user wants more volume, name the Sales Nav or Prospeo alternative, its preview/sample math, any Sales Nav loosening used to avoid an over-tight pool, and the colder/weaker-context tradeoff. Do not ask the approval question until this math is visible.",
|
|
820
828
|
"autoContinueWhen": {
|
|
821
829
|
"status": "confirmed",
|
|
822
830
|
"confidenceIn": [
|
|
@@ -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
|
|
@@ -86,6 +89,16 @@ You must estimate:
|
|
|
86
89
|
- how many sampled people matched the rough headline rubric
|
|
87
90
|
- `passRate`
|
|
88
91
|
- sampled pass rate used for extrapolation
|
|
92
|
+
- `goodFitPer100Engagers`
|
|
93
|
+
- normalized fit rate as good-fit prospects per 100 engagers, before and
|
|
94
|
+
after a conservative dedupe/cleanup factor
|
|
95
|
+
- `avgReachableEngagersPerPost`
|
|
96
|
+
- average reachable engagers per right-content post used for capacity math
|
|
97
|
+
- `goodFitProspectsPerPost`
|
|
98
|
+
- expected good-fit prospects per right-content post after dedupe/cleanup
|
|
99
|
+
- `postsNeededForTarget`
|
|
100
|
+
- number of right-content posts needed to reach the target good-fit lead
|
|
101
|
+
count, defaulting to 500 unless the campaign says otherwise
|
|
89
102
|
- `projectedRange`
|
|
90
103
|
- the conservative range implied by the observed sample
|
|
91
104
|
|
|
@@ -109,7 +122,7 @@ Use conservative logic:
|
|
|
109
122
|
- stale posts
|
|
110
123
|
- adjacent communities that are not actual buyers
|
|
111
124
|
4. Explain the pass-through briefly and explicitly:
|
|
112
|
-
- preferred: "`sampledCount`: 40, `passCount`: 9, `passRate`: ~22%, `recentStrongPostCount`: 15-25, `freshEnoughPostCount`: 8-12, `
|
|
125
|
+
- preferred: "`sampledCount`: 40, `passCount`: 9, `passRate`: ~22%, `goodFitPer100Engagers`: ~22 before cleanup / ~13-16 after cleanup, `avgReachableEngagersPerPost`: 240, `goodFitProspectsPerPost`: ~31-38, `postsNeededForTarget`: ~14-17, `recentStrongPostCount`: 15-25, `freshEnoughPostCount`: 8-12, `projectedRange`: 210-600"
|
|
113
126
|
- fallback: "I could not fetch engagers, so this is inferred from post and author quality only"
|
|
114
127
|
5. If the evidence is too weak, say so and return a low-confidence estimate instead of pretending precision.
|
|
115
128
|
6. Do not manually enumerate dozens of engagers in the final answer. Summarize the sample by `sampledCount`, `passCount`, `passRate`, `projectedRange`, and 3-6 representative examples.
|
|
@@ -122,6 +135,27 @@ Use conservative logic:
|
|
|
122
135
|
|
|
123
136
|
You're NOT looking for generic buying intent keywords. You're looking for topics that attract YOUR SPECIFIC ICP:
|
|
124
137
|
|
|
138
|
+
### Intersection-First Rule
|
|
139
|
+
|
|
140
|
+
When the campaign has an anchor technology, category, community, or named tool,
|
|
141
|
+
do not search only the anchor. Combine it with the campaign's buyer pain, use
|
|
142
|
+
case, workflow, or role so the resulting posts are likely to attract the right
|
|
143
|
+
ICP before any engager filtering.
|
|
144
|
+
|
|
145
|
+
For a campaign about Claude/AI workflows for GTM, better first-round keywords
|
|
146
|
+
look like:
|
|
147
|
+
|
|
148
|
+
- "Claude outbound"
|
|
149
|
+
- "Claude Code LinkedIn outreach"
|
|
150
|
+
- "AI SDR Claude"
|
|
151
|
+
- "GTM automation Claude"
|
|
152
|
+
- "founder led sales Claude"
|
|
153
|
+
|
|
154
|
+
Broad anchor-only keywords such as "Claude Code", "MCP", "AI agents", or
|
|
155
|
+
"agentic coding" are inventory probes only. Use them after narrow lanes fail or
|
|
156
|
+
as diagnostic context; do not select/promote broad posts when narrower
|
|
157
|
+
campaign-wedge posts exist.
|
|
158
|
+
|
|
125
159
|
### For Founder/Executive ICPs:
|
|
126
160
|
|
|
127
161
|
- "founder mode", "founder led sales", "founder brand"
|
|
@@ -149,6 +183,10 @@ You're NOT looking for generic buying intent keywords. You're looking for topics
|
|
|
149
183
|
- Each round must have DIFFERENT keywords (no repeats across rounds)
|
|
150
184
|
- Use SINGLE keywords or short phrases only
|
|
151
185
|
- DO NOT use boolean operators (OR, AND, NOT)
|
|
186
|
+
- At least 3 first-round keywords must be intersection keywords that include
|
|
187
|
+
both the anchor topic and the campaign pain/use case/ICP context.
|
|
188
|
+
- If search results come back broad, immediately run a refined round around the
|
|
189
|
+
campaign wedge before selecting posts or sampling engagers.
|
|
152
190
|
|
|
153
191
|
Examples of GOOD keywords:
|
|
154
192
|
|
|
@@ -340,6 +378,8 @@ recommendation, estimate source capacity from real sample math:
|
|
|
340
378
|
- eligible right-content posts by lane/content type
|
|
341
379
|
- reachable engagers from those posts
|
|
342
380
|
- sampled ICP-fit rate as `n/N` plus an easy percentage/range
|
|
381
|
+
- good-fit prospects per 100 engagers before and after conservative cleanup
|
|
382
|
+
- average reachable engagers per right-content post
|
|
343
383
|
- expected good-fit leads per selected post after dedupe/cleanup
|
|
344
384
|
- posts needed to reach the target
|
|
345
385
|
|