@sellable/mcp 0.1.153 → 0.1.155

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.
Files changed (32) hide show
  1. package/agents/post-find-leads-filter-scout.md +6 -6
  2. package/agents/post-find-leads-message-scout.md +12 -11
  3. package/agents/source-scout-linkedin-engagement.md +3 -3
  4. package/agents/source-scout-prospeo-contact.md +3 -3
  5. package/agents/source-scout-sales-nav.md +3 -3
  6. package/dist/tools/cells.js +1 -1
  7. package/dist/tools/leads.d.ts +1 -0
  8. package/dist/tools/leads.js +51 -24
  9. package/dist/tools/navigation.js +2 -2
  10. package/dist/tools/prompts.js +7 -7
  11. package/dist/tools/readiness.js +2 -2
  12. package/dist/tools/rubrics.js +1 -1
  13. package/package.json +1 -1
  14. package/skills/create-campaign/SKILL.md +52 -21
  15. package/skills/create-campaign-v2/SKILL.md +48 -47
  16. package/skills/create-campaign-v2/SOUL.md +4 -4
  17. package/skills/create-campaign-v2/core/auto-execute.README.md +9 -9
  18. package/skills/create-campaign-v2/core/flow.v2.json +84 -19
  19. package/skills/create-campaign-v2/core/policy.md +1 -1
  20. package/skills/create-campaign-v2/references/approval-gate-framing.md +2 -2
  21. package/skills/create-campaign-v2/references/filter-leads.md +11 -11
  22. package/skills/create-campaign-v2/references/final-handoff-contract.md +4 -4
  23. package/skills/create-campaign-v2/references/sample-validation-loop.md +8 -8
  24. package/skills/create-campaign-v2/references/step-13-import-leads.md +9 -9
  25. package/skills/create-campaign-v2/references/step-15-re-cascade.md +2 -2
  26. package/skills/create-campaign-v2/references/watch-guide-narration.md +15 -15
  27. package/skills/create-campaign-v2-tail/SKILL.md +27 -27
  28. package/skills/create-rubric/SKILL.md +1 -1
  29. package/skills/find-leads/SKILL.md +2 -2
  30. package/skills/providers/prospeo.md +1 -1
  31. package/skills/providers/sales-nav.md +1 -1
  32. package/skills/providers/signal-discovery.md +7 -7
@@ -17,8 +17,8 @@ table.
17
17
  ## MANDATORY TOOL ORDER (read this BEFORE any tail step)
18
18
 
19
19
  Every tail run MUST call these tools in this exact order. The tail is
20
- **first-sample cascade-driven**: you kick off Enrich Prospect only for
21
- the first review/process sample, and the workflow engine chains DNC Check →
20
+ **initial-slice cascade-driven**: you kick off Enrich Prospect only for
21
+ the initial campaign-table execution slice, and the workflow engine chains DNC Check →
22
22
  ICP Score → Passes Rubric → Generate Message automatically. Your job is
23
23
  to START the bounded cascade, WAIT until filter results land, OBSERVE message
24
24
  generation as soon as one row passes, and stop for review.
@@ -26,13 +26,13 @@ Do NOT manually run rubric-check, enrich, or message-generation
26
26
  tools — the cascade already does them.
27
27
 
28
28
  ```text
29
- Step 13 — materialize source list + confirm first sample
29
+ Step 13 — materialize source list + confirm initial campaign slice
30
30
  materialize/reuse approved source with campaignOfferId
31
31
  import_leads(source-list target; SalesNav/Prospeo default ~1000, Signal Discovery default ~1500 engagers)
32
32
  wait_for_lead_list_ready
33
33
  confirm_lead_list(reviewBatchLimit=15)
34
34
  wait_for_campaign_table_ready # campaign table exists
35
- get_rows_minimal # read first review/process sample
35
+ get_rows_minimal # read initial campaign-table execution slice
36
36
  update_campaign(currentStep=filter-choice)
37
37
 
38
38
  Post-import main thread
@@ -42,10 +42,10 @@ Post-import main thread
42
42
  keep the watched app on Filter Leads after rubrics are saved
43
43
  while on Filter Leads, show the message template recommendation from the background Message Draft Builder
44
44
  after approve-message, update_campaign_brief writes `## Approved Message Template` with `{{...}}` tokens
45
- only then start the first-sample cascade
45
+ only then start the initial-slice cascade
46
46
 
