@sellable/mcp 0.1.0

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.
Files changed (200) hide show
  1. package/.claude-plugin/plugin.json +12 -0
  2. package/.mcp.json +9 -0
  3. package/README.md +355 -0
  4. package/dist/api.d.ts +21 -0
  5. package/dist/api.js +73 -0
  6. package/dist/auth.d.ts +60 -0
  7. package/dist/auth.js +246 -0
  8. package/dist/engage-memory.d.ts +63 -0
  9. package/dist/engage-memory.js +354 -0
  10. package/dist/index-dev.d.ts +2 -0
  11. package/dist/index-dev.js +17 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.js +8 -0
  14. package/dist/server.d.ts +1 -0
  15. package/dist/server.js +499 -0
  16. package/dist/skills.d.ts +11 -0
  17. package/dist/skills.js +97 -0
  18. package/dist/tools/auth.d.ts +30 -0
  19. package/dist/tools/auth.js +124 -0
  20. package/dist/tools/blueprint-commit.d.ts +174 -0
  21. package/dist/tools/blueprint-commit.js +286 -0
  22. package/dist/tools/bootstrap.d.ts +64 -0
  23. package/dist/tools/bootstrap.js +246 -0
  24. package/dist/tools/campaigns.d.ts +589 -0
  25. package/dist/tools/campaigns.js +892 -0
  26. package/dist/tools/cells.d.ts +58 -0
  27. package/dist/tools/cells.js +48 -0
  28. package/dist/tools/context.d.ts +88 -0
  29. package/dist/tools/context.js +271 -0
  30. package/dist/tools/csv-domains.d.ts +73 -0
  31. package/dist/tools/csv-domains.js +464 -0
  32. package/dist/tools/csv-linkedin.d.ts +102 -0
  33. package/dist/tools/csv-linkedin.js +712 -0
  34. package/dist/tools/direct-campaigns.d.ts +240 -0
  35. package/dist/tools/direct-campaigns.js +250 -0
  36. package/dist/tools/engage-bootstrap.d.ts +94 -0
  37. package/dist/tools/engage-bootstrap.js +205 -0
  38. package/dist/tools/engage-discovery.d.ts +78 -0
  39. package/dist/tools/engage-discovery.js +150 -0
  40. package/dist/tools/engage-memory.d.ts +181 -0
  41. package/dist/tools/engage-memory.js +143 -0
  42. package/dist/tools/engage-state.d.ts +72 -0
  43. package/dist/tools/engage-state.js +62 -0
  44. package/dist/tools/enrichment.d.ts +167 -0
  45. package/dist/tools/enrichment.js +174 -0
  46. package/dist/tools/flow-preflight.d.ts +68 -0
  47. package/dist/tools/flow-preflight.js +138 -0
  48. package/dist/tools/framework.d.ts +44 -0
  49. package/dist/tools/framework.js +153 -0
  50. package/dist/tools/interaction-mode.d.ts +27 -0
  51. package/dist/tools/interaction-mode.js +102 -0
  52. package/dist/tools/leads.d.ts +2417 -0
  53. package/dist/tools/leads.js +2307 -0
  54. package/dist/tools/linkedin.d.ts +210 -0
  55. package/dist/tools/linkedin.js +229 -0
  56. package/dist/tools/navigation.d.ts +91 -0
  57. package/dist/tools/navigation.js +381 -0
  58. package/dist/tools/one-off.d.ts +229 -0
  59. package/dist/tools/one-off.js +273 -0
  60. package/dist/tools/processing.d.ts +70 -0
  61. package/dist/tools/processing.js +56 -0
  62. package/dist/tools/prompts.d.ts +211 -0
  63. package/dist/tools/prompts.js +210 -0
  64. package/dist/tools/provider-preflight.d.ts +21 -0
  65. package/dist/tools/provider-preflight.js +59 -0
  66. package/dist/tools/readiness.d.ts +261 -0
  67. package/dist/tools/readiness.js +510 -0
  68. package/dist/tools/rows.d.ts +126 -0
  69. package/dist/tools/rows.js +105 -0
  70. package/dist/tools/rubrics.d.ts +497 -0
  71. package/dist/tools/rubrics.js +681 -0
  72. package/dist/tools/senders.d.ts +44 -0
  73. package/dist/tools/senders.js +69 -0
  74. package/dist/tools/sequencer.d.ts +127 -0
  75. package/dist/tools/sequencer.js +194 -0
  76. package/dist/tools/tables.d.ts +35 -0
  77. package/dist/tools/tables.js +36 -0
  78. package/dist/tools/verify-row.d.ts +36 -0
  79. package/dist/tools/verify-row.js +38 -0
  80. package/dist/tools/workspaces.d.ts +140 -0
  81. package/dist/tools/workspaces.js +139 -0
  82. package/dist/utils/workspace-root.d.ts +1 -0
  83. package/dist/utils/workspace-root.js +39 -0
  84. package/package.json +46 -0
  85. package/skills/building-gtm-tables/SKILL.md +216 -0
  86. package/skills/building-gtm-tables/core/auto-execute.yaml +19 -0
  87. package/skills/building-gtm-tables/core/blueprint-schema.json +72 -0
  88. package/skills/building-gtm-tables/references/brief-to-blueprint.md +334 -0
  89. package/skills/building-gtm-tables/references/column-type-catalog.md +318 -0
  90. package/skills/building-gtm-tables/references/common-blueprints.fixtures.ts +199 -0
  91. package/skills/building-gtm-tables/references/common-blueprints.md +44 -0
  92. package/skills/building-gtm-tables/references/failure-taxonomy.md +197 -0
  93. package/skills/building-gtm-tables/references/uat-seed-prompts.md +37 -0
  94. package/skills/building-gtm-tables/references/verify-loop.md +74 -0
  95. package/skills/campaign-messages/SKILL.md +173 -0
  96. package/skills/campaign-messages/flow.v1.json +75 -0
  97. package/skills/craft-message/SKILL.md +401 -0
  98. package/skills/create-campaign/ARCHITECTURE.md +232 -0
  99. package/skills/create-campaign/DISCUSS.md +296 -0
  100. package/skills/create-campaign/FLOW_ASCII.md +240 -0
  101. package/skills/create-campaign/HOST-PARITY-CHECKLIST.md +49 -0
  102. package/skills/create-campaign/README.md +142 -0
  103. package/skills/create-campaign/SKILL.md +286 -0
  104. package/skills/create-campaign/context/README.md +67 -0
  105. package/skills/create-campaign/context/_TEMPLATE.md +12 -0
  106. package/skills/create-campaign/context/context.md +35 -0
  107. package/skills/create-campaign/context/learnings.md +16 -0
  108. package/skills/create-campaign/context/registry.json +19 -0
  109. package/skills/create-campaign/core/flow.v1.json +217 -0
  110. package/skills/create-campaign/core/policy.md +191 -0
  111. package/skills/create-campaign/core/providers/apollo.json +35 -0
  112. package/skills/create-campaign/core/providers/prospeo.json +34 -0
  113. package/skills/create-campaign/core/providers/registry.json +31 -0
  114. package/skills/create-campaign/core/providers/sales-nav.json +37 -0
  115. package/skills/create-campaign/core/providers/signal-discovery.json +42 -0
  116. package/skills/create-campaign/references/brief-template.md +64 -0
  117. package/skills/create-campaign/references/campaign-quality.md +84 -0
  118. package/skills/create-campaign/references/copy-calibration-examples.md +120 -0
  119. package/skills/create-campaign/references/offer-patterns.md +108 -0
  120. package/skills/create-campaign/references/provider-selection-strategy.md +212 -0
  121. package/skills/create-campaign/references/question-examples.md +167 -0
  122. package/skills/create-campaign/references/token-fill-examples.md +81 -0
  123. package/skills/create-campaign-brief/ARCHITECTURE.md +72 -0
  124. package/skills/create-campaign-brief/DISCUSS.md +64 -0
  125. package/skills/create-campaign-brief/README.md +176 -0
  126. package/skills/create-campaign-brief/SKILL.md +537 -0
  127. package/skills/create-campaign-brief/references/brief-synthesis-rules.md +100 -0
  128. package/skills/create-campaign-brief/references/brief-template.md +220 -0
  129. package/skills/create-campaign-brief/references/campaign-idea-options.md +30 -0
  130. package/skills/create-campaign-brief/references/copy-appendix-template.md +62 -0
  131. package/skills/create-campaign-brief/references/draft-lifecycle.md +23 -0
  132. package/skills/create-campaign-brief/references/examples/MANIFEST.json +89 -0
  133. package/skills/create-campaign-brief/references/examples/briefs/clover.md +223 -0
  134. package/skills/create-campaign-brief/references/examples/briefs/galley.md +222 -0
  135. package/skills/create-campaign-brief/references/examples/briefs/gelee.md +220 -0
  136. package/skills/create-campaign-brief/references/examples/briefs/hey-digital.md +234 -0
  137. package/skills/create-campaign-brief/references/examples/briefs/persona.md +231 -0
  138. package/skills/create-campaign-brief/references/examples/briefs/revvix.md +220 -0
  139. package/skills/create-campaign-brief/references/examples/briefs/sellable-dev.md +220 -0
  140. package/skills/create-campaign-brief/references/examples/briefs/superposition.md +233 -0
  141. package/skills/create-campaign-brief/references/examples/briefs/superpower.md +219 -0
  142. package/skills/create-campaign-brief/references/examples/briefs/westpark-villas.md +220 -0
  143. package/skills/create-campaign-brief/references/icp-lock-question-bank.md +43 -0
  144. package/skills/create-campaign-brief/references/messaging-inputs.md +58 -0
  145. package/skills/create-campaign-brief/references/output-acceptance-rubric.md +62 -0
  146. package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +248 -0
  147. package/skills/create-campaign-brief/references/phase75-canonical-brief-template.md +319 -0
  148. package/skills/create-campaign-brief/references/phase75-good-brief-and-messaging-examples.md +445 -0
  149. package/skills/create-campaign-brief/references/quick-research-protocol.md +39 -0
  150. package/skills/create-campaign-brief/references/reference-sheet-protocol.md +60 -0
  151. package/skills/create-campaign-brief/references/zero-shot-iteration-rules.md +66 -0
  152. package/skills/create-campaign-v2/SKILL.md +1619 -0
  153. package/skills/create-campaign-v2/core/auto-execute.README.md +219 -0
  154. package/skills/create-campaign-v2/core/auto-execute.yaml +121 -0
  155. package/skills/create-campaign-v2/core/flow.v2.json +1643 -0
  156. package/skills/create-campaign-v2/core/policy.md +82 -0
  157. package/skills/create-campaign-v2/references/ai-tells.md +253 -0
  158. package/skills/create-campaign-v2/references/approval-gate-framing.md +346 -0
  159. package/skills/create-campaign-v2/references/draft-lifecycle.md +110 -0
  160. package/skills/create-campaign-v2/references/escalation-ladder.md +119 -0
  161. package/skills/create-campaign-v2/references/filter-leads.md +495 -0
  162. package/skills/create-campaign-v2/references/final-handoff-contract.md +176 -0
  163. package/skills/create-campaign-v2/references/gold-standard-message-examples.md +394 -0
  164. package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +314 -0
  165. package/skills/create-campaign-v2/references/gold-standard-message-validation-example.md +212 -0
  166. package/skills/create-campaign-v2/references/lead-validation-preview.md +172 -0
  167. package/skills/create-campaign-v2/references/parallel-critique-protocol.md +368 -0
  168. package/skills/create-campaign-v2/references/sample-validation-loop.md +289 -0
  169. package/skills/create-campaign-v2/references/step-13-import-leads.md +151 -0
  170. package/skills/create-campaign-v2/references/step-15-re-cascade.md +90 -0
  171. package/skills/create-campaign-v2/references/thomas-revision-filters.md +521 -0
  172. package/skills/create-campaign-v2/references/thomas-variant-selection.md +202 -0
  173. package/skills/create-campaign-v2/references/tier-routing-matrix.md +66 -0
  174. package/skills/create-campaign-v2/references/validation-criteria.md +367 -0
  175. package/skills/create-campaign-v2/references/watch-link-handoff.md +106 -0
  176. package/skills/create-campaign-v2-validation/SKILL.md +296 -0
  177. package/skills/create-post/SKILL.md +1308 -0
  178. package/skills/create-rubric/SKILL.md +251 -0
  179. package/skills/engage/SKILL.md +549 -0
  180. package/skills/engage/core/README.md +23 -0
  181. package/skills/engage/core/proven-searches.json +11 -0
  182. package/skills/engage/core/style-guide.template.md +47 -0
  183. package/skills/engage/core/tracked-people.json +10 -0
  184. package/skills/enrich-prospects/SKILL.md +97 -0
  185. package/skills/find-leads/SKILL.md +467 -0
  186. package/skills/generate-messages/SKILL.md +2361 -0
  187. package/skills/interview/SKILL.md +132 -0
  188. package/skills/interview/core/ENGAGE_STYLE_GUIDE.template.md +54 -0
  189. package/skills/interview/core/ICP.template.md +54 -0
  190. package/skills/interview/core/VOICE_PROFILE.template.md +101 -0
  191. package/skills/providers/apollo.md +520 -0
  192. package/skills/providers/prospeo.md +398 -0
  193. package/skills/providers/sales-nav.md +372 -0
  194. package/skills/providers/signal-discovery.md +495 -0
  195. package/skills/research/SKILL.md +258 -0
  196. package/skills/research/config.json +9 -0
  197. package/skills/research/override.md +13 -0
  198. package/skills/research-prospect/SKILL.md +99 -0
  199. package/skills/research-sender/SKILL.md +158 -0
  200. package/skills/workflow-sequences/SKILL.md +85 -0
