@sellable/mcp 0.1.71 → 0.1.73

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.
@@ -24,7 +24,8 @@
24
24
  },
25
25
  "codex": {
26
26
  "description": "Sellable lead-source scout for LinkedIn post engagement and active conversation signals.",
27
- "modelReasoningEffort": "medium",
27
+ "model": "gpt-5.5",
28
+ "modelReasoningEffort": "high",
28
29
  "sandboxMode": "read-only",
29
30
  "nicknameCandidates": [
30
31
  "LinkedIn Engagement Scout",
@@ -71,7 +72,8 @@
71
72
  },
72
73
  "codex": {
73
74
  "description": "Sellable lead-source scout for Sales Navigator role, company, and activity filters.",
74
- "modelReasoningEffort": "medium",
75
+ "model": "gpt-5.5",
76
+ "modelReasoningEffort": "high",
75
77
  "sandboxMode": "read-only",
76
78
  "nicknameCandidates": [
77
79
  "Sales Nav Scout",
@@ -118,7 +120,8 @@
118
120
  },
119
121
  "codex": {
120
122
  "description": "Sellable lead-source scout for Prospeo account/domain and broad contact expansion.",
121
- "modelReasoningEffort": "medium",
123
+ "model": "gpt-5.5",
124
+ "modelReasoningEffort": "high",
122
125
  "sandboxMode": "read-only",
123
126
  "nicknameCandidates": [
124
127
  "Prospeo Contact Scout",
package/dist/index-dev.js CHANGED
File without changes
package/dist/index.js CHANGED
File without changes
@@ -71,6 +71,8 @@ export interface SourceScoutRegistryResponse {
71
71
  codex: {
72
72
  filename: string;
73
73
  description: string;
74
+ model: string;
75
+ modelReasoningEffort: string;
74
76
  };
75
77
  claude: {
76
78
  filename: string;
@@ -211,6 +211,8 @@ export function getSourceScoutRegistry() {
211
211
  codex: {
212
212
  filename: String(agent.codex?.filename || `${agent.name}.toml`),
213
213
  description: String(agent.codex?.description || ""),
214
+ model: String(agent.codex?.model || "gpt-5.5"),
215
+ modelReasoningEffort: String(agent.codex?.modelReasoningEffort || "high"),
214
216
  },
215
217
  claude: {
216
218
  filename: String(agent.claude?.filename || `${agent.name}.md`),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.71",
3
+ "version": "0.1.73",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -437,6 +437,14 @@ should test for this campaign. Those can run in parallel and usually take
437
437
  `lead-sample.json`). Approval waits for both `lead-filter.md` and
438
438
  `message-validation.md`, then reconciles that the selected message basis rows
439
439
  still pass the final filter.
440
+ - `lead-sample.json` from `find leads` is always the message sample source.
441
+ `filter leads` must not create a different message sample or cause message
442
+ generation to fetch new prospects. The filter only marks which find-leads
443
+ sample rows are valid, names false-positive patterns, and provides the
444
+ production keep/exclude rules. Message generation may start prep or
445
+ provisional candidate work from probable good-fit rows in `lead-sample.json`,
446
+ but the final `message-validation.md` winner must cite basis rows from
447
+ `lead-sample.json` that still pass `lead-filter.md`.
440
448
  - Parallel means real parallel execution, not optimistic progress copy. For the
441
449
  lead-source scout, first call `get_source_scout_registry` and use the
442
450
  returned canonical `name` values. In Codex, explicitly spawn one named custom scout per
@@ -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 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."
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 from the find-leads sample'. If not, do not mention parallel/background work; say: 'I’ll tighten the filter first, then run message generation from the same find-leads sample.' Never claim parallelism unless parallel execution actually started. User-facing stage name is message generation; message-validation.md is only the internal artifact. Message generation must use lead-sample.json from find-leads; filter leads only gates which of those sampled rows remain valid."
483
483
  },
484
484
  {
485
485
  "action": "ask_continue_revise_or_confirm_only_if_needed",
@@ -605,11 +605,12 @@
605
605
  "action": "run_or_reconcile_subskill",
606
606
  "target": "generate-messages",
607
607
  "mode": "DRY MODE",
608
+ "sampleSource": "lead-sample.json from find-leads",
608
609
  "toolCallRequiredBeforeArtifacts": [
609
610
  "get_subskill_prompt({ subskillName: \"generate-messages\", offset, limit }) until hasMore=false"
610
611
  ],
611
612
  "skipIfFreshArtifactExists": "message-validation.md",
612
- "reconcileWith": "lead-filter.md"
613
+ "reconcileWith": "lead-filter.md; lead-sample.json remains the sample source"
613
614
  },
614
615
  {
615
616
  "action": "write_artifact",
@@ -626,6 +627,7 @@
626
627
  ],
627
628
  "toolRules": [
628
629
  "Before writing message-validation.md, message-review.md, approval-packet.md, or a commit-gate AskUserQuestion, the current run must read 100% of the real generate-messages prompt via chunked get_subskill_prompt({ subskillName: \"generate-messages\", offset, limit }) calls.",
630
+ "Lead Sample Basis must cite rows from lead-sample.json produced by find-leads. lead-filter.md only gates those rows; it is not a source for a new sample.",
629
631
  "Do not hand-write message-validation.md from message-prep.md, message-candidate-drafts.md, or general campaign knowledge.",
630
632
  "message-validation.md must prove the full generate-messages workflow ran: Gold Standard Strategy Map, Proof Inventory, Token Fill Rules, Token Adherence Table, Angle Drafts, Kill / Combine Review, Finalists, Finalizer Pass, Gold-Standard Quality Gate, Skeptical Prospect Review, Winner Gate, and a raw sendable Selected Winner are required before message-review can recommend approve-message.",
631
633
  "If the Codex-hosted output is plausible but weaker than the loaded gold-standard examples, stop at message-review with revise-messaging. Do not continue to approval or mint just because the mechanical flow worked.",
@@ -234,8 +234,10 @@ The sample set must:
234
234
 
235
235
  - contain 2-3 sample messages
236
236
  - use the find-leads message handoff rows or probable good-fit rows from
237
- `lead-sample.json`; if `lead-filter.md` already exists, use only leads that
238
- still pass it
237
+ `lead-sample.json`; if `lead-filter.md` exists, use only those same
238
+ find-leads sample rows when they still pass it
239
+ - never replace the find-leads sample with a filter-generated sample, fresh
240
+ LinkedIn rows, new Sales Nav previews, or new Prospeo rows
239
241
  - use only supported tokens documented in the brief
240
242
  - contain no unresolved `{{token}}` placeholders
241
243
  - resolve every token used in the sample output
@@ -79,6 +79,11 @@ Required dry-mode contract:
79
79
  - do not mutate DB-backed campaign state
80
80
  - do not fetch fresh web or LinkedIn research
81
81
  - use only `brief.md`, `lead-filter.md`, and `lead-sample.json`
82
+ - treat `lead-sample.json` from find-leads as the message sample source; do not
83
+ ask filter-leads for a new sample, create a new sample, or fetch additional
84
+ prospects for dry-mode message generation
85
+ - use `lead-filter.md` only to decide which find-leads sample rows remain valid
86
+ for the final winner and which false-positive patterns must be avoided
82
87
  - generate 2-3 sample messages inline
83
88
  - write findings to `message-validation.md`
84
89
  - start `message-validation.md` with `Mode: DRY MODE (no DB mutation)`
@@ -94,7 +99,8 @@ Read:
94
99
 
95
100
  - `brief.md`
96
101
  - `lead-filter.md`
97
- - `lead-sample.json`
102
+ - `lead-sample.json` from the find-leads step; this is the only allowed sample
103
+ source for dry-mode message generation
98
104
  - `mcp/sellable/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md`
99
105
  - `mcp/sellable/skills/create-campaign-v2/references/validation-criteria.md`
100
106
  - `mcp/sellable/skills/create-campaign-v2/references/thomas-revision-filters.md`
@@ -0,0 +1,9 @@
1
+ {
2
+ "parallelMode": "wide",
3
+ "agentCount": 6,
4
+ "maxToolCallsPerAgent": 2,
5
+ "senderMaxAgents": 2,
6
+ "senderMaxToolCallsPerAgent": 3,
7
+ "progressMode": true,
8
+ "debugMode": true
9
+ }