47
- Step 14 — kick first-sample cascade + observe sample
48
- queue_cells(cellIds=<first 15 review/process Enrich Prospect cells only>) <-- starts bounded chain
47
+ Step 14 — kick initial-slice cascade + observe campaign rows
48
+ queue_cells(cellIds=<first 15 campaign-table execution-slice Enrich Prospect cells only>) <-- starts bounded chain
49
49
  wait_for_campaign_table_ready # wait until sample cascade starts returning filter results
50
50
  get_rows_minimal # read passesRubric + message cell status per row
51
51
  wait_for_rubric_results(minPassedCount=1, includeRows=false)
@@ -75,7 +75,7 @@ Step 16 — awaiting-user-greenlight
75
75
  update_campaign(senderIds=[selectedSenderId], currentStep=sequence)
76
76
  attach_recommended_sequence({ campaignId, currentStep: "send" }) # tier-aware: premium/SN -> If Open Profile->INMAIL_OPEN, else INVITE->accepted->DM
77
77
  if the attach response did not move the UI: update_campaign(currentStep=send)
78
- re-surface watchUrl + review-batch orientation + final launch choices
78
+ re-surface watchUrl + campaign setup orientation + final launch choices
79
79
  STOP. DO NOT call start_campaign. DO NOT move to running without explicit launch greenlight.
80
80
  ```
81
81
 
@@ -128,10 +128,10 @@ Message` column's http_request writes those cells via the cascade.
128
128
  any are pending, call `queue_cells` on those generateMessageCellIds
129
129
  and wait. If rows truly won't message, ESCALATE.
130
130
  - You MAY NOT advance past Step 13 without calling `queue_cells` on
131
- the review-batch Enrich Prospect cells. Without it, every downstream
131
+ the initial-slice Enrich Prospect cells. Without it, every downstream
132
132
  cell stays `pending` and the campaign ships empty.
133
- - You MAY NOT queue enrichment for rows outside the configured review
134
- batch before the user approves expansion. Full-list enrichment/message
133
+ - You MAY NOT queue enrichment for rows outside the configured internal
134
+ execution slice before the user approves expansion. Full-list enrichment/message
135
135
  generation is a credit-spend decision and must happen after the user
136
136
  has reviewed the sample.
137
137
 
@@ -165,8 +165,8 @@ Entered from the lead-source confirmation path, with
165
165
  import milestone.
166
166
 
167
167
  > Reminder: every provider search you run from this point forward — the
168
- > review-batch source rerun in Step 13, any expansion search after the
169
- > review batch, alternate-lane probes, account-based reruns, and operator
168
+ > campaign setup source rerun in Step 13, any expansion search after the
169
+ > initial slice, alternate-lane probes, account-based reruns, and operator
170
170
  > follow-ups — MUST include `campaignOfferId`. This applies to
171
171
  > `search_prospeo`, `search_sales_nav`, `search_apollo`,
172
172
  > `search_signals`, and any other provider search tool added later.
@@ -220,9 +220,9 @@ reviewBatchLimit: 15 })`. Do not call `import_leads` for this
220
220
  `domainFilterId`; run a campaign-associated Prospeo people search with
221
221
  `campaignOfferId`, provider prompt preflight, and that `domainFilterId`;
222
222
  then import with `targetLeadCount` set to the approved source-list target
223
- (default about 1,000). The first 15 copied campaign rows are the
224
- review/process sample; the full confirmed source list is copied into the
225
- campaign for later expansion.
223
+ (default about 1,000). The first copied campaign rows are the internal
224
+ execution slice; the full confirmed source list is copied into the campaign
225
+ for later expansion.
226
226
  Persist or recover materialized IDs on resume: `leadListId`,
227
227
  `domainFilterId`, `searchId`, `selectedLeadListId`, `workflowTableId`, and
228
228
  imported row IDs. If the source file changed after preview, or an existing lead list
@@ -263,10 +263,10 @@ searchId, targetLeadCount: 1000 })`.
263
263
  3. `wait_for_lead_list_ready` when a provider import job exists, then
264
264
  `confirm_lead_list`. Persist both identifiers: `selectedLeadListId` remains
265
265
  the source list and `workflowTableId` is the campaign table.
266
- 4. `wait_for_campaign_table_ready` until the first review/process sample rows are
266
+ 4. `wait_for_campaign_table_ready` until the initial campaign-table execution slice rows are
267
267
  available in the campaign table.
