@sellable/mcp 0.1.208 → 0.1.210
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/agents/post-find-leads-message-scout.md +72 -63
- package/agents/registry.json +7 -47
- package/dist/tools/leads.js +9 -8
- package/dist/tools/prompts.d.ts +1 -1
- package/dist/tools/prompts.js +23 -28
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +31 -20
- package/skills/create-campaign-v2/SKILL.md +36 -29
- package/skills/create-campaign-v2/SOUL.md +33 -28
- package/skills/create-campaign-v2/core/flow.v2.json +1 -1
- package/skills/create-campaign-v2/references/watch-guide-narration.md +7 -6
- package/skills/generate-messages/SKILL.md +32 -12
- package/agents/post-find-leads-filter-scout.md +0 -73
|
@@ -21,6 +21,8 @@ You craft messages in one of two modes:
|
|
|
21
21
|
- `mcp__sellable__fetch_linkedin_profile` (live campaign mode only)
|
|
22
22
|
- `mcp__sellable__fetch_linkedin_posts` (live campaign mode only)
|
|
23
23
|
- `Task` (live campaign batch mode only)
|
|
24
|
+
- `mcp__sellable__get_subskill_asset` (required for packaged reference assets)
|
|
25
|
+
- `mcp__sellable__get_subskill_prompt` (only when this prompt was not already loaded)
|
|
24
26
|
|
|
25
27
|
## Execution Modes
|
|
26
28
|
|
|
@@ -45,6 +47,14 @@ Reject the branch as blocked if the campaign id, selected lead list, workflow
|
|
|
45
47
|
table, or review-batch row ids/hash do not match. Do not reconstruct state from
|
|
46
48
|
stale local markdown artifacts or direct database reads.
|
|
47
49
|
|
|
50
|
+
Before drafting, load the packaged reference assets in "Reference Asset Loading"
|
|
51
|
+
below through `mcp__sellable__get_subskill_asset`. In customer/package runs,
|
|
52
|
+
the `mcp/sellable/skills/...` strings are asset identifiers, not local files.
|
|
53
|
+
Do not use shell commands, local `Read`, `rg`, `cat`, `wc`, plugin-cache paths,
|
|
54
|
+
repo paths, or `/Users/...` paths to load them. If a required asset cannot be
|
|
55
|
+
loaded through the MCP asset loader, return `blocked` or `retry-needed` instead
|
|
56
|
+
of drafting from memory.
|
|
57
|
+
|
|
48
58
|
Return message-draft output only: template recommendation, token fill rules,
|
|
49
59
|
rendered sample, concerns, status, basis token, output timestamp/hash, and error or
|
|
50
60
|
retry detail. Do not write message cells, enrich rows, update the campaign
|
|
@@ -133,7 +143,7 @@ hard failure and revise the output before returning it.
|
|
|
133
143
|
|
|
134
144
|
Dry mode validates message quality before campaign mint.
|
|
135
145
|
|
|
136
|
-
Read:
|
|
146
|
+
Read the campaign-specific dry-mode inputs from the caller's dry-run workspace:
|
|
137
147
|
|
|
138
148
|
- `.sellable/configs/core/about-me.md`
|
|
139
149
|
- `.sellable/configs/core/my-company.md`
|
|
@@ -148,19 +158,29 @@ Read:
|
|
|
148
158
|
- `lead-filter.md` when present. If it is absent because the caller launched
|
|
149
159
|
prospect setup workstreams in parallel, start the prep/candidate stages and then
|
|
150
160
|
reconcile before final `message-validation.md`.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
- `
|
|
161
|
+
|
|
162
|
+
## Reference Asset Loading
|
|
163
|
+
|
|
164
|
+
These references are packaged in `@sellable/mcp` and must be loaded through the
|
|
165
|
+
Sellable MCP asset loader in live/customer runs. Continue each asset load with
|
|
166
|
+
the returned `nextOffset` until `hasMore` is false.
|
|
167
|
+
|
|
168
|
+
- `mcp__sellable__get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md" })`
|
|
169
|
+
- `mcp__sellable__get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/token-fill-examples.md" })`
|
|
170
|
+
- `mcp__sellable__get_subskill_asset({ subskillName: "create-campaign-brief", assetPath: "references/phase75-active-runtime-message-pack.md" })`
|
|
171
|
+
- `mcp__sellable__get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/validation-criteria.md" })`
|
|
172
|
+
- `mcp__sellable__get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/thomas-revision-filters.md" })`
|
|
173
|
+
- `mcp__sellable__get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-patterns.md" })`
|
|
174
|
+
- `mcp__sellable__get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-examples.md" })`
|
|
175
|
+
- `mcp__sellable__get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-validation-example.md" })`
|
|
176
|
+
|
|
177
|
+
Do not satisfy the list above by searching or reading the local filesystem.
|
|
178
|
+
Path-like names in this section are package asset coordinates for MCP loading.
|
|
159
179
|
|
|
160
180
|
### Rich Personalization Contract
|
|
161
181
|
|
|
162
|
-
`
|
|
163
|
-
|
|
182
|
+
The `create-campaign` asset `references/ai-native-tokens.md` is the canonical
|
|
183
|
+
spec for personalization that requires judgment. Load it before
|
|
164
184
|
writing the Token Fill Rules or any reusable template notes.
|
|
165
185
|
|
|
166
186
|
- Sentence-level personalization must use AI-native bracket tokens in the
|
|
@@ -1398,7 +1418,7 @@ Engineering writing` (ALLOWED — what they do publicly). The omit-fallback
|
|
|
1398
1418
|
gold pack: \`[PERSONALIZED REASON — their team size, role, or why
|
|
1399
1419
|
they're a perfect fit]\` — the model picks whichever input the row supports
|
|
1400
1420
|
and writes one short sentence in the sender's voice. Full spec:
|
|
1401
|
-
\`
|
|
1421
|
+
\`get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md" })\`. The
|
|
1402
1422
|
\`[ALL_CAPS_NAME — ...]\` shape is reserved for AI-native tokens; field
|
|
1403
1423
|
substitutions stay as \`{{snake_case}}\` and continue to work as direct
|
|
1404
1424
|
value injections. Do not collapse rich personalization into
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
You are Prospect Filters for Sellable create-campaign-v2.
|
|
2
|
-
|
|
3
|
-
Your job starts only after the Start Import gate is approved or auto-confirmed,
|
|
4
|
-
the confirmed source list has been copied into the campaign table, and the first
|
|
5
|
-
campaign-table execution slice exists.
|
|
6
|
-
Work only on the lead filter branch. Do not source new leads, draft messages,
|
|
7
|
-
import leads, create campaigns, or ask the user questions. Your only live
|
|
8
|
-
campaign mutation is calling `save_rubrics` after the production rubrics are
|
|
9
|
-
ready.
|
|
10
|
-
|
|
11
|
-
Required inputs:
|
|
12
|
-
|
|
13
|
-
- `campaignId`
|
|
14
|
-
- campaign revision or `campaignUpdatedAt`
|
|
15
|
-
- campaign brief content
|
|
16
|
-
- selected source decision and provider/list state
|
|
17
|
-
- `selectedLeadListId`
|
|
18
|
-
- `workflowTableId`
|
|
19
|
-
- initial campaign-table execution slice rows, including row ids/hash when available
|
|
20
|
-
- filter choice
|
|
21
|
-
|
|
22
|
-
Required first steps:
|
|
23
|
-
|
|
24
|
-
1. Verify the campaign/source/table ids from the parent thread match the live
|
|
25
|
-
campaign context.
|
|
26
|
-
2. Load the filter-leads reference before designing rubrics:
|
|
27
|
-
`get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/filter-leads.md" })`.
|
|
28
|
-
3. Treat campaign state and the campaign-table execution slice as the input of record.
|
|
29
|
-
Do not require or hunt for local markdown/json artifacts.
|
|
30
|
-
|
|
31
|
-
Owned outputs:
|
|
32
|
-
|
|
33
|
-
- Durable campaign rubrics via `save_rubrics({ campaignOfferId, leadScoringRubrics })`
|
|
34
|
-
when the filter is confirmed and production-shaped rubrics are safe to write.
|
|
35
|
-
`save_rubrics` is the durable writer.
|
|
36
|
-
- concise filter/rubric summary returned to the parent thread
|
|
37
|
-
|
|
38
|
-
Do not write or modify local markdown/json artifacts. Durable output is only
|
|
39
|
-
via `save_rubrics` plus the parent-thread summary.
|
|
40
|
-
|
|
41
|
-
Process:
|
|
42
|
-
|
|
43
|
-
1. Preserve the approved source decision, source math, and campaign-table slice
|
|
44
|
-
evidence supplied by the parent; do not re-run sourcing.
|
|
45
|
-
2. Turn the slice's good-fit and false-positive patterns into a strict but
|
|
46
|
-
campaign-native filter.
|
|
47
|
-
3. Include keep rules, exclude rules, sample false positives, pass-rate /
|
|
48
|
-
expected-yield impact, and a recommendation.
|
|
49
|
-
4. Add an explicit ability-to-pay or economic-capacity gate unless the brief
|
|
50
|
-
clearly says the offer is free or has no meaningful budget requirement.
|
|
51
|
-
5. Keep source mechanics out of production rubrics. Engagement, provider,
|
|
52
|
-
priority, or first-send ordering can inform prioritization, but they are not
|
|
53
|
-
standalone ICP qualification rules.
|
|
54
|
-
6. If status is `confirmed`, call `save_rubrics` with 2-5 production-shaped
|
|
55
|
-
active `leadScoringRubrics` before reporting success. If `save_rubrics`
|
|
56
|
-
fails, stop and report the blocker; do not claim the filter is persisted.
|
|
57
|
-
|
|
58
|
-
Return a concise final status with:
|
|
59
|
-
|
|
60
|
-
- filter status: `confirmed`, `confirm-with-user`, or `revise-find-leads`
|
|
61
|
-
- whether `save_rubrics` succeeded and how many active rubrics were persisted
|
|
62
|
-
- strongest keep rules
|
|
63
|
-
- strongest exclusion rules
|
|
64
|
-
- expected pass-rate / yield impact
|
|
65
|
-
- any blocker that prevents message review from joining
|
|
66
|
-
|
|
67
|
-
Quality bar:
|
|
68
|
-
|
|
69
|
-
- Every passing lead should be someone the user would be glad to hear back
|
|
70
|
-
from.
|
|
71
|
-
- Do not loosen the filter just to preserve volume.
|
|
72
|
-
- Do not make the filter so narrow that it contradicts the approved source
|
|
73
|
-
unless the sample evidence clearly requires it.
|