@sellable/mcp 0.1.117 → 0.1.119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -435,19 +435,32 @@ brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
|
|
|
435
435
|
currentStep: "pick-provider", watchNarration: { ... } })` after approval so
|
|
436
436
|
the watch link moves out of Plan while the main thread compares source paths.
|
|
437
437
|
|
|
438
|
-
- After the brief is approved, show the next progress line
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
438
|
+
- After the brief is approved, show the next progress line. When the user has
|
|
439
|
+
not given a specific source direction, use the default sequential source
|
|
440
|
+
funnel:
|
|
441
|
+
`Cool. I'm going to find people who are both a good fit and active enough to
|
|
442
|
+
be worth a LinkedIn test. I'll start with warm LinkedIn post engagement because
|
|
443
|
+
that gives the strongest message context if enough ICP-looking people are
|
|
444
|
+
engaging. If that does not clear a quick viability check, I'll switch to Sales
|
|
445
|
+
Nav with recent activity, then broader Sales Nav, and use Prospeo only as the
|
|
446
|
+
fallback. No leads import until you approve the source.`
|
|
447
|
+
- If the user's request already points to a source, do not force the default
|
|
448
|
+
funnel. Start with the matching lane and say why:
|
|
449
|
+
- specific posts, creators, topics, comments, or engagement signals ->
|
|
450
|
+
Signal Discovery
|
|
451
|
+
- title/persona/company filters or broad LinkedIn people search -> Sales Nav
|
|
452
|
+
- hiring signals, account/domain lists, company growth triggers, email/domain
|
|
453
|
+
search, or target accounts -> Prospeo
|
|
454
|
+
- supplied CSV/profile list -> existing/supplied list preview
|
|
455
|
+
- explicit compare request -> compare only the requested sources
|
|
444
456
|
- In watch mode, do not leave the user sitting on only `pick-provider` while
|
|
445
|
-
source
|
|
446
|
-
(`signal-discovery`, `sales-nav`,
|
|
447
|
-
|
|
448
|
-
in the parent thread with `campaignOfferId`, `confirmed: true`, and
|
|
449
|
-
`currentStep` when the tool accepts it.
|
|
450
|
-
the
|
|
457
|
+
source viability is checked. Move the campaign to the first source lane that
|
|
458
|
+
will actually be tested (`signal-discovery`, `sales-nav`, `prospeo`, or the
|
|
459
|
+
user-directed lane), then run the campaign-attached provider prompt + provider
|
|
460
|
+
search in the parent thread with `campaignOfferId`, `confirmed: true`, and
|
|
461
|
+
`currentStep` when the tool accepts it. If that lane fails the quick viability
|
|
462
|
+
gate, update the campaign step and watchNarration before trying the next lane
|
|
463
|
+
so the user sees the source switch happen in the app.
|
|
451
464
|
- After the lead sample/source decision is ready and approved,
|
|
452
465
|
show the next progress line:
|
|
453
466
|
`Lead source is set. I'll import the first 15-row review batch into the
|
|
@@ -787,42 +800,47 @@ Required behavior:
|
|
|
787
800
|
allowed by `flow.v2.json`
|
|
788
801
|
- only mutate campaign-attached source preview state in the narrow watch-mode
|
|
789
802
|
ways allowed by the active flow step
|
|
790
|
-
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
If
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
803
|
+
- use the default sequential source viability funnel when the user did not
|
|
804
|
+
specify a source. The goal is to choose a source quickly enough to keep the
|
|
805
|
+
watched campaign moving, not to compare every plausible lane in parallel.
|
|
806
|
+
Run only enough evidence for the current lane to pass or fail the quick gate,
|
|
807
|
+
then stop on the first viable source unless the user asked to compare.
|
|
808
|
+
1. Start with LinkedIn Engagement / active LinkedIn posts (internal provider:
|
|
809
|
+
Signals / `signal-discovery`) because recent engagement gives the strongest
|
|
810
|
+
message context and expected reply-rate upside. Search relevant keyword
|
|
811
|
+
lanes, review finalist posts, promote the sampled posts with
|
|
812
|
+
`select_promising_posts` before fetching engagers when a campaign shell
|
|
813
|
+
exists, fetch top-post engagers, and estimate warm-fit volume.
|
|
814
|
+
2. If Signals does not have enough recent, relevant, ICP-looking engagers,
|
|
815
|
+
switch to Sales Nav with recent activity when the target can be expressed
|
|
816
|
+
as title/persona/company filters. Run preview filters, inspect preview rows,
|
|
817
|
+
validate the filters applied, and estimate scalable-fit volume.
|
|
818
|
+
3. If recent-activity Sales Nav is too small or noisy, broaden to normal Sales
|
|
819
|
+
Nav title + company filters and call out the weaker activity context.
|
|
820
|
+
4. Use Prospeo Contact only when the campaign has a domain/account path, the
|
|
821
|
+
user supplied domains, the user asked for hiring/growth/account triggers,
|
|
822
|
+
or the LinkedIn-first paths fail. Estimate email/contact scale and call out
|
|
823
|
+
weaker LinkedIn activity.
|
|
824
|
+
- source-specific user direction overrides the default funnel. If the user
|
|
825
|
+
names hiring signals, account/domain lists, company growth triggers, or target
|
|
826
|
+
accounts, start with Prospeo. If they supply profiles or a CSV, start with the
|
|
827
|
+
supplied-list preview. If they name posts, comments, creators, or engagement,
|
|
828
|
+
start with Signal Discovery. If they name titles/personas/company filters,
|
|
829
|
+
start with Sales Nav. If they explicitly ask for a comparison, compare only
|
|
830
|
+
those requested sources.
|
|
831
|
+
- run source scouts in parallel only when the user explicitly requested a
|
|
832
|
+
comparison, the current turn is resuming from already-started parallel scouts,
|
|
833
|
+
or the first viable source is borderline and one cheap fallback check is
|
|
834
|
+
necessary for the recommendation. Call `get_source_scout_registry` first so
|
|
835
|
+
new scouts can be added without prompt rewrites. In Codex, explicitly spawn
|
|
836
|
+
named custom subagents in the same turn when the host exposes them:
|
|
837
|
+
`source-scout-linkedin-engagement` / LinkedIn Engagement Scout,
|
|
838
|
+
`source-scout-sales-nav`, and `source-scout-prospeo-contact` for the requested
|
|
839
|
+
or fallback lanes. Codex does not infer this from generic "compare paths"
|
|
840
|
+
wording. In Claude Code, launch the matching Task/Agent subagents only when
|
|
841
|
+
the current session lists those names. If they are absent, run the same
|
|
806
842
|
provider probes with MCP tools from the parent thread and keep
|
|
807
843
|
`lead-review.md` focused on source evidence, not host-agent availability.
|
|
808
|
-
- Branch A: LinkedIn Engagement / active LinkedIn posts (internal provider:
|
|
809
|
-
Signals / `signal-discovery`). Search relevant keyword lanes, review
|
|
810
|
-
finalist posts, promote the sampled posts with `select_promising_posts`
|
|
811
|
-
before fetching engagers when a campaign shell exists, fetch top-post
|
|
812
|
-
engagers, and estimate warm-fit volume.
|
|
813
|
-
- Branch B: Sales Nav / title + company filters. Run preview filters, inspect
|
|
814
|
-
preview rows, and estimate scalable-fit volume.
|
|
815
|
-
- Branch C: Prospeo Contact / domains only when the campaign has a
|
|
816
|
-
domain/account path or the user supplied domains. Estimate email/contact
|
|
817
|
-
scale and call out weaker LinkedIn activity.
|
|
818
|
-
If the host cannot run these branches in parallel, run them sequentially and
|
|
819
|
-
do not claim they ran in parallel. If only one source angle is credible, say
|
|
820
|
-
that and run the best primary source plus one cheap fallback/quality check
|
|
821
|
-
when available. For Signals-first campaigns, search multiple Signals keyword
|
|
822
|
-
lanes and fetch top-post engagers in parallel when tool batching allows it.
|
|
823
|
-
For Sales Nav-first or Prospeo/account-first campaigns, run multiple preview
|
|
824
|
-
lanes for that provider in parallel and use Signals only as a warmth/quality
|
|
825
|
-
check when relevant.
|
|
826
844
|
- after every Sales Nav preview, validate that filters actually applied before
|
|
827
845
|
using the lane in `lead-review.md`: `searchUrl` should include filters, the
|
|
828
846
|
first page should match the intended roles/companies, and the result count
|
|
@@ -1002,6 +1020,21 @@ user-facing lead review. The visible response must include:
|
|
|
1002
1020
|
- `Sample leads` with 3-5 representative `Name — Title, Company` rows
|
|
1003
1021
|
- `Tradeoff`
|
|
1004
1022
|
- `Watch link: {watchUrl}` when the campaign shell exists
|
|
1023
|
+
- `Source math before approval` as the final content block immediately above
|
|
1024
|
+
the lead-source approval question. This is the bottom-line arithmetic that
|
|
1025
|
+
makes the recommendation feel obvious. It must use concrete counts and a
|
|
1026
|
+
simple formula, for example:
|
|
1027
|
+
`Signals: 5 relevant posts -> ~320 reachable engagers; 18 of 40 sampled
|
|
1028
|
+
engagers fit the ICP, so the expected usable range is roughly 120-160 warm
|
|
1029
|
+
prospects after cleanup. If we want more volume than that, use Sales Nav:
|
|
1030
|
+
~1,900 preview rows with 14 of 25 sampled rows looking usable, but the message
|
|
1031
|
+
context is colder.`
|
|
1032
|
+
For Signals, include selected/relevant posts, total or per-post engagers,
|
|
1033
|
+
sampled engagers, sampled ICP fits as `n/N`, estimated usable prospects, and
|
|
1034
|
+
the volume tradeoff. For Sales Nav/Prospeo alternatives, include preview/raw
|
|
1035
|
+
volume, sampled usable rows as `n/N`, estimated usable range, and the warmth
|
|
1036
|
+
or context tradeoff. Do not use percent-only fit rates or unsupported reply
|
|
1037
|
+
rate claims.
|
|
1005
1038
|
|
|
1006
1039
|
The first sentence of the visible decision must make the actual choice clear:
|
|
1007
1040
|
`I recommend {primary source} using {exact filter/source recipe}. The runner-up
|
|
@@ -1032,6 +1065,10 @@ source decision. Prefer `Approve Sales Nav with founder/CEO filters, or use
|
|
|
1032
1065
|
warmer Signals posts instead?` over `Approve this lead source?`. Option labels
|
|
1033
1066
|
must be concrete, such as `Approve Sales Nav filters`, `Use warmer Signals
|
|
1034
1067
|
posts`, `Try Prospeo/account search`, and `Revise source`.
|
|
1068
|
+
Immediately above that approval question, render the `Source math before
|
|
1069
|
+
approval` block. Do not ask the user to approve from the recommendation alone;
|
|
1070
|
+
show the math tying relevant posts, available engagers, sampled fit, expected
|
|
1071
|
+
usable lead count, and the scale alternative together first.
|
|
1035
1072
|
|
|
1036
1073
|
Do not skip or discard Signals based only on raw post count or vibes. If
|
|
1037
1074
|
Signals was considered, show the post-level math in chat first so the user can
|
|
@@ -508,6 +508,30 @@
|
|
|
508
508
|
{
|
|
509
509
|
"id": "find-leads",
|
|
510
510
|
"label": "Find leads",
|
|
511
|
+
"sourceSelectionFunnel": {
|
|
512
|
+
"defaultWhenSourceUnspecified": [
|
|
513
|
+
"signal-discovery",
|
|
514
|
+
"sales-nav-recent-active",
|
|
515
|
+
"sales-nav-general",
|
|
516
|
+
"prospeo"
|
|
517
|
+
],
|
|
518
|
+
"sourceDirectionOverrides": {
|
|
519
|
+
"postEngagement": "signal-discovery",
|
|
520
|
+
"creatorOrCommentSignals": "signal-discovery",
|
|
521
|
+
"titlePersonaCompanyFilters": "sales-nav",
|
|
522
|
+
"hiringSignals": "prospeo",
|
|
523
|
+
"companyGrowthTriggers": "prospeo",
|
|
524
|
+
"targetAccountsOrDomains": "prospeo",
|
|
525
|
+
"suppliedProfilesOrCsv": "supplied-list",
|
|
526
|
+
"explicitCompare": "compare-requested-sources"
|
|
527
|
+
},
|
|
528
|
+
"quickViabilityRule": "Run only enough of the current lane to decide whether it can supply relevant, reachable ICP-looking leads. Stop on the first viable source unless the user asked for comparison.",
|
|
529
|
+
"parallelAllowedOnlyWhen": [
|
|
530
|
+
"user explicitly requested source comparison",
|
|
531
|
+
"resuming already-started parallel scouts",
|
|
532
|
+
"first viable source is borderline and one cheap fallback check is needed"
|
|
533
|
+
]
|
|
534
|
+
},
|
|
511
535
|
"onEnter": [
|
|
512
536
|
{
|
|
513
537
|
"action": "advance_watch_to_source_selection",
|
|
@@ -521,8 +545,8 @@
|
|
|
521
545
|
"currentStep": "pick-provider",
|
|
522
546
|
"watchNarration.stage": "find-leads"
|
|
523
547
|
},
|
|
524
|
-
"when": "
|
|
525
|
-
"chatRenderRule": "Move the campaign watch view to Find Leads before the main thread starts
|
|
548
|
+
"when": "before_sequential_source_funnel",
|
|
549
|
+
"chatRenderRule": "Move the campaign watch view to Find Leads before the main thread starts source viability work. 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 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 lane being tested, why this lane now, the quick viability gate, and the safety boundary. Do not mention MCP or local artifacts."
|
|
526
550
|
},
|
|
527
551
|
{
|
|
528
552
|
"action": "advance_watch_to_initial_source_lane",
|
|
@@ -540,8 +564,8 @@
|
|
|
540
564
|
"existingList": "saved-lists",
|
|
541
565
|
"uploadedDomains": "prospeo"
|
|
542
566
|
},
|
|
543
|
-
"when": "
|
|
544
|
-
"rule": "Choose the
|
|
567
|
+
"when": "before_first_source_attempt",
|
|
568
|
+
"rule": "Choose the first visible source lane from explicit source direction when present, otherwise default to Signal Discovery. 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, promote/select the 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 the source is viable. If the lane fails, update currentStep and watchNarration before moving to Sales Nav recent activity, normal Sales Nav, or Prospeo."
|
|
545
569
|
},
|
|
546
570
|
{
|
|
547
571
|
"action": "run_first_campaign_attached_source_search",
|
|
@@ -549,8 +573,8 @@
|
|
|
549
573
|
"campaignOfferId",
|
|
550
574
|
"currentStep"
|
|
551
575
|
],
|
|
552
|
-
"before": "
|
|
553
|
-
"rule": "
|
|
576
|
+
"before": "evaluating_source_viability_gate",
|
|
577
|
+
"rule": "The parent thread must run the campaign-attached provider prompt + provider search for the current visible lane with campaignOfferId and currentStep (signal-discovery, sales-nav, prospeo, or the user-directed lane) so the campaign UI creates the corresponding live search/tab. Do not wait on background scouts before the user sees the active lane. Run only enough evidence to pass/fail this lane, then either recommend it or update the visible lane before trying the next fallback."
|
|
554
578
|
},
|
|
555
579
|
{
|
|
556
580
|
"action": "render_find_leads_progress",
|
|
@@ -558,6 +582,9 @@
|
|
|
558
582
|
"good fit and active enough to be worth a LinkedIn test",
|
|
559
583
|
"campaign source step",
|
|
560
584
|
"primary source",
|
|
585
|
+
"source hypothesis",
|
|
586
|
+
"why this source now",
|
|
587
|
+
"quick viability gate",
|
|
561
588
|
"expected volume",
|
|
562
589
|
"sampled ICP fit",
|
|
563
590
|
"activity/warmth signal",
|
|
@@ -587,7 +614,7 @@
|
|
|
587
614
|
"action": "run_subskill",
|
|
588
615
|
"target": "find-leads",
|
|
589
616
|
"mode": "campaign-attached-required",
|
|
590
|
-
"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.
|
|
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. 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."
|
|
591
618
|
},
|
|
592
619
|
{
|
|
593
620
|
"action": "optional_debug_artifacts",
|
|
@@ -693,7 +720,8 @@
|
|
|
693
720
|
"Signal keyword lanes",
|
|
694
721
|
"LinkedIn posts sampled",
|
|
695
722
|
"Sample leads",
|
|
696
|
-
"Tradeoff"
|
|
723
|
+
"Tradeoff",
|
|
724
|
+
"Source math before approval"
|
|
697
725
|
],
|
|
698
726
|
"signalsFirstRequiredFields": [
|
|
699
727
|
"post URL",
|
|
@@ -726,6 +754,18 @@
|
|
|
726
754
|
"why runner-up lost",
|
|
727
755
|
"what approval means"
|
|
728
756
|
],
|
|
757
|
+
"approvalMathRequiredFields": [
|
|
758
|
+
"selected or relevant posts count",
|
|
759
|
+
"reachable engagers count",
|
|
760
|
+
"sampled engagers count",
|
|
761
|
+
"sampled ICP fits as n/N only; no percentage",
|
|
762
|
+
"estimated usable prospects range",
|
|
763
|
+
"scale alternative source",
|
|
764
|
+
"scale alternative raw or preview volume",
|
|
765
|
+
"scale alternative sampled usable rows as n/N only; no percentage",
|
|
766
|
+
"warmth or message-context tradeoff",
|
|
767
|
+
"what to choose if the user wants more volume"
|
|
768
|
+
],
|
|
729
769
|
"signalsInlineTableRequiredFields": [
|
|
730
770
|
"keyword lane",
|
|
731
771
|
"timeframe",
|
|
@@ -746,7 +786,7 @@
|
|
|
746
786
|
"doNotCompressToSummaryOnly": false,
|
|
747
787
|
"doNotRenderArtifactLinksOnly": true,
|
|
748
788
|
"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.",
|
|
749
|
-
"chatRenderRule": "Show a slim rendered-Markdown decision summary 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 indexed sections and short bullets: recommendation, Primary source and filters, Runner-up sources, why it won, Quick numbers with one provider/source angle per bullet, raw volume, sampled fit count as n/N only (no percentages), estimated good-fit range after cleanup, activity/warmth basis, confidence note, 3-5 representative sample leads, and
|
|
789
|
+
"chatRenderRule": "Show a slim rendered-Markdown decision summary 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 indexed sections and short bullets: recommendation, Primary source and filters, Runner-up sources, why it won, Quick numbers with one provider/source angle per bullet, raw volume, sampled fit count as n/N only (no percentages), estimated good-fit range after cleanup, activity/warmth basis, confidence note, 3-5 representative sample leads, one tradeoff, and a final Source math before approval block immediately above the source approval question. 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. If Signals was searched or considered, include two compact inline Markdown tables before the recommendation is treated as final: Signal keyword lanes with keyword lane, timeframe, posts found, and finalist posts reviewed; and LinkedIn posts sampled with post URL/title, author/topic, age, engagers, sampled engagers, good fits as n/N only, estimated usable prospects per post, and use/discard decision. Default to selecting a few promising Signals posts for the first sample instead of trying to prove full Signals scale up front; if the sample is good but volume is low, say how many more posts to add/scrape next. The Source math before approval block must tie the approval choice to concrete arithmetic: relevant/selected posts, available engagers, sampled engagers, sampled ICP fits as n/N only, estimated usable prospects, and the scale alternative math. 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. Do not skip or discard Signals based only on raw post count or vibes; show the post-level math first, or explicitly say no engagers could be fetched and lower confidence. Keep discarded paths, full sample rows, and lead-sample.json details in lead-review.md. Do not show plain filesystem paths unless links cannot be created."
|
|
750
790
|
},
|
|
751
791
|
{
|
|
752
792
|
"action": "render_post_lead_parallel_progress",
|
|
@@ -768,6 +808,7 @@
|
|
|
768
808
|
{
|
|
769
809
|
"action": "ask_continue_revise_or_confirm_only_if_needed",
|
|
770
810
|
"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'.",
|
|
811
|
+
"approvalMathRule": "Immediately above the approval question, render the Source math before approval block: given this many relevant posts, this many reachable engagers, and this sampled ICP fit as n/N, we expect this usable lead range; 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.",
|
|
771
812
|
"autoContinueWhen": {
|
|
772
813
|
"status": "confirmed",
|
|
773
814
|
"confidenceIn": [
|
|
@@ -74,6 +74,45 @@ Signal Discovery:
|
|
|
74
74
|
}
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
+
Default source funnel:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"stage": "find-leads",
|
|
82
|
+
"headline": "Testing warm LinkedIn activity",
|
|
83
|
+
"visibleState": "Codex is starting with recent post engagement because it gives the strongest message context if enough ICP-looking people are active there.",
|
|
84
|
+
"agentIntent": "If this lane does not clear the quick sample gate, it will switch to Sales Nav with recent activity, then broader Sales Nav, and use Prospeo only as the fallback.",
|
|
85
|
+
"nextAction": "Review source",
|
|
86
|
+
"safety": "No leads import until you approve the source."
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Source direction override:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"stage": "find-leads",
|
|
95
|
+
"headline": "Testing the requested source",
|
|
96
|
+
"visibleState": "The campaign asked for hiring and account signals, so Codex is starting with Prospeo instead of the default LinkedIn engagement path.",
|
|
97
|
+
"agentIntent": "It is checking whether this source has enough reachable ICP-looking people before importing a review batch.",
|
|
98
|
+
"nextAction": "Review source",
|
|
99
|
+
"safety": "No leads import until you approve the source."
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Source fallback:
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"stage": "find-leads",
|
|
108
|
+
"headline": "Switching source lanes",
|
|
109
|
+
"visibleState": "The Signal Discovery sample did not show enough ICP-looking engagers for a confident first batch.",
|
|
110
|
+
"agentIntent": "Codex is trying Sales Nav with recent activity so the source can still preserve some buyer activity context.",
|
|
111
|
+
"nextAction": "Review source",
|
|
112
|
+
"safety": "No leads import until you approve the source."
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
77
116
|
Search iteration:
|
|
78
117
|
|
|
79
118
|
```json
|