@sellable/install 0.1.325 → 0.1.327
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 +5 -41
- package/agents/registry.json +2 -2
- package/bin/sellable-install.mjs +97 -321
- package/lib/runtime-verify.mjs +31 -2
- package/package.json +2 -3
- package/skill-templates/create-campaign.md +3 -3
- package/skill-templates/create-evergreen-campaigns.md +16 -16
- package/skill-templates/find-leads.md +57 -0
- package/skill-templates/refill-sends-v2.md +6 -6
- package/skill-templates/refill-sends.md +353 -91
- package/HERMES-SLACK-PROFILE-SCOPING.md +0 -169
- package/lib/codex-plugin-selection.mjs +0 -353
package/lib/runtime-verify.mjs
CHANGED
|
@@ -11,13 +11,25 @@ export const REQUIRED_SELLABLE_MCP_TOOLS = [
|
|
|
11
11
|
"start_cli_login",
|
|
12
12
|
"wait_for_cli_login",
|
|
13
13
|
"bootstrap_create_campaign",
|
|
14
|
+
"bootstrap_find_leads",
|
|
15
|
+
"get_find_leads_run",
|
|
16
|
+
"update_find_leads_run",
|
|
17
|
+
"wait_for_find_leads_run",
|
|
18
|
+
"cancel_find_leads",
|
|
19
|
+
"reissue_find_leads_watch_link",
|
|
20
|
+
"preflight_find_leads_provider",
|
|
14
21
|
"get_subskill_prompt",
|
|
15
22
|
"get_subskill_asset",
|
|
16
23
|
"search_subskill_prompts",
|
|
17
24
|
"create_campaign",
|
|
18
25
|
"import_leads",
|
|
26
|
+
"search_sales_nav",
|
|
27
|
+
"search_prospeo",
|
|
28
|
+
"search_signals",
|
|
29
|
+
"select_promising_posts",
|
|
19
30
|
"confirm_lead_list",
|
|
20
31
|
"wait_for_lead_list_ready",
|
|
32
|
+
"export_table_csv",
|
|
21
33
|
"wait_for_campaign_table_ready",
|
|
22
34
|
"update_campaign",
|
|
23
35
|
"update_campaign_brief",
|
|
@@ -76,6 +88,14 @@ export const CREATE_CAMPAIGN_SMOKE_CALLS = [
|
|
|
76
88
|
limit: 1200,
|
|
77
89
|
},
|
|
78
90
|
},
|
|
91
|
+
{
|
|
92
|
+
name: "get_subskill_prompt",
|
|
93
|
+
arguments: {
|
|
94
|
+
subskillName: "find-leads-v2",
|
|
95
|
+
offset: 0,
|
|
96
|
+
limit: 1200,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
79
99
|
{
|
|
80
100
|
name: "get_subskill_prompt",
|
|
81
101
|
arguments: {
|
|
@@ -117,6 +137,15 @@ export const CREATE_CAMPAIGN_SMOKE_CALLS = [
|
|
|
117
137
|
limit: 1200,
|
|
118
138
|
},
|
|
119
139
|
},
|
|
140
|
+
{
|
|
141
|
+
name: "get_subskill_asset",
|
|
142
|
+
arguments: {
|
|
143
|
+
subskillName: "find-leads-v2",
|
|
144
|
+
assetPath: "core/flow.v1.json",
|
|
145
|
+
offset: 0,
|
|
146
|
+
limit: 1200,
|
|
147
|
+
},
|
|
148
|
+
},
|
|
120
149
|
];
|
|
121
150
|
|
|
122
151
|
function collectStderrLines(stream) {
|
|
@@ -343,7 +372,7 @@ async function verifyCreateCampaignSmoke({
|
|
|
343
372
|
ok: false,
|
|
344
373
|
missingTools,
|
|
345
374
|
calls,
|
|
346
|
-
error: `Missing
|
|
375
|
+
error: `Missing or stale Sellable MCP tool(s): ${missingTools.join(", ")}. Reinstall @sellable/install and @sellable/mcp, restart or reload the host, then retry Find Leads.`,
|
|
347
376
|
startedAt,
|
|
348
377
|
completedAt: new Date().toISOString(),
|
|
349
378
|
};
|
|
@@ -662,7 +691,7 @@ async function verifySellableMcpRuntimeOnce({
|
|
|
662
691
|
),
|
|
663
692
|
calls: [],
|
|
664
693
|
error:
|
|
665
|
-
"
|
|
694
|
+
"Sellable MCP is missing required tools. Reinstall @sellable/install and @sellable/mcp, restart or reload the host, then retry Find Leads.",
|
|
666
695
|
startedAt: new Date().toISOString(),
|
|
667
696
|
completedAt: new Date().toISOString(),
|
|
668
697
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sellable/install",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.327",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "One-command installer for Sellable MCP in Claude Code, Codex, and Hermes",
|
|
6
6
|
"bin": {
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
"lib",
|
|
16
16
|
"agents",
|
|
17
17
|
"skill-templates",
|
|
18
|
-
"README.md"
|
|
19
|
-
"HERMES-SLACK-PROFILE-SCOPING.md"
|
|
18
|
+
"README.md"
|
|
20
19
|
],
|
|
21
20
|
"dependencies": {
|
|
22
21
|
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
@@ -721,7 +721,7 @@ Treat host capabilities as concrete functions, not prose conventions:
|
|
|
721
721
|
import and before dispatching Message Drafting only.
|
|
722
722
|
- `launch_message_drafting`: Claude Code uses `Task` with `subagent_type`
|
|
723
723
|
`post-find-leads-message-scout` when listed; Codex uses the returned
|
|
724
|
-
compatibility agent or a generic `gpt-5.
|
|
724
|
+
compatibility agent or a generic `gpt-5.5` / `xhigh` Message Drafting agent.
|
|
725
725
|
|
|
726
726
|
If a required interactive question function or MCP loader is missing, stop and
|
|
727
727
|
explain the Sellable install/reload problem. Source work uses product-native MCP
|
|
@@ -1082,8 +1082,8 @@ updates.
|
|
|
1082
1082
|
In Codex, the filter-choice answer is the campaign-scoped go-ahead to use
|
|
1083
1083
|
this single Message Drafting background agent in step-wise and YOLO modes.
|
|
1084
1084
|
Do not ask a separate question to start it. If the named custom agent is not
|
|
1085
|
-
available, spawn a generic background agent with `model: "gpt-5.
|
|
1086
|
-
`reasoning_effort: "
|
|
1085
|
+
available, spawn a generic background agent with `model: "gpt-5.5"` and
|
|
1086
|
+
`reasoning_effort: "xhigh"` using the same lean campaign/table basis. If no
|
|
1087
1087
|
background-agent tool is callable, start the same full message branch inline
|
|
1088
1088
|
before filter drafting or skip-filter message review and record it as
|
|
1089
1089
|
`statusSource: "parent-thread-fallback"`.
|
|
@@ -437,7 +437,7 @@ fallback only when app thread tools are unavailable; the receipt must include
|
|
|
437
437
|
`fallbackReason`, or backend verify rejects it.
|
|
438
438
|
When visible Codex app thread tools are unavailable but local Codex CLI is
|
|
439
439
|
available, the accepted durable streaming-worker command shape is:
|
|
440
|
-
`codex -a never -s danger-full-access -c model_reasoning_effort=
|
|
440
|
+
`codex -a never -s danger-full-access -c model_reasoning_effort=xhigh exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> -`.
|
|
441
441
|
The approval, sandbox, and reasoning-effort config flags must come before the
|
|
442
442
|
`exec` subcommand for Codex CLI builds that expose `-a`/`-s`/`-c` only at top
|
|
443
443
|
level. `--skip-git-repo-check` belongs after `exec` because current customer and VPS Codex CLI builds expose it
|
|
@@ -447,26 +447,26 @@ forms fail on current customer CLI installs. Pipe the lane packet prompt on
|
|
|
447
447
|
stdin, require the worker to write `workerDispatch.receiptArtifactHint`, and
|
|
448
448
|
pass exactly one lane packet per worker.
|
|
449
449
|
When launching durable Codex CLI workers from an automation parent, pass an
|
|
450
|
-
explicit supported worker model and explicit `
|
|
450
|
+
explicit supported worker model and explicit `xhigh` reasoning effort instead
|
|
451
451
|
of relying on the Codex CLI defaults. Use the parent runtime model when known,
|
|
452
452
|
for example:
|
|
453
|
-
`codex -a never -s danger-full-access -c model_reasoning_effort=
|
|
453
|
+
`codex -a never -s danger-full-access -c model_reasoning_effort=xhigh exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> -`.
|
|
454
454
|
In Codex CLI, the parent runtime model is visible in the run header as
|
|
455
455
|
`model: <model-name>`. Copy that exact model string into child worker launches
|
|
456
|
-
first. If the parent header says `model: gpt-5.
|
|
457
|
-
`-m gpt-5.
|
|
456
|
+
first. If the parent header says `model: gpt-5.5`, launch workers with
|
|
457
|
+
`-m gpt-5.5` plus `-c model_reasoning_effort=xhigh`; do not invent or probe
|
|
458
458
|
nearby aliases such as `gpt-5.3-codex`, `gpt-5.2`, `gpt-5-codex`,
|
|
459
459
|
`codex-latest`, or `codex-mini-latest` before trying the exact parent model. A
|
|
460
|
-
one-line probe must include the same `-c model_reasoning_effort=
|
|
460
|
+
one-line probe must include the same `-c model_reasoning_effort=xhigh` override
|
|
461
461
|
and count as supported only when it exits 0 and returns the requested output; a
|
|
462
462
|
session header followed by a `not supported` error is rejected, not accepted.
|
|
463
463
|
Do not rely on the Codex CLI default model or default reasoning effort; some
|
|
464
|
-
customer and VPS installs default to unavailable model aliases or to
|
|
465
|
-
|
|
466
|
-
with
|
|
467
|
-
`
|
|
464
|
+
customer and VPS installs default to unavailable model aliases or to `high`
|
|
465
|
+
reasoning. `-m gpt-5.5` alone is not enough. If a child worker reports GPT 5.5
|
|
466
|
+
with `high` reasoning, treat that as a launcher bug, relaunch with the explicit
|
|
467
|
+
`xhigh` config before mutation, and do not ask the user to continue through the
|
|
468
468
|
model-quality warning. If the parent cannot identify a supported worker model
|
|
469
|
-
and launch it with `
|
|
469
|
+
and launch it with `xhigh` reasoning, stop with
|
|
470
470
|
`blocked: worker_model_unavailable` before mutation.
|
|
471
471
|
When wrapping multiple local Codex CLI workers in a shell launcher, run the
|
|
472
472
|
wrapper with `/bin/bash -lc` or another explicitly chosen portable shell. Do not
|
|
@@ -479,7 +479,7 @@ Do not embed `<<'WORKER_PROMPT'` heredocs inside a single quoted or double
|
|
|
479
479
|
quoted `/bin/bash -lc '...'` command string; nested quoting is brittle and can
|
|
480
480
|
truncate the first worker before mutation. For multi-worker launchers, write one
|
|
481
481
|
plain prompt file per lane under the current run directory, then start each
|
|
482
|
-
worker with `codex -a never -s danger-full-access -c model_reasoning_effort=
|
|
482
|
+
worker with `codex -a never -s danger-full-access -c model_reasoning_effort=xhigh exec --skip-git-repo-check -m "$WORKER_MODEL" -C "$REPO" -o
|
|
483
483
|
"$worker_final_file" - < "$worker_prompt_file"`. Keep launcher shell variables
|
|
484
484
|
double-quoted and keep the prompt heredoc only in a standalone script/prompt-file
|
|
485
485
|
write step, not inside an already quoted shell argument. If the first launcher
|
|
@@ -585,7 +585,7 @@ launchers, write the same prompt body to `<worker-prompt-file>` and launch the
|
|
|
585
585
|
worker with stdin redirected from that file:
|
|
586
586
|
|
|
587
587
|
```
|
|
588
|
-
codex -a never -s danger-full-access -c model_reasoning_effort=
|
|
588
|
+
codex -a never -s danger-full-access -c model_reasoning_effort=xhigh exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> - <<'WORKER_PROMPT'
|
|
589
589
|
Use $sellable:create-campaign as the governing campaign workflow for this one lane worker.
|
|
590
590
|
Use the evergreen plan/packet below only for lane scope, source metadata,
|
|
591
591
|
postconditions, side-effect caps, and durable receipt proof.
|
|
@@ -632,10 +632,10 @@ Do not launch, start, schedule, send, or use paid InMail.
|
|
|
632
632
|
For filter proof, durable receipt status must be `filterDecisionReceipt.status:"applied"` only; never `completed`, `confirmed`, `done`, or aliases.
|
|
633
633
|
For generated messages, `update_cell` is allowed only for the semantic Approved checkbox. Never use `update_cell` for generated message text/body/sample copy. Bad copy requires `revise_message_template_and_rerun` or brief/template revision plus Generate Message rerun. Any generated-message cell override is `blocked: generated_message_cell_override`.
|
|
634
634
|
If `bootstrap_create_campaign.modelQuality.status === "warn"` because the child
|
|
635
|
-
worker reports GPT 5.
|
|
635
|
+
worker reports GPT 5.5 with `high` reasoning, that is a parent launcher
|
|
636
636
|
configuration bug, not an operator approval path inside the worker. Stop before
|
|
637
637
|
mutation, tell the parent to relaunch this lane with
|
|
638
|
-
`-c model_reasoning_effort=
|
|
638
|
+
`-c model_reasoning_effort=xhigh`, and do not mark the worker goal complete.
|
|
639
639
|
Complete only this lane. Do not end with narration only. Before your final
|
|
640
640
|
response, run a local file-existence and JSON self-check for
|
|
641
641
|
<receiptArtifactPath>. If the lane succeeded, write the canonical success
|
|
@@ -656,7 +656,7 @@ receipt, or an accepted Post Engagers no-source blocked/no-op receipt.
|
|
|
656
656
|
WORKER_PROMPT
|
|
657
657
|
|
|
658
658
|
# Multi-worker launcher equivalent:
|
|
659
|
-
codex -a never -s danger-full-access -c model_reasoning_effort=
|
|
659
|
+
codex -a never -s danger-full-access -c model_reasoning_effort=xhigh exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> - < <worker-prompt-file>
|
|
660
660
|
```
|
|
661
661
|
|
|
662
662
|
If any placeholder cannot be filled from the current plan, matching
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: find-leads
|
|
3
|
+
description: Find or source prospects, build and watch a live Sellable lead list, and export the finished list without creating a campaign.
|
|
4
|
+
visibility: public
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- mcp__sellable__get_auth_status
|
|
7
|
+
- mcp__sellable__start_cli_login
|
|
8
|
+
- mcp__sellable__wait_for_cli_login
|
|
9
|
+
- mcp__sellable__get_active_workspace
|
|
10
|
+
- mcp__sellable__list_workspaces
|
|
11
|
+
- mcp__sellable__set_active_workspace
|
|
12
|
+
- mcp__sellable__get_subskill_prompt
|
|
13
|
+
- mcp__sellable__get_subskill_asset
|
|
14
|
+
- mcp__sellable__search_subskill_prompts
|
|
15
|
+
- mcp__sellable__get_provider_prompt
|
|
16
|
+
- mcp__sellable__bootstrap_find_leads
|
|
17
|
+
- mcp__sellable__get_find_leads_run
|
|
18
|
+
- mcp__sellable__update_find_leads_run
|
|
19
|
+
- mcp__sellable__wait_for_find_leads_run
|
|
20
|
+
- mcp__sellable__cancel_find_leads
|
|
21
|
+
- mcp__sellable__reissue_find_leads_watch_link
|
|
22
|
+
- mcp__sellable__preflight_find_leads_provider
|
|
23
|
+
- mcp__sellable__lookup_sales_nav_filter
|
|
24
|
+
- mcp__sellable__search_sales_nav
|
|
25
|
+
- mcp__sellable__search_prospeo
|
|
26
|
+
- mcp__sellable__search_signals
|
|
27
|
+
- mcp__sellable__select_promising_posts
|
|
28
|
+
- mcp__sellable__import_leads
|
|
29
|
+
- mcp__sellable__wait_for_lead_list_ready
|
|
30
|
+
- mcp__sellable__get_rows_minimal
|
|
31
|
+
- mcp__sellable__export_table_csv
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
# Sellable Find Leads
|
|
35
|
+
|
|
36
|
+
Use this public command when the user asks to find or source prospects, build a lead list,
|
|
37
|
+
watch the list fill in real time, review leads, or export the list.
|
|
38
|
+
It works without an existing campaign.
|
|
39
|
+
|
|
40
|
+
## Load the canonical workflow
|
|
41
|
+
|
|
42
|
+
1. Call `mcp__sellable__get_auth_status({})` and complete login/workspace setup
|
|
43
|
+
if required.
|
|
44
|
+
2. Load `mcp__sellable__get_subskill_prompt({ subskillName: "find-leads-v2" })`.
|
|
45
|
+
Continue chunks until `hasMore` is false.
|
|
46
|
+
3. Load `mcp__sellable__get_subskill_asset({ subskillName: "find-leads-v2",
|
|
47
|
+
assetPath: "core/flow.v1.json" })`.
|
|
48
|
+
4. Execute that prompt and flow as the operational source of truth.
|
|
49
|
+
|
|
50
|
+
Do not emulate the workflow from memory or local files. If prompt or asset
|
|
51
|
+
loading fails, use `search_subskill_prompts({ query: "find-leads-v2",
|
|
52
|
+
includePublic: true, includeInternal: true })`, retry once, then give the
|
|
53
|
+
workflow's reinstall/reload guidance.
|
|
54
|
+
|
|
55
|
+
Keep approval questions in the current chat. A source-plan approval allows only
|
|
56
|
+
the bounded provider search. A later import approval is required before rows
|
|
57
|
+
are materialized. Export uses the source list directly.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: refill-sends-v2
|
|
3
3
|
description: Execute refill sends v2 through the fenced evergreen refill loop, with dry-run and resume support.
|
|
4
|
-
visibility:
|
|
4
|
+
visibility: public
|
|
5
5
|
allowed-tools:
|
|
6
|
-
-
|
|
6
|
+
- mcp__sellable__refill_sends_v2
|
|
7
7
|
- mcp__sellable__get_refill_plan_v2
|
|
8
8
|
- mcp__sellable__get_subskill_prompt
|
|
9
9
|
- mcp__sellable__get_subskill_asset
|
|
@@ -24,7 +24,7 @@ Host command names:
|
|
|
24
24
|
- Claude Code: `/sellable:refill-sends-v2`
|
|
25
25
|
- Codex: `$sellable:refill-sends-v2`
|
|
26
26
|
|
|
27
|
-
`
|
|
27
|
+
`refill_sends_v2` is the execution surface. In real-run mode it starts or
|
|
28
28
|
resumes a fenced refill run, reads a fresh packet, executes only the packet's
|
|
29
29
|
named bounded work, verifies the result, and returns either a terminal report, a
|
|
30
30
|
blocked report, or an in-progress resume handle. In dry-run mode it stays
|
|
@@ -40,19 +40,19 @@ with `WORKSPACE_REQUIRED`; do not switch the shared active workspace.
|
|
|
40
40
|
For a real refill run:
|
|
41
41
|
|
|
42
42
|
```text
|
|
43
|
-
|
|
43
|
+
refill_sends_v2({ workspaceId, intent:"auto", senderIds?, approvalMode? })
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
For read-only inspection:
|
|
47
47
|
|
|
48
48
|
```text
|
|
49
|
-
|
|
49
|
+
refill_sends_v2({ workspaceId, dryRun:true, intent:"auto", senderIds? })
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
To resume an in-progress run, pass the handle back exactly:
|
|
53
53
|
|
|
54
54
|
```text
|
|
55
|
-
|
|
55
|
+
refill_sends_v2({ workspaceId, runId, fence })
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
If a stale handle loses the lease, the tool reports the holder status and the
|