@sellable/mcp 0.1.67 → 0.1.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -241,7 +241,11 @@ Provider preflight contract:
241
241
  Parallel execution contract:
242
242
 
243
243
  - Claude host: use `Task` subagents for parallel research/crafting units.
244
- - Codex host: use `multi_tool_use.parallel` for independent tool-call batches.
244
+ - Codex host: use named custom scouts for source-angle work when subagents are
245
+ available: `linkedin_engagement_scout`, `sales_nav_scout`, and
246
+ `prospeo_contact_scout`. Use `multi_tool_use.parallel` for independent
247
+ tool-call batches when subagents are unavailable or the work is only simple
248
+ batched lookups.
245
249
  - If neither backend is available, run sequentially with the same output schema.
246
250
 
247
251
  Config path resolution (in order):
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.67",
3
+ "version": "0.1.68",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -99,10 +99,15 @@ denominator, and sample basis.
99
99
 
100
100
  When the user has not supplied a source and multiple source angles are viable,
101
101
  scout those angles as independent branches when the host can actually do it:
102
- Signals / active LinkedIn posts, Sales Nav / title + company filters, and
103
- Prospeo / domains only when relevant. If the host runs them sequentially, do not
104
- claim they ran in parallel. In chat, call the downstream copy stage `message
105
- generation`; `message-validation.md` is only an internal proof artifact.
102
+ LinkedIn Engagement / active post engagers (internal `signal-discovery`
103
+ provider prompt), Sales Nav / title + company filters, and Prospeo Contact /
104
+ domains only when relevant. In Codex, explicitly spawn the named custom scouts
105
+ `linkedin_engagement_scout`, `sales_nav_scout`, and `prospeo_contact_scout` for
106
+ the credible lanes; Codex does not infer subagent fan-out from generic source
107
+ comparison wording. In Claude Code, keep using the existing Task agents under
108
+ `.claude/agents/`. If the host runs them sequentially, do not claim they ran in
109
+ parallel. In chat, call the downstream copy stage `message generation`;
110
+ `message-validation.md` is only an internal proof artifact.
106
111
 
107
112
  Use rendered Markdown for user review surfaces, not fenced code blocks. Keep
108
113
  lines short, use indexed section labels and bullets, and translate internal
@@ -432,19 +432,20 @@ should test for this campaign. Those can run in parallel and usually take
432
432
  `lead-sample.json`). Approval waits for both `lead-filter.md` and
433
433
  `message-validation.md`, then reconciles that the selected message basis rows
434
434
  still pass the final filter.
435
- - Parallel means real parallel execution, not optimistic progress copy. Prefer
436
- product-native parallelism that works in both Claude Code and Codex:
437
- independent MCP/tool calls in the same model turn, or dedicated Sellable MCP
438
- tools that perform their own server-side `Promise.all` fan-out. Host subagents
439
- are optional acceleration only: use Claude Task/subagents or Codex subagents
440
- only when the host exposes them, policy allows them, and the user explicitly
441
- asked for agent fan-out. A normal `$sellable:create-campaign` invocation is
442
- not an explicit request for Codex subagents. If only parallel tool batching is
443
- available, batch independent tool reads/lookups only. If real parallel
444
- execution is not available or not allowed, run the same DAG sequentially and
445
- use honest copy: `I’ll tighten the filter first, then draft the message from
446
- the same sample.` Never say `kicking off two workstreams`, `in parallel`, or
447
- `background` unless parallel branches were actually launched.
435
+ - Parallel means real parallel execution, not optimistic progress copy. For the
436
+ lead-source scout in Codex, explicitly spawn one named custom scout per
437
+ credible source lane when subagents are available: `linkedin_engagement_scout`
438
+ (display: LinkedIn Engagement Scout, powered by the `signal-discovery`
439
+ provider prompt), `sales_nav_scout` (Sales Nav Scout), and
440
+ `prospeo_contact_scout` (Prospeo Contact Scout). For Claude Code, keep using
441
+ the existing `.claude/agents/lead-explorer-*.md` Task agents. If host
442
+ subagents are unavailable, use independent MCP/tool calls in the same model
443
+ turn or dedicated Sellable MCP tools that perform server-side `Promise.all`
444
+ fan-out. If real parallel execution is not available or not allowed, run the
445
+ same DAG sequentially and use honest copy: `I’ll tighten the filter first,
446
+ then draft the message from the same sample.` Never say `kicking off two
447
+ workstreams`, `in parallel`, or `background` unless parallel branches were
448
+ actually launched.
448
449
  - Never run a downstream stage until the active `flow.v2.json` step's
449
450
  `requiredArtifacts` exist.
450
451
  - Never call a tool outside the active step's `allowedTools`, and never call a