268
- 5. Call `get_rows_minimal({ tableId: workflowTableId })` and confirm the first
269
- 15-row review/process sample is present. Do not queue cells in Step 13.
268
+ 5. Call `get_rows_minimal({ tableId: workflowTableId })` and confirm the
269
+ 15-row internal execution slice is present. Do not queue cells in Step 13.
270
270
  6. If the import returns zero usable leads, ESCALATE per
271
271
  `references/escalation-ladder.md` (hard fail).
272
272
  7. `update_campaign({ campaignId, currentStep: "filter-choice" })`.
@@ -288,7 +288,7 @@ Do not route to a visible `validate-sample` step. Full decision tree lives in
288
288
  `references/sample-validation-loop.md`.
289
289
 
290
290
  **Step 14 starts the bounded fit cascade, then observes it.** Step 13 imported
291
- the review batch only. After `save_rubrics`, Step 14 queues the review-batch
291
+ the internal execution slice only. After `save_rubrics`, Step 14 queues the initial-slice
292
292
  Enrich Prospect cells, waits until filter results start landing, then moves to
293
293
  message observation as soon as one row passes and approved-template message
294
294
  generation is ready. Step 15 opens review as soon as one passing generated message
@@ -351,9 +351,9 @@ Signals underfloor results), then offer revise-filter only if the imported rows
351
351
  look close to ICP but the rubric is too strict. This prevents customer-visible
352
352
  loops where the agent keeps asking to retry the same weak source.
353
353
 
354
- When the sample passes the projected-pass floor, call
354
+ When the internal slice passes the projected-pass floor, call
355
355
  `update_campaign({ campaignId, currentStep: "auto-execute-messaging" })`
356
- and orient the user that messaging will complete for the review batch only.
356
+ and orient the user that messaging will complete for the initial campaign rows only.
357
357
 
358
358
  ## Step 15: auto-execute-messaging
359
359
 
@@ -367,7 +367,7 @@ flow through the column pipeline: `Enrich Prospect` →
367
367
  `DNC Check` → `ICP Score` → `Passes Rubric` → `Generate Message`.
368
368
  Each column's http_request auto-fires when its upstream dependency
369
369
  completes AND passes gate (e.g. `Passes Rubric === true` before
370
- `Generate Message`). Your job in Step 15 is to WAIT for the review-batch
370
+ `Generate Message`). Your job in Step 15 is to WAIT for the initial-slice
371
371
  cascade to reach `Generate Message` for rows that passed ICP, and verify
372
372
  the output — not to generate messages manually.
373
373
 
@@ -536,14 +536,14 @@ runs.
536
536
 
537
537
  ## Tail Hard Rules
538
538
 
539
- - Source-list materialization and first-sample confirmation happen in Step 13,
539
+ - Source-list materialization and initial-slice confirmation happen in Step 13,
540
540
  not during atomic mint.
541
541
  - Step 13 materializes/reuses the approved source with `campaignOfferId` before
542
542
  import. Do not import a legacy campaignless Signal source until selected posts
543
543
  exist on the campaign.
544
- - Full-list expansion happens only after the first review flow proves out. The
545
- first enrichment/scoring pass must stay capped to the 15-row review/process
546
- sample.
544
+ - Full-list expansion happens only after the initial campaign setup proves out.
545
+ The first enrichment/scoring pass must stay capped to the internal
546
+ campaign-table execution slice.
547
547
  - The tail NEVER calls `start_campaign` on its own.
548
548
  - The tail NEVER auto-revises leads. Brief revision is autonomous; lead
549
549
  revision is always operator-gated.
@@ -51,7 +51,7 @@ Create and save a comprehensive lead scoring rubric that:
51
51
 
52
52
  ## Rubric Validation + Results
53
53
 
54
- - `mcp__sellable__get_rows_minimal` - Read first review/process sample cell IDs
54
+ - `mcp__sellable__get_rows_minimal` - Read initial campaign-table execution-slice cell IDs
55
55
  - `mcp__sellable__queue_cells` - Queue only bounded sample `enrichCellId` values
56
56
  - `mcp__sellable__wait_for_rubric_results` - Poll pass-rate results
57
57
 
@@ -162,9 +162,9 @@ Execution flow:
162
162
  - `campaignOfferId`
163
163
  - `sourceLeadListId` (or omit to use `selectedLeadListId`)
164
164
  - `jobId` (from `import_leads` when available; omit for direct CSV lead lists)
165
- - `reviewBatchLimit: 15` for the first review/process sample
165
+ - `reviewBatchLimit: 15` for the internal campaign-table execution slice
166
166
  9. For campaign-builder flows, `confirm_lead_list` owns the watched move to
