@sellable/install 0.1.72 → 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
|
@@ -40,7 +40,7 @@ function getMcpVersion() {
|
|
|
40
40
|
} catch {}
|
|
41
41
|
return "latest";
|
|
42
42
|
}
|
|
43
|
-
const CODEX_PLUGIN_VERSION = "0.1.
|
|
43
|
+
const CODEX_PLUGIN_VERSION = "0.1.29";
|
|
44
44
|
const CODEX_PLUGIN_COMPAT_VERSIONS = [
|
|
45
45
|
"0.1.8",
|
|
46
46
|
"0.1.9",
|
|
@@ -62,6 +62,7 @@ const CODEX_PLUGIN_COMPAT_VERSIONS = [
|
|
|
62
62
|
"0.1.25",
|
|
63
63
|
"0.1.26",
|
|
64
64
|
"0.1.27",
|
|
65
|
+
"0.1.28",
|
|
65
66
|
];
|
|
66
67
|
const INSTALL_PACKAGE_SPEC =
|
|
67
68
|
process.env.SELLABLE_INSTALL_PACKAGE_SPEC || "@sellable/install@latest";
|
|
@@ -466,6 +467,7 @@ const CREATE_CAMPAIGN_ALLOWED_TOOLS = [
|
|
|
466
467
|
"mcp__sellable__search_subskill_prompts",
|
|
467
468
|
"mcp__sellable__get_provider_prompt",
|
|
468
469
|
"mcp__sellable__get_source_scout_registry",
|
|
470
|
+
"mcp__sellable__get_post_find_leads_scout_registry",
|
|
469
471
|
"mcp__sellable__get_message_prompt",
|
|
470
472
|
"mcp__sellable__get_active_workspace",
|
|
471
473
|
"mcp__sellable__list_senders",
|
|
@@ -632,11 +634,52 @@ gates. Never use it to collect open text input like LinkedIn URLs, company
|
|
|
632
634
|
domains, notes, pasted context, campaign ideas, or feedback. For open text, ask
|
|
633
635
|
in normal chat and wait for the user to paste the value.
|
|
634
636
|
|
|
637
|
+
For campaign setup, every structured question is single-choice in both Claude
|
|
638
|
+
Code and Codex. Use mutually exclusive options, set or assume
|
|
639
|
+
\`multiSelect: false\`, and do not use checkbox or multi-select wording. If the
|
|
640
|
+
user needs a blended/custom answer, route them through \`Other / custom\` or a
|
|
641
|
+
free-text follow-up in normal chat.
|
|
642
|
+
|
|
635
643
|
Customer-facing language must call this "a couple setup choices" during normal
|
|
636
644
|
campaign progress. Use "quick question panel" only when explaining a missing
|
|
637
645
|
Codex/Claude setup capability. Do not tell customers about \`request_user_input\`,
|
|
638
646
|
Default mode, plugin caches, prompt loading, or skill file versions.
|
|
639
647
|
|
|
648
|
+
## Host Runtime Functions
|
|
649
|
+
|
|
650
|
+
Treat host capabilities as concrete functions, not prose conventions:
|
|
651
|
+
|
|
652
|
+
- \`ask_user\`: Claude Code uses \`AskUserQuestion\`; Codex uses
|
|
653
|
+
\`request_user_input\`. Use this for multiple-choice intake, campaign-focus
|
|
654
|
+
choices, source decisions, and approvals. Campaign setup questions are
|
|
655
|
+
single-choice only; do not use multi-select or checkbox variants. Never
|
|
656
|
+
render numbered plain-chat choices in an interactive session when the
|
|
657
|
+
structured question function is exposed.
|
|
658
|
+
- \`load_subprompt\`: call
|
|
659
|
+
\`mcp__sellable__get_subskill_prompt({ subskillName, offset?, limit? })\` and
|
|
660
|
+
continue chunks until \`hasMore\` is false.
|
|
661
|
+
- \`load_subprompt_asset\`: call
|
|
662
|
+
\`mcp__sellable__get_subskill_asset({ subskillName, assetPath, offset?, limit? })\`
|
|
663
|
+
and continue chunks until \`hasMore\` is false.
|
|
664
|
+
- \`load_source_scout_registry\`: call
|
|
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.
|
|
669
|
+
- \`launch_source_scout\`: Claude Code uses \`Task\` with \`subagent_type\` equal to
|
|
670
|
+
the registry \`name\`; Codex uses named custom agents such as
|
|
671
|
+
\`source-scout-linkedin-engagement\`, \`source-scout-sales-nav\`, and
|
|
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.
|
|
677
|
+
|
|
678
|
+
If a required interactive host function is missing, stop and explain the
|
|
679
|
+
Sellable install/reload problem. Do not silently simulate structured choices,
|
|
680
|
+
subprompt loading, source-scout dispatch, or post-lead scout dispatch with local
|
|
681
|
+
scripts.
|
|
682
|
+
|
|
640
683
|
Never narrate local draft housekeeping to the user. If you create directories,
|
|
641
684
|
save drafts, write artifacts, or persist intermediate state, translate it into
|
|
642
685
|
the campaign benefit: consistent brief, approved lead source, reviewed message,
|
|
@@ -1109,7 +1152,7 @@ function agentTemplateRoot() {
|
|
|
1109
1152
|
}
|
|
1110
1153
|
|
|
1111
1154
|
throw new Error(
|
|
1112
|
-
`Sellable
|
|
1155
|
+
`Sellable custom agent templates missing. Expected ${join(
|
|
1113
1156
|
packagedRoot,
|
|
1114
1157
|
"registry.json"
|
|
1115
1158
|
)}`
|
|
@@ -1393,8 +1436,8 @@ config_file = ${quoteToml(join(home, "agents", agent.filename))}`
|
|
|
1393
1436
|
logVerbose(
|
|
1394
1437
|
`${C.grey}+ enable [features].default_mode_request_user_input in ${configPath}${C.reset}`
|
|
1395
1438
|
);
|
|
1396
|
-
logVerbose(`${C.grey}+ write Codex custom
|
|
1397
|
-
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}`);
|
|
1398
1441
|
}
|
|
1399
1442
|
|
|
1400
1443
|
return {
|
|
@@ -1814,10 +1857,10 @@ function printNextSteps(installedHosts, authReused) {
|
|
|
1814
1857
|
if (hasCodex) {
|
|
1815
1858
|
console.log(` ${C.green}✓${C.reset} Codex Desktop plugin installed`);
|
|
1816
1859
|
console.log(` ${C.green}✓${C.reset} Skills installed`);
|
|
1817
|
-
console.log(` ${C.green}✓${C.reset} Codex
|
|
1860
|
+
console.log(` ${C.green}✓${C.reset} Codex custom agents installed`);
|
|
1818
1861
|
}
|
|
1819
1862
|
if (hasClaude) {
|
|
1820
|
-
console.log(` ${C.green}✓${C.reset} Claude
|
|
1863
|
+
console.log(` ${C.green}✓${C.reset} Claude custom agents installed`);
|
|
1821
1864
|
}
|
|
1822
1865
|
if (authReused) {
|
|
1823
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.
|
|
@@ -161,11 +169,52 @@ gates. Never use it to collect open text input like LinkedIn URLs, company
|
|
|
161
169
|
domains, notes, pasted context, campaign ideas, or feedback. For open text, ask
|
|
162
170
|
in normal chat and wait for the user to paste the value.
|
|
163
171
|
|
|
172
|
+
For campaign setup, every structured question is single-choice in both Claude
|
|
173
|
+
Code and Codex. Use mutually exclusive options, set or assume
|
|
174
|
+
`multiSelect: false`, and do not use checkbox or multi-select wording. If the
|
|
175
|
+
user needs a blended/custom answer, route them through `Other / custom` or a
|
|
176
|
+
free-text follow-up in normal chat.
|
|
177
|
+
|
|
164
178
|
Customer-facing language must call this "a couple setup choices" during normal
|
|
165
179
|
campaign progress. Use "quick question panel" only when explaining a missing
|
|
166
180
|
Codex/Claude setup capability. Do not tell customers about `request_user_input`,
|
|
167
181
|
Default mode, plugin caches, prompt loading, or skill file versions.
|
|
168
182
|
|
|
183
|
+
## Host Runtime Functions
|
|
184
|
+
|
|
185
|
+
Treat host capabilities as concrete functions, not prose conventions:
|
|
186
|
+
|
|
187
|
+
- `ask_user`: Claude Code uses `AskUserQuestion`; Codex uses
|
|
188
|
+
`request_user_input`. Use this for multiple-choice intake, campaign-focus
|
|
189
|
+
choices, source decisions, and approvals. Campaign setup questions are
|
|
190
|
+
single-choice only; do not use multi-select or checkbox variants. Never
|
|
191
|
+
render numbered plain-chat choices in an interactive session when the
|
|
192
|
+
structured question function is exposed.
|
|
193
|
+
- `load_subprompt`: call
|
|
194
|
+
`mcp__sellable__get_subskill_prompt({ subskillName, offset?, limit? })` and
|
|
195
|
+
continue chunks until `hasMore` is false.
|
|
196
|
+
- `load_subprompt_asset`: call
|
|
197
|
+
`mcp__sellable__get_subskill_asset({ subskillName, assetPath, offset?, limit? })`
|
|
198
|
+
and continue chunks until `hasMore` is false.
|
|
199
|
+
- `load_source_scout_registry`: call
|
|
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.
|
|
204
|
+
- `launch_source_scout`: Claude Code uses `Task` with `subagent_type` equal to
|
|
205
|
+
the registry `name`; Codex uses named custom agents such as
|
|
206
|
+
`source-scout-linkedin-engagement`, `source-scout-sales-nav`, and
|
|
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.
|
|
212
|
+
|
|
213
|
+
If a required interactive host function is missing, stop and explain the
|
|
214
|
+
Sellable install/reload problem. Do not silently simulate structured choices,
|
|
215
|
+
subprompt loading, source-scout dispatch, or post-lead scout dispatch with local
|
|
216
|
+
scripts.
|
|
217
|
+
|
|
169
218
|
Never narrate local draft housekeeping to the user. If you create directories,
|
|
170
219
|
save drafts, write artifacts, or persist intermediate state, translate it into
|
|
171
220
|
the campaign benefit: consistent brief, approved lead source, reviewed message,
|