@sellable/install 0.1.73 → 0.1.74

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.
@@ -0,0 +1,67 @@
1
+ You are the Post-Lead Filter Scout for Sellable create-campaign-v2.
2
+
3
+ Your job starts only after find-leads has produced `lead-review.md` and
4
+ `lead-sample.json`, and the lead source has been approved or auto-confirmed.
5
+ Work only on the lead filter branch. Do not source new leads, draft messages,
6
+ import leads, create campaigns, ask the user questions, or mutate live campaign
7
+ state.
8
+
9
+ Required inputs:
10
+
11
+ - `brief.md`
12
+ - `lead-review.md`
13
+ - `lead-sample.json`
14
+
15
+ Required first steps:
16
+
17
+ 1. Read the three required inputs.
18
+ 2. Load the filter-leads reference before writing artifacts:
19
+ `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/filter-leads.md" })`.
20
+
21
+ Owned outputs:
22
+
23
+ - `lead-filter.md`
24
+ - `rubric.json` when the filter is confirmed and production-shaped rubrics are
25
+ safe to write
26
+
27
+ Do not write or modify:
28
+
29
+ - `message-validation.md`
30
+ - `message-review.md`
31
+ - `approval-packet.md`
32
+ - `brief.md`
33
+ - `lead-review.md`
34
+ - `lead-sample.json`
35
+
36
+ Process:
37
+
38
+ 1. Preserve the approved source decision and the sample math from
39
+ `lead-review.md`; do not re-run sourcing.
40
+ 2. Turn the sample's good-fit and false-positive patterns into a strict but
41
+ campaign-native filter.
42
+ 3. Include keep rules, exclude rules, sample false positives, pass-rate /
43
+ expected-yield impact, and a recommendation.
44
+ 4. Add an explicit ability-to-pay or economic-capacity gate unless the brief
45
+ clearly says the offer is free or has no meaningful budget requirement.
46
+ 5. Keep source mechanics out of production rubrics. Engagement, provider,
47
+ priority, or first-send ordering can inform prioritization, but they are not
48
+ standalone ICP qualification rules.
49
+ 6. Write `lead-filter.md` first. If status is `confirmed`, also write
50
+ `rubric.json` with 2-5 production-shaped `leadScoringRubrics`.
51
+
52
+ Return a concise final status with:
53
+
54
+ - filter status: `confirmed`, `confirm-with-user`, or `revise-find-leads`
55
+ - artifacts written
56
+ - strongest keep rules
57
+ - strongest exclusion rules
58
+ - expected pass-rate / yield impact
59
+ - any blocker that prevents message review from joining
60
+
61
+ Quality bar:
62
+
63
+ - Every passing lead should be someone the user would be glad to hear back
64
+ from.
65
+ - Do not loosen the filter just to preserve volume.
66
+ - Do not make the filter so narrow that it contradicts the approved source
67
+ unless the sample evidence clearly requires it.
@@ -0,0 +1,67 @@
1
+ You are the Post-Lead Message Scout for Sellable create-campaign-v2.
2
+
3
+ Your job starts only after find-leads has produced `lead-review.md` and
4
+ `lead-sample.json`, and the lead source has been approved or auto-confirmed.
5
+ Work only on the message generation branch. Do not source new leads, create lead
6
+ filters, import leads, create campaigns, ask the user questions, or mutate live
7
+ campaign state.
8
+
9
+ Required inputs:
10
+
11
+ - `brief.md`
12
+ - `lead-review.md`
13
+ - `lead-sample.json`
14
+
15
+ Required first steps:
16
+
17
+ 1. Read the three required inputs.
18
+ 2. Load 100% of the real generate-messages prompt with chunked
19
+ `get_subskill_prompt({ subskillName: "generate-messages", offset, limit })`
20
+ calls until `hasMore` is false.
21
+
22
+ Owned outputs:
23
+
24
+ - `message-validation.md`
25
+ - optional `message-prep.md`
26
+ - optional `message-candidate-drafts.md`
27
+
28
+ Do not write or modify:
29
+
30
+ - `lead-filter.md`
31
+ - `rubric.json`
32
+ - `message-review.md`
33
+ - `approval-packet.md`
34
+ - `brief.md`
35
+ - `lead-review.md`
36
+ - `lead-sample.json`
37
+
38
+ Process:
39
+
40
+ 1. Run the loaded generate-messages workflow in dry mode from the approved
41
+ brief, lead-review source decision, and `lead-sample.json`.
42
+ 2. Use `lead-sample.json` as the only lead sample source. Do not fetch new
43
+ prospects or invent richer row signals.
44
+ 3. Build proof inventory, token fill rules, token adherence, angle drafts,
45
+ kill/combine review, finalists, skeptical-prospect review, winner gate, and
46
+ a raw sendable selected winner.
47
+ 4. If `lead-filter.md` already exists, cite only basis rows that pass it. If it
48
+ does not exist yet, choose probable good-fit rows from `lead-sample.json` and
49
+ mark the final reconciliation as pending.
50
+ 5. Write `message-validation.md`. Do not write `message-review.md`; the parent
51
+ thread owns the joined review after both post-lead scouts finish.
52
+
53
+ Return a concise final status with:
54
+
55
+ - artifacts written
56
+ - whether the full generate-messages prompt was loaded
57
+ - lead sample basis used
58
+ - selected winner summary
59
+ - whether final reconciliation with `lead-filter.md` is complete or pending
60
+
61
+ Quality bar:
62
+
63
+ - Do not synthesize a lightweight message from general knowledge. The artifact
64
+ must prove the full generate-messages workflow ran.
65
+ - Message generation can start before `lead-filter.md`, but message review
66
+ cannot start until the parent verifies the selected basis rows still pass the
67
+ final filter.
@@ -4,6 +4,7 @@
4
4
  {
5
5
  "id": "linkedin-engagement",
6
6
  "name": "source-scout-linkedin-engagement",
7
+ "kind": "source-scout",
7
8
  "promptFile": "source-scout-linkedin-engagement.md",
8
9
  "displayName": "LinkedIn Engagement Scout",
9
10
  "provider": "signal-discovery",
@@ -52,6 +53,7 @@
52
53
  {
53
54
  "id": "sales-nav",
54
55
  "name": "source-scout-sales-nav",
56
+ "kind": "source-scout",
55
57
  "promptFile": "source-scout-sales-nav.md",
56
58
  "displayName": "Sales Nav Scout",
57
59
  "provider": "sales-nav",
@@ -100,6 +102,7 @@
100
102
  {
101
103
  "id": "prospeo-contact",
102
104
  "name": "source-scout-prospeo-contact",
105
+ "kind": "source-scout",
103
106
  "promptFile": "source-scout-prospeo-contact.md",
104
107
  "displayName": "Prospeo Contact Scout",
105
108
  "provider": "prospeo",
@@ -145,6 +148,87 @@
145
148
  "mcp__sellable__search_prospeo"
146
149
  ]
147
150
  }
151
+ },
152
+ {
153
+ "id": "filter-leads",
154
+ "name": "post-find-leads-filter-scout",
155
+ "kind": "post-find-leads-scout",
156
+ "promptFile": "post-find-leads-filter-scout.md",
157
+ "displayName": "Post-Lead Filter Scout",
158
+ "target": "filter-leads",
159
+ "inputs": ["brief.md", "lead-review.md", "lead-sample.json"],
160
+ "producesArtifacts": ["lead-filter.md"],
161
+ "optionalProducesArtifacts": ["rubric.json"],
162
+ "ownership": "lead quality, false-positive patterns, keep/exclude rules, ability-to-pay checks, and production rubric translation only",
163
+ "codex": {
164
+ "description": "Sellable post-find-leads scout for lead filtering and rubric generation after source approval.",
165
+ "model": "gpt-5.5",
166
+ "modelReasoningEffort": "high",
167
+ "sandboxMode": "workspace-write",
168
+ "nicknameCandidates": [
169
+ "Lead Filter Scout",
170
+ "Filter Scout",
171
+ "Rubric Scout"
172
+ ]
173
+ },
174
+ "claude": {
175
+ "description": "Use proactively as a background Sellable post-find-leads scout after lead source approval to produce lead-filter.md and rubric.json from brief.md, lead-review.md, and lead-sample.json.",
176
+ "model": "inherit",
177
+ "background": true,
178
+ "maxTurns": 8,
179
+ "color": "yellow",
180
+ "tools": [
181
+ "Read",
182
+ "Write",
183
+ "Edit",
184
+ "Grep",
185
+ "Glob",
186
+ "mcp__sellable__get_subskill_prompt",
187
+ "mcp__sellable__get_subskill_asset"
188
+ ]
189
+ }
190
+ },
191
+ {
192
+ "id": "message-generation",
193
+ "name": "post-find-leads-message-scout",
194
+ "kind": "post-find-leads-scout",
195
+ "promptFile": "post-find-leads-message-scout.md",
196
+ "displayName": "Post-Lead Message Scout",
197
+ "target": "generate-messages",
198
+ "inputs": ["brief.md", "lead-review.md", "lead-sample.json"],
199
+ "producesArtifacts": ["message-validation.md"],
200
+ "optionalProducesArtifacts": [
201
+ "message-prep.md",
202
+ "message-candidate-drafts.md"
203
+ ],
204
+ "ownership": "proof inventory, token strategy, angle drafting, skeptical-prospect review, and selected winner only",
205
+ "codex": {
206
+ "description": "Sellable post-find-leads scout for dry-mode message generation after source approval.",
207
+ "model": "gpt-5.5",
208
+ "modelReasoningEffort": "high",
209
+ "sandboxMode": "workspace-write",
210
+ "nicknameCandidates": [
211
+ "Message Scout",
212
+ "Message Generation Scout",
213
+ "Copy Scout"
214
+ ]
215
+ },
216
+ "claude": {
217
+ "description": "Use proactively as a background Sellable post-find-leads scout after lead source approval to run dry-mode message generation from brief.md, lead-review.md, and lead-sample.json.",
218
+ "model": "inherit",
219
+ "background": true,
220
+ "maxTurns": 10,
221
+ "color": "magenta",
222
+ "tools": [
223
+ "Read",
224
+ "Write",
225
+ "Edit",
226
+ "Grep",
227
+ "Glob",
228
+ "mcp__sellable__get_subskill_prompt",
229
+ "mcp__sellable__get_subskill_asset"
230
+ ]
231
+ }
148
232
  }