167
- `filter-choice` after the first review/process sample exists. Then run:
167
+ `filter-choice` after the initial campaign-table execution slice exists. Then run:
168
168
  - `wait_for_campaign_table_ready({ campaignId })`
169
169
  - `get_campaign_context({ campaignId, refresh: true })`
170
170
  - `get_rows_minimal({ tableId: workflowTableId, limit: 10, page: 1 })`
@@ -67,7 +67,7 @@ search_prospeo({
67
67
  after cleanup should be at least 10%. Prospeo is the terminal fallback; if the
68
68
  best reasonable Prospeo lane is still below 10%, tighten the ICP/source
69
69
  direction instead of switching to another provider.
70
- - After the list finishes and the user confirms it looks good, call `confirm_lead_list` with the `jobId` and `reviewBatchLimit: 15` to copy confirmed rows into the campaign table and use the first 15 as the review/process sample.
70
+ - After the list finishes and the user confirms it looks good, call `confirm_lead_list` with the `jobId` and `reviewBatchLimit: 15` to copy confirmed rows into the campaign table and use the first 15 as the internal campaign-table execution slice.
71
71
  - `import_leads` owns the watched move to `confirm-lead-list` after a lead list/job exists.
72
72
  - `confirm_lead_list` owns the watched move to `filter-choice` after confirmed campaign rows exist.
73
73
  - Post-confirm readback order is required:
@@ -381,7 +381,7 @@ User: "Save it"
381
381
  - `confirm_lead_list` - Copy confirmed lead list into campaign table
382
382
  Parameters: campaignOfferId, sourceLeadListId (optional), reviewBatchLimit (optional, default 15), currentStep (optional)
383
383
  Only call after user confirms the list looks good
384
- Owns the filter-choice beat after campaign rows exist; process only the first 15 review rows until later approvals
384
+ Owns the filter-choice beat after campaign rows exist; process only the internal campaign-table execution slice until later approvals
385
385
  </mcp_tools>
386
386
 
387
387
  <limits>
@@ -47,8 +47,8 @@ number of engagers fetched. If a selected post has 1,200 visible engagers and
47
47
  the source list lands at 71 rows, read that as 71 headline-passing inserted
48
48
  rows, not as "only 71 engagers were scraped." Do not reject a completed
49
49
  non-empty source list solely because inserted rows are below the raw engager
50
- target; confirm/copy it for the 15-row review sample, then decide whether to add
51
- more posts or switch lanes based on sample quality and scale.
50
+ target; confirm/copy it for campaign setup, then decide whether to add more
51
+ posts or switch lanes based on source quality and scale.
52
52
 
53
53
  </harvest_scrape_contract>
54
54
 
@@ -480,13 +480,13 @@ selections, headlineICPCriteria })`, then call
480
480
  targetEngagerCount, maxPostsToScrape })` for the approved
481
481
  source-capacity plan without asking for another yes/no gate. Then
482
482
  `confirm_lead_list({ reviewBatchLimit: 15 })` copies confirmed source rows into
483
- the campaign table and returns the first 15 review/process rows. Do not confuse
484
- the source-candidate target with the review sample size.
483
+ the campaign table and returns the internal campaign-table execution slice. Do not confuse
484
+ the source-candidate target with the execution-slice size.
485
485
  If the completed source scrape comes back below the approved source-candidate
486
486
  target but has usable rows, still call `confirm_lead_list` so the completed
487
- source list is copied into the campaign and the first 15 rows can be reviewed.
487
+ source list is copied into the campaign and the initial setup slice can run.
488
488
  Treat the shortfall as a scale warning: add more approved posts or move to Sales
489
- Nav only after the first sample proves the lane is too thin or off-ICP.
489
+ Nav only after source quality proves the lane is too thin or off-ICP.
490
490
 
491
491
  The promotion/select step is required campaign state. Use post IDs from the
492
492
  current campaign-scoped search result, not stale IDs copied from a source review
@@ -541,7 +541,7 @@ Then run post-confirm routing in this order:
541
541
  leads (e.g., "Does this look right? Should I import leads now?").
542
542
  `create-campaign-v2` tail flow: if the user already approved the source
543
543
  decision, that approval is the import confirmation for the source list and
544
- first review sample; do not ask again.
544
+ internal campaign setup slice; do not ask again.
545
545
  6. If confirmation exists, call `import_leads`. If not, refine
546
546
  selections/criteria and ask again.
547
547
  7. When the lead list finishes and the user confirms it looks good, call