@sellable/mcp 0.1.181 → 0.1.183
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 -4
- package/dist/tools/prompts.js +3 -3
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +11 -7
- package/skills/create-campaign-v2/SKILL.md +26 -23
- package/skills/create-campaign-v2/SOUL.md +6 -5
- package/skills/create-campaign-v2/references/watch-guide-narration.md +10 -8
package/README.md
CHANGED
|
@@ -272,10 +272,11 @@ Parallel execution contract:
|
|
|
272
272
|
filter/message prompts before that question. Once the user answers, launch the
|
|
273
273
|
message-generation scout from the same campaign/table basis. If the user
|
|
274
274
|
chooses filters, also launch the filter-leads scout, show Filter Rules, save
|
|
275
|
-
rubrics, then ask for filter approval. After approval,
|
|
276
|
-
|
|
277
|
-
skipped, move to Messages/message
|
|
278
|
-
Message cells wait for message
|
|
275
|
+
rubrics, then ask for filter approval. After approval, move to Filter Leads
|
|
276
|
+
and show `Filters saved + waiting for message approval` while the message
|
|
277
|
+
recommendation is reviewed. If filters are skipped, move to Messages/message
|
|
278
|
+
review. Enrichment/filtering and Generate Message cells wait for message
|
|
279
|
+
approval.
|
|
279
280
|
- Claude host: use the installed `source-scout-linkedin-engagement`,
|
|
280
281
|
`source-scout-sales-nav`, and `source-scout-prospeo-contact` Task/Agent
|
|
281
282
|
subagents for parallel lead-source scouting only when the current session
|
package/dist/tools/prompts.js
CHANGED
|
@@ -340,9 +340,9 @@ export function getPostFindLeadsScoutRegistry() {
|
|
|
340
340
|
reusePolicy: "The first completed Message Draft Builder recommendation remains the default review candidate. Later Lead Fit Builder, Filter Leads, enrichment, or rubric completion may make an enriched rewrite available, but does not automatically retry or replace the initial draft unless campaign/brief/source/list/table/review-sample identity mismatches or the initial output failed.",
|
|
341
341
|
},
|
|
342
342
|
usage: {
|
|
343
|
-
codex: "After confirm_lead_list copies source rows and the initial campaign-table execution slice exists, ask the filter-choice question immediately. Do not spawn returned post-lead scout names before that question. Once the user answers, spawn Message Draft Builder from the same campaign/table basis. If the user chooses filters, also spawn Lead Fit Builder, move to Filter Rules, save rubrics, ask for filter approval, then keep the browser on Filter Leads while the message recommendation is reviewed. If filters are skipped, move to Messages/message review.",
|
|
344
|
-
claude: "After confirm_lead_list copies source rows and the initial campaign-table execution slice exists, ask the filter-choice question immediately. Do not invoke returned post-lead Task/Agent names before that question. Once the user answers, invoke Message Draft Builder from the same campaign/table basis. If the user chooses filters, also invoke Lead Fit Builder, move to Filter Rules, save rubrics, ask for filter approval, then keep the browser on Filter Leads while the message recommendation is reviewed. If filters are skipped, move to Messages/message review.",
|
|
345
|
-
parentThreadRule: 'Named agents are optional acceleration, but message drafting is not optional. If post-find-leads-message-scout is available, run it as the background Message Draft Builder after the filter-choice answer. If it is absent, do not customer-surface install status; the main thread must execute the same message branch from CampaignOffer state, selected source state, workflowTableId, and initial campaign-table execution slice rows. Local markdown/json files are not normal-path inputs. The filter-choice question is the first post-import user gate; do not load post-lead registries, filter references, or the full generate-messages prompt before it. Message drafting starts after the filter-choice answer, must load get_subskill_prompt({ subskillName: "generate-messages", offset, limit }) until hasMore=false, must read live campaign table state through scoped MCP/product tools, and must reject mismatched selectedLeadListId/workflowTableId/campaign/workspace input. On the filter path, keep the browser on Filter Rules after save_rubrics so the user can approve the saved criteria; only then move to Filter Leads and wait there for message approval. Enrichment, filtering, Generate Message cells, sender setup, sequence attach, and launch wait for template approval on the Use Template path. On the skip path, move to Messages/message review and wait for message approval before enrichment or Settings. Do not render message review from checklist or shortcut instructions; message review requires a messageDraftRecommendation whose basis proves the full generate-messages prompt ran for the current campaign/table execution slice. Do not automatically rerun Message Draft Builder after filters/enrichment finish; show the initial draft by default and offer an enriched rewrite only with explicit user opt-in.',
|
|
343
|
+
codex: "After confirm_lead_list copies source rows and the initial campaign-table execution slice exists, ask the filter-choice question immediately. Do not spawn returned post-lead scout names before that question. Once the user answers, spawn Message Draft Builder from the same campaign/table basis. If the user chooses filters, also spawn Lead Fit Builder, move to Filter Rules, save rubrics, ask for filter approval, then keep the browser on Filter Leads and show `Filters saved + waiting for message approval` while the message recommendation is reviewed. If filters are skipped, move to Messages/message review.",
|
|
344
|
+
claude: "After confirm_lead_list copies source rows and the initial campaign-table execution slice exists, ask the filter-choice question immediately. Do not invoke returned post-lead Task/Agent names before that question. Once the user answers, invoke Message Draft Builder from the same campaign/table basis. If the user chooses filters, also invoke Lead Fit Builder, move to Filter Rules, save rubrics, ask for filter approval, then keep the browser on Filter Leads and show `Filters saved + waiting for message approval` while the message recommendation is reviewed. If filters are skipped, move to Messages/message review.",
|
|
345
|
+
parentThreadRule: 'Named agents are optional acceleration, but message drafting is not optional. If post-find-leads-message-scout is available, run it as the background Message Draft Builder after the filter-choice answer. If it is absent, do not customer-surface install status; the main thread must execute the same message branch from CampaignOffer state, selected source state, workflowTableId, and initial campaign-table execution slice rows. Local markdown/json files are not normal-path inputs. The filter-choice question is the first post-import user gate; do not load post-lead registries, filter references, or the full generate-messages prompt before it. Message drafting starts after the filter-choice answer, must load get_subskill_prompt({ subskillName: "generate-messages", offset, limit }) until hasMore=false, must read live campaign table state through scoped MCP/product tools, and must reject mismatched selectedLeadListId/workflowTableId/campaign/workspace input. On the filter path, keep the browser on Filter Rules after save_rubrics so the user can approve the saved criteria; only then move to Filter Leads, show `Filters saved + waiting for message approval`, and wait there for message approval. Enrichment, filtering, Generate Message cells, sender setup, sequence attach, and launch wait for template approval on the Use Template path. On the skip path, move to Messages/message review and wait for message approval before enrichment or Settings. Do not render message review from checklist or shortcut instructions; message review requires a messageDraftRecommendation whose basis proves the full generate-messages prompt ran for the current campaign/table execution slice. Do not automatically rerun Message Draft Builder after filters/enrichment finish; show the initial draft by default and offer an enriched rewrite only with explicit user opt-in.',
|
|
346
346
|
},
|
|
347
347
|
};
|
|
348
348
|
}
|
package/package.json
CHANGED
|
@@ -76,6 +76,8 @@ execution slice configures filters and messages. After that, the user chooses
|
|
|
76
76
|
whether to use filters or skip.
|
|
77
77
|
When filters are chosen, save rubrics, get filter approval, then wait for
|
|
78
78
|
message-template approval before enrichment/filtering or Generate Message cells.
|
|
79
|
+
After filter approval, Filter Leads should show `Filters saved + waiting for
|
|
80
|
+
message approval` until the template is approved.
|
|
79
81
|
Use Template is the default message path; AI Generated is only an explicit
|
|
80
82
|
opt-out.
|
|
81
83
|
|
|
@@ -273,10 +275,11 @@ before the filter-choice question. After `confirm_lead_list`, ask add filters
|
|
|
273
275
|
vs skip filters immediately. Once the user answers, launch the message scout
|
|
274
276
|
from the same campaign/table basis. If the user chooses filters, also launch the
|
|
275
277
|
filter-leads scout, move to Filter Rules, save rubrics, then ask for filter
|
|
276
|
-
approval. After approval,
|
|
277
|
-
recommendation is reviewed. If the user
|
|
278
|
-
review. Enrichment/filtering and
|
|
279
|
-
approval. AI Generated is an explicit
|
|
278
|
+
approval. After approval, move to Filter Leads and show `Filters saved + waiting
|
|
279
|
+
for message approval` while the message recommendation is reviewed. If the user
|
|
280
|
+
skips filters, move to Messages/message review. Enrichment/filtering and
|
|
281
|
+
Generate Message cells wait for message approval. AI Generated is an explicit
|
|
282
|
+
opt-out from the template path. If the
|
|
280
283
|
post-lead agents are absent, the main thread still orchestrates the same
|
|
281
284
|
branches from compact MCP context.
|
|
282
285
|
|
|
@@ -750,7 +753,8 @@ updates.
|
|
|
750
753
|
call `mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })`
|
|
751
754
|
so the watched app moves to Filter Rules while rubrics are drafted/saved.
|
|
752
755
|
After rubrics save, keep Filter Rules visible for approval; after approval,
|
|
753
|
-
move to Filter Leads and
|
|
756
|
+
move to Filter Leads and show `Filters saved + waiting for message approval`
|
|
757
|
+
until the template is approved.
|
|
754
758
|
If filters are skipped, move to Messages/message review. Queue the bounded
|
|
755
759
|
campaign-table execution-slice `enrichCellId` cells only after message approval. Move to
|
|
756
760
|
Messages only after at least one review row passes and one generated message
|
|
@@ -763,8 +767,8 @@ updates.
|
|
|
763
767
|
the brief, `pick-provider` or the selected provider step while sourcing,
|
|
764
768
|
`filter-choice` after source rows are copied into the campaign table, `create-icp-rubric` as soon
|
|
765
769
|
as filters are chosen and while saved filters await approval,
|
|
766
|
-
`apply-icp-rubric` after filter approval
|
|
767
|
-
enrichment/filter scoring runs, `validate-sample` only as a recovery/legacy
|
|
770
|
+
`apply-icp-rubric` after filter approval while message approval is pending,
|
|
771
|
+
and after message approval while bounded enrichment/filter scoring runs, `validate-sample` only as a recovery/legacy
|
|
768
772
|
observation state,
|
|
769
773
|
`auto-execute-messaging` after at least one row passes and initial campaign-row
|
|
770
774
|
messages are being generated or reviewed, `awaiting-user-greenlight` only
|
|
@@ -23,12 +23,14 @@ validate-sample tool:
|
|
|
23
23
|
get_subskill_prompt({ subskillName: "create-campaign-v2-tail" })
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
CampaignOffer state and the watch link are canonical.
|
|
27
|
-
|
|
28
|
-
`currentStep`, source/search
|
|
29
|
-
`
|
|
30
|
-
`senderIds`, `sequenceTemplate`, and running state.
|
|
31
|
-
|
|
26
|
+
CampaignOffer state and the watch link are canonical. CampaignOffer state is
|
|
27
|
+
canonical for resume, gating, and handoff. Resume, gating, and handoff read campaign state first:
|
|
28
|
+
`campaignId`, `watchUrl`, `campaignBrief`, `currentStep`, source/search
|
|
29
|
+
association, `selectedLeadListId`, `workflowTableId`, `leadScoringRubrics`,
|
|
30
|
+
`approvedMessageTemplate`, `senderIds`, `sequenceTemplate`, and running state.
|
|
31
|
+
Local draft files are debug; do not create, link, or surface them in
|
|
32
|
+
normal runs. These files are debug outputs; resume and gating read campaign
|
|
33
|
+
state first.
|
|
32
34
|
|
|
33
35
|
## Normal Flow
|
|
34
36
|
|
|
@@ -64,13 +66,12 @@ First visible request when no identity is known:
|
|
|
64
66
|
What is your LinkedIn profile URL or handle?
|
|
65
67
|
```
|
|
66
68
|
|
|
67
|
-
Require a LinkedIn profile URL or
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
questions, then say public research may be stale and invite corrections.
|
|
69
|
+
Require a LinkedIn profile URL or handle before setup continues. Normalize
|
|
70
|
+
`csreyes92`, `@csreyes92`, or `/in/csreyes92` to
|
|
71
|
+
`https://www.linkedin.com/in/{handle}/`; otherwise ask again. Retain it as
|
|
72
|
+
`senderLinkedinUrl` or resolve `clientProspectId` for `create_campaign`. Run one
|
|
73
|
+
lightweight profile lookup before strategy questions, then invite
|
|
74
|
+
corrections.
|
|
74
75
|
|
|
75
76
|
Restore the full setup intake before the brief. Ask bounded choices for:
|
|
76
77
|
|
|
@@ -170,9 +171,12 @@ copy.
|
|
|
170
171
|
## Lead Source
|
|
171
172
|
|
|
172
173
|
Default source order when source is unspecified: LinkedIn post engagement,
|
|
173
|
-
Sales Nav recent activity, broader Sales Nav title search, then Prospeo.
|
|
174
|
-
the campaign is hiring-led
|
|
175
|
-
|
|
174
|
+
Sales Nav recent activity, broader Sales Nav title search, then Prospeo. Use that order only
|
|
175
|
+
when the campaign is not hiring-led and does not need hiring-by-role signals.
|
|
176
|
+
If the campaign is hiring-led or needs hiring-by-role signals, start with
|
|
177
|
+
Prospeo because `search_prospeo` supports
|
|
178
|
+
`company_job_posting_hiring_for` and `company_job_posting_quantity`; Sales Nav
|
|
179
|
+
is only an activity/referral fallback because it does not provide hiring-by-role filters.
|
|
176
180
|
|
|
177
181
|
Before any provider prompt/search/scout call, move the watched campaign to
|
|
178
182
|
provider/source selection, then show one `## Find Buyers Plan` gate. The plan
|
|
@@ -317,13 +321,12 @@ are optional only.
|
|
|
317
321
|
|
|
318
322
|
When the user chooses filters, immediately call
|
|
319
323
|
`update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })`
|
|
320
|
-
before rubric thinking or branch work.
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
`
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
the template in the background.
|
|
324
|
+
before rubric thinking or branch work. After `save_rubrics`, keep Filter Rules
|
|
325
|
+
visible so the user can approve saved criteria. Only after approval should
|
|
326
|
+
`update_campaign` move to `apply-icp-rubric` / Filter Leads and show
|
|
327
|
+
`Filters saved + waiting for message approval` until the template is approved. Do not
|
|
328
|
+
queue enrichment/filtering/Generate Message cells until message approval. Tell
|
|
329
|
+
the user the Message Draft Builder is preparing the template in the background.
|
|
327
330
|
|
|
328
331
|
Lead Fit Builder persists production rubrics with `save_rubrics` when filters
|
|
329
332
|
are enabled. It must not require `brief.md`, `lead-review.md`, or
|
|
@@ -306,11 +306,12 @@ immediately. Once the user answers, start `post-find-leads-message-scout` /
|
|
|
306
306
|
message generation from the same campaign/table basis. If the user chooses
|
|
307
307
|
filters, also start `post-find-leads-filter-scout`, move the browser to Filter
|
|
308
308
|
Rules, save rubrics, then ask for filter approval. After approval, keep the
|
|
309
|
-
browser on Filter Leads
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
recommendation grounded in the same
|
|
313
|
-
and Generate Message cells wait for
|
|
309
|
+
browser on Filter Leads and show `Filters saved + waiting for message approval`
|
|
310
|
+
while the message recommendation is reviewed. If the user skips filters, move
|
|
311
|
+
the browser to Messages/message review. The join gate is saved-filter approval or
|
|
312
|
+
a resolved skip-filter choice, plus a message recommendation grounded in the same
|
|
313
|
+
campaign/table basis. Enrichment, filtering, and Generate Message cells wait for
|
|
314
|
+
template approval on the Use Template path.
|
|
314
315
|
|
|
315
316
|
Only promise parallel post-lead work when parallel work actually started. If the
|
|
316
317
|
host cannot or should not launch background branches, say the real sequence:
|
|
@@ -217,8 +217,9 @@ When the user chooses filters, immediately persist `enableICPFilters: true` and
|
|
|
217
217
|
move to `create-icp-rubric` so the watched app shows Filter Rules while Codex
|
|
218
218
|
defines the rules in chat. After `save_rubrics`, keep the app on Filter Rules so
|
|
219
219
|
the user can read and approve the saved criteria. Only that approval moves the
|
|
220
|
-
app to `apply-icp-rubric` / Filter Leads
|
|
221
|
-
|
|
220
|
+
app to `apply-icp-rubric` / Filter Leads and shows `Filters saved + waiting for
|
|
221
|
+
message approval` until the template is approved. Do not queue
|
|
222
|
+
enrichment/filtering/Generate Message cells until message approval.
|
|
222
223
|
|
|
223
224
|
Fit + message:
|
|
224
225
|
|
|
@@ -236,15 +237,16 @@ Fit + message:
|
|
|
236
237
|
}
|
|
237
238
|
```
|
|
238
239
|
|
|
239
|
-
|
|
240
|
+
Filters saved + waiting for message approval:
|
|
240
241
|
|
|
241
242
|
```json
|
|
242
243
|
{
|
|
243
|
-
"stage": "
|
|
244
|
-
"headline": "
|
|
245
|
-
"visibleState": "The browser
|
|
246
|
-
"agentIntent": "Codex is waiting for the
|
|
247
|
-
"nextAction": "Approve or revise the template"
|
|
244
|
+
"stage": "fit-message",
|
|
245
|
+
"headline": "Filters saved + waiting for message approval",
|
|
246
|
+
"visibleState": "The browser is showing Filter Leads with saved fit rules.",
|
|
247
|
+
"agentIntent": "Codex is waiting for the message template approval before enrichment, filtering, or Generate Message cells run.",
|
|
248
|
+
"nextAction": "Approve or revise the message template",
|
|
249
|
+
"safety": "Saved filters are ready; row processing stays gated until the message template is approved."
|
|
248
250
|
}
|
|
249
251
|
```
|
|
250
252
|
|