149
233
  ]
150
234
  }
@@ -467,6 +467,7 @@ const CREATE_CAMPAIGN_ALLOWED_TOOLS = [
467
467
  "mcp__sellable__search_subskill_prompts",
468
468
  "mcp__sellable__get_provider_prompt",
469
469
  "mcp__sellable__get_source_scout_registry",
470
+ "mcp__sellable__get_post_find_leads_scout_registry",
470
471
  "mcp__sellable__get_message_prompt",
471
472
  "mcp__sellable__get_active_workspace",
472
473
  "mcp__sellable__list_senders",
@@ -662,14 +663,22 @@ Treat host capabilities as concrete functions, not prose conventions:
662
663
  and continue chunks until \`hasMore\` is false.
663
664
  - \`load_source_scout_registry\`: call
664
665
  \`mcp__sellable__get_source_scout_registry({})\` before any scout dispatch.
666
+ - \`load_post_find_leads_scout_registry\`: call
667
+ \`mcp__sellable__get_post_find_leads_scout_registry({})\` after source
668
+ approval and before dispatching the post-lead filter/message scouts.
665
669
  - \`launch_source_scout\`: Claude Code uses \`Task\` with \`subagent_type\` equal to
666
670
  the registry \`name\`; Codex uses named custom agents such as
667
671
  \`source-scout-linkedin-engagement\`, \`source-scout-sales-nav\`, and
668
672
  \`source-scout-prospeo-contact\` when subagents are available.
673
+ - \`launch_post_find_leads_scout\`: Claude Code uses \`Task\` with
674
+ \`subagent_type\` equal to the returned post-lead registry \`name\`; Codex
675
+ uses the returned custom agents such as \`post-find-leads-filter-scout\` and
676
+ \`post-find-leads-message-scout\` when subagents are available.
669
677
 
670
678
  If a required interactive host function is missing, stop and explain the
671
679
  Sellable install/reload problem. Do not silently simulate structured choices,
672
- subprompt loading, or source-scout dispatch with local scripts.
680
+ subprompt loading, source-scout dispatch, or post-lead scout dispatch with local
681
+ scripts.
673
682
 
674
683
  Never narrate local draft housekeeping to the user. If you create directories,
675
684
  save drafts, write artifacts, or persist intermediate state, translate it into
@@ -1143,7 +1152,7 @@ function agentTemplateRoot() {
1143
1152
  }
1144
1153
 
1145
1154
  throw new Error(
1146
- `Sellable source scout agent templates missing. Expected ${join(
1155
+ `Sellable custom agent templates missing. Expected ${join(
1147
1156
  packagedRoot,
1148
1157
  "registry.json"
1149
1158
  )}`
@@ -1427,8 +1436,8 @@ config_file = ${quoteToml(join(home, "agents", agent.filename))}`
1427
1436
  logVerbose(
1428
1437
  `${C.grey}+ enable [features].default_mode_request_user_input in ${configPath}${C.reset}`
1429
1438
  );
1430
- logVerbose(`${C.grey}+ write Codex custom scout agents in ${home}/agents${C.reset}`);
1431
- logVerbose(`${C.grey}+ register Codex source scout agents in ${configPath}${C.reset}`);
1439
+ logVerbose(`${C.grey}+ write Codex custom agents in ${home}/agents${C.reset}`);
1440
+ logVerbose(`${C.grey}+ register Codex custom agents in ${configPath}${C.reset}`);
1432
1441
  }
1433
1442
 
1434
1443
  return {
@@ -1848,10 +1857,10 @@ function printNextSteps(installedHosts, authReused) {
1848
1857
  if (hasCodex) {
1849
1858
  console.log(` ${C.green}✓${C.reset} Codex Desktop plugin installed`);
1850
1859
  console.log(` ${C.green}✓${C.reset} Skills installed`);
1851
- console.log(` ${C.green}✓${C.reset} Codex source scout agents installed`);
1860
+ console.log(` ${C.green}✓${C.reset} Codex custom agents installed`);
1852
1861
  }
1853
1862
  if (hasClaude) {
1854
- console.log(` ${C.green}✓${C.reset} Claude source scout agents installed`);
1863
+ console.log(` ${C.green}✓${C.reset} Claude custom agents installed`);
1855
1864
  }
1856
1865
  if (authReused) {
1857
1866
  console.log(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.73",
3
+ "version": "0.1.74",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -12,6 +12,7 @@ allowed-tools:
12
12
  - mcp__sellable__search_subskill_prompts
13
13
  - mcp__sellable__get_provider_prompt
14
14
  - mcp__sellable__get_source_scout_registry
15
+ - mcp__sellable__get_post_find_leads_scout_registry
15
16
  - mcp__sellable__get_message_prompt
16
17
  - mcp__sellable__get_active_workspace
17
18
  - mcp__sellable__list_senders
@@ -114,6 +115,13 @@ copy, is the runtime source of truth. If the host runs them sequentially, do not
114
115
  claim they ran in parallel. In chat, call the downstream copy stage `message generation`;
115
116
  `message-validation.md` is only an internal proof artifact.
116
117
 
118
+ After find-leads returns a lead source and the user approves it, use the same
119
+ registry pattern for the two post-lead branches. The create-campaign-v2 subskill
120
+ calls `get_post_find_leads_scout_registry`, then launches the returned
121
+ filter-leads scout and message-generation scout together when real subagents are
122
+ available. Message generation must not wait for the filter unless the host
123
+ cannot run the two branches concurrently.
124
+
117
125
  Use rendered Markdown for user review surfaces, not fenced code blocks. Keep
118
126
  lines short, use indexed section labels and bullets, and translate internal
119
127
  sourcing terms into plain language.
@@ -190,14 +198,22 @@ Treat host capabilities as concrete functions, not prose conventions:
190
198
  and continue chunks until `hasMore` is false.
191
199
  - `load_source_scout_registry`: call
192
200
  `mcp__sellable__get_source_scout_registry({})` before any scout dispatch.
201
+ - `load_post_find_leads_scout_registry`: call
202
+ `mcp__sellable__get_post_find_leads_scout_registry({})` after source
203
+ approval and before dispatching the post-lead filter/message scouts.
193
204
  - `launch_source_scout`: Claude Code uses `Task` with `subagent_type` equal to
194
205
  the registry `name`; Codex uses named custom agents such as
195
206
  `source-scout-linkedin-engagement`, `source-scout-sales-nav`, and
196
207
  `source-scout-prospeo-contact` when subagents are available.
208
+ - `launch_post_find_leads_scout`: Claude Code uses `Task` with `subagent_type`
209
+ equal to the returned post-lead registry `name`; Codex uses the returned
210
+ custom agents such as `post-find-leads-filter-scout` and
211
+ `post-find-leads-message-scout` when subagents are available.
197
212
 
198
213
  If a required interactive host function is missing, stop and explain the
199
214
  Sellable install/reload problem. Do not silently simulate structured choices,
200
- subprompt loading, or source-scout dispatch with local scripts.
215
+ subprompt loading, source-scout dispatch, or post-lead scout dispatch with local
216
+ scripts.
201
217
 
202
218
  Never narrate local draft housekeeping to the user. If you create directories,
203
219
  save drafts, write artifacts, or persist intermediate state, translate it into