@@ -0,0 +1,191 @@
1
+ # Create Campaign Policy (Deterministic + Extensible)
2
+
3
+ This policy is the invariant layer. Follow it even if other instructions are ambiguous.
4
+
5
+ ## 1) Deterministic Control Surface
6
+
7
+ You are not inventing the workflow. You are executing a configured state machine.
8
+
9
+ - The source of truth for steps, transitions, and required tool calls is:
10
+ 1. `get_campaign_framework()` output
11
+ 2. The tool results you just received
12
+ 3. Explicit user instructions
13
+ - If policy and framework conflict, policy wins.
14
+
15
+ ## 2) Required Runtime Bootstrap
16
+
17
+ At the start of every `/sellable:create-campaign` run:
18
+
19
+ 1. Load tools (single message with multiple ToolSearch calls):
20
+ - `mcp__sellable__enrich_sender`
21
+ - `mcp__sellable__create_campaign`
22
+ - `mcp__sellable__update_campaign`
23
+ - `mcp__sellable__update_campaign_brief`
24
+ - `mcp__sellable__get_auth_status`
25
+ - `mcp__sellable__get_campaign_framework`
26
+ - `mcp__sellable__get_campaign_context`
27
+ 2. Call `get_auth_status({})` and store it as `auth`.
28
+ 3. If `auth.ok !== true`, stop and follow `auth.error.guidance`.
29
+ 4. Call `get_campaign_framework({ flowVersion: "v1", includePlugins: true })`.
30
+ 5. Store the response as `framework` and obey it.
31
+ 6. If the user provides `campaignId` (e.g., `cmp_...`):
32
+ - Call `create_campaign({ campaignId })` to get the watchUrl
33
+ - Then call `get_campaign_context({ campaignId, refresh: true })`
34
+ - Treat this as resume mode; do not create a new campaign unless asked
35
+
36
+ Do not proceed until the framework is loaded.
37
+
38
+ ## 3) Watch Mode Protocol (Always-On)
39
+
40
+ Any time you change UI state via `currentStep`, you must orient the user.
41
+
42
+ After every `update_campaign({ currentStep: ... })` call:
43
+
44
+ 1. Say what changed.
45
+ 2. Tell them what they should now see in the watch link.
46
+ 3. In `step-by-step` mode, pause for confirmation before continuing, except after provider selection when entering provider search.
47
+ - Provider-search exception: if the user just approved a provider choice, continue immediately with `get_provider_prompt` + first search (no extra "is it visible?" checkpoint).
48
+ - In `ask-when-needed` or `autonomous` mode, continue unless a required choice is missing.
49
+
50
+ Small variation is fine, but all three elements must be present.
51
+
52
+ ### Example Watch Mode Responses
53
+
54
+ - "I moved you to provider selection. You should see that step open in the watch link now. Tell me when you see it."
55
+ - "You are now on the Sales Navigator step. The search panel should be visible in the watch link. Let me know when it's visible."
56
+
57
+ ## 4) Offer to Open Watch Link (Only If Possible)
58
+
59
+ Only offer to open the watch link for the user if you actually have a Chrome tool that can open URLs.
60
+
61
+ Rules:
62
+
63
+ - First, check tool availability (for example, via ToolSearch) for a URL-opening Chrome tool.
64
+ - If a URL-opening tool is available, you may say: "I can open the watch link for you if you'd like."
65
+ - If you do not have such a tool, do not mention opening the link.
66
+
67
+ Never imply you opened a browser unless you actually did.
68
+
69
+ ## 5) Chrome Debugging Is Conditional
70
+
71
+ Chrome tools are for debugging, not the happy path.
72
+
73
+ Only use Chrome debugging tools when the user signals a problem, such as:
74
+
75
+ - "I don't see it"
76
+ - "Nothing changed"
77
+ - "The page looks wrong"
78
+
79
+ When debugging is needed, prefer:
80
+
81
+ - `mcp__claude-in-chrome__read_page`
82
+ - `mcp__claude-in-chrome__get_page_text`
83
+
84
+ ## 6) Wait States + Interaction Modes
85
+
86
+ After showing the campaign watch link (brief step), ask once how they want to run the rest of setup.
87
+ Before presenting choices, explicitly explain there are three interaction modes and that the setting controls how often you pause for confirmation:
88
+
89
+ 1. `step-by-step` — confirm each major step
90
+ 2. `autonomous` — use best judgment and keep momentum
91
+ 3. `ask-when-needed` — ask only when direction is missing
92
+
93
+ If they do not choose clearly, default to `ask-when-needed`.
94
+
95
+ When a step says to wait, you must wait.
96
+
97
+ Do not continue automatically after these checkpoints:
98
+
99
+ - After campaign creation (brief review)
100
+ - After step transitions that affect the UI (`step-by-step` mode), except provider-search immediately after a confirmed provider choice
101
+ - After lead import (`step-by-step` mode)
102
+
103
+ Proceed when the user gives any affirmative response.
104
+
105
+ Mode behavior:
106
+
107
+ - `step-by-step`: require explicit approval for provider choice, import, and post-import transitions. Do not require an extra approval for provider preflight/search once provider choice is confirmed.
108
+ - `autonomous`: proceed through provider preflight/search/import/confirm with best judgment; pause only when a required user decision/tool input is missing.
109
+ - `ask-when-needed`: proceed without repetitive visibility checks; pause at branch decisions or when ambiguity could materially change outcomes.
110
+
111
+ ## 7) Provider Extensibility Contract
112
+
113
+ Providers are configured modules. Do not hardcode provider logic when a registry exists.
114
+
115
+ - Use `framework.providers` and `framework.providerRegistry`.
116
+ - Provider selection sets BOTH:
117
+ - `currentStep` (UI navigation)
118
+ - `leadSourceProvider` (backend state)
119
+ - Always call `get_provider_prompt` before provider search.
120
+
121
+ ## 8) Customization and Overrides
122
+
123
+ Plugins and overrides are first-class inputs.
124
+
125
+ - Treat plugin context and overrides as user-provided configuration.
126
+ - If plugin overrides conflict with defaults, honor the overrides.
127
+ - Never fabricate overrides or plugin context.
128
+
129
+ ## 9) Data Integrity (Non-Negotiable)
130
+
131
+ Never hallucinate social proof, case studies, or metrics.
132
+
133
+ - Use only what is present in tool results or user input.
134
+ - If proof is missing, say "Not provided" and proceed without it.
135
+
136
+ ## 10) Deterministic Failure Handling
137
+
138
+ If something required is missing:
139
+
140
+ - Say what is missing
141
+ - Call the tool needed to obtain it
142
+ - Resume the state machine
143
+
144
+ Do not improvise around missing required fields like `clientProspectId`.
145
+
146
+ ## 11) User-Directed Research Mode (Allow It)
147
+
148
+ If the user specifies how they want prospect research done, treat it as a hard override.
149
+
150
+ Examples:
151
+
152
+ - "Use Sales Nav first, then Apollo"
153
+ - "Only target these companies"
154
+ - "Filter by React + Series A"
155
+
156
+ Rules:
157
+
158
+ - Follow their plan when it is compatible with required tools and safety rules
159
+ - Still enforce required steps:
160
+ - Set `currentStep`
161
+ - Use watch-mode orientation + wait states
162
+ - Call `get_provider_prompt` before search (when applicable)
163
+ - If their request conflicts with requirements, explain the constraint and propose the closest valid path
164
+
165
+ ## 12) Host Parallelism Contract (Claude + Codex)
166
+
167
+ Use the same logical workflow, but route parallel execution by host capability:
168
+
169
+ - If `Task` tool is available: use Task subagents for parallel research/crafting.
170
+ - Else if `multi_tool_use.parallel` is available: batch independent tool calls through `multi_tool_use.parallel`.
171
+ - Else: run the same units sequentially.
172
+
173
+ Rules:
174
+
175
+ - Keep output schema and decision logic identical regardless of backend.
176
+ - Prefer maximal safe parallelism when calls are independent.
177
+ - Never claim Task subagents were launched if you used tool-parallel/sequential execution.
178
+
179
+ ## 13) Sender Research Completion Gate (Before create_campaign)
180
+
181
+ For net-new campaign creation, `create_campaign` must not run until sender research is explicitly completed.
182
+
183
+ Required order:
184
+
185
+ 1. `enrich_sender`
186
+ 2. Company/domain confirmation
187
+ 3. `research-sender` execution
188
+ 4. `complete_sender_research({ depth, proofItemsFound, caseStudyItemsFound, credibilitySignalsFound, notes? })`
189
+ 5. `create_campaign`
190
+
191
+ If the user reruns `enrich_sender`, sender research completion is stale and must be re-done before `create_campaign`.
@@ -0,0 +1,35 @@
1
+ {
2
+ "id": "apollo",
3
+ "label": "Apollo",
4
+ "leadSourceProvider": "apollo-ai",
5
+ "currentStep": "apollo",
6
+ "promptProvider": "apollo",
7
+ "requiredTools": [
8
+ "update_campaign",
9
+ "get_provider_prompt",
10
+ "search_apollo",
11
+ "import_leads",
12
+ "wait_for_lead_list_ready",
13
+ "confirm_lead_list"
14
+ ],
15
+ "watch": {
16
+ "stepVisible": "You should see the Apollo search step open.",
17
+ "afterImport": "You should see Apollo leads appear in the table.",
18
+ "cancelAndRestart": "If the operator realizes the filter is wrong mid-import, call cancel_lead_import with { campaignOfferId, tableId, provider: \"apollo\" } and start a new search with tighter filters."
19
+ },
20
+ "recommendation": {
21
+ "priority": 3,
22
+ "useWhen": [
23
+ "You need technology stack targeting",
24
+ "You need bulk domain list targeting",
25
+ "You need high volume and can accept lower reply rates"
26
+ ],
27
+ "avoidWhen": ["High reply rate and LinkedIn activity are the top priority"],
28
+ "reason": "Best for scale and firmographic/technographic filters, but lower LinkedIn activity by default.",
29
+ "prose": "Since you need to find **{icp}**, I'd recommend **Apollo**.\n\nHere's why:\n- Apollo has technology filters that other sources don't\n- We can find people at companies using {techStack}\n- Heads up: reply rates will be lower since not all leads are active on LinkedIn\n\nShould I search Apollo for {techStack} users?"
30
+ },
31
+ "askOption": {
32
+ "label": "Apollo",
33
+ "description": "Large database and powerful filters (lower reply rates)"
34
+ }
35
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "id": "prospeo",
3
+ "label": "Prospeo",
4
+ "leadSourceProvider": "prospeo",
5
+ "currentStep": "prospeo",
6
+ "promptProvider": "prospeo",
7
+ "requiredTools": [
8
+ "update_campaign",
9
+ "get_provider_prompt",
10
+ "search_prospeo",
11
+ "import_leads",
12
+ "wait_for_lead_list_ready",
13
+ "confirm_lead_list"
14
+ ],
15
+ "watch": {
16
+ "stepVisible": "You should see the Prospeo search UI.",
17
+ "afterImport": "You should see Prospeo leads in the table.",
18
+ "cancelAndRestart": "If the operator realizes the filter is wrong mid-import, call cancel_lead_import with { campaignOfferId, tableId, provider: \"prospeo\" } and start a new search with tighter filters."
19
+ },
20
+ "recommendation": {
21
+ "priority": 2,
22
+ "useWhen": [
23
+ "You want Prospeo filters or domain-based search",
24
+ "You need high deliverability from Prospeo"
25
+ ],
26
+ "avoidWhen": ["You need LinkedIn activity filters"],
27
+ "reason": "Strong for Prospeo-specific filters and domain lists.",
28
+ "prose": "Since you're targeting **{icp}**, I'd recommend **Prospeo**.\n\nHere's why:\n- Prospeo has strong domain-based search and deliverability\n- We can find verified contacts at your target companies\n- Good for high-deliverability outreach\n\nShould I search Prospeo for {icp}?"
29
+ },
30
+ "askOption": {
31
+ "label": "Prospeo",
32
+ "description": "Prospeo search and import"
33
+ }
34
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "version": "v1",
3
+ "defaultProviderOrder": [
4
+ "signal-discovery",
5
+ "sales-nav",
6
+ "prospeo",
7
+ "apollo"
8
+ ],
9
+ "providers": [
10
+ {
11
+ "id": "signal-discovery",
12
+ "label": "Signal Discovery",
13
+ "configPath": "mcp/sellable/skills/create-campaign/core/providers/signal-discovery.json"
14
+ },
15
+ {
16
+ "id": "sales-nav",
17
+ "label": "Sales Navigator",
18
+ "configPath": "mcp/sellable/skills/create-campaign/core/providers/sales-nav.json"
19
+ },
20
+ {
21
+ "id": "prospeo",
22
+ "label": "Prospeo",
23
+ "configPath": "mcp/sellable/skills/create-campaign/core/providers/prospeo.json"
24
+ },
25
+ {
26
+ "id": "apollo",
27
+ "label": "Apollo",
28
+ "configPath": "mcp/sellable/skills/create-campaign/core/providers/apollo.json"
29
+ }
30
+ ]
31
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "id": "sales-nav",
3
+ "label": "Sales Navigator",
4
+ "leadSourceProvider": "sales-nav",
5
+ "currentStep": "sales-nav",
6
+ "promptProvider": "sales-nav",
7
+ "requiredTools": [
8
+ "update_campaign",
9
+ "get_provider_prompt",
10
+ "search_sales_nav",
11
+ "import_leads",
12
+ "wait_for_lead_list_ready",
13
+ "confirm_lead_list"
14
+ ],
15
+ "watch": {
16
+ "stepVisible": "You should see the Sales Navigator filters and search UI.",
17
+ "afterImport": "You should see Sales Nav leads in the table.",
18
+ "cancelAndRestart": "If the operator realizes the filter is wrong mid-import, call cancel_lead_import with { campaignOfferId, tableId, provider: \"sales-nav\" } and start a new search with tighter filters."
19
+ },
20
+ "recommendation": {
21
+ "priority": 2,
22
+ "useWhen": [
23
+ "ICP is niche or enterprise",
24
+ "You need active LinkedIn users via activity filters",
25
+ "You have account-based targeting needs"
26
+ ],
27
+ "avoidWhen": [
28
+ "Signal Discovery can clearly produce enough ICP-fit engagers"
29
+ ],
30
+ "reason": "Strong default when public engagement is limited but LinkedIn activity still matters.",
31
+ "prose": "Since you're targeting **{icp}**, I'd recommend **Sales Navigator** with the \"Posted on LinkedIn\" filter.\n\nHere's why:\n- {icp} don't publicly engage much on LinkedIn posts\n- With Sales Nav, we filter for people who recently posted -- 4x more likely to reply\n- Better than a cold database where only ~8% are actually active\n\nShould I search for active {icp} on Sales Navigator?"
32
+ },
33
+ "askOption": {
34
+ "label": "Sales Navigator",
35
+ "description": "Filter for active LinkedIn users and ICP fit"
36
+ }
37
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "id": "signal-discovery",
3
+ "label": "Signal Discovery",
4
+ "leadSourceProvider": "signal-discovery",
5
+ "currentStep": "signal-discovery",
6
+ "promptProvider": "signal-discovery",
7
+ "selection": {
8
+ "promisingPostsTarget": 1
9
+ },
10
+ "requiredTools": [
11
+ "update_campaign",
12
+ "get_provider_prompt",
13
+ "search_signals",
14
+ "select_promising_posts",
15
+ "set_headline_icp_criteria",
16
+ "import_leads",
17
+ "wait_for_lead_list_ready",
18
+ "confirm_lead_list"
19
+ ],
20
+ "watch": {
21
+ "stepVisible": "You should see the Signal Discovery step with post search controls.",
22
+ "afterImport": "You should see Signal Discovery leads landing in the table."
23
+ },
24
+ "recommendation": {
25
+ "priority": 1,
26
+ "useWhen": [
27
+ "ICP is active on LinkedIn",
28
+ "You can name the topics they engage with",
29
+ "Quality and reply rate matter more than raw volume"
30
+ ],
31
+ "avoidWhen": [
32
+ "ICP rarely engages publicly",
33
+ "User needs very large volume immediately"
34
+ ],
35
+ "reason": "Best combination of activity + ICP fit when posts and engagement signals exist.",
36
+ "prose": "Since you're targeting **{icp}**, I'd recommend **Signal Discovery**.\n\nHere's why:\n- {icp} are very active on LinkedIn -- lots of posts about {topics}\n- We find people who engaged with content about your space\n- Warm leads: active on LinkedIn AND interested in your topics\n- 4x higher reply rates vs cold databases\n\nShould I search for posts where {icp} are engaging?"
37
+ },
38
+ "askOption": {
39
+ "label": "Signal Discovery (Recommended)",
40
+ "description": "Find active ICPs engaging with relevant posts"
41
+ }
42
+ }
@@ -0,0 +1,64 @@
1
+ # Campaign Brief Template
2
+
3
+ Use this markdown template when creating the campaign brief for `create_campaign` or `update_campaign_brief`.
4
+
5
+ ```markdown
6
+ # [Meeting Value] for [Target Audience]
7
+
8
+ _Example: "Free Pipeline Audit for VPs of Sales" or "Custom Outreach Plan for Marketing Agencies"_
9
+
10
+ ## Campaign Objective
11
+
12
+ Launch campaign to **[X persona]** who work at **[Y type of companies]** and offer them **[Z solution/value]**.
13
+
14
+ _Example: "Launch campaign to **VPs of Marketing** who work at **Series A-C SaaS companies** and offer them **AI-powered Google Ads management that cuts CPL by 20%+**."_
15
+
16
+ ## Ideal Customer Profile (ICP)
17
+
18
+ - **Company type:** [Specific description]
19
+ - **Role & seniority:** [Titles and levels]
20
+ - **Company size:** [Employee range]
21
+ - **Geography:** [Regions]
22
+
23
+ ## Meeting Value (Offer)
24
+
25
+ [The ONE most compelling meeting value for this audience - 2-3 sentences max. Must include:
26
+ (1) tangible deliverable(s) (what they get in the meeting)
27
+ (2) scope/timebox or effort required
28
+ (3) expected outcome tied to the pain
29
+
30
+ Example: "In a 15-minute call, we will audit your top 10 accounts and show where replies are stalling so your SDRs can fix it this week."]
31
+
32
+ ## Social Proof
33
+
34
+ **CRITICAL: Use the user's answer to the Proof question. Do NOT make up or modify their answer.**
35
+
36
+ **Primary Proof:** [Copy the user's Proof answer verbatim, or "Not provided - leading with problem"]
37
+
38
+ ## Messaging Guidelines
39
+
40
+ - **Lead with:** [Hook based on their posts/news]
41
+ - **Bridge to:** [How it connects to their pain]
42
+ - **Avoid:** [Generic phrases to skip - "best-in-class", "industry-leading", etc.]
43
+ - **Voice:** [Reference sender's voice from `.sellable/configs/writing/styleguide-core.md` if loaded]
44
+ - **Outbound rules:** [Reference `.sellable/configs/writing/outbound.md` if loaded -- observation -> relevance -> ask]
45
+
46
+ ## Do NOT Target
47
+
48
+ **Segments to avoid:**
49
+
50
+ - [Competitors' customers if mentioned]
51
+ - [Current customers]
52
+ - [Any exclusions mentioned]
53
+
54
+ ## Success Metrics & Stats
55
+
56
+ **Key success stories (if provided):**
57
+
58
+ - [Real metrics from proof answer]
59
+ - [Client transformations mentioned]
60
+
61
+ ## Additional Notes
62
+
63
+ [Any other important context from the enrichment or conversation]
64
+ ```
@@ -0,0 +1,84 @@
1
+ # Campaign Quality Patterns
2
+
3
+ This file captures the current Sellable quality bar for campaign briefs, offers,
4
+ and copy direction.
5
+
6
+ ## Gold Example Bank
7
+
8
+ These are the highest-trust inspiration sources for Phase 75:
9
+
10
+ - Sellable.dev internal messaging
11
+ - Galley
12
+ - Gelee
13
+ - HeyDigital
14
+ - Revvix / Spektion
15
+ - Superposition
16
+ - Persona Digital
17
+
18
+ Use them for inspiration and contrast, not for cloning.
19
+
20
+ ## What Strong Campaigns Consistently Do
21
+
22
+ - Clear over clever. They read smoothly on first pass.
23
+ - Ground the offer in a real job, pain, or moment the buyer already recognizes.
24
+ - Use specific proof only when it is real and relevant.
25
+ - Keep the ask proportional to the prospect's level of intent.
26
+ - Sound like a peer who understands the work, not a marketer narrating value props.
27
+ - Make it easy for the buyer to picture what they get next.
28
+
29
+ ## What Weak Campaigns Consistently Do
30
+
31
+ - Hide behind generic offers like "free audit" or "free assessment."
32
+ - Ask for a call before earning enough interest.
33
+ - Lean on vague business outcomes like "grow revenue" or "drive efficiency."
34
+ - Sound templated, over-polished, or AI-clean.
35
+ - Use proof as a flex instead of as context.
36
+ - Fill space with frameworks, jargon, or named methodologies the buyer does not care about.
37
+
38
+ ## Brief Quality Checklist
39
+
40
+ A high-quality campaign brief should:
41
+
42
+ - make the target buyer feel precise, not broad
43
+ - define the offer in concrete terms
44
+ - explain why the angle might work now
45
+ - separate what is known from what needs client confirmation
46
+ - preserve real proof without inventing new proof
47
+ - include enough copy guidance that downstream operators do not have to guess
48
+
49
+ ## Messaging Quality Checklist
50
+
51
+ Strong message directions usually produce copy that is:
52
+
53
+ - concise without sounding clipped
54
+ - business casual, not corporate
55
+ - specific to the target and the sender
56
+ - easy to read aloud
57
+ - comfortable with slight imperfection when it sounds more human
58
+
59
+ ## Openers To Avoid
60
+
61
+ - "Quick question"
62
+ - "I hope this finds you well"
63
+ - cold-opening with a credential or stat
64
+ - "Our approach:"
65
+ - "What if"
66
+ - "Imagine if"
67
+
68
+ ## High-Signal Openers To Prefer
69
+
70
+ - soft, conversational first lines
71
+ - relevant observations about the prospect, their role, or a clear signal
72
+ - short lead-ins that earn the right to make an offer
73
+
74
+ Example direction:
75
+
76
+ - Better: "so this might be relevant but..."
77
+ - Better: "not sure if this applies, but..."
78
+ - Better: "this may be a little out of left field, but..."
79
+ - Worse: "we help companies streamline growth with..."
80
+
81
+ ## Acceptance Standard
82
+
83
+ If a campaign brief or message direction could be sent by five competitors with a
84
+ name swap, it is not strong enough yet.
@@ -0,0 +1,120 @@
1
+ # Copy Calibration Examples
2
+
3
+ Use this file to calibrate toward strong Sellable output while preserving client
4
+ voice.
5
+
6
+ ## Good vs Bad Openers
7
+
8
+ Good:
9
+
10
+ - "so this might be relevant but..."
11
+ - "not sure if this applies, but..."
12
+ - "this may be a bit out of left field, but..."
13
+
14
+ Why good:
15
+
16
+ - softens the opening
17
+ - sounds conversational
18
+ - avoids cold pitch energy
19
+
20
+ Bad:
21
+
22
+ - "Quick question"
23
+ - "I hope this finds you well"
24
+ - "We help companies..."
25
+ - opening cold with a logo, stat, or credential
26
+
27
+ Why bad:
28
+
29
+ - obvious outbound tell
30
+ - feels rehearsed
31
+ - triggers instant pitch pattern-matching
32
+
33
+ ## Good vs Bad Proof Usage
34
+
35
+ Good:
36
+
37
+ - one concrete proof point used as context
38
+ - named proof when it matters
39
+ - proof that supports the offer instead of replacing it
40
+
41
+ Bad:
42
+
43
+ - stacked logos and stats before the ask
44
+ - vague claims like "trusted by leading brands"
45
+ - proof used as a flex with no relevance to the buyer
46
+
47
+ ## Tone Calibration
48
+
49
+ Target tone:
50
+
51
+ - clear
52
+ - casual but serious
53
+ - readable aloud
54
+ - willing to use fragments or slight imperfection
55
+
56
+ Avoid:
57
+
58
+ - homepage copy
59
+ - poetic phrasing
60
+ - colon-heavy value props
61
+ - dash-connected slogans
62
+ - anything that feels "too nice" instead of clear
63
+
64
+ ## Offer Calibration References
65
+
66
+ Galley:
67
+
68
+ - stronger when the output is offered before the meeting
69
+ - weaker when the reply path immediately becomes a scheduling ask
70
+
71
+ HeyDigital:
72
+
73
+ - good reference for simple language, scenario framing, and readability pressure
74
+
75
+ Persona Digital:
76
+
77
+ - good reference for a differentiator that sounds sharp without getting gimmicky
78
+
79
+ Revvix / Spektion:
80
+
81
+ - good reference for category-specific credibility and restraint
82
+
83
+ Superposition:
84
+
85
+ - good reference for founder-story positioning and named proof discipline
86
+
87
+ Sellable.dev:
88
+
89
+ - good reference for smooth internal messaging, low-friction A/B asks, and peer tone
90
+
91
+ ## Quick Contrastive Rewrites
92
+
93
+ Weak:
94
+
95
+ - "We help B2B SaaS companies unlock more pipeline through differentiated outbound systems."
96
+
97
+ Better:
98
+
99
+ - "seems like you're already doing the hard part. the gap may just be getting the right people to actually reply."
100
+
101
+ Weak:
102
+
103
+ - "Would you be open to a quick call so I can show you how this works?"
104
+
105
+ Better:
106
+
107
+ - "happy to send over the short version if that's easier. if it looks relevant, we can walk through it live."
108
+
109
+ Weak:
110
+
111
+ - "Our approach: ICP-aligned content that drives qualified attention."
112
+
113
+ Better:
114
+
115
+ - "the difference is the attention is actually from people you'd want to sell to"
116
+
117
+ ## Final Check
118
+
119
+ If the client would feel proud to read it and the prospect would not immediately
120
+ clock it as a pitch, it is close. If it sounds clean but generic, keep iterating.