@@ -600,18 +601,21 @@ Required behavior:
600
601
  - do not mutate DB-backed campaign state
601
602
  - run a real parallel source-angle scout when the source is not supplied and at
602
603
  least two viable source angles exist. Treat source scouting as independent
603
- branches, then compare the outputs in `lead-review.md`. If the realistic
604
- source set is Signals + Sales Nav, run both. If it is Signals + Prospeo, run
605
- both. If all three are credible, run all three when the host/runtime supports
606
- it.
607
- - Branch A: Signals / active LinkedIn posts. Search relevant keyword lanes,
608
- review finalist posts, fetch top-post engagers, and estimate warm-fit
609
- volume.
604
+ branches, then compare the outputs in `lead-review.md`. In Codex, explicitly
605
+ spawn named custom subagents in the same turn: `linkedin_engagement_scout`,
606
+ `sales_nav_scout`, and `prospeo_contact_scout` for the credible lanes. Codex
607
+ does not infer this from generic "compare paths" wording. If the realistic
608
+ source set is LinkedIn Engagement + Sales Nav (Signals + Sales Nav), run both.
609
+ If it is LinkedIn Engagement + Prospeo Contact (Signals + Prospeo), run both.
610
+ If all three are credible, run all three when the host/runtime supports it.
611
+ - Branch A: LinkedIn Engagement / active LinkedIn posts (internal provider:
612
+ Signals / `signal-discovery`). Search relevant keyword lanes, review
613
+ finalist posts, fetch top-post engagers, and estimate warm-fit volume.
610
614
  - Branch B: Sales Nav / title + company filters. Run preview filters, inspect
611
615
  preview rows, and estimate scalable-fit volume.
612
- - Branch C: Prospeo / domains only when the campaign has a domain/account
613
- path or the user supplied domains. Estimate email/contact scale and call out
614
- weaker LinkedIn activity.
616
+ - Branch C: Prospeo Contact / domains only when the campaign has a
617
+ domain/account path or the user supplied domains. Estimate email/contact
618
+ scale and call out weaker LinkedIn activity.
615
619
  If the host cannot run these branches in parallel, run them sequentially and
616
620
  do not claim they ran in parallel. If only one source angle is credible, say
617
621
  that and run the best primary source plus one cheap fallback/quality check
@@ -224,8 +224,14 @@ setting: `~/.codex/config.toml` with
224
224
  Source-angle comparison should be real, not implied. When the source is not
225
225
  supplied and multiple source angles are viable, scout Signals, Sales Nav, and
226
226
  relevant domain/contact paths as independent branches when the host can do so.
227
- If the host runs them sequentially, keep the output numeric but do not claim the
228
- source scout was parallel.
227
+ In Codex, explicitly spawn named custom scouts in the same turn:
228
+ `linkedin_engagement_scout` (LinkedIn Engagement Scout, backed by the
229
+ `signal-discovery` provider prompt), `sales_nav_scout` (Sales Nav Scout), and
230
+ `prospeo_contact_scout` (Prospeo Contact Scout) for the credible lanes. Codex
231
+ does not infer subagent fan-out from generic "compare paths" wording. In Claude
232
+ Code, keep using the existing Task agents under `.claude/agents/`. If the host
233
+ runs them sequentially, keep the output numeric but do not claim the source
234
+ scout was parallel.
229
235
 
230
236
  Only promise parallel post-lead work when parallel work actually started. If the
231
237
  host cannot or should not launch background branches, say the real sequence:
@@ -341,7 +341,7 @@
341
341
  "action": "run_subskill",
342
342
  "target": "find-leads",
343
343
  "mode": "campaignless-preview",
344
- "sourceScoutRule": "When source is not user-supplied and at least two viable source angles exist, scout independent source angles with product-native parallelism when host/tooling permits: independent MCP/tool calls in the same model turn or dedicated Sellable MCP tools that perform server-side fan-out. Signals active-post branch + Sales Nav title/company branch, Signals + Prospeo when domains/accounts are relevant, or all three when credible. Do not rely on Codex subagents for a normal $sellable:create-campaign invocation; use host subagents only when the user explicitly asked for agent fan-out. If real parallel execution is unavailable, run the same scouts sequentially and do not claim parallel execution. Compare outputs by raw volume, n/N sampled fit, estimated good-fit range, expected reply range, and tradeoff. Keep Signals as viable when selected posts can produce ~150+ ICP-fit warm prospects before final filtering, even if Sales Nav is more scalable; when both are viable, present the choice and recommend the stronger default."
344
+ "sourceScoutRule": "When source is not user-supplied and at least two viable source angles exist, scout independent source angles with real parallelism when host/tooling permits. In Codex, explicitly spawn one named custom scout per credible lane in the same turn: linkedin_engagement_scout for LinkedIn Engagement / active post engagers (internal signal-discovery provider prompt), sales_nav_scout for Sales Nav title/company/activity filters, and prospeo_contact_scout for Prospeo account/domain/contact expansion. In Claude Code, use the existing .claude/agents/lead-explorer-*.md Task agents. Fallback to independent MCP/tool calls in the same model turn or dedicated Sellable MCP tools that perform server-side fan-out. Run LinkedIn Engagement + Sales Nav, LinkedIn Engagement + Prospeo Contact, or all three when credible. If real parallel execution is unavailable, run the same scouts sequentially and do not claim parallel execution. Compare outputs by raw volume, n/N sampled fit, estimated good-fit range, expected reply range, and tradeoff. Keep Signals/LinkedIn Engagement as viable when selected posts can produce ~150+ ICP-fit warm prospects before final filtering, even if Sales Nav is more scalable; when both are viable, present the choice and recommend the stronger default."
345
345
  },
