@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.
|
package/agents/registry.json
CHANGED
|
@@ -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
|
}
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
1431
|
-
logVerbose(`${C.grey}+ register Codex
|
|
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
|
|
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
|
|
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
|
@@ -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
|
|
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
|