@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.
- package/.claude-plugin/plugin.json +12 -0
- package/.mcp.json +9 -0
- package/README.md +355 -0
- package/dist/api.d.ts +21 -0
- package/dist/api.js +73 -0
- package/dist/auth.d.ts +60 -0
- package/dist/auth.js +246 -0
- package/dist/engage-memory.d.ts +63 -0
- package/dist/engage-memory.js +354 -0
- package/dist/index-dev.d.ts +2 -0
- package/dist/index-dev.js +17 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.js +499 -0
- package/dist/skills.d.ts +11 -0
- package/dist/skills.js +97 -0
- package/dist/tools/auth.d.ts +30 -0
- package/dist/tools/auth.js +124 -0
- package/dist/tools/blueprint-commit.d.ts +174 -0
- package/dist/tools/blueprint-commit.js +286 -0
- package/dist/tools/bootstrap.d.ts +64 -0
- package/dist/tools/bootstrap.js +246 -0
- package/dist/tools/campaigns.d.ts +589 -0
- package/dist/tools/campaigns.js +892 -0
- package/dist/tools/cells.d.ts +58 -0
- package/dist/tools/cells.js +48 -0
- package/dist/tools/context.d.ts +88 -0
- package/dist/tools/context.js +271 -0
- package/dist/tools/csv-domains.d.ts +73 -0
- package/dist/tools/csv-domains.js +464 -0
- package/dist/tools/csv-linkedin.d.ts +102 -0
- package/dist/tools/csv-linkedin.js +712 -0
- package/dist/tools/direct-campaigns.d.ts +240 -0
- package/dist/tools/direct-campaigns.js +250 -0
- package/dist/tools/engage-bootstrap.d.ts +94 -0
- package/dist/tools/engage-bootstrap.js +205 -0
- package/dist/tools/engage-discovery.d.ts +78 -0
- package/dist/tools/engage-discovery.js +150 -0
- package/dist/tools/engage-memory.d.ts +181 -0
- package/dist/tools/engage-memory.js +143 -0
- package/dist/tools/engage-state.d.ts +72 -0
- package/dist/tools/engage-state.js +62 -0
- package/dist/tools/enrichment.d.ts +167 -0
- package/dist/tools/enrichment.js +174 -0
- package/dist/tools/flow-preflight.d.ts +68 -0
- package/dist/tools/flow-preflight.js +138 -0
- package/dist/tools/framework.d.ts +44 -0
- package/dist/tools/framework.js +153 -0
- package/dist/tools/interaction-mode.d.ts +27 -0
- package/dist/tools/interaction-mode.js +102 -0
- package/dist/tools/leads.d.ts +2417 -0
- package/dist/tools/leads.js +2307 -0
- package/dist/tools/linkedin.d.ts +210 -0
- package/dist/tools/linkedin.js +229 -0
- package/dist/tools/navigation.d.ts +91 -0
- package/dist/tools/navigation.js +381 -0
- package/dist/tools/one-off.d.ts +229 -0
- package/dist/tools/one-off.js +273 -0
- package/dist/tools/processing.d.ts +70 -0
- package/dist/tools/processing.js +56 -0
- package/dist/tools/prompts.d.ts +211 -0
- package/dist/tools/prompts.js +210 -0
- package/dist/tools/provider-preflight.d.ts +21 -0
- package/dist/tools/provider-preflight.js +59 -0
- package/dist/tools/readiness.d.ts +261 -0
- package/dist/tools/readiness.js +510 -0
- package/dist/tools/rows.d.ts +126 -0
- package/dist/tools/rows.js +105 -0
- package/dist/tools/rubrics.d.ts +497 -0
- package/dist/tools/rubrics.js +681 -0
- package/dist/tools/senders.d.ts +44 -0
- package/dist/tools/senders.js +69 -0
- package/dist/tools/sequencer.d.ts +127 -0
- package/dist/tools/sequencer.js +194 -0
- package/dist/tools/tables.d.ts +35 -0
- package/dist/tools/tables.js +36 -0
- package/dist/tools/verify-row.d.ts +36 -0
- package/dist/tools/verify-row.js +38 -0
- package/dist/tools/workspaces.d.ts +140 -0
- package/dist/tools/workspaces.js +139 -0
- package/dist/utils/workspace-root.d.ts +1 -0
- package/dist/utils/workspace-root.js +39 -0
- package/package.json +46 -0
- package/skills/building-gtm-tables/SKILL.md +216 -0
- package/skills/building-gtm-tables/core/auto-execute.yaml +19 -0
- package/skills/building-gtm-tables/core/blueprint-schema.json +72 -0
- package/skills/building-gtm-tables/references/brief-to-blueprint.md +334 -0
- package/skills/building-gtm-tables/references/column-type-catalog.md +318 -0
- package/skills/building-gtm-tables/references/common-blueprints.fixtures.ts +199 -0
- package/skills/building-gtm-tables/references/common-blueprints.md +44 -0
- package/skills/building-gtm-tables/references/failure-taxonomy.md +197 -0
- package/skills/building-gtm-tables/references/uat-seed-prompts.md +37 -0
- package/skills/building-gtm-tables/references/verify-loop.md +74 -0
- package/skills/campaign-messages/SKILL.md +173 -0
- package/skills/campaign-messages/flow.v1.json +75 -0
- package/skills/craft-message/SKILL.md +401 -0
- package/skills/create-campaign/ARCHITECTURE.md +232 -0
- package/skills/create-campaign/DISCUSS.md +296 -0
- package/skills/create-campaign/FLOW_ASCII.md +240 -0
- package/skills/create-campaign/HOST-PARITY-CHECKLIST.md +49 -0
- package/skills/create-campaign/README.md +142 -0
- package/skills/create-campaign/SKILL.md +286 -0
- package/skills/create-campaign/context/README.md +67 -0
- package/skills/create-campaign/context/_TEMPLATE.md +12 -0
- package/skills/create-campaign/context/context.md +35 -0
- package/skills/create-campaign/context/learnings.md +16 -0
- package/skills/create-campaign/context/registry.json +19 -0
- package/skills/create-campaign/core/flow.v1.json +217 -0
- package/skills/create-campaign/core/policy.md +191 -0
- package/skills/create-campaign/core/providers/apollo.json +35 -0
- package/skills/create-campaign/core/providers/prospeo.json +34 -0
- package/skills/create-campaign/core/providers/registry.json +31 -0
- package/skills/create-campaign/core/providers/sales-nav.json +37 -0
- package/skills/create-campaign/core/providers/signal-discovery.json +42 -0
- package/skills/create-campaign/references/brief-template.md +64 -0
- package/skills/create-campaign/references/campaign-quality.md +84 -0
- package/skills/create-campaign/references/copy-calibration-examples.md +120 -0
- package/skills/create-campaign/references/offer-patterns.md +108 -0
- package/skills/create-campaign/references/provider-selection-strategy.md +212 -0
- package/skills/create-campaign/references/question-examples.md +167 -0
- package/skills/create-campaign/references/token-fill-examples.md +81 -0
- package/skills/create-campaign-brief/ARCHITECTURE.md +72 -0
- package/skills/create-campaign-brief/DISCUSS.md +64 -0
- package/skills/create-campaign-brief/README.md +176 -0
- package/skills/create-campaign-brief/SKILL.md +537 -0
- package/skills/create-campaign-brief/references/brief-synthesis-rules.md +100 -0
- package/skills/create-campaign-brief/references/brief-template.md +220 -0
- package/skills/create-campaign-brief/references/campaign-idea-options.md +30 -0
- package/skills/create-campaign-brief/references/copy-appendix-template.md +62 -0
- package/skills/create-campaign-brief/references/draft-lifecycle.md +23 -0
- package/skills/create-campaign-brief/references/examples/MANIFEST.json +89 -0
- package/skills/create-campaign-brief/references/examples/briefs/clover.md +223 -0
- package/skills/create-campaign-brief/references/examples/briefs/galley.md +222 -0
- package/skills/create-campaign-brief/references/examples/briefs/gelee.md +220 -0
- package/skills/create-campaign-brief/references/examples/briefs/hey-digital.md +234 -0
- package/skills/create-campaign-brief/references/examples/briefs/persona.md +231 -0
- package/skills/create-campaign-brief/references/examples/briefs/revvix.md +220 -0
- package/skills/create-campaign-brief/references/examples/briefs/sellable-dev.md +220 -0
- package/skills/create-campaign-brief/references/examples/briefs/superposition.md +233 -0
- package/skills/create-campaign-brief/references/examples/briefs/superpower.md +219 -0
- package/skills/create-campaign-brief/references/examples/briefs/westpark-villas.md +220 -0
- package/skills/create-campaign-brief/references/icp-lock-question-bank.md +43 -0
- package/skills/create-campaign-brief/references/messaging-inputs.md +58 -0
- package/skills/create-campaign-brief/references/output-acceptance-rubric.md +62 -0
- package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +248 -0
- package/skills/create-campaign-brief/references/phase75-canonical-brief-template.md +319 -0
- package/skills/create-campaign-brief/references/phase75-good-brief-and-messaging-examples.md +445 -0
- package/skills/create-campaign-brief/references/quick-research-protocol.md +39 -0
- package/skills/create-campaign-brief/references/reference-sheet-protocol.md +60 -0
- package/skills/create-campaign-brief/references/zero-shot-iteration-rules.md +66 -0
- package/skills/create-campaign-v2/SKILL.md +1619 -0
- package/skills/create-campaign-v2/core/auto-execute.README.md +219 -0
- package/skills/create-campaign-v2/core/auto-execute.yaml +121 -0
- package/skills/create-campaign-v2/core/flow.v2.json +1643 -0
- package/skills/create-campaign-v2/core/policy.md +82 -0
- package/skills/create-campaign-v2/references/ai-tells.md +253 -0
- package/skills/create-campaign-v2/references/approval-gate-framing.md +346 -0
- package/skills/create-campaign-v2/references/draft-lifecycle.md +110 -0
- package/skills/create-campaign-v2/references/escalation-ladder.md +119 -0
- package/skills/create-campaign-v2/references/filter-leads.md +495 -0
- package/skills/create-campaign-v2/references/final-handoff-contract.md +176 -0
- package/skills/create-campaign-v2/references/gold-standard-message-examples.md +394 -0
- package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +314 -0
- package/skills/create-campaign-v2/references/gold-standard-message-validation-example.md +212 -0
- package/skills/create-campaign-v2/references/lead-validation-preview.md +172 -0
- package/skills/create-campaign-v2/references/parallel-critique-protocol.md +368 -0
- package/skills/create-campaign-v2/references/sample-validation-loop.md +289 -0
- package/skills/create-campaign-v2/references/step-13-import-leads.md +151 -0
- package/skills/create-campaign-v2/references/step-15-re-cascade.md +90 -0
- package/skills/create-campaign-v2/references/thomas-revision-filters.md +521 -0
- package/skills/create-campaign-v2/references/thomas-variant-selection.md +202 -0
- package/skills/create-campaign-v2/references/tier-routing-matrix.md +66 -0
- package/skills/create-campaign-v2/references/validation-criteria.md +367 -0
- package/skills/create-campaign-v2/references/watch-link-handoff.md +106 -0
- package/skills/create-campaign-v2-validation/SKILL.md +296 -0
- package/skills/create-post/SKILL.md +1308 -0
- package/skills/create-rubric/SKILL.md +251 -0
- package/skills/engage/SKILL.md +549 -0
- package/skills/engage/core/README.md +23 -0
- package/skills/engage/core/proven-searches.json +11 -0
- package/skills/engage/core/style-guide.template.md +47 -0
- package/skills/engage/core/tracked-people.json +10 -0
- package/skills/enrich-prospects/SKILL.md +97 -0
- package/skills/find-leads/SKILL.md +467 -0
- package/skills/generate-messages/SKILL.md +2361 -0
- package/skills/interview/SKILL.md +132 -0
- package/skills/interview/core/ENGAGE_STYLE_GUIDE.template.md +54 -0
- package/skills/interview/core/ICP.template.md +54 -0
- package/skills/interview/core/VOICE_PROFILE.template.md +101 -0
- package/skills/providers/apollo.md +520 -0
- package/skills/providers/prospeo.md +398 -0
- package/skills/providers/sales-nav.md +372 -0
- package/skills/providers/signal-discovery.md +495 -0
- package/skills/research/SKILL.md +258 -0
- package/skills/research/config.json +9 -0
- package/skills/research/override.md +13 -0
- package/skills/research-prospect/SKILL.md +99 -0
- package/skills/research-sender/SKILL.md +158 -0
- package/skills/workflow-sequences/SKILL.md +85 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Create Campaign MCP Flow (ASCII Audit + Streamlined Proposal)
|
|
2
|
+
|
|
3
|
+
Scope: /sellable:create-campaign
|
|
4
|
+
Sources: mcp/sellable/skills/create-campaign/SKILL.md, core/flow.v1.json, core/providers/_.json,
|
|
5
|
+
mcp/sellable/skills/providers/_.md, mcp/sellable/src/server.ts
|
|
6
|
+
|
|
7
|
+
Note: Tool names are shown without the mcp**sellable** prefix. AskUserQuestion is the UI question tool.
|
|
8
|
+
|
|
9
|
+
======================================================================
|
|
10
|
+
TOOL AUDIT (CREATE CAMPAIGN)
|
|
11
|
+
======================================================================
|
|
12
|
+
|
|
13
|
+
Bootstrap / Guardrails (required)
|
|
14
|
+
|
|
15
|
+
- ToolSearch(select: ...)
|
|
16
|
+
- get_auth_status
|
|
17
|
+
- get_campaign_framework
|
|
18
|
+
- get_campaign_context (resume, refresh)
|
|
19
|
+
- get_subskill_prompt (research + handoff)
|
|
20
|
+
- search_subskill_prompts (only if subskill name unclear)
|
|
21
|
+
|
|
22
|
+
Discovery / Enrichment (required)
|
|
23
|
+
|
|
24
|
+
- enrich_sender (returns clientProspectId, personData, companyDomain)
|
|
25
|
+
|
|
26
|
+
Research (optional, parallel; only when needed)
|
|
27
|
+
|
|
28
|
+
- fetch_linkedin_posts (LinkedIn posts)
|
|
29
|
+
- fetch_company (company LinkedIn data)
|
|
30
|
+
- WebFetch (homepage)
|
|
31
|
+
- WebSearch (jobs/funding, reviews/traffic)
|
|
32
|
+
|
|
33
|
+
Campaign Creation / Updates
|
|
34
|
+
|
|
35
|
+
- create_campaign (requires clientProspectId + campaignBrief; offerPositioning auto-filled)
|
|
36
|
+
- update_campaign (currentStep, leadSourceProvider)
|
|
37
|
+
- update_campaign_brief (refine brief)
|
|
38
|
+
|
|
39
|
+
Lead Sourcing
|
|
40
|
+
|
|
41
|
+
- get_provider_prompt (provider-specific instructions)
|
|
42
|
+
- search_signals / select_promising_posts / set_headline_icp_criteria
|
|
43
|
+
- search_sales_nav
|
|
44
|
+
- lookup_sales_nav_filter (Sales Nav dynamic filters)
|
|
45
|
+
- search_apollo
|
|
46
|
+
- import_leads
|
|
47
|
+
- wait_for_lead_list_ready
|
|
48
|
+
- confirm_lead_list
|
|
49
|
+
- wait_for_campaign_table_ready
|
|
50
|
+
|
|
51
|
+
Watch / UI / Diagnostics
|
|
52
|
+
|
|
53
|
+
- AskUserQuestion
|
|
54
|
+
- get_campaign_navigation_state (debug)
|
|
55
|
+
- Chrome tools read_page/get_page_text (debug only)
|
|
56
|
+
|
|
57
|
+
Handoff (next phase)
|
|
58
|
+
|
|
59
|
+
- get_subskill_prompt (create-rubric)
|
|
60
|
+
- upsert_rubric (downstream, not in this flow)
|
|
61
|
+
|
|
62
|
+
======================================================================
|
|
63
|
+
CURRENT FLOW (V1) - ASCII
|
|
64
|
+
======================================================================
|
|
65
|
+
|
|
66
|
+
[User: /sellable:create-campaign (cmp_... optional)]
|
|
67
|
+
|
|
|
68
|
+
v
|
|
69
|
+
[ToolSearch: load required tools]
|
|
70
|
+
|
|
|
71
|
+
v
|
|
72
|
+
[get_auth_status] --auth fail--> [Stop: show guidance; wait for "ready"]
|
|
73
|
+
|
|
|
74
|
+
v
|
|
75
|
+
[get_campaign_framework]
|
|
76
|
+
|
|
|
77
|
+
+--> cmp_id provided?
|
|
78
|
+
| |
|
|
79
|
+
| +-- yes --> [create_campaign(campaignId) -> watchUrl]
|
|
80
|
+
| [get_campaign_context(refresh)]
|
|
81
|
+
| [Resume via context.navState]
|
|
82
|
+
| [Jump into flow at matching step]
|
|
83
|
+
|
|
|
84
|
+
+-- no --> continue
|
|
85
|
+
|
|
|
86
|
+
v
|
|
87
|
+
[Need LinkedIn URL? AskUserQuestion]
|
|
88
|
+
|
|
|
89
|
+
v
|
|
90
|
+
[enrich_sender -> clientProspectId, personData, companyDomain]
|
|
91
|
+
|
|
|
92
|
+
v
|
|
93
|
+
[Research subskill (parallel, optional)]
|
|
94
|
+
|
|
|
95
|
+
v
|
|
96
|
+
[Ask direction]
|
|
97
|
+
|\
|
|
98
|
+
| +-- "I have a direction" --> [User gives target/angle] --> (skip Q sets)
|
|
99
|
+
| +-- "Lead the way" -------> [Onboarding Q set 1] -> [Onboarding Q set 2]
|
|
100
|
+
|
|
|
101
|
+
v
|
|
102
|
+
[Generate 3 JTBD options] -> [User picks]
|
|
103
|
+
|
|
|
104
|
+
v
|
|
105
|
+
[create_campaign (campaignBrief)]
|
|
106
|
+
|
|
|
107
|
+
v
|
|
108
|
+
[Watch link gate] -- wait for "ready for leads" -->
|
|
109
|
+
|
|
|
110
|
+
v
|
|
111
|
+
[update_campaign currentStep=pick-provider] -> (watch gate)
|
|
112
|
+
|
|
|
113
|
+
v
|
|
114
|
+
[AskUserQuestion provider] -> [resolve provider]
|
|
115
|
+
|
|
|
116
|
+
v
|
|
117
|
+
[update_campaign currentStep=provider step + leadSourceProvider] -> (watch gate)
|
|
118
|
+
|
|
|
119
|
+
v
|
|
120
|
+
[get_provider_prompt]
|
|
121
|
+
|
|
|
122
|
+
v
|
|
123
|
+
(Provider search path)
|
|
124
|
+
|
|
|
125
|
+
v
|
|
126
|
+
[import_leads] -> [wait_for_lead_list_ready] -> [confirm_lead_list]
|
|
127
|
+
|
|
|
128
|
+
v
|
|
129
|
+
[update_campaign currentStep=filter-choice] -> (watch gate)
|
|
130
|
+
|
|
|
131
|
+
v
|
|
132
|
+
[wait_for_campaign_table_ready] -> [get_campaign_context refresh] -> [get_rows_minimal sample]
|
|
133
|
+
|
|
|
134
|
+
v
|
|
135
|
+
[if filters=yes -> update_campaign currentStep=filter-rules] -> (watch gate)
|
|
136
|
+
|
|
|
137
|
+
v
|
|
138
|
+
[handoff_to_subskill create-rubric]
|
|
139
|
+
|
|
140
|
+
Provider search paths
|
|
141
|
+
|
|
142
|
+
Signal Discovery
|
|
143
|
+
search_signals
|
|
144
|
+
-> select_promising_posts
|
|
145
|
+
-> set_headline_icp_criteria
|
|
146
|
+
-> import_leads
|
|
147
|
+
-> confirm_lead_list
|
|
148
|
+
|
|
149
|
+
Sales Navigator
|
|
150
|
+
(lookup_sales_nav_filter as needed)
|
|
151
|
+
-> search_sales_nav
|
|
152
|
+
-> import_leads
|
|
153
|
+
-> confirm_lead_list
|
|
154
|
+
|
|
155
|
+
Apollo
|
|
156
|
+
search_apollo
|
|
157
|
+
-> import_leads
|
|
158
|
+
-> confirm_lead_list
|
|
159
|
+
|
|
160
|
+
======================================================================
|
|
161
|
+
STREAMLINED FLOW (PROPOSED FAST PATH - DESIGN UPDATE)
|
|
162
|
+
======================================================================
|
|
163
|
+
|
|
164
|
+
Goal: reach the watch link (magic moment) ASAP while staying deterministic.
|
|
165
|
+
Rules: ask only what is strictly needed; prefer user-confirm > user-question.
|
|
166
|
+
|
|
167
|
+
[User: /sellable:create-campaign (cmp_... optional)]
|
|
168
|
+
|
|
|
169
|
+
v
|
|
170
|
+
[ToolSearch + get_auth_status + get_campaign_framework]
|
|
171
|
+
|
|
|
172
|
+
+-- cmp_id provided --> [create_campaign(campaignId) -> watchUrl]
|
|
173
|
+
| [get_campaign_context(refresh)] -> resume
|
|
174
|
+
|
|
|
175
|
+
v
|
|
176
|
+
[If LinkedIn URL missing] -> AskUserQuestion (single ask)
|
|
177
|
+
|
|
|
178
|
+
v
|
|
179
|
+
[enrich_sender]
|
|
180
|
+
|
|
|
181
|
+
v
|
|
182
|
+
[Ask 1 question only: "Who do you want to reach?"]
|
|
183
|
+
|
|
|
184
|
+
v
|
|
185
|
+
[Do we already have a clear campaign angle/offer from context?]
|
|
186
|
+
|\
|
|
187
|
+
| +-- yes --> (skip research)
|
|
188
|
+
| |
|
|
189
|
+
| +-- no --> [Minimal research (2 agents max: posts + homepage)]
|
|
190
|
+
|
|
|
191
|
+
v
|
|
192
|
+
[Auto-pick 1 default campaign angle + draft brief]
|
|
193
|
+
|
|
|
194
|
+
v
|
|
195
|
+
[create_campaign NOW] <-- magic moment (watch link)
|
|
196
|
+
|
|
|
197
|
+
v
|
|
198
|
+
[Optional refinements while user reviews]
|
|
199
|
+
|
|
200
|
+
- Only ask if user objects or wants options
|
|
201
|
+
- update_campaign_brief if needed
|
|
202
|
+
|
|
|
203
|
+
v
|
|
204
|
+
[Auto-recommend provider + AskUserQuestion: confirm/change]
|
|
205
|
+
|
|
|
206
|
+
v
|
|
207
|
+
[update_campaign -> provider step] -> get_provider_prompt
|
|
208
|
+
|
|
|
209
|
+
v
|
|
210
|
+
[Run search + import leads] -> [wait_for_lead_list_ready] -> [confirm_lead_list]
|
|
211
|
+
|
|
|
212
|
+
v
|
|
213
|
+
[update_campaign currentStep=filter-choice] -> [wait_for_campaign_table_ready] -> [get_campaign_context] -> [get_rows_minimal]
|
|
214
|
+
|
|
|
215
|
+
v
|
|
216
|
+
[filter-rules] -> handoff to create-rubric
|
|
217
|
+
|
|
218
|
+
Suggested question budget (fast path)
|
|
219
|
+
|
|
220
|
+
- Required: LinkedIn URL (only if missing)
|
|
221
|
+
- Required: 1 question max (ICP / who to reach)
|
|
222
|
+
- Optional: Ask for campaign angle only if user wants options
|
|
223
|
+
|
|
224
|
+
Research gating (fast path)
|
|
225
|
+
|
|
226
|
+
- Skip research by default after ICP is known.
|
|
227
|
+
- If only company domain exists, run Homepage Snapshot only.
|
|
228
|
+
- If speed is priority, set research agentCount=2 (posts + homepage).
|
|
229
|
+
|
|
230
|
+
======================================================================
|
|
231
|
+
NOTES / DESIGN INTENT
|
|
232
|
+
======================================================================
|
|
233
|
+
|
|
234
|
+
- The earliest "magic moment" is the watch link returned by create_campaign.
|
|
235
|
+
- create_campaign requires clientProspectId + offerPositioning + campaignBrief.
|
|
236
|
+
The fast path focuses on collecting only the brief; offerPositioning can be
|
|
237
|
+
auto-filled server-side to avoid delaying the watch link.
|
|
238
|
+
- Every update_campaign step is a watch-mode gate in the current flow.
|
|
239
|
+
The fast path keeps gates but reduces question count and research scope.
|
|
240
|
+
- Provider selection can be simplified to: "Recommended: X (yes/change?)".
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Host Parity Checklist (Create Campaign)
|
|
2
|
+
|
|
3
|
+
Use this checklist to verify Codex and Claude behavior stays aligned.
|
|
4
|
+
Record factual evidence for each item.
|
|
5
|
+
|
|
6
|
+
## Run Metadata
|
|
7
|
+
|
|
8
|
+
- Date:
|
|
9
|
+
- Operator:
|
|
10
|
+
- Workspace:
|
|
11
|
+
- Campaign ID (if resume):
|
|
12
|
+
|
|
13
|
+
## Codex Run Checklist
|
|
14
|
+
|
|
15
|
+
- [ ] Bootstrap sequence executed via `bootstrap_create_campaign`
|
|
16
|
+
- Evidence:
|
|
17
|
+
- [ ] `requiredChecks` includes auth/framework/resume/subskill checks
|
|
18
|
+
- Evidence:
|
|
19
|
+
- [ ] Fail-fast behavior observed when bootstrap has blockers (`Bootstrap incomplete`)
|
|
20
|
+
- Evidence:
|
|
21
|
+
- [ ] `list_subskill_prompts` and `get_subskill_prompt("create-campaign")` available
|
|
22
|
+
- Evidence:
|
|
23
|
+
- [ ] Provider preflight executed with `get_provider_prompt`
|
|
24
|
+
- Evidence:
|
|
25
|
+
- [ ] Provider search/import blocked before preflight and allowed after preflight
|
|
26
|
+
- Evidence:
|
|
27
|
+
- [ ] Resume behavior (when campaignId passed) continues from context, not new campaign creation
|
|
28
|
+
- Evidence:
|
|
29
|
+
|
|
30
|
+
## Claude Non-Regression Checklist
|
|
31
|
+
|
|
32
|
+
- [ ] Existing slash flow remains valid (`/sellable:create-campaign`)
|
|
33
|
+
- Evidence:
|
|
34
|
+
- [ ] No additional mandatory user setup beyond prior Claude flow
|
|
35
|
+
- Evidence:
|
|
36
|
+
- [ ] Required tool names remain unchanged and callable
|
|
37
|
+
- Evidence:
|
|
38
|
+
- [ ] Auth guidance remains actionable when token/workspace is missing
|
|
39
|
+
- Evidence:
|
|
40
|
+
- [ ] Provider gating remediation text is clear and actionable
|
|
41
|
+
- Evidence:
|
|
42
|
+
- [ ] Prompt discovery fallback works when host prompt UI is limited
|
|
43
|
+
- Evidence:
|
|
44
|
+
|
|
45
|
+
## Verdict
|
|
46
|
+
|
|
47
|
+
- Codex parity status: PASS / FAIL
|
|
48
|
+
- Claude non-regression status: PASS / FAIL
|
|
49
|
+
- Follow-up actions:
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Create Campaign Framework (MVP Guide)
|
|
2
|
+
|
|
3
|
+
This is the smallest clean version that is both deterministic and extensible.
|
|
4
|
+
If you only read one file, read this one.
|
|
5
|
+
|
|
6
|
+
## Start Here (What to do)
|
|
7
|
+
|
|
8
|
+
1. Put your business context in `context/context.md`
|
|
9
|
+
2. Set deterministic overrides in `context/registry.json`
|
|
10
|
+
3. (Optional) Adjust provider behavior in `core/providers/*.json`
|
|
11
|
+
4. Validate with `npm run validate:create-campaign-framework`
|
|
12
|
+
|
|
13
|
+
That is the MVP operating loop.
|
|
14
|
+
|
|
15
|
+
## Host Parity Contract (Codex + Claude)
|
|
16
|
+
|
|
17
|
+
Use the same runtime sequence in both hosts:
|
|
18
|
+
|
|
19
|
+
1. `bootstrap_create_campaign({ campaignId? })`
|
|
20
|
+
2. If `safeToProceed !== true`, stop and resolve `blockingErrors`
|
|
21
|
+
3. Continue with framework/context flow only after bootstrap passes
|
|
22
|
+
|
|
23
|
+
Prompt discovery contract for hosts without prompts/list UI:
|
|
24
|
+
|
|
25
|
+
- `list_subskill_prompts`
|
|
26
|
+
- `search_subskill_prompts`
|
|
27
|
+
- `get_subskill_prompt({ subskillName: "create-campaign" })`
|
|
28
|
+
|
|
29
|
+
Provider preflight contract:
|
|
30
|
+
|
|
31
|
+
- Always call `get_provider_prompt({ provider, campaignOfferId? })` before provider search/import tools.
|
|
32
|
+
- Provider tools are runtime-gated until this preflight call is made.
|
|
33
|
+
|
|
34
|
+
Parallel execution contract:
|
|
35
|
+
|
|
36
|
+
- Claude host: use `Task` subagents for parallel research/crafting units.
|
|
37
|
+
- Codex host: use `multi_tool_use.parallel` for independent tool-call batches.
|
|
38
|
+
- If neither is available, run sequentially with the same output schema.
|
|
39
|
+
|
|
40
|
+
## How a run works (mental model)
|
|
41
|
+
|
|
42
|
+
1. `SKILL.md` calls `get_campaign_framework`
|
|
43
|
+
2. The framework loader returns:
|
|
44
|
+
- Policy (`core/policy.md`)
|
|
45
|
+
- Flow (`core/flow.v1.json`)
|
|
46
|
+
- Providers (`core/providers/*.json`)
|
|
47
|
+
- Custom context + overrides (`context/*`)
|
|
48
|
+
3. The skill executes the flow using those configs
|
|
49
|
+
|
|
50
|
+
## Flow map (what happens and where it gates)
|
|
51
|
+
|
|
52
|
+
1. Bootstrap
|
|
53
|
+
- Load tools
|
|
54
|
+
- Call `get_campaign_framework({ flowVersion: "v1", includePlugins: true })`
|
|
55
|
+
2. Discovery + enrichment
|
|
56
|
+
- `enrich_sender` -> capture `clientProspectId`
|
|
57
|
+
- Parallel sender research
|
|
58
|
+
- `complete_sender_research(...)` marker before create
|
|
59
|
+
3. Quick inputs
|
|
60
|
+
- Confirm identity
|
|
61
|
+
- Ask for ICP + campaign idea (proof optional)
|
|
62
|
+
4. Create campaign (Gate 1)
|
|
63
|
+
- `create_campaign(...)`
|
|
64
|
+
- Provide watch link
|
|
65
|
+
- Gate: user reviews brief and confirms ready
|
|
66
|
+
5. Move to provider selection (Gate 2)
|
|
67
|
+
- `update_campaign({ currentStep: "pick-provider" })`
|
|
68
|
+
- Gate: confirm they see provider selection
|
|
69
|
+
6. Move to provider step (Gate 3)
|
|
70
|
+
- Use `core/providers/<id>.json` for `currentStep` + `leadSourceProvider`
|
|
71
|
+
- `update_campaign({ currentStep, leadSourceProvider })`
|
|
72
|
+
- Gate: confirm they see the provider step
|
|
73
|
+
7. Provider prompt injection + search
|
|
74
|
+
- Call `get_provider_prompt({ provider: providerConfig.promptProvider })`
|
|
75
|
+
- Execute the provider's workflow
|
|
76
|
+
8. Import leads -> review list -> confirm (Gate 4)
|
|
77
|
+
- `import_leads(...)` (creates lead list + starts import)
|
|
78
|
+
- `wait_for_lead_list_ready(...)`
|
|
79
|
+
- Gate: confirm the list looks right
|
|
80
|
+
- `confirm_lead_list(...)` (imports into campaign table)
|
|
81
|
+
- `update_campaign({ currentStep: "filter-choice" })` (move watch UI immediately)
|
|
82
|
+
- `wait_for_campaign_table_ready(...)` (required readiness check)
|
|
83
|
+
- `get_campaign_context({ refresh: true })` + `get_rows_minimal(...)` (sample leads for recommendation)
|
|
84
|
+
9. Enable filtering (Gate 5)
|
|
85
|
+
- Gate: user chooses whether to add filters or skip
|
|
86
|
+
10. Handoff
|
|
87
|
+
|
|
88
|
+
- Provide watch link + status
|
|
89
|
+
- If filters=yes: `update_campaign({ currentStep: "filter-rules" })` then hand off to rubric
|
|
90
|
+
- If filters=no: `update_campaign({ currentStep: "messages" })` then proceed to messaging
|
|
91
|
+
|
|
92
|
+
Notes:
|
|
93
|
+
|
|
94
|
+
- Gates are intentional: after every `currentStep` change, the skill orients
|
|
95
|
+
the user and waits.
|
|
96
|
+
- Chrome tools are only used when the user says something is wrong.
|
|
97
|
+
|
|
98
|
+
## Folder structure (explains itself)
|
|
99
|
+
|
|
100
|
+
- `SKILL.md` - Orchestrator (thin; not the source of truth)
|
|
101
|
+
- `core/` - System-owned framework (rarely edit)
|
|
102
|
+
- `core/policy.md` - Non-negotiable rules
|
|
103
|
+
- `core/flow.v1.json` - Step graph and transitions
|
|
104
|
+
- `core/providers/registry.json` - Provider index and order
|
|
105
|
+
- `core/providers/*.json` - Provider contracts (step mapping + copy)
|
|
106
|
+
- `context/` - Your space (edit these)
|
|
107
|
+
- `context/context.md` - Your default context
|
|
108
|
+
- `context/registry.json` - What is enabled + overrides
|
|
109
|
+
- `context/learnings.md` - What worked (learning log)
|
|
110
|
+
- `context/README.md` - How to customize safely
|
|
111
|
+
|
|
112
|
+
## Where to change behavior (fast path)
|
|
113
|
+
|
|
114
|
+
Most changes should happen here:
|
|
115
|
+
|
|
116
|
+
- Add org/user context: `context/context.md`
|
|
117
|
+
- Change defaults and recommendation behavior: `context/registry.json`
|
|
118
|
+
|
|
119
|
+
Advanced changes:
|
|
120
|
+
|
|
121
|
+
- Change provider step wiring or watch text: `core/providers/<id>.json`
|
|
122
|
+
- Change global behavior: `core/policy.md`
|
|
123
|
+
- Change the flow: `core/flow.v1.json`
|
|
124
|
+
|
|
125
|
+
## Add a provider (extensible contract)
|
|
126
|
+
|
|
127
|
+
1. Copy an existing provider file in `core/providers/`
|
|
128
|
+
2. Edit `id`, `currentStep`, `leadSourceProvider`, and `askOption`
|
|
129
|
+
3. Add it to `core/providers/registry.json`
|
|
130
|
+
4. Validate with `npm run validate:create-campaign-framework`
|
|
131
|
+
|
|
132
|
+
## Add context or overrides (customization)
|
|
133
|
+
|
|
134
|
+
1. Add a context file under `context/`
|
|
135
|
+
2. Register it in `context/registry.json`
|
|
136
|
+
3. Put structured overrides in the registry entry
|
|
137
|
+
4. Validate with `npm run validate:create-campaign-framework`
|
|
138
|
+
|
|
139
|
+
## Determinism checks
|
|
140
|
+
|
|
141
|
+
- `npm run validate:create-campaign-framework`
|
|
142
|
+
- `npx tsc -p mcp/sellable/tsconfig.json --noEmit`
|