346
346
  {
347
347
  "action": "write_artifacts",
@@ -479,7 +479,7 @@
479
479
  "parallel only if real parallel branches were launched"
480
480
  ],
481
481
  "timeEstimate": "~2-3 min",
482
- "chatRenderRule": "If real parallel MCP/tool branches or explicitly requested host subagents were actually launched, say: 'I’m kicking off two workstreams now' and list 'Tighten the fit filter' and 'Message generation'. If not, do not mention parallel/background work; say: 'I’ll tighten the filter first, then run message generation from the same approved brief and sample leads.' Never claim parallelism unless parallel execution actually started. A normal $sellable:create-campaign invocation is not an explicit request for Codex subagents. User-facing stage name is message generation; message-validation.md is only the internal artifact."
482
+ "chatRenderRule": "If real parallel MCP/tool branches or host subagents were actually launched, say: 'I’m kicking off two workstreams now' and list 'Tighten the fit filter' and 'Message generation'. If not, do not mention parallel/background work; say: 'I’ll tighten the filter first, then run message generation from the same approved brief and sample leads.' Never claim parallelism unless parallel execution actually started. User-facing stage name is message generation; message-validation.md is only the internal artifact."
483
483
  },
484
484
  {
485
485
  "action": "ask_continue_revise_or_confirm_only_if_needed",
@@ -65,7 +65,19 @@ The kickoff doc is the resume surface. Re-open it before repeating discovery wor
65
65
 
66
66
  ## Execution Backend Routing
67
67
 
68
- - If `Task` is available, deep exploration uses the file-backed explorer agents:
68
+ - If Codex subagents are available, run the scout lanes with named custom
69
+ agents. Spawn one agent per credible lane in the same turn, then wait for all
70
+ lane results before synthesizing `lead-review.md`:
71
+ - `linkedin_engagement_scout` (display: LinkedIn Engagement Scout) for
72
+ active LinkedIn posts and engagers; internally this uses the
73
+ `signal-discovery` provider prompt plus `search_signals` /
74
+ `fetch_post_engagers`.
75
+ - `sales_nav_scout` (display: Sales Nav Scout) for Sales Navigator title,
76
+ company, geography, and activity filters.
77
+ - `prospeo_contact_scout` (display: Prospeo Contact Scout) for Prospeo
78
+ account/domain and verified-contact expansion.
79
+ - If Claude `Task` is available, deep exploration uses the existing file-backed
80
+ Claude explorer agents:
69
81
  - `./.claude/agents/lead-explorer-signals.md`
70
82
  - `./.claude/agents/lead-explorer-sales-nav.md`
71
83
  - `./.claude/agents/lead-explorer-prospeo.md`
@@ -236,10 +248,12 @@ Use the existing provider tools to run a small, directional probe:
236
248
  If the first probe is weak or noisy and enough context exists, try 1-2 alternate hypotheses before returning.
237
249
  If the first probe has good quality but insufficient scale, iterate 1-2 times to widen intelligently before returning.
238
250
  When two or more source angles are viable, run the provider probes in real
239
- parallel when the host/runtime allows it. Examples: Signals + Sales Nav,
240
- Signals + Prospeo, or Sales Nav + Prospeo. If the host cannot run them in
241
- parallel, run the same probes sequentially and do not claim they ran in
242
- parallel.
251
+ parallel when the host/runtime allows it. For Codex, explicitly spawn the
252
+ named source scout agents above; Codex will not infer subagent fan-out from
253
+ general "compare sources" wording. Examples: LinkedIn Engagement + Sales Nav,
254
+ LinkedIn Engagement + Prospeo Contact, or Sales Nav + Prospeo Contact. If the
255
+ host cannot run them in parallel, run the same probes sequentially and do not
256
+ claim they ran in parallel.
243
257
 
244
258
  Treat refinement as a measured loop:
245
259