@sellable/mcp 0.1.66 → 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
|
|
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
|
@@ -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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
|
@@ -363,8 +363,18 @@ brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
|
|
|
363
363
|
Include an `Open artifact:` link to `brief.md` before the approval question.
|
|
364
364
|
The visible brief must come before local persistence chrome. After the brief
|
|
365
365
|
is synthesized, render the approval-ready brief in chat before running visible
|
|
366
|
-
`mkdir`, `Write`, artifact-copy, or similar local draft setup.
|
|
367
|
-
|
|
366
|
+
`mkdir`, `Write`, artifact-copy, or similar local draft setup. When the host
|
|
367
|
+
supports sidecar/background work, let a background writer persist `brief.md`
|
|
368
|
+
while the main thread keeps the brief review moving. If no background writer
|
|
369
|
+
is available, write `brief.md` synchronously only after the visible brief is
|
|
370
|
+
already in chat. File/folder creation is not the user's value moment; the
|
|
371
|
+
brief is.
|
|
372
|
+
|
|
373
|
+
The approval question can be based on the rendered brief in chat. Do not wait
|
|
374
|
+
for file-write chrome before asking for approval. Before lead sourcing or any
|
|
375
|
+
downstream step reads `brief.md`, reconcile that the persisted file matches
|
|
376
|
+
the visible approved brief; if the sidecar is still running, wait quietly or
|
|
377
|
+
finish the write synchronously at that boundary.
|
|
368
378
|
|
|
369
379
|
- After the brief is approved or auto-confirmed, show the next progress line:
|
|
370
380
|
`Cool. Now I'm going to find people who are both a good fit and likely to
|
|
@@ -422,19 +432,20 @@ should test for this campaign. Those can run in parallel and usually take
|
|
|
422
432
|
`lead-sample.json`). Approval waits for both `lead-filter.md` and
|
|
423
433
|
`message-validation.md`, then reconciles that the selected message basis rows
|
|
424
434
|
still pass the final filter.
|
|
425
|
-
- Parallel means real parallel execution, not optimistic progress copy.
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
execution is not available or not allowed, run the
|
|
435
|
-
use honest copy: `I’ll tighten the filter first,
|
|
436
|
-
the same sample.` Never say `kicking off two
|
|
437
|
-
`background` unless parallel branches were
|
|
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.
|
|
438
449
|
- Never run a downstream stage until the active `flow.v2.json` step's
|
|
439
450
|
`requiredArtifacts` exist.
|
|
440
451
|
- Never call a tool outside the active step's `allowedTools`, and never call a
|
|
@@ -590,18 +601,21 @@ Required behavior:
|
|
|
590
601
|
- do not mutate DB-backed campaign state
|
|
591
602
|
- run a real parallel source-angle scout when the source is not supplied and at
|
|
592
603
|
least two viable source angles exist. Treat source scouting as independent
|
|
593
|
-
branches, then compare the outputs in `lead-review.md`.
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
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.
|
|
600
614
|
- Branch B: Sales Nav / title + company filters. Run preview filters, inspect
|
|
601
615
|
preview rows, and estimate scalable-fit volume.
|
|
602
|
-
- Branch C: Prospeo / domains only when the campaign has a
|
|
603
|
-
path or the user supplied domains. Estimate email/contact
|
|
604
|
-
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.
|
|
605
619
|
If the host cannot run these branches in parallel, run them sequentially and
|
|
606
620
|
do not claim they ran in parallel. If only one source angle is credible, say
|
|
607
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
|
-
|
|
228
|
-
|
|
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:
|
|
@@ -162,12 +162,17 @@
|
|
|
162
162
|
"Risks",
|
|
163
163
|
"After approval"
|
|
164
164
|
],
|
|
165
|
-
"mustRunBefore": ["
|
|
165
|
+
"mustRunBefore": ["start_background_artifact_writer", "Bash", "mkdir"],
|
|
166
166
|
"chatRenderRule": "After synthesizing the brief, render the approval-ready brief in chat before any visible local folder creation, file write, or artifact copy. The user should see useful brief content before local persistence chrome. Do not ask the user to approve a hidden artifact."
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
|
-
"action": "
|
|
170
|
-
"artifact": "brief.md"
|
|
169
|
+
"action": "start_background_artifact_writer",
|
|
170
|
+
"artifact": "brief.md",
|
|
171
|
+
"mode": "sidecar_when_host_supports_background_agents",
|
|
172
|
+
"shouldNotBlockMainThread": true,
|
|
173
|
+
"allowedToRunWhileUserReviewsInlineBrief": true,
|
|
174
|
+
"fallback": "If no background writer is available, write brief.md synchronously only after the approval-ready brief is already visible in chat.",
|
|
175
|
+
"chatRenderRule": "Do not surface folder/file-write progress in chat unless the write fails or the user asks. The main thread should keep the brief review moving while the sidecar persists brief.md."
|
|
171
176
|
},
|
|
172
177
|
{
|
|
173
178
|
"action": "ask_source_intake_after_strategy_batch",
|
|
@@ -254,7 +259,7 @@
|
|
|
254
259
|
],
|
|
255
260
|
"minimumVisibleBriefDetail": "full_readable_brief_before_question",
|
|
256
261
|
"requiredArtifactLinks": ["brief.md"],
|
|
257
|
-
"artifactLinkTiming": "
|
|
262
|
+
"artifactLinkTiming": "when_ready_before_downstream",
|
|
258
263
|
"avoidQuestionWhenOnlyUsefulAnswerIs": "looks good"
|
|
259
264
|
},
|
|
260
265
|
{
|
|
@@ -265,9 +270,16 @@
|
|
|
265
270
|
"noOpenStrategicTradeoff": true,
|
|
266
271
|
"noMissingRequiredInputs": true
|
|
267
272
|
}
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"action": "ensure_background_artifact_ready",
|
|
276
|
+
"artifacts": ["brief.md"],
|
|
277
|
+
"requiredBeforeTransition": "find-leads",
|
|
278
|
+
"reconcileRule": "Before lead sourcing reads brief.md, verify the sidecar persisted the same brief shown in chat. If the sidecar is still running, wait quietly or finish the write synchronously; if it differs, reconcile to the visible approved brief.",
|
|
279
|
+
"chatRenderRule": "Do not block the brief approval question on this step. Only mention artifact persistence if it fails or needs user action."
|
|
268
280
|
}
|
|
269
281
|
],
|
|
270
|
-
"requiredArtifacts": [
|
|
282
|
+
"requiredArtifacts": [],
|
|
271
283
|
"producesArtifacts": [],
|
|
272
284
|
"allowedTools": [
|
|
273
285
|
"AskUserQuestion",
|
|
@@ -329,7 +341,7 @@
|
|
|
329
341
|
"action": "run_subskill",
|
|
330
342
|
"target": "find-leads",
|
|
331
343
|
"mode": "campaignless-preview",
|
|
332
|
-
"sourceScoutRule": "When source is not user-supplied and at least two viable source angles exist, scout independent source angles with
|
|
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."
|
|
333
345
|
},
|
|
334
346
|
{
|
|
335
347
|
"action": "write_artifacts",
|
|
@@ -467,7 +479,7 @@
|
|
|
467
479
|
"parallel only if real parallel branches were launched"
|
|
468
480
|
],
|
|
469
481
|
"timeEstimate": "~2-3 min",
|
|
470
|
-
"chatRenderRule": "If real parallel MCP/tool branches or
|
|
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."
|
|
471
483
|
},
|
|
472
484
|
{
|
|
473
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
|
|
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.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
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
|
|