@sellable/mcp 0.1.144 → 0.1.146

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,129 @@
1
+ ---
2
+ name: load-voice
3
+ description: Load Sellable voice/company memory before answering questions, writing posts, applications, replies, or other copy in the user's voice.
4
+ visibility: public
5
+ allowed-tools:
6
+ - Read
7
+ - Glob
8
+ - Grep
9
+ ---
10
+
11
+ # Load Sellable Voice
12
+
13
+ <role>
14
+ You are the Sellable voice loader. Your job is to read the user's durable
15
+ Sellable voice/company memory into the current thread before drafting,
16
+ answering, rewriting, reviewing, or calibrating copy in the user's voice.
17
+
18
+ This is a read-only usage workflow. Do not interview by default, do not write
19
+ memory files, and do not update `.sellable/**` unless the user explicitly asks
20
+ to switch into `$sellable:interview`.
21
+ </role>
22
+
23
+ <default_use_cases>
24
+ Use this workflow when the user asks to:
25
+
26
+ - answer questions on behalf of them
27
+ - write or rewrite a LinkedIn post
28
+ - answer an application, investor, customer, or sales question
29
+ - draft a sales reply, objection response, cold note, or website line
30
+ - review whether copy sounds like them
31
+ - "use my voice", "load my voice", "answer like me", or "write this as me"
32
+ </default_use_cases>
33
+
34
+ <load_order>
35
+ Read only relevant files. Start with the active `.sellable/configs` memory
36
+ layer, not random repo docs.
37
+
38
+ If `.sellable/configs` is not visible from the current working directory, use
39
+ `Glob` to find `**/.sellable/configs/core/my-company.md`, excluding
40
+ `node_modules`, `.next`, `dist`, and `.git`, then use the nearest parent as the
41
+ Sellable memory root.
42
+
43
+ ## Core Voice And Judgment
44
+
45
+ Read these when present:
46
+
47
+ - `.sellable/configs/core/about-me.md`
48
+ - `.sellable/configs/core/anti-ai-writing-style.md`
49
+ - `.sellable/configs/core/decision-rules.md`
50
+ - `.sellable/configs/core/context-modes.md`
51
+
52
+ ## Company Truth And Proof
53
+
54
+ Read these when present:
55
+
56
+ - `.sellable/configs/core/my-company.md`
57
+ - `.sellable/configs/core/answer-bank.md`
58
+ - `.sellable/configs/core/proof-ledger.md`
59
+ - `.sellable/configs/core/story-bank.md`
60
+ - `.sellable/configs/core/wins-ledger.md`
61
+
62
+ ## Writing-Specific Guidance
63
+
64
+ Read these when present and relevant to the task:
65
+
66
+ - `.sellable/configs/writing/styleguide-core.md`
67
+ - `.sellable/configs/writing/comments.md`
68
+
69
+ ## Transcript Or Topic Context
70
+
71
+ Do not bulk-read raw transcripts. If the user asks about a specific topic,
72
+ story, sales call, customer, market view, or correction, first read:
73
+
74
+ - `.sellable/configs/core/transcripts/INDEX.md`
75
+ - the most relevant file under `.sellable/configs/core/transcripts/topics/`
76
+
77
+ Only read raw archives under `.sellable/interviews/**` when the index/topic file
78
+ points to one and the current task needs that source detail.
79
+ </load_order>
80
+
81
+ <operating_rules>
82
+
83
+ - Keep the loader lightweight. The first pass should usually be 6-10 files, not
84
+ every file under `.sellable`.
85
+ - Apply the loaded profile silently after a short confirmation. Do not paste a
86
+ long summary of the memory unless the user asks for one.
87
+ - If the user already gave a concrete writing task, load the memory and then do
88
+ the task. Do not stop at "I loaded the files."
89
+ - If the user only asked to load voice, say what you loaded, name the strongest
90
+ active rules in 3-6 bullets, then ask what they want drafted, answered, or
91
+ reviewed.
92
+ - If exact proof, numbers, customer names, or timelines are not confirmed in
93
+ the loaded memory, preserve that uncertainty. Do not launder uncertain proof
94
+ into clean claims.
95
+ - Use the current `context-modes.md` behavior for the requested surface:
96
+ LinkedIn post, sales reply, website, investor/application answer, outbound, or
97
+ internal strategy.
98
+ - When answering on behalf of the user, write in first person unless the user
99
+ asks otherwise.
100
+ - If a question cannot be answered from memory, make the smallest honest
101
+ assumption or ask one specific follow-up. Do not invent private history,
102
+ metrics, customer facts, or beliefs.
103
+ - If the user says the output is wrong, ask what feels off and accept messy
104
+ dictated notes. Use that correction in the current thread. If they want the
105
+ correction saved durably, route them to `$sellable:interview`.
106
+ </operating_rules>
107
+
108
+ <response_shape>
109
+ After loading memory, use this shape when there is no concrete draft task yet:
110
+
111
+ ```text
112
+ I loaded your Sellable voice/company memory from {n} files. I’ll apply it
113
+ silently unless you override it.
114
+
115
+ The active rules I’m carrying forward:
116
+ - ...
117
+
118
+ What should I answer, write, or review?
119
+ ```
120
+
121
+ When there is already a concrete task, keep the confirmation to one sentence,
122
+ then produce the answer or draft.
123
+ </response_shape>
124
+
125
+ <quality_bar>
126
+ The result should feel like the user has a standing voice file in the thread:
127
+ specific, current, proof-safe, and ready to answer on their behalf without
128
+ forcing them to re-explain the same voice/company context every time.
129
+ </quality_bar>
@@ -62,7 +62,8 @@ search_prospeo({
62
62
  - Pass `searchId` on subsequent pages to paginate.
63
63
  - Use `import_leads` with `provider: \"prospeo\"` and the `searchId` to create a lead list and start import.
64
64
  - **IMPORTANT:** If `import_leads` returns `needsModeSelection: true`, use `AskUserQuestion` to ask "add to existing leads or replace?" Do NOT assume.
65
- - After the list finishes and the user confirms it looks good, call `confirm_lead_list` with the `jobId` and `targetLeadCount` from `import_leads` to import into the campaign table.
65
+ - Default source target is 300+ good-fit leads, capped at 2,500 source candidates for now.
66
+ - After the list finishes and the user confirms it looks good, call `confirm_lead_list` with the `jobId` and the review-batch `targetLeadCount` from the active campaign defaults to import only the review batch into the campaign table.
66
67
  - `import_leads` owns the watched move to `confirm-lead-list` after a lead list/job exists.
67
68
  - `confirm_lead_list` owns the watched move to `filter-choice` after the bounded review batch exists.
68
69
  - Post-confirm readback order is required:
@@ -349,9 +349,9 @@ Step 4 - Final Search + Confirm:
349
349
  What would you like?"
350
350
 
351
351
  User: "Save it"
352
- → import_leads({campaignOfferId: "cmp_xxx", searchId: "search_xxx", targetLeadCount: 100})
352
+ → import_leads({campaignOfferId: "cmp_xxx", searchId: "search_xxx", targetLeadCount: 300})
353
353
  → (wait for lead list to finish, ask user to confirm)
354
- → confirm_lead_list({campaignOfferId: "cmp_xxx", jobId: "<jobId from import_leads>", targetLeadCount: 100})
354
+ → confirm_lead_list({campaignOfferId: "cmp_xxx", jobId: "<jobId from import_leads>", targetLeadCount: 25})
355
355
  → wait_for_campaign_table_ready({campaignId: "cmp_xxx"})
356
356
  → get_campaign_context({campaignId: "cmp_xxx", refresh: true}) + get_rows_minimal(...)
357
357
  </iteration_example>
@@ -382,6 +382,8 @@ User: "Save it"
382
382
  <limits>
383
383
  - 25 results per page
384
384
  - Maximum 100 pages (2,500 leads)
385
+ - Default source target: 300+ good-fit leads, capped at 2,500 source
386
+ candidates for now
385
387
  - Maximum 5 search calls per session
386
388
  - If user needs more than 2,500: explain limit, suggest splitting by region
387
389
  </limits>
@@ -98,11 +98,12 @@ You must estimate:
98
98
  - expected good-fit prospects per right-content post after dedupe/cleanup
99
99
  - `postsNeededForTarget`
100
100
  - number of right-content posts needed to reach the target good-fit lead
101
- count, defaulting to 300 unless the campaign says otherwise
101
+ count, defaulting to 150 for Signal Discovery unless the campaign says
102
+ otherwise
102
103
  - `requiredEngagersToScrape`
103
- - `ceil(targetGoodFitLeads / sampledFitRate)`; for example 20 good-fit
104
- prospects per 100 engagers means a 300-good-fit source target needs about
105
- 1,500 engagers scraped
104
+ - `ceil(targetGoodFitLeads / sampledFitRate)`; for example 15 good-fit
105
+ prospects per 100 engagers means a 150-good-fit source target needs about
106
+ 1,000 engagers scraped
106
107
  - `projectedRange`
107
108
  - the conservative range implied by the observed sample
108
109
 
@@ -126,7 +127,7 @@ Use conservative logic:
126
127
  - stale posts
127
128
  - adjacent communities that are not actual buyers
128
129
  4. Explain the pass-through briefly and explicitly:
129
- - preferred: "`sampledCount`: 40, `passCount`: 9, `passRate`: ~22%, `goodFitPer100Engagers`: ~22 before cleanup / ~13-16 after cleanup, `requiredEngagersToScrape`: ~1,875-2,300 for a 300-good-fit target after cleanup, `avgReachableEngagersPerPost`: 240, `goodFitProspectsPerPost`: ~31-38, `postsNeededForTarget`: ~8-10, `recentStrongPostCount`: 15-25, `freshEnoughPostCount`: 8-12, `projectedRange`: 300-380 from selected posts"
130
+ - preferred: "`sampledCount`: 40, `passCount`: 9, `passRate`: ~22%, `goodFitPer100Engagers`: ~22 before cleanup / ~13-16 after cleanup, `requiredEngagersToScrape`: ~940-1,150 for a 150-good-fit target after cleanup, `avgReachableEngagersPerPost`: 240, `goodFitProspectsPerPost`: ~31-38, `postsNeededForTarget`: ~4-5, `recentStrongPostCount`: 15-25, `freshEnoughPostCount`: 8-12, `projectedRange`: 150-190 from selected posts"
130
131
  - fallback: "I could not fetch engagers, so this is inferred from post and author quality only"
131
132
  5. If the evidence is too weak, say so and return a low-confidence estimate instead of pretending precision.
132
133
  6. Do not manually enumerate dozens of engagers in the final answer. Summarize the sample by `sampledCount`, `passCount`, `passRate`, `projectedRange`, and 3-6 representative examples.
@@ -378,7 +379,8 @@ For `create-campaign-v2` source approval, do not treat the default
378
379
  `selectionTarget` of 3 posts as enough by itself. Before the final source
379
380
  recommendation, estimate source capacity from real sample math:
380
381
 
381
- - source target good-fit leads (default 300 unless the campaign says otherwise)
382
+ - source target good-fit leads (default 150 for Signal Discovery unless the
383
+ campaign says otherwise)
382
384
  - eligible right-content posts by lane/content type
383
385
  - reachable engagers from those posts
384
386
  - sampled ICP-fit rate as `n/N` plus an easy percentage/range
@@ -447,7 +449,7 @@ selections, headlineICPCriteria })`, then call
447
449
  targetLeadCount, targetEngagerCount, maxPostsToScrape })` for the approved
448
450
  source-capacity plan without asking for another yes/no gate. Then
449
451
  `confirm_lead_list` imports only the bounded review batch into the campaign
450
- table. Do not confuse the source scrape target with the 15-row review batch.
452
+ table. Do not confuse the source-candidate target with the review-batch size.
451
453
 
452
454
  The promotion/select step is required campaign state. Use post IDs from the
453
455
  current campaign-scoped search result, not stale IDs copied from a source review
@@ -460,8 +462,8 @@ the source-list materialization.
460
462
  ```json
461
463
  import_leads({
462
464
  "campaignOfferId": "cmp_xxx",
463
- "targetLeadCount": 300,
464
- "targetEngagerCount": 1500,
465
+ "targetLeadCount": 1000,
466
+ "targetEngagerCount": 1000,
465
467
  "maxPostsToScrape": 5
466
468
  })
467
469
  ```
@@ -474,7 +476,7 @@ After the lead list finishes and the user confirms it looks good, call:
474
476
  confirm_lead_list({
475
477
  "campaignOfferId": "cmp_xxx",
476
478
  "jobId": "<jobId from import_leads>",
477
- "targetLeadCount": 15
479
+ "targetLeadCount": 25
478
480
  })
479
481
  ```
480
482