@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,220 @@
|
|
|
1
|
+
# brief.md v1 Template
|
|
2
|
+
|
|
3
|
+
Use this as the required output shape for `create-campaign-brief`.
|
|
4
|
+
|
|
5
|
+
Do not add YAML frontmatter. The first visible status must be `Status:
|
|
6
|
+
brief-v1`. The document can be used as a Kickoff Agenda if the operator wants
|
|
7
|
+
client-facing review, but the file itself is the Phase 83 brief artifact.
|
|
8
|
+
|
|
9
|
+
## HARD CONSTRAINT — output channel
|
|
10
|
+
|
|
11
|
+
Return brief-v1 as plain text in the FINAL assistant message of the
|
|
12
|
+
brief-completion turn. Do NOT use `Write`, `Edit`, `Bash`, or any
|
|
13
|
+
filesystem-mutating tool to persist the brief. The harness captures the
|
|
14
|
+
assistant message directly from the `result.result` stream-json payload —
|
|
15
|
+
it does not read a file off disk.
|
|
16
|
+
|
|
17
|
+
If you find yourself emitting a TodoWrite step like "Write brief.md v1
|
|
18
|
+
to disk" or "Save brief to .sellable/..." — DELETE that step and return
|
|
19
|
+
the brief inline instead. The tools `Write`, `Edit`, and `Bash` are
|
|
20
|
+
intentionally not in the Phase 83 harness allowlist; attempting them
|
|
21
|
+
will cause a ToolSearch loop that deadlocks the turn.
|
|
22
|
+
|
|
23
|
+
The `Draft path:` line in the template below is a DOCUMENTATION
|
|
24
|
+
reference only — it tells the operator where a persisted copy would go
|
|
25
|
+
if minted into a campaign later. Do NOT interpret it as an instruction
|
|
26
|
+
to write the file yourself during Phase 83.
|
|
27
|
+
|
|
28
|
+
# [Client] - [Campaign Slug]
|
|
29
|
+
|
|
30
|
+
Status: brief-v1
|
|
31
|
+
|
|
32
|
+
## Campaign Direction
|
|
33
|
+
|
|
34
|
+
[4-6 short lines or bullets. This is the fast-read summary the customer sees
|
|
35
|
+
first. Make the campaign obvious quickly: who we are going after, what the
|
|
36
|
+
offer is, why it should work, and what must be true before we launch. Do not
|
|
37
|
+
prescribe message structure, opener order, or final copy here.]
|
|
38
|
+
|
|
39
|
+
Draft path:
|
|
40
|
+
`.sellable/create-campaign-brief/drafts/{workspace-slug}/{campaign-slug}/brief.md`
|
|
41
|
+
|
|
42
|
+
## Product
|
|
43
|
+
|
|
44
|
+
[3-4 tight bullets. Prioritize what the buyer needs to understand. Avoid a long
|
|
45
|
+
product essay or exhaustive vendor/integration laundry lists. If specific tools
|
|
46
|
+
matter, name only the few highest-signal sourced examples.]
|
|
47
|
+
|
|
48
|
+
## Campaign Thesis
|
|
49
|
+
|
|
50
|
+
High-level summary for the customer:
|
|
51
|
+
|
|
52
|
+
- Target: [who we think we should go after first]
|
|
53
|
+
- Offer / ask: [what we think the first note should ask for]
|
|
54
|
+
- Why this might work: [the main reason this angle should land]
|
|
55
|
+
- Main risk to validate: [what could make this thesis weaker]
|
|
56
|
+
- This is still a thesis, not a validated launch plan.
|
|
57
|
+
|
|
58
|
+
## Sender
|
|
59
|
+
|
|
60
|
+
- Name:
|
|
61
|
+
- Role:
|
|
62
|
+
- Relevant credibility: [only buyer-impressive credibility; prioritize what
|
|
63
|
+
would most increase confidence in the core claim: customer proof, operator
|
|
64
|
+
history, investor/backing, proprietary tech, or other category-specific edge]
|
|
65
|
+
- Voice notes:
|
|
66
|
+
|
|
67
|
+
## ICP / Targeting
|
|
68
|
+
|
|
69
|
+
Rough hypothesis only. The lead validation agent will prove or change this with
|
|
70
|
+
provider samples later.
|
|
71
|
+
|
|
72
|
+
### Who Is a Fit
|
|
73
|
+
|
|
74
|
+
| Dimension | Details |
|
|
75
|
+
| ----------------------- | ------- |
|
|
76
|
+
| Company demographics | |
|
|
77
|
+
| Company size / maturity | |
|
|
78
|
+
| Roles / titles | |
|
|
79
|
+
| Title synonyms | |
|
|
80
|
+
| Geography | |
|
|
81
|
+
| Signals / triggers | |
|
|
82
|
+
| Volume constraints | |
|
|
83
|
+
|
|
84
|
+
### Anti-Buyer / Exclusions
|
|
85
|
+
|
|
86
|
+
| Exclusion | Reason |
|
|
87
|
+
| --------- | ------ |
|
|
88
|
+
| | |
|
|
89
|
+
|
|
90
|
+
## Buyer Pain / Why This Might Work
|
|
91
|
+
|
|
92
|
+
[2-4 crisp bullets. Keep this customer-facing and concrete, not a long strategy
|
|
93
|
+
memo.]
|
|
94
|
+
|
|
95
|
+
## Offer Strategy
|
|
96
|
+
|
|
97
|
+
- Target buyer:
|
|
98
|
+
- Offer:
|
|
99
|
+
- Likely source path: [Signals first for reply-likelihood when the TAM is active on LinkedIn; Sales Nav second for tighter role/company targeting; Prospeo fallback for scale or account/domain expansion]
|
|
100
|
+
- Why it might work:
|
|
101
|
+
- Main risk:
|
|
102
|
+
|
|
103
|
+
## Social Proof / Safe Claims
|
|
104
|
+
|
|
105
|
+
### Approved Claims
|
|
106
|
+
|
|
107
|
+
- [Claim] - Source: [source]
|
|
108
|
+
- [Keep this short: list the 1-3 most compelling proof points for this buyer,
|
|
109
|
+
not just the safest generic proof. These can be customer proof,
|
|
110
|
+
founder/operator credibility, investor/backing proof, proprietary tech, or a
|
|
111
|
+
category-specific edge.]
|
|
112
|
+
|
|
113
|
+
### Proof Gaps
|
|
114
|
+
|
|
115
|
+
- [Gap or question]
|
|
116
|
+
- [Keep this concise. Name the real off-limits items without turning the
|
|
117
|
+
section into a long risk memo.]
|
|
118
|
+
|
|
119
|
+
If proof hierarchy is unclear after research, ask the founder:
|
|
120
|
+
`What would make this buyer more confident the main claim is true?`
|
|
121
|
+
|
|
122
|
+
## Differentiators
|
|
123
|
+
|
|
124
|
+
- [Differentiator grounded in source material]
|
|
125
|
+
|
|
126
|
+
## Message Thesis
|
|
127
|
+
|
|
128
|
+
- Default channel: InMail
|
|
129
|
+
- Buyer outcome to make obvious: [what the recipient should want, in buyer
|
|
130
|
+
language, not a draft opener]
|
|
131
|
+
- Proof that can increase confidence: [pulled from §7 Social Proof / Safe
|
|
132
|
+
Claims; reference by name, not by writing the exact sentence]
|
|
133
|
+
- Claims / framing to avoid: [specific don'ts tied to the safe-claims boundary,
|
|
134
|
+
e.g. "no SOC 2 certified claim", "no named-customer proof", "no
|
|
135
|
+
replace-human framing"]
|
|
136
|
+
- Personalization data to validate later: [signal categories expected from the
|
|
137
|
+
lead source, only if likely detectable]
|
|
138
|
+
|
|
139
|
+
Do not present inferred stack/tool mixes as settled facts unless the website or
|
|
140
|
+
founder explicitly confirmed them. If a stack shape is only a hypothesis, keep
|
|
141
|
+
it in validation language (`footprint to test`, `signal to confirm`) rather
|
|
142
|
+
than `they already run X + Y + Z`.
|
|
143
|
+
|
|
144
|
+
This section is an INPUT BOUNDARY for Phase 84, not a message sketch. Do NOT
|
|
145
|
+
include structural rules ("no greeting", "pain-first", "founder-line-once"),
|
|
146
|
+
opener instructions ("lead with X"), specific sample wording, token-level
|
|
147
|
+
directives, banned phrase catalogs, or internal archive references. Those
|
|
148
|
+
belong in the generator's pass against gold references and substance filters,
|
|
149
|
+
not in the brief.
|
|
150
|
+
|
|
151
|
+
Do not write final sequences in Phase 83.
|
|
152
|
+
|
|
153
|
+
## Personalization Inputs To Validate
|
|
154
|
+
|
|
155
|
+
Keep this section short. It is mainly an internal validation handoff for the
|
|
156
|
+
next step, not a section the customer needs to study in detail.
|
|
157
|
+
|
|
158
|
+
- Lead fields we probably need:
|
|
159
|
+
- Prospect signal we probably need:
|
|
160
|
+
- Fallback if signal is missing:
|
|
161
|
+
|
|
162
|
+
Use 0-3 bullets max. If there is nothing special to note yet, say:
|
|
163
|
+
`None yet — validate from the first lead sample.`
|
|
164
|
+
|
|
165
|
+
## Next Steps
|
|
166
|
+
|
|
167
|
+
Keep this section simple and action-oriented. The customer should understand the
|
|
168
|
+
sequence without needing to know internal agent names.
|
|
169
|
+
|
|
170
|
+
### 1. Find Leads
|
|
171
|
+
|
|
172
|
+
What we do next: run a real search and review a sample of leads to confirm that
|
|
173
|
+
the people matching this ICP actually look like the right buyers.
|
|
174
|
+
|
|
175
|
+
Keep this focused on:
|
|
176
|
+
|
|
177
|
+
- likely provider to start with
|
|
178
|
+
- rough filters to test
|
|
179
|
+
- what needs confirmation from the sample
|
|
180
|
+
|
|
181
|
+
### 2. Tighten Filter
|
|
182
|
+
|
|
183
|
+
What we do after the sample: keep the patterns that show up in good leads,
|
|
184
|
+
remove the patterns that show up in bad leads, and lock the final keep/exclude
|
|
185
|
+
rules before messaging.
|
|
186
|
+
|
|
187
|
+
Do not create `rubric.json` in Phase 83. Do not over-specify scoring weights or
|
|
188
|
+
pass-rate math before the lead sample exists.
|
|
189
|
+
Bias toward necessary filter rules only. Optional supporting rules should be
|
|
190
|
+
rare and usually limited to one if they clearly help later messaging.
|
|
191
|
+
|
|
192
|
+
### 3. Draft Message
|
|
193
|
+
|
|
194
|
+
What we do last: write the actual InMail only after we know who the real buyers
|
|
195
|
+
are, what signals are actually detectable, and which proof is safe to use.
|
|
196
|
+
|
|
197
|
+
Do not write final InMail variants in Phase 83. This step happens after the
|
|
198
|
+
first lead sample and filter tightening.
|
|
199
|
+
|
|
200
|
+
## Campaign Notes
|
|
201
|
+
|
|
202
|
+
- Assumptions:
|
|
203
|
+
- Blocking gaps:
|
|
204
|
+
- Internal reference tradeoffs: [operator-only note; do not include customer names
|
|
205
|
+
from the reference bank in customer-facing summaries]
|
|
206
|
+
|
|
207
|
+
Overall tone: crisp customer-facing operator note, not a long strategy memo.
|
|
208
|
+
|
|
209
|
+
## Sources Used
|
|
210
|
+
|
|
211
|
+
- LinkedIn URL: [url or "not provided"]
|
|
212
|
+
- Sender data: [sender profile / role / voice source, or "not provided"]
|
|
213
|
+
- Website: [customer-owned website or product page, only if looked up]
|
|
214
|
+
- Materials: [transcript / proposal / notes / deck / prior messages]
|
|
215
|
+
- Research: [customer-owned profile / company / domain / product notes only]
|
|
216
|
+
|
|
217
|
+
Do not list internal templates, Sellable client examples, Phase 75 files, or
|
|
218
|
+
other customers in this section. It is a customer-facing bibliography and
|
|
219
|
+
belongs at the end of the brief so provenance is preserved without leading the
|
|
220
|
+
reading experience.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Campaign Idea Options
|
|
2
|
+
|
|
3
|
+
Campaign directions are target-plus-offer decisions. They should help the
|
|
4
|
+
operator choose what to run, not narrate what the model thinks.
|
|
5
|
+
|
|
6
|
+
## Option Shape
|
|
7
|
+
|
|
8
|
+
Each option must include:
|
|
9
|
+
|
|
10
|
+
- target buyer
|
|
11
|
+
- offer
|
|
12
|
+
- source hypothesis
|
|
13
|
+
- why it might work
|
|
14
|
+
- main risk
|
|
15
|
+
|
|
16
|
+
Use direct framing:
|
|
17
|
+
|
|
18
|
+
`Should we target [buyer] with [offer]?`
|
|
19
|
+
|
|
20
|
+
## How Many Options
|
|
21
|
+
|
|
22
|
+
- Show 1 option when the direction is obvious.
|
|
23
|
+
- Show 2-3 options when there are real tradeoffs.
|
|
24
|
+
- If the operator already has an idea, validate target and offer shape instead
|
|
25
|
+
of forcing AI-generated options.
|
|
26
|
+
|
|
27
|
+
## Quality Bar
|
|
28
|
+
|
|
29
|
+
Good options are concrete enough to source and write against. Weak options hide
|
|
30
|
+
behind generic wording like "decision makers" or "book a demo".
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Copy Appendix Template
|
|
2
|
+
|
|
3
|
+
Use this appendix only when the brief would benefit from explicit downstream
|
|
4
|
+
copy guidance.
|
|
5
|
+
|
|
6
|
+
Keep it bounded. This is not the place for a giant bank of full message
|
|
7
|
+
variants.
|
|
8
|
+
|
|
9
|
+
## Messaging Direction
|
|
10
|
+
|
|
11
|
+
- Primary angle: [what should lead]
|
|
12
|
+
- Secondary angle: [what can support]
|
|
13
|
+
- What the buyer is tired of hearing: [short note]
|
|
14
|
+
- Why this might land: [short note]
|
|
15
|
+
|
|
16
|
+
## Offer and CTA Guidance
|
|
17
|
+
|
|
18
|
+
- Preferred offer shape: [low-friction / A-B CTA / other]
|
|
19
|
+
- Better CTA pattern: [example direction]
|
|
20
|
+
- CTA to avoid: [example direction]
|
|
21
|
+
|
|
22
|
+
## Opener Guidance
|
|
23
|
+
|
|
24
|
+
Good openings:
|
|
25
|
+
|
|
26
|
+
- [Example opener direction]
|
|
27
|
+
- [Example opener direction]
|
|
28
|
+
|
|
29
|
+
Avoid:
|
|
30
|
+
|
|
31
|
+
- [Bad opener pattern]
|
|
32
|
+
- [Bad opener pattern]
|
|
33
|
+
|
|
34
|
+
## Token Fill Guidance
|
|
35
|
+
|
|
36
|
+
Good token fill:
|
|
37
|
+
|
|
38
|
+
- [Short example]
|
|
39
|
+
|
|
40
|
+
Bad token fill:
|
|
41
|
+
|
|
42
|
+
- [Short example]
|
|
43
|
+
|
|
44
|
+
## Anti-Patterns
|
|
45
|
+
|
|
46
|
+
- [Pattern to avoid]
|
|
47
|
+
- [Pattern to avoid]
|
|
48
|
+
- [Pattern to avoid]
|
|
49
|
+
|
|
50
|
+
## Approved Direction Examples
|
|
51
|
+
|
|
52
|
+
Limit to 2-3 short direction examples max.
|
|
53
|
+
|
|
54
|
+
1. [Direction example]
|
|
55
|
+
2. [Direction example]
|
|
56
|
+
|
|
57
|
+
## Appendix Boundary
|
|
58
|
+
|
|
59
|
+
- no more than 2-3 direction examples
|
|
60
|
+
- no giant variant ladders
|
|
61
|
+
- no invented proof
|
|
62
|
+
- keep every section tied back to the brief
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Draft Lifecycle
|
|
2
|
+
|
|
3
|
+
Phase 83 writes one Markdown file:
|
|
4
|
+
|
|
5
|
+
`.sellable/create-campaign-brief/drafts/{workspace-slug}/{campaign-slug}/brief.md`
|
|
6
|
+
|
|
7
|
+
## Rules
|
|
8
|
+
|
|
9
|
+
- Markdown only.
|
|
10
|
+
- No YAML frontmatter.
|
|
11
|
+
- No metadata sidecar in Phase 83.
|
|
12
|
+
- If a draft already exists, ask whether to resume, regenerate, or create a new
|
|
13
|
+
slug.
|
|
14
|
+
- Never overwrite silently.
|
|
15
|
+
- Stop after writing `brief.md v1`.
|
|
16
|
+
- Report path, selected references, assumptions, and remaining validation gaps.
|
|
17
|
+
|
|
18
|
+
## Slugs
|
|
19
|
+
|
|
20
|
+
- `workspace-slug`: stable workspace or customer slug.
|
|
21
|
+
- `campaign-slug`: short descriptive campaign slug.
|
|
22
|
+
|
|
23
|
+
Use lowercase ASCII, hyphens, and no spaces.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"source": "Phase 75 canonical campaign brief and copy calibration corpus",
|
|
4
|
+
"primaryRuntimeClients": [
|
|
5
|
+
"sellable.dev",
|
|
6
|
+
"Hey Digital",
|
|
7
|
+
"Galley",
|
|
8
|
+
"Clover",
|
|
9
|
+
"Persona",
|
|
10
|
+
"Superpower"
|
|
11
|
+
],
|
|
12
|
+
"secondaryOnlyClients": ["Gelee", "Revvix", "superposition", "westpark villas"],
|
|
13
|
+
"acceptanceFixtureOnlyClients": ["Amplify Security"],
|
|
14
|
+
"examples": [
|
|
15
|
+
{
|
|
16
|
+
"client": "sellable.dev",
|
|
17
|
+
"slug": "sellable-dev",
|
|
18
|
+
"file": "briefs/sellable-dev.md",
|
|
19
|
+
"referenceModes": ["exact narrative", "proof discipline", "ai-native gtm"],
|
|
20
|
+
"runtime": "primary"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"client": "Hey Digital",
|
|
24
|
+
"slug": "hey-digital",
|
|
25
|
+
"file": "briefs/hey-digital.md",
|
|
26
|
+
"referenceModes": ["scenario library", "paid growth", "plain language"],
|
|
27
|
+
"runtime": "primary"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"client": "Galley",
|
|
31
|
+
"slug": "galley",
|
|
32
|
+
"file": "briefs/galley.md",
|
|
33
|
+
"referenceModes": ["event campaign", "live demo", "urgency"],
|
|
34
|
+
"runtime": "primary"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"client": "Clover",
|
|
38
|
+
"slug": "clover",
|
|
39
|
+
"file": "briefs/clover.md",
|
|
40
|
+
"referenceModes": ["asset-led offer", "report-led offer", "signal discovery"],
|
|
41
|
+
"runtime": "primary"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"client": "Gelee",
|
|
45
|
+
"slug": "gelee",
|
|
46
|
+
"file": "briefs/gelee.md",
|
|
47
|
+
"referenceModes": ["personalization ladder", "founder-led linkedin"],
|
|
48
|
+
"runtime": "secondary"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"client": "Persona",
|
|
52
|
+
"slug": "persona",
|
|
53
|
+
"file": "briefs/persona.md",
|
|
54
|
+
"referenceModes": ["scenario library", "content roadmap", "broad industry guardrails"],
|
|
55
|
+
"runtime": "primary"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"client": "Revvix",
|
|
59
|
+
"slug": "revvix",
|
|
60
|
+
"file": "briefs/revvix.md",
|
|
61
|
+
"referenceModes": ["event campaign", "simple urgency", "security buyer"],
|
|
62
|
+
"runtime": "secondary",
|
|
63
|
+
"withholdForFixtures": ["revvix"]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"client": "Superpower",
|
|
67
|
+
"slug": "superpower",
|
|
68
|
+
"file": "briefs/superpower.md",
|
|
69
|
+
"referenceModes": ["plain pain-first", "benefits leader", "preventive health"],
|
|
70
|
+
"runtime": "primary",
|
|
71
|
+
"withholdForFixtures": ["superpower"]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"client": "superposition",
|
|
75
|
+
"slug": "superposition",
|
|
76
|
+
"file": "briefs/superposition.md",
|
|
77
|
+
"referenceModes": ["sender narrative", "proof discipline", "exact message lock"],
|
|
78
|
+
"runtime": "secondary",
|
|
79
|
+
"withholdForFixtures": ["superposition"]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"client": "westpark villas",
|
|
83
|
+
"slug": "westpark-villas",
|
|
84
|
+
"file": "briefs/westpark-villas.md",
|
|
85
|
+
"referenceModes": ["localized language", "real estate"],
|
|
86
|
+
"runtime": "secondary"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Clover Campaign Brief + Rubric Archive
|
|
2
|
+
|
|
3
|
+
Source: [75-ALL-CLIENT-CAMPAIGN-CORPUS.json](/Users/christianreyes/dev/dittto-fresh/web/.planning/phases/75-canonical-campaign-brief-and-copy-calibration/75-ALL-CLIENT-CAMPAIGN-CORPUS.json)
|
|
4
|
+
|
|
5
|
+
Campaigns captured: 4
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Red Rover — Signal Discovery (Campaign 1)
|
|
10
|
+
|
|
11
|
+
- Sent: 234
|
|
12
|
+
- Replied: 28
|
|
13
|
+
- Accepted: 139
|
|
14
|
+
- Updated: 2026-02-27T21:13:26.119Z
|
|
15
|
+
|
|
16
|
+
### Campaign Brief
|
|
17
|
+
|
|
18
|
+
# Red Rover — Signal Discovery Campaign Brief
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
**Client:** RedRover (by Clover Labs)
|
|
23
|
+
**Channel:** LinkedIn InMail
|
|
24
|
+
**Senders:** Matt Espinoza, Ryan Kaufman, Leo
|
|
25
|
+
**Provider:** Signal Discovery — people engaging with Reddit marketing / organic growth content on LinkedIn
|
|
26
|
+
**Goal:** Establish baseline — 300 sends, validate reply rate
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## ICP
|
|
31
|
+
|
|
32
|
+
**Who IS a fit:**
|
|
33
|
+
|
|
34
|
+
- Titles: Anyone in marketing, growth, content, SEO, social, influencer, demand gen, or distribution — any seniority. Also Founders, CEOs, CMOs.
|
|
35
|
+
- Companies: PLG SaaS, AI tools, dev tools, productivity apps, ecommerce, crypto, B2B SaaS, mobile apps
|
|
36
|
+
- Size: 10–500 employees
|
|
37
|
+
- Traffic: 10K+ monthly website visitors (baseline signal)
|
|
38
|
+
- Signals: pricing page on site (not "book a call")
|
|
39
|
+
|
|
40
|
+
**Who is NOT a fit:**
|
|
41
|
+
|
|
42
|
+
- Agencies
|
|
43
|
+
- Local services or physical-only businesses
|
|
44
|
+
- Pre-revenue startups
|
|
45
|
+
- Roles in engineering, finance, legal, HR, ops, or support
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Offer
|
|
50
|
+
|
|
51
|
+
Free personalized Reddit Insight Report — shows the prospect exactly how many Reddit threads and buyer responses exist in their category. The report does the heavy selling. The message just earns the reply.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Credibility / Social Proof
|
|
56
|
+
|
|
57
|
+
- 10,000+ warmed-up accounts (built-in safety logic — no bans)
|
|
58
|
+
- Customers generating millions of Reddit impressions/month
|
|
59
|
+
- Client names under NDA — privacy is a feature
|
|
60
|
+
- 15M Reddit impressions/month across all customers
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Active Campaign: Variant 1A — Thread-Specific (300 sends baseline)
|
|
65
|
+
|
|
66
|
+
Conrad-confirmed rough numbers: **13 and 33** base (ranges: 11–18 for conversations // 26–39 for responses)
|
|
67
|
+
|
|
68
|
+
**Number guidance:** Pick non-round numbers within the ranges. They should feel pulled from a real data sweep, not invented. Examples: 14/31, 11/28, 16/34. Avoid even tens (10, 20, 30) and too-perfect pairs.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### Keyword Selection Logic (for message generation)
|
|
73
|
+
|
|
74
|
+
The `{{category/keyword}}` field must be filled with the product category the prospect would use to describe their own company — the space they think they're in, not the company's full product name or tagline.
|
|
75
|
+
|
|
76
|
+
**Step-by-step process to pick the keyword:**
|
|
77
|
+
|
|
78
|
+
1. Look at the prospect's company — what does their product do?
|
|
79
|
+
2. Ask: "What product category would this company say they're in? If someone asked the prospect 'what space are you in?' what would they answer?"
|
|
80
|
+
3. Use that category as the keyword. It should be 2–4 words, plain and descriptive.
|
|
81
|
+
4. If unsure between two options, pick the shorter, more common one.
|
|
82
|
+
|
|
83
|
+
**Rules:**
|
|
84
|
+
|
|
85
|
+
- Use the category the prospect self-identifies with, not the company's marketing tagline
|
|
86
|
+
- Avoid product names, branded terms, or overly specific niche descriptors
|
|
87
|
+
- Keep it to 2–4 words — short enough to fit naturally in the sentence
|
|
88
|
+
- It must make sense in: "we tracked every reddit discussion around **[keyword]**"
|
|
89
|
+
- And in: "the few million viewers already searching for that on reddit"
|
|
90
|
+
|
|
91
|
+
**Examples:**
|
|
92
|
+
|
|
93
|
+
| Company | ❌ Too narrow / branded | ✅ Self-identified category |
|
|
94
|
+
| ---------- | ------------------------------- | --------------------------- |
|
|
95
|
+
| Userpilot | product adoption platform | user onboarding |
|
|
96
|
+
| Copy.ai | AI content generation platform | AI writing |
|
|
97
|
+
| Getfluence | sponsored content marketplace | link building |
|
|
98
|
+
| Deel | global employer of record | hiring internationally |
|
|
99
|
+
| Notion | connected workspace | team wiki |
|
|
100
|
+
| Webflow | visual web development platform | no-code website builder |
|
|
101
|
+
| Mixpanel | product analytics platform | user behavior analytics |
|
|
102
|
+
| Intercom | customer messaging platform | live chat for SaaS |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
### Message Template
|
|
107
|
+
|
|
108
|
+
**Subject:** {{category}} on reddit
|
|
109
|
+
|
|
110
|
+
hey {{firstName}},
|
|
111
|
+
|
|
112
|
+
we tracked every reddit discussion around {{category/keyword}} and found {{X}} conversations and {{Y}} responses where people are actively comparing tools or asking for recommendations.
|
|
113
|
+
|
|
114
|
+
{{companyName}} isn't showing up in any of them yet so we put the threads into a short report for you.
|
|
115
|
+
|
|
116
|
+
thought it could help to see where you can convert more customers from the few million viewers already searching for that on reddit.
|
|
117
|
+
|
|
118
|
+
can I send it over?
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Message Examples (filled in)
|
|
123
|
+
|
|
124
|
+
**Capitalization rules:**
|
|
125
|
+
|
|
126
|
+
- First name: all lowercase ("hey christian," not "hey Christian,")
|
|
127
|
+
- Company name: exactly as it appears on their website ("Getfluence" not "getfluence", "Copy.ai" not "copy.ai") — proper branding makes it feel looked-up, not templated
|
|
128
|
+
- Category/keyword: all lowercase
|
|
129
|
+
- Subject line: all lowercase
|
|
130
|
+
|
|
131
|
+
**Example 1 — link building (Getfluence):**
|
|
132
|
+
|
|
133
|
+
> Subject: link building on reddit
|
|
134
|
+
>
|
|
135
|
+
> hey christian,
|
|
136
|
+
>
|
|
137
|
+
> we tracked every reddit discussion around link building and found 13 conversations and 28 responses where people are actively comparing tools or asking for recommendations.
|
|
138
|
+
>
|
|
139
|
+
> Getfluence isn't showing up in any of them yet so we put the threads into a short report for you.
|
|
140
|
+
>
|
|
141
|
+
> thought it could help to see where you can convert more customers from the few million viewers already searching for that on reddit.
|
|
142
|
+
>
|
|
143
|
+
> can I send it over?
|
|
144
|
+
|
|
145
|
+
**Example 2 — user onboarding (Userpilot):**
|
|
146
|
+
|
|
147
|
+
> Subject: user onboarding on reddit
|
|
148
|
+
>
|
|
149
|
+
> hey khanh,
|
|
150
|
+
>
|
|
151
|
+
> we tracked every reddit discussion around user onboarding and found 14 conversations and 31 responses where people are actively comparing tools or asking for recommendations.
|
|
152
|
+
>
|
|
153
|
+
> Userpilot isn't showing up in any of them yet so we put the threads into a short report for you.
|
|
154
|
+
>
|
|
155
|
+
> thought it could help to see where you can convert more customers from the few million viewers already searching for that on reddit.
|
|
156
|
+
>
|
|
157
|
+
> can I send it over?
|
|
158
|
+
|
|
159
|
+
**Example 3 — AI writing (Copy.ai):**
|
|
160
|
+
|
|
161
|
+
> Subject: AI writing on reddit
|
|
162
|
+
>
|
|
163
|
+
> hey james,
|
|
164
|
+
>
|
|
165
|
+
> we tracked every reddit discussion around AI writing and found 11 conversations and 27 responses where people are actively comparing tools or asking for recommendations.
|
|
166
|
+
>
|
|
167
|
+
> Copy.ai isn't showing up in any of them yet so we put the threads into a short report for you.
|
|
168
|
+
>
|
|
169
|
+
> thought it could help to see where you can convert more customers from the few million viewers already searching for that on reddit.
|
|
170
|
+
>
|
|
171
|
+
> can I send it over?
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Copy Rules
|
|
176
|
+
|
|
177
|
+
- **First name: always lowercase** — "hey christian," not "hey Christian." Capitalizing the first name is the #1 tell it's a template.
|
|
178
|
+
- **Company name: exactly as it appears on their website** — look it up. "Getfluence" not "getfluence". "Copy.ai" not "copy.ai". Proper branding signals you actually looked them up.
|
|
179
|
+
- **Category/keyword: always lowercase**
|
|
180
|
+
- **Subject line: always lowercase**
|
|
181
|
+
- **Use the prospect's self-identified product category** — what space they think they're in, not their full product name or tagline. See Keyword Selection Logic above.
|
|
182
|
+
- Do NOT repeat the category keyword in the closing line — use "that" instead. Repeating the exact phrase twice reads like a mail merge.
|
|
183
|
+
- "can I send it over?" is always its own final line.
|
|
184
|
+
- No "quick question," "quick aside," or opener that sounds like a sales email template.
|
|
185
|
+
- Read every message out loud before approving — if it sounds rehearsed, rewrite it.
|
|
186
|
+
- Numbers should feel scraped, not invented — avoid round numbers (10, 20, 30).
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Next Campaigns (after baseline)
|
|
191
|
+
|
|
192
|
+
| Order | Campaign | Why |
|
|
193
|
+
| --------------- | ----------------------------- | -------------------------------------------------------------------------- |
|
|
194
|
+
| Second (week 2) | Campaign 3 — Impression-Led | Proven structure from Conrad's Variant 1. Big number hook. A/B against 1A. |
|
|
195
|
+
| Third | Campaign 2 — Peer Observation | New untested angle. Run after Campaigns 1 and 3 establish baseline. |
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Reply Handling — Sharing the Report
|
|
200
|
+
|
|
201
|
+
When a prospect replies positively to the cold message (e.g. "yeah sure", "send it over", "I'd like to learn more", "that would be helpful"), your reply MUST include the personalized Reddit Insight Report link.
|
|
202
|
+
|
|
203
|
+
### Where to find the report URL
|
|
204
|
+
|
|
205
|
+
The report URL is in the row data under **"Reddit Insight Report"** → **reportUrl**. It looks like:
|
|
206
|
+
`https://app.tryredrover.com/insight-report/{uuid}`
|
|
207
|
+
|
|
208
|
+
**You MUST include this exact URL in your reply.** Do not say "sending it now" or "I'll send it over" without actually including the link. The prospect expects to receive the report in the reply itself.
|
|
209
|
+
|
|
210
|
+
### Reply template (when prospect says yes on LinkedIn)
|
|
211
|
+
|
|
212
|
+
hey {{firstName}},
|
|
213
|
+
|
|
214
|
+
here's the personalized reddit insights report for {{companyName}}:
|
|
215
|
+
{{reportUrl from Reddit Insight Report column in row data}}
|
|
216
|
+
|
|
217
|
+
it breaks down the high-intent threads where people are comparing {{category}} tools, who's getting mentioned, and where {{companyName}} could show up naturally.
|
|
218
|
+
|
|
219
|
+
happy to walk through the top opportunities — open to a quick 15-minute chat?
|
|
220
|
+
|
|
221
|
+
### Rules for the report-sharing reply
|
|
222
|
+
|
|
223
|
+
- **Always include the full report URL** — find it in the row data under "Reddit Insight Report" → reportUrl
|