@sellable/mcp 0.1.273 → 0.1.275

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.
@@ -135,7 +135,7 @@ export interface PostFindLeadsScoutRegistryResponse {
135
135
  }
136
136
  export declare const DEFAULT_SUBSKILL_PROMPT_CHUNK_CHARS = 48000;
137
137
  export declare const MAX_SUBSKILL_PROMPT_CHUNK_CHARS = 48000;
138
- export declare const ALLOWED_SUBSKILL_PROMPT_NAMES: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
138
+ export declare const ALLOWED_SUBSKILL_PROMPT_NAMES: readonly ["building-gtm-tables", "content", "create-ab-test", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
139
139
  export declare const promptToolDefinitions: ({
140
140
  name: string;
141
141
  description: string;
@@ -179,7 +179,7 @@ export declare const promptToolDefinitions: ({
179
179
  properties: {
180
180
  subskillName: {
181
181
  type: string;
182
- enum: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
182
+ enum: readonly ["building-gtm-tables", "content", "create-ab-test", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
183
183
  description: string;
184
184
  };
185
185
  offset: {
@@ -214,7 +214,7 @@ export declare const promptToolDefinitions: ({
214
214
  properties: {
215
215
  subskillName: {
216
216
  type: string;
217
- enum: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
217
+ enum: readonly ["building-gtm-tables", "content", "create-ab-test", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
218
218
  description: string;
219
219
  };
220
220
  assetPath: {
@@ -19,6 +19,7 @@ const DEPRECATED_SUBSKILL_PROMPT_REPLACEMENTS = {
19
19
  export const ALLOWED_SUBSKILL_PROMPT_NAMES = [
20
20
  "building-gtm-tables",
21
21
  "content",
22
+ "create-ab-test",
22
23
  "create-campaign",
23
24
  "create-campaign-brief",
24
25
  "create-campaign-v2",
@@ -225,7 +225,7 @@ export declare const allTools: ({
225
225
  properties: {
226
226
  subskillName: {
227
227
  type: string;
228
- enum: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
228
+ enum: readonly ["building-gtm-tables", "content", "create-ab-test", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
229
229
  description: string;
230
230
  };
231
231
  offset: {
@@ -260,7 +260,7 @@ export declare const allTools: ({
260
260
  properties: {
261
261
  subskillName: {
262
262
  type: string;
263
- enum: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
263
+ enum: readonly ["building-gtm-tables", "content", "create-ab-test", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "foundation", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
264
264
  description: string;
265
265
  };
266
266
  assetPath: {
@@ -1140,6 +1140,62 @@ export declare const allTools: ({
1140
1140
  required: string[];
1141
1141
  additionalProperties?: undefined;
1142
1142
  };
1143
+ } | {
1144
+ name: string;
1145
+ description: string;
1146
+ inputSchema: {
1147
+ type: string;
1148
+ properties: {
1149
+ sourceCampaignId: {
1150
+ type: string;
1151
+ description: string;
1152
+ };
1153
+ variantName: {
1154
+ type: string;
1155
+ description: string;
1156
+ };
1157
+ variantBriefDelta: {
1158
+ type: string;
1159
+ description: string;
1160
+ };
1161
+ variantALabel: {
1162
+ type: string;
1163
+ description: string;
1164
+ };
1165
+ variantABriefDelta: {
1166
+ type: string;
1167
+ description: string;
1168
+ };
1169
+ splitStrategy: {
1170
+ type: string;
1171
+ enum: string[];
1172
+ description: string;
1173
+ };
1174
+ targetCounts: {
1175
+ type: string;
1176
+ properties: {
1177
+ a: {
1178
+ type: string;
1179
+ };
1180
+ b: {
1181
+ type: string;
1182
+ };
1183
+ };
1184
+ additionalProperties: boolean;
1185
+ description: string;
1186
+ };
1187
+ dryRun: {
1188
+ type: string;
1189
+ description: string;
1190
+ };
1191
+ idempotencyKey: {
1192
+ type: string;
1193
+ description: string;
1194
+ };
1195
+ };
1196
+ required: string[];
1197
+ additionalProperties: boolean;
1198
+ };
1143
1199
  } | {
1144
1200
  name: string;
1145
1201
  description: string;
@@ -1956,6 +2012,53 @@ export declare const allTools: ({
1956
2012
  };
1957
2013
  required: never[];
1958
2014
  };
2015
+ } | {
2016
+ name: string;
2017
+ description: string;
2018
+ inputSchema: {
2019
+ type: string;
2020
+ properties: {
2021
+ searchToken: {
2022
+ type: string;
2023
+ description: string;
2024
+ };
2025
+ selectedJobIds: {
2026
+ type: string;
2027
+ items: {
2028
+ type: string;
2029
+ };
2030
+ description: string;
2031
+ };
2032
+ name: {
2033
+ type: string;
2034
+ };
2035
+ outputDir: {
2036
+ type: string;
2037
+ description: string;
2038
+ };
2039
+ fileBaseName: {
2040
+ type: string;
2041
+ description: string;
2042
+ };
2043
+ search?: undefined;
2044
+ searches?: undefined;
2045
+ location?: undefined;
2046
+ geoId?: undefined;
2047
+ postedLimit?: undefined;
2048
+ sortBy?: undefined;
2049
+ workplaceType?: undefined;
2050
+ employmentType?: undefined;
2051
+ experienceLevel?: undefined;
2052
+ easyApply?: undefined;
2053
+ under10Applicants?: undefined;
2054
+ salary?: undefined;
2055
+ pages?: undefined;
2056
+ maxRows?: undefined;
2057
+ artifactFormat?: undefined;
2058
+ };
2059
+ required: string[];
2060
+ additionalProperties: boolean;
2061
+ };
1959
2062
  } | {
1960
2063
  name: string;
1961
2064
  description: string;
@@ -2,6 +2,7 @@ import { authToolDefinitions } from "./auth.js";
2
2
  import { blueprintCommitToolDefinitions } from "./blueprint-commit.js";
3
3
  import { bootstrapToolDefinitions } from "./bootstrap.js";
4
4
  import { campaignToolDefinitions } from "./campaigns.js";
5
+ import { campaignAbTestToolDefinitions } from "./campaign-ab-test.js";
5
6
  import { campaignProcessingToolDefinitions } from "./campaign-processing.js";
6
7
  import { cellToolDefinitions } from "./cells.js";
7
8
  import { startCliLoginToolDef, waitForCliLoginToolDef } from "./cli-login.js";
@@ -14,6 +15,7 @@ import { engageMemoryToolDefinitions } from "./engage-memory.js";
14
15
  import { engageStateToolDefinitions } from "./engage-state.js";
15
16
  import { enrichmentToolDefinitions } from "./enrichment.js";
16
17
  import { frameworkToolDefinitions } from "./framework.js";
18
+ import { harvestJobToolDefinitions } from "./harvest-jobs.js";
17
19
  import { leadToolDefinitions } from "./leads.js";
18
20
  import { linkedinToolDefinitions } from "./linkedin.js";
19
21
  import { navigationToolDefinitions } from "./navigation.js";
@@ -30,6 +32,7 @@ import { verifyRowToolDefinitions } from "./verify-row.js";
30
32
  import { workspaceToolDefinitions } from "./workspaces.js";
31
33
  export const allTools = [
32
34
  ...campaignToolDefinitions,
35
+ ...campaignAbTestToolDefinitions,
33
36
  ...campaignProcessingToolDefinitions,
34
37
  ...authToolDefinitions,
35
38
  startCliLoginToolDef,
@@ -43,6 +46,7 @@ export const allTools = [
43
46
  ...contentPostToolDefinitions,
44
47
  ...navigationToolDefinitions,
45
48
  ...leadToolDefinitions,
49
+ ...harvestJobToolDefinitions,
46
50
  ...enrichmentToolDefinitions,
47
51
  ...processingToolDefinitions,
48
52
  ...rubricToolDefinitions,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.273",
3
+ "version": "0.1.275",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: create-ab-test
3
+ description: Create a Sellable campaign A/B test from a clean source lead list.
4
+ visibility: public
5
+ allowed-tools:
6
+ - mcp__sellable__get_auth_status
7
+ - mcp__sellable__get_active_workspace
8
+ - mcp__sellable__get_campaign
9
+ - mcp__sellable__get_campaign_context
10
+ - mcp__sellable__get_campaign_navigation_state
11
+ - mcp__sellable__get_campaign_messages_preview
12
+ - mcp__sellable__prepare_campaign_ab_test
13
+ - mcp__sellable__load_csv_linkedin_leads
14
+ - mcp__sellable__wait_for_lead_list_ready
15
+ - mcp__sellable__get_table_rows
16
+ - mcp__sellable__get_rows_minimal
17
+ ---
18
+
19
+ # Sellable Create A/B Test
20
+
21
+ Use this workflow when the user asks to create an A/B campaign test, split a
22
+ campaign into variants, duplicate a campaign for copy testing, or compare two
23
+ campaign-message approaches from the same source list.
24
+
25
+ ## Opening Contract
26
+
27
+ Start by identifying the source campaign, the one variable being tested, and
28
+ the clean source lead origin. Then prepare the split and stop for review. The
29
+ goal is two review-copy campaigns with clean split source lists, not a launched
30
+ campaign.
31
+
32
+ ## Required Flow
33
+
34
+ 1. Confirm the source campaign ID or resolve it with `get_campaign`.
35
+ 2. Confirm the A/B variable in plain language. Keep variant B as the explicit
36
+ change and leave variant A as the control unless the user names an A change.
37
+ 3. Verify the campaign has a clean source lead list. A clean source list is a
38
+ lead-list table, not the generated campaign workflow table.
39
+ 4. Call `prepare_campaign_ab_test` with `dryRun: true` first.
40
+ 5. Review split counts, duplicate/skipped counts, campaign names, and variant
41
+ brief deltas with the user.
42
+ 6. Only after review, call `prepare_campaign_ab_test` without `dryRun` using the
43
+ same `idempotencyKey` if one was returned or supplied.
44
+ 7. Return the A and B campaign IDs, split lead-list IDs, counts, and the
45
+ explicit note that both campaigns are `not_started`.
46
+
47
+ ## Anti-Patterns
48
+
49
+ - Do not call `export_table_csv` from an enriched/generated campaign workflow
50
+ table as the lead source for A/B splitting.
51
+ - Do not reimport workflow output columns such as `ICP Score`, `Passes Rubric`,
52
+ `Generate Message`, `Message`, `Approved`, scheduling, status, result, or
53
+ error columns.
54
+ - Do not use broad workflow-table selectors to split decorated campaign rows.
55
+ - Do not call `start_campaign`, approve launch, attach senders for launch, or
56
+ trigger live sends in this workflow.
57
+
58
+ ## Clean Source Fallback
59
+
60
+ If the source campaign has no clean source lead list, or the source list is
61
+ polluted with workflow/output columns, ask for the original CSV or clean source
62
+ list. Use `load_csv_linkedin_leads`; it strips Sellable workflow columns if a
63
+ contaminated CSV is supplied, then creates a clean lead list. After the clean
64
+ source is confirmed, retry `prepare_campaign_ab_test`.
65
+
66
+ ## Output Contract
67
+
68
+ Report:
69
+
70
+ - source campaign ID
71
+ - source lead-list ID
72
+ - split strategy and counts
73
+ - duplicate/skipped lead counts
74
+ - A review campaign ID and split lead-list ID
75
+ - B review campaign ID and split lead-list ID
76
+ - variant difference
77
+ - `launchState: not_started` for both campaigns
@@ -29,6 +29,8 @@ allowed-tools:
29
29
  - mcp__sellable__search_prospeo
30
30
  - mcp__sellable__search_prospeo_companies
31
31
  - mcp__sellable__confirm_prospeo_company_accounts
32
+ - mcp__sellable__search_harvest_jobs
33
+ - mcp__sellable__confirm_harvest_job_companies
32
34
  - mcp__sellable__search_signals
33
35
  - mcp__sellable__fetch_post_engagers
34
36
  - mcp__sellable__enrich_with_prospeo
@@ -107,6 +109,22 @@ page before importing, call `list_dnc_entries`. Confirm the active workspace
107
109
  name and ID in the response before any write. This is Sellable's workspace DNC
108
110
  list used by DNC Check.
109
111
 
112
+ ## A/B Campaign Requests
113
+
114
+ If the user explicitly asks to create an A/B test, split an existing campaign
115
+ into variants, duplicate a campaign for copy testing, or compare two campaign
116
+ message approaches from the same source list, route them to
117
+ `create-ab-test` instead of improvising inside this create-campaign workflow.
118
+
119
+ Workflow/campaign table exports are decorated outputs for operator review and
120
+ debugging. They are not source lead lists for A/B splitting or campaign
121
+ duplication. Do not use `export_table_csv` from an enriched/generated campaign
122
+ table and then reimport it as leads. If the user only has a contaminated CSV,
123
+ `load_csv_linkedin_leads` strips Sellable workflow columns such as `ICP Score`,
124
+ `Passes Rubric`, `Generate Message`, `Message`, and `Approved`, but the
125
+ preferred A/B path is the dedicated `create-ab-test` workflow using
126
+ `prepare_campaign_ab_test`.
127
+
110
128
  ## Opening Turn Contract
111
129
 
112
130
  On the first visible response after this skill is invoked, do not narrate
@@ -227,6 +245,14 @@ are likely. Sales Nav is useful for recent LinkedIn activity, role/title
227
245
  precision, and referral paths, but it does not provide hiring-by-role filters;
228
246
  say that distinction plainly in the source-plan gate.
229
247
 
248
+ When the brief asks for current LinkedIn job-post intent, such as companies
249
+ hiring Power BI developers this month, use Harvest jobs as the account source:
250
+ `search_harvest_jobs -> confirm_harvest_job_companies -> search_prospeo`.
251
+ First write and review the Harvest job artifact. Then confirm selected Harvest
252
+ job IDs into a `domainFilterId`; Prospeo remains the people-search provider.
253
+ Do not paste LinkedIn company URLs as domains. Do not fetch full job details for
254
+ every search row by default; selected batches only.
255
+
230
256
  For company lookalikes, best-customer lookalikes, "companies like X",
231
257
  lookalike accounts, companies that use AI, companies with API/SSO/Chrome
232
258
  extension, news/award/integration/key-customer filters, or account discovery
@@ -7,6 +7,8 @@
7
7
  "requiredTools": [
8
8
  "update_campaign",
9
9
  "get_provider_prompt",
10
+ "search_harvest_jobs",
11
+ "confirm_harvest_job_companies",
10
12
  "search_prospeo_companies",
11
13
  "confirm_prospeo_company_accounts",
12
14
  "search_prospeo",
@@ -24,13 +26,14 @@
24
26
  "useWhen": [
25
27
  "You want Prospeo filters or domain-based search",
26
28
  "You need company lookalike account discovery before finding people",
29
+ "You need current LinkedIn job-post evidence before finding hiring stakeholders",
27
30
  "You want companies like X, target-domain, best-customer/top-customer, or job-search employer lookalikes, or accounts using AI/API/SSO/Chrome extensions",
28
31
  "You need companies hiring for specific roles using job-posting filters",
29
32
  "You need high deliverability from Prospeo"
30
33
  ],
31
34
  "avoidWhen": ["You need LinkedIn activity filters"],
32
- "reason": "Strong for hiring-led search, company/account lookalikes, Prospeo-specific filters, verified contacts, and domain lists.",
33
- "prose": "Since you're targeting **{icp}**, I'd recommend **Prospeo**.\n\nHere's why:\n- Prospeo can discover lookalike accounts first, then turn approved accounts into a domainFilterId for people search\n- Prospeo can filter for companies hiring specific roles with job-posting filters\n- We can pair those company signals with buyer/referrer titles and verified-contact coverage\n\nFor lookalike accounts, I will show an account sample first; those account rows are not people leads yet. After approval, I will use the companySearchToken to confirm the accounts, then search people at the returned domainFilterId. For outbound lookalikes, I will use target/account/customer domains or verified past-customer accounts, not the sender's company. For job-search/application lookalikes, I can use current or past employers as existing-company seeds.\n\nShould I search Prospeo for {icp}?"
35
+ "reason": "Strong for hiring-led search, current LinkedIn job-post account sourcing, company/account lookalikes, Prospeo-specific filters, verified contacts, and domain lists.",
36
+ "prose": "Since you're targeting **{icp}**, I'd recommend **Prospeo**.\n\nHere's why:\n- Prospeo can discover lookalike accounts first, then turn approved accounts into a domainFilterId for people search\n- Harvest job search can source companies from current LinkedIn job posts, then confirm selected jobs into a domainFilterId for Prospeo people search\n- Prospeo can filter for companies hiring specific roles with job-posting filters\n- We can pair those company signals with buyer/referrer titles and verified-contact coverage\n\nFor current LinkedIn job-post evidence, I will use search_harvest_jobs -> confirm_harvest_job_companies -> search_prospeo. I will not paste LinkedIn company URLs as domains, and I will only fetch job details for selected batches. For lookalike accounts, I will show an account sample first; those account rows are not people leads yet. After approval, I will use the companySearchToken to confirm the accounts, then search people at the returned domainFilterId. For outbound lookalikes, I will use target/account/customer domains or verified past-customer accounts, not the sender's company. For job-search/application lookalikes, I can use current or past employers as existing-company seeds.\n\nShould I search Prospeo for {icp}?"
34
37
  },
35
38
  "askOption": {
36
39
  "label": "Prospeo",
@@ -761,6 +761,15 @@ help...` or `built for [buyer] to...`. Do not overuse generic solved-state
761
761
  bridges like `there's a way to...`; they read informercial when they imply
762
762
  the buyer's problem is now solved before the product or artifact has earned
763
763
  that claim.
764
+ - run a contraction naturalness pass on the buyer-facing copy before selecting
765
+ the winner. Use common contractions when they make the message sound like a
766
+ human LinkedIn note: `it is` -> `it's`, `does not` -> `doesn't`, `do not` ->
767
+ `don't`, `cannot` -> `can't`, `we are` -> `we're`, `I am` -> `I'm`, and
768
+ `you are` -> `you're`. Keep the uncontracted form only when emphasis,
769
+ grammar, token boundaries, legal/technical clarity, or a deliberate formal
770
+ voice requires it. Do not create awkward noun contractions like
771
+ `outbound's becoming`. If selected copy contains stiff helper-verb phrasing
772
+ such as `It is knowing...`, rewrite it before approval.
764
773
  - do not let the first substantive line become a generic problem-solved
765
774
  promise. Openers shaped like `there's a way to stop/fix/solve [problem]`
766
775
  are BLOCKED when they sound like an ad, imply the problem is already
@@ -2633,6 +2642,7 @@ hiring for`
2633
2642
  - Best PS / no-PS decision: Candidate [A|B|C] — reason
2634
2643
  - Element edits made by finalizer: ...
2635
2644
  - Parallel action formatting: bullets used | paragraphs kept | not applicable — reason
2645
+ - Contraction naturalness: PASS | BLOCKED — reason
2636
2646
  - Style consistency check: PASS | BLOCKED — reason
2637
2647
  - Assembly note: clean combination or one candidate swept
2638
2648
 
@@ -9,10 +9,31 @@ Prospeo supports search + import in the campaign builder flow.
9
9
  ## Provider Decision Tree
10
10
 
11
11
  - Known account list or CSV: use `load_csv_domains` or `save_domain_filters`, then `search_prospeo`.
12
+ - Current LinkedIn job-post intent: use `search_harvest_jobs`, review the job artifact, then use `confirm_harvest_job_companies` with selected Harvest job IDs to create a `domainFilterId`; only then call `search_prospeo` for hiring stakeholders at those companies. Harvest jobs are the account source, not a people-search replacement.
12
13
  - Company/account lookalikes: use `search_prospeo_companies`, review the account sample, then use `confirm_prospeo_company_accounts` with the returned `companySearchToken` to create a `domainFilterId`; only then call `search_prospeo` for people at those accounts. Account rows are not people leads yet.
13
14
  - Person search with known filters: use `search_prospeo` directly.
14
15
  - LinkedIn activity, content-source, or post-engagement intent: stay on Signal Discovery or Sales Nav, not Prospeo.
15
16
 
17
+ Current LinkedIn job-post account sourcing must follow:
18
+
19
+ ```text
20
+ search_harvest_jobs -> confirm_harvest_job_companies -> search_prospeo
21
+ ```
22
+
23
+ Use `search_harvest_jobs` when the user's account-source intent is current
24
+ LinkedIn job posts, for example "companies hiring Power BI developers in the US
25
+ this month." The search tool writes review artifacts and returns a token or
26
+ `mcp-harvest-job-search-token:*` reference. After reviewing selected jobs, call
27
+ `confirm_harvest_job_companies` with selected Harvest job IDs only. It resolves
28
+ real company website domains from selected job details and bounded
29
+ `/linkedin/company` fallback, then returns a `domainFilterId` for
30
+ `search_prospeo`.
31
+
32
+ Do not paste LinkedIn company URLs as domains. Do not detail-fetch every job row
33
+ by default; fetch details only for selected batches during confirmation. Use
34
+ Prospeo directly when the user wants broader volume, company attributes,
35
+ lookalikes, or people search without needing current LinkedIn job evidence.
36
+
16
37
  Company/account lookalikes must follow:
17
38
 
18
39
  ```text
@@ -1,9 +0,0 @@
1
- {
2
- "parallelMode": "wide",
3
- "agentCount": 6,
4
- "maxToolCallsPerAgent": 2,
5
- "senderMaxAgents": 2,
6
- "senderMaxToolCallsPerAgent": 3,
7
- "progressMode": true,
8
- "debugMode": true
9
- }