@sellable/mcp 0.1.212 → 0.1.213

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 (35) hide show
  1. package/README.md +7 -7
  2. package/agents/post-find-leads-message-scout.md +33 -13
  3. package/dist/engage-memory.js +0 -5
  4. package/dist/identity-memory.js +0 -4
  5. package/dist/tools/engage-memory.js +2 -2
  6. package/dist/tools/leads.js +7 -3
  7. package/dist/tools/prompts.js +3 -2
  8. package/package.json +1 -1
  9. package/skills/create-campaign/context/learnings.md +1 -1
  10. package/skills/create-campaign/references/brief-template.md +2 -2
  11. package/skills/create-campaign-brief/references/brief-template.md +2 -2
  12. package/skills/create-campaign-brief/references/draft-lifecycle.md +1 -1
  13. package/skills/create-campaign-brief/references/examples/briefs/gelee.md +2 -2
  14. package/skills/create-campaign-brief/references/examples/briefs/superpower.md +41 -28
  15. package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +12 -9
  16. package/skills/create-campaign-v2/SKILL.md +4 -0
  17. package/skills/create-campaign-v2/references/ai-tells.md +51 -16
  18. package/skills/create-campaign-v2/references/approval-gate-framing.md +1 -1
  19. package/skills/create-campaign-v2/references/gold-standard-message-examples.md +30 -16
  20. package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +36 -1
  21. package/skills/create-campaign-v2/references/gold-standard-runtime-message-pack.md +252 -0
  22. package/skills/create-campaign-v2/references/thomas-revision-filters.md +17 -7
  23. package/skills/create-campaign-v2/references/validation-criteria.md +8 -5
  24. package/skills/create-campaign-v2-validation/SKILL.md +17 -1
  25. package/skills/create-post/SKILL.md +27 -27
  26. package/skills/engage/SKILL.md +12 -12
  27. package/skills/engage/core/README.md +14 -14
  28. package/skills/find-leads/SKILL.md +1 -1
  29. package/skills/generate-messages/SKILL.md +215 -90
  30. package/skills/interview/SKILL.md +24 -24
  31. package/skills/interview/references/legacy-linkedin-interview.md +12 -12
  32. package/skills/interview/references/reference-curation.md +4 -4
  33. package/skills/interview/references/voice-capture-method.md +1 -1
  34. package/skills/load-voice/SKILL.md +21 -25
  35. package/skills/research/SKILL.md +1 -1
@@ -22,6 +22,13 @@ Do not put active validation fixtures in this file as exact company-specific
22
22
  examples. The library should teach transferable winning motions, not leak the
23
23
  fixture answer into Phase 84.
24
24
 
25
+ For line-level runtime inspiration, prefer
26
+ `mcp/sellable/skills/create-campaign-v2/references/gold-standard-runtime-message-pack.md`.
27
+ That file contains the real sellable.dev, Hey Digital, Persona, Galley, and
28
+ Clover examples. Use this file for strategy skeletons and guardrails. If an old
29
+ archive line conflicts with the runtime pack, the runtime pack wins; do not let
30
+ synthetic or retired opener phrasing outrank the real examples.
31
+
25
32
  ## Example 1: Revvix / Spektion Event-Led Security
26
33
 
27
34
  Use when the brief has:
@@ -227,21 +234,23 @@ Use when the brief has:
227
234
  - signal-led topic engagement
228
235
  - benefits / rewards / wellness buyers
229
236
  - proof-heavy preventive-health positioning
237
+ - a weak engagement signal that should be framed as a low-certainty relevance
238
+ bridge, not buyer intent
230
239
 
231
240
  Template shape:
232
241
 
233
242
  ```text
234
243
  hey {{first name}},
235
244
 
236
- saw you were active around some {{topic}} stuff recently and figured this might actually be relevant
245
+ saw you in a few conversations around {{topic}}, so hope this is relevant.
237
246
 
238
- any chance you're exploring early detection or preventive health programs at {{company}}?
247
+ if preventive health is anywhere near the benefits plan at {{company}}, Superpower may be worth a look.
239
248
 
240
- we screen for 1,000+ conditions from a single blood draw and surface risks before they ever become claims.
249
+ it screens for 1,000+ conditions from a single blood draw and surfaces risks before they become claims.
241
250
 
242
- basically your team gets to see what's coming instead of just reacting to it
251
+ basically your team gets to see what's coming instead of only reacting to it.
243
252
 
244
- can I send over some more info?
253
+ should i send over the short version?
245
254
  ```
246
255
 
247
256
  Alternative proof-led variant:
@@ -249,24 +258,25 @@ Alternative proof-led variant:
249
258
  ```text
250
259
  hey {{first name}},
251
260
 
252
- saw you were active in some {{topic}} conversations recently and wanted to run something by you
261
+ saw you in a few conversations around {{topic}}, so hope this is relevant.
253
262
 
254
263
  most annual physicals test 15 biomarkers max.
255
264
 
256
- there's over 100 that actually matter and the gap between those two numbers is where the expensive claims tend to sit
265
+ Superpower looks at 100+ biomarkers and screens for 1,000+ conditions from one draw.
257
266
 
258
- teams like Lyft and Notion are already exploring this. one draw, 1,000+ conditions, $199 a person.
267
+ teams like Lyft and Notion are already exploring this at $199 a person.
259
268
 
260
- if your claims costs have been going up and you're not sure where it's coming from... that gap may be a good place to start looking
269
+ if preventive health is nowhere near your lane, ignore me.
261
270
 
262
- can I send over some more info?
271
+ should i send over the short version?
263
272
  ```
264
273
 
265
274
  Why it works:
266
275
 
267
- - signal comes first
276
+ - the topic signal is low-certainty and does not imply intent
277
+ - `hope this is relevant` is safer than `figured this might actually be relevant`
268
278
  - all lowercase matters
269
- - the CTA stays tiny
279
+ - the CTA stays tiny but specific enough to picture
270
280
  - this should not get polished into generic benefits copy
271
281
  - the proof sentence does real work; it is not optional filler
272
282
 
@@ -286,9 +296,7 @@ Template shape:
286
296
  ```text
287
297
  hey {{first_name}},
288
298
 
289
- reaching out because it looked like you were active around some {{signal_topic}} recently.
290
-
291
- figured this might actually be relevant.
299
+ saw you in a few conversations around {{signal_topic}}, so hopefully relevant.
292
300
 
293
301
  [product] does [simple one-line mechanism].
294
302
 
@@ -304,7 +312,7 @@ p.s. [short proof line]
304
312
  Why it works:
305
313
 
306
314
  - the signal is first and easy to understand
307
- - the "figured this might actually be relevant" line feels honest without
315
+ - the "hopefully relevant" line feels honest without
308
316
  over-explaining
309
317
  - the product is framed simply
310
318
  - "two options" makes the CTA easy to scan
@@ -339,12 +347,18 @@ Use these patterns to avoid generic asks like:
339
347
  - worth a conversation?
340
348
  - open to a call?
341
349
  - worth a look?
350
+ - open to compare notes?
342
351
 
343
352
  Prefer a binary or useful CTA when the brief supports it.
344
353
 
345
354
  CTA decision rule:
346
355
 
347
356
  - generate single-ask and A/B options before deciding
357
+ - preserve a brief-approved CTA intent when it can be made concrete, but avoid
358
+ the phrase `compare notes` in buyer-facing copy. If the brief uses that
359
+ shorthand, translate it into a concrete quick-call or working-session CTA,
360
+ e.g. `Open to a quick call on how your team might turn LinkedIn content into
361
+ pipeline?`
348
362
  - use A/B only when both choices are genuinely useful and supported
349
363
  - for unfamiliar categories, the CTA should name the buyer-specific preview in
350
364
  one short phrase, not list every screen or workflow
@@ -147,6 +147,41 @@ Shape:
147
147
  - bring the strongest proof
148
148
  - give a low-friction next step
149
149
 
150
+ ### Pattern 2B: Sender-Owned Post Acknowledgment
151
+
152
+ Use when the sender/client authored the source post and row data proves the
153
+ recipient reacted or commented.
154
+
155
+ Shape:
156
+
157
+ - light first-person acknowledgment of the post support
158
+ - soft relevance bridge from the post topic into the buyer context
159
+ - simple product framing or problem line
160
+ - low-friction next step
161
+ - every line must create the need for the next line; the message should read as
162
+ post support -> why the topic may matter now -> what the product/problem does
163
+ about that topic -> next step
164
+
165
+ Preferred bridge:
166
+
167
+ ```text
168
+ Appreciate you showing some love on my post about {{signal_topic}}.
169
+
170
+ Figured this might be relevant if {{channel_context}} is becoming more of a {{workflow_context}} for {{company_context}}.
171
+ ```
172
+
173
+ Why it works:
174
+
175
+ - acknowledges the real sender-owned source without sounding like an activity log
176
+ - avoids overclaiming that a reaction means buying intent
177
+ - gives the body a reason to move from the post topic into the product/problem
178
+ - prevents orphan product lines that sound pasted underneath a source opener
179
+
180
+ Avoid jumping directly from the acknowledgment into generic category pain like
181
+ `a lot of B2B teams...` or `most teams...`; that transition sounds assembled.
182
+ If the next line would still make sense after deleting the acknowledgment and
183
+ bridge, the source opener is not doing real work and should be rewritten or cut.
184
+
150
185
  ### Pattern 2A: Signal-Led Honest Operator
151
186
 
152
187
  Use this subpattern when the signal is real, the sender can sound direct and
@@ -164,7 +199,7 @@ Shape:
164
199
  Prefer:
165
200
 
166
201
  - lowercase or casual casing when the motion supports it
167
- - an honest line like "figured this might actually be relevant"
202
+ - an honest line like "hope this is relevant" or "so hopefully relevant"
168
203
  - two clean options instead of a long CTA paragraph
169
204
  - direct wording over polished marketing language
170
205
 
@@ -0,0 +1,252 @@
1
+ # Gold-Standard Runtime Message Pack
2
+
3
+ This is the canonical narrow message inspiration pack for `generate-messages`
4
+ and create-campaign-v2 message drafting.
5
+
6
+ Use this pack at runtime.
7
+ Use the raw archive only for curation and strategy skeletons.
8
+
9
+ ## Scope
10
+
11
+ Included as primary gold examples:
12
+
13
+ - `sellable.dev`
14
+ - `Hey Digital` — only `Predictable Paid Growth for B2B SaaS Leaders`
15
+ - `Galley`
16
+ - `Clover`
17
+ - `Persona`
18
+ - `Superpower` — domain-language reference only; use the cleaned low-certainty
19
+ opener, not retired engagement-source phrasing
20
+
21
+ Not included in runtime inspiration:
22
+
23
+ - `Amplify Security` — acceptance fixture only
24
+ - `Gelee` — useful proof stack, but the visible example lacks a strong CTA and
25
+ can teach landing-page proof without a reply path
26
+ - `Revvix` — useful event fixture, but the CTA is too soft for broad runtime
27
+ generation; use only when the campaign is explicitly event/logistics-led
28
+ - `superposition` — excellent exact-template lock for its own hiring motion, but
29
+ dangerous as broad inspiration because it teaches too much sender-first "I"
30
+ proof stacking; retrieve only for a job-post / founder-hiring motion
31
+ - `westpark villas`
32
+ - any archived old-client examples outside the active set
33
+
34
+ ## Runtime Rules
35
+
36
+ - Feed only endorsed examples into generation.
37
+ - Keep bad lines only if they are explicitly labeled `BAD` and paired with a `BETTER` version.
38
+ - Treat sellable.dev, Hey Digital, Persona, Galley, and Clover as the primary
39
+ line-level quality anchors. Superpower is useful for benefits/healthcare
40
+ mechanism language, but it must not outrank those examples on opener style.
41
+ - Default to one approved message in the generated brief unless the ICP is genuinely broad.
42
+ - A/B CTA is optional. Use it only when the second option is truly strong.
43
+ - If there is a great low-friction proof asset or case study, that is often the best Option B.
44
+ - Never shorten, summarize, or omit the CTA block from a gold example. If an
45
+ example is included at runtime, preserve the complete ask, option text, proof
46
+ asset, and URL lines because those are part of the motion.
47
+ - Use the runtime set as a quality bar, not a template fill. The best examples
48
+ win because they make the buyer care quickly: clear signal or current-state
49
+ observation, one concrete mechanism, one strongest true proof/asset, and a CTA
50
+ that offers a useful next step.
51
+ - Before copying any surface trait from a gold example, pass the buyer-role
52
+ test: as this exact buyer, is the first line relevant, is the product clear,
53
+ is the sender context useful rather than repetitive, is the proof the
54
+ strongest safe proof available, and is the CTA the lowest-friction true next
55
+ step? If not, choose a different shape.
56
+ - Do not copy weak surface traits from an example. Lowercase, ellipses,
57
+ parentheses, or a PS only matter when they serve the motion. The first
58
+ selection question is always: "what is the strongest true thing we can say to
59
+ this buyer?"
60
+ - Extract the job each gold line does before copying any shape. For each
61
+ candidate example, identify: buyer situation interrupted, why the buyer
62
+ replies, sender relevance, offer clarity move, mechanism clarity move, proof
63
+ role, CTA job, and surface traits not to copy blindly.
64
+ - Treat proof, CTA, and PS as elements to test. Customer/result proof belongs
65
+ in the body, CTA, PS, or nowhere depending on whether it improves clarity,
66
+ believability, or reply likelihood. Supported proof is not automatically good
67
+ copy.
68
+ - Metrics and time-window traction must pass the "so what?" test. Use them
69
+ when the buyer can immediately tell why the number matters. Otherwise
70
+ translate the number into the human claim it supports, test another
71
+ placement, or keep it internal.
72
+ - Every selected line needs a prospect-side "so what?" answer. If a line is
73
+ true but the buyer would not immediately care, it is not gold-standard copy
74
+ yet.
75
+ - A PS is rare. Use it only when it acts like a natural final aside: lowering
76
+ commitment, making a new-category preview easier to picture, verifying the
77
+ core claim with a wink, or carrying one short customer/result proof that
78
+ would bloat the body. Delete any PS that explains the pitch, patches
79
+ credibility, or says internal strategy out loud.
80
+
81
+ ## Included Message Examples
82
+
83
+ ### sellable.dev
84
+
85
+ Why included:
86
+
87
+ - strongest meta-demo CTA
88
+ - strong product line
89
+ - strong formatting control
90
+ - why it works: the signal is real, the self-aware parenthetical lowers the
91
+ "creepy signal" risk, the product line is short and bold, and the A/B CTA
92
+ offers either a direct working session or a proof asset
93
+
94
+ ```md
95
+ hey [name],
96
+
97
+ saw you raise your hand for claude + gtm (creepy to reach out based on that, i know) - but this felt too on the nose to ignore.
98
+
99
+ i'm building sellable, the only gtm platform that runs natively on claude code.
100
+
101
+ we're looking for design partners - and [PERSONALIZED REASON - their team size, role, or why they're a perfect fit].
102
+
103
+ two options:
104
+
105
+ a) 15-min call - i'll show you how you could book more meetings with [THEIR ICP - who they want to reach], and if you like it we launch a pilot right there
106
+
107
+ b) i send you the video of me using sellable to write and send this exact message to you (yes, it's that meta)
108
+
109
+ p.s. yes, this message was entirely written and sent via claude code 😊
110
+ ```
111
+
112
+ ### Hey Digital
113
+
114
+ Why included:
115
+
116
+ - strongest scenario-based structure
117
+ - good example of a strong case-study asset as Option B
118
+ - why it works: it starts from a business moment the buyer already understands,
119
+ uses one peer case study as proof, explains the operating lesson in plain
120
+ language, and makes the second CTA valuable even without a meeting
121
+
122
+ ```md
123
+ Hey Sarah,
124
+
125
+ Saw Acme just closed their Series B... usually that's when the board starts asking about paid channels.
126
+
127
+ We helped PostHog through that exact moment — they had a huge free user base but needed to figure out if paid could actually drive cloud conversions without burning budget. Ended up increasing cloud conversions 18.5%.
128
+
129
+ The thing that made it work was having a clear system from day one... not just launching ads and hoping.
130
+
131
+ two options:
132
+
133
+ a) 15-min call — I walk through how PostHog set it up and what would apply to Acme
134
+
135
+ b) I send you our B2B Ads Arsenal — ad templates, playbooks, and case studies from 200+ SaaS companies so you can dig in yourself
136
+ ```
137
+
138
+ ### Galley
139
+
140
+ Why included:
141
+
142
+ - strongest concrete operational offer
143
+ - easy to picture the output
144
+ - why it works: the pain is tactile, the mechanism is easy to visualize, and the
145
+ CTA lets the buyer test the product with their own real input instead of
146
+ committing to a generic call
147
+
148
+ ```md
149
+ hey {{first_name}},
150
+
151
+ this might not apply but if you're still rebuilding menu plans by hand every time a rotation changes, there's a way to skip that whole step.
152
+
153
+ we built a tool that takes a menu from whatever format it's in and just... builds the whole plan. recipes, purchasing, stations, all connected. no more starting from scratch every cycle.
154
+
155
+ works best for {{company_team_type}} running rotations across a bunch of locations where every menu change turns into hours of work nobody has time for.
156
+
157
+ easiest way to see if it's worth a look is to try it with one of your actual menus. happy to set that up or I can send a 2-min video instead.
158
+ ```
159
+
160
+ ### Clover
161
+
162
+ Why included:
163
+
164
+ - strongest asset-led report offer
165
+ - strongest reply-handling handoff
166
+ - why it works: the message leads with work already done for the buyer, makes
167
+ the missed opportunity concrete, and asks only for permission to send a useful
168
+ report
169
+
170
+ ```md
171
+ hey {{firstName}},
172
+
173
+ 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.
174
+
175
+ {{companyName}} isn't showing up in any of them yet so we put the threads into a short report for you.
176
+
177
+ thought it could help to see where you can convert more customers from the few million viewers already searching for that on reddit.
178
+
179
+ can I send it over?
180
+ ```
181
+
182
+ ### Persona
183
+
184
+ Why included:
185
+
186
+ - strongest proof framing
187
+ - strongest bad-vs-better token discipline
188
+ - why it works: the proof is not just "big number"; it explains why the number
189
+ matters by tying engagement to ICP alignment, then gives the buyer a choice
190
+ between a working session and a proof asset
191
+
192
+ ```md
193
+ hey {{first_name}},
194
+
195
+ not sure if this is relevant but i saw you engaging with some posts about {{founder_led_topic}} on linkedin and thought i'd send you a note.
196
+
197
+ for context, {{role_group}} i ghostwrite for generated over 350 million impressions in the past 12 months.
198
+
199
+ but what actually matters is that 85%+ of the engagement is ICP aligned. if there isn't ICP alignment, none of the virality or engagement matters.
200
+
201
+ two options:
202
+
203
+ a) in a 15 min call, i can show you a content roadmap and what i'd do for {{company}}
204
+
205
+ b) i can share a page showing how one founder hit 30 million impressions in a year and another went from 0 to 60k followers in 12 months
206
+ ```
207
+
208
+ Required token example from the same brief:
209
+
210
+ ```md
211
+ BAD: "founders in the generative ai space i ghostwrite for generated over 350 million impressions"
212
+ BETTER: "founders in tech i ghostwrite for generated over 350 million impressions"
213
+ ```
214
+
215
+ ### Superpower
216
+
217
+ Why included:
218
+
219
+ - simple language in a hard domain
220
+ - useful plain-language healthcare constraint example
221
+ - why it works: it uses a low-certainty signal bridge, explains the mechanism
222
+ in plain language, and keeps the ask tiny instead of forcing a call
223
+
224
+ ```md
225
+ Hey {{first_name}},
226
+
227
+ saw you in a few conversations around {{topic}}, so hope this is relevant.
228
+
229
+ if preventive health is anywhere near the benefits plan at {{company}}, Superpower may be worth a look.
230
+
231
+ it screens for 1,000+ conditions from a single blood draw and surfaces risks before they become claims.
232
+
233
+ basically your team gets to see what's coming instead of only reacting to it.
234
+
235
+ should i send over the short version?
236
+ ```
237
+
238
+ Locked production variant from the same Superpower campaign:
239
+
240
+ ```md
241
+ subject: {{company}} + 1,000 biomarkers + 24/7 care team
242
+
243
+ hey {{first_name}},
244
+
245
+ curious how you're thinking about preventative health + benefits innovation given your work at {{company}}.
246
+
247
+ we provide companies direct access to 100+ biomarker lab testing and screen 1,000+ conditions for every employee.
248
+
249
+ then we drive behaviour change with a 24/7 care team.
250
+
251
+ open to a 15 min call to learn more, or should i send over a short overview first?
252
+ ```
@@ -74,12 +74,18 @@ Revise or reject the sample when any of these happen.
74
74
  - **actions are implied, not stated** — e.g. "runs that chain as AI agents" when a clearer version would name the specific actions (verb + object, one per line)
75
75
  - **category-level opener used when a per-lead signal exists** — if `lead-sample.json` carries any per-lead signal (post, hire, visible tool, topic engagement), the opener must reference it. Category-level openers of shape `"Most [category] teams still do X by hand"` are only acceptable when zero per-lead signal is in the sample. When a category-level opener is used as fallback, Findings must flag it explicitly
76
76
  - **mind-reading from engagement signals** — a topic engagement, post, public activity, role, company, or hiring trigger does not prove buyer intent. Reject phrases like `"AI-GTM stack is clearly on your mind"`, `"you're clearly focused on..."`, `"obviously relevant"`, or `"already thinking about..."` unless that exact priority is explicitly present in `lead-sample.json`. Translate to low-certainty buyer context or omit the signal from copy.
77
- - **source-y signal narration** — reject `"saw you on..."`, `"saw you engaging with..."`, `"you commented on..."`, `"your LinkedIn activity..."`, `"you might not remember the thread..."`, `"found you through [source] and your role looked close..."`, or any line that makes the recipient feel watched unless the chosen archived motion is intentionally self-aware about the signal. For LinkedIn-post-sourced campaigns, a topic-level bridge is allowed when it explains why the note exists and stays apologetically uncertain: `"saw you in a few conversations about [topic], so may be off, but this seemed relevant."` or `"saw you in a few conversations around [topic], so hope this is relevant."` Translate the signal into natural buyer context or omit it.
78
- - **assumptive title-fit opener** — reject `"Your [role] role at [company] looked close to this problem"` or `"looked close to this outbound campaign problem"`. This asserts fit from title/company. Keep the apologetic uncertainty instead: `"may be off, but if [workflow] is anywhere near your lane..."`.
77
+ - **source-y signal narration** — reject `"saw you on..."`, `"saw you engaging with..."`, `"you commented on..."`, `"your LinkedIn activity..."`, `"you might not remember the thread..."`, `"found you through [source] and your role looked close..."`, or any line that makes the recipient feel watched unless the chosen archived motion is intentionally self-aware about the signal. For sender-owned LinkedIn post sources, a light first-person acknowledgment is allowed when row data proves a reaction/comment: `"appreciate you showing some love on my post about [topic]"` or `"thanks for showing support on my [topic] post"`. Do not name a comment unless comment text is present. Follow the acknowledgment with a soft relevance bridge before broad pain/product copy, e.g. `"figured this might be relevant if LinkedIn is becoming more of a GTM channel for [company]"`. For third-party LinkedIn-post-sourced campaigns, a topic-level bridge is allowed when it explains why the note exists and stays apologetically uncertain: `"saw you in a few conversations about [topic], so may be off, but this seemed relevant."`, `"saw you in a few conversations around [topic], so hope this is relevant."`, or `"found you in a thread about [topic], so may be off, but this seemed relevant."` Reserve `"raise your hand"` language for explicit lead-magnet comments, replies, or opt-ins. Translate the signal into natural buyer context or omit it.
78
+ - **fake line-to-line continuity** — reject line stacks where the source acknowledgment, relevance bridge, product line, and CTA do not actually build on each other. Each line must make the next line feel earned. If two adjacent lines could be swapped, deleted, or joined with `"anyway"` without changing the meaning, the transition is fake. In sender-owned post campaigns, the chain should be: support on my post -> why this topic may matter for the company -> what the product/problem does about that same topic -> low-friction next step.
79
+ - **assumptive title-fit opener** — reject `"Your [role] role at [company] looked close to this problem"` or `"looked close to this outbound campaign problem"`. This asserts fit from title/company. Keep the apologetic uncertainty instead: `"may be off, but if [workflow] is relevant to what you're working on..."`.
79
80
  - **internal-metric flex** — reject compute time, token/cache details, model names, agent-counts, orchestration internals, or similar process metrics unless the brief proves the buyer cares about that exact detail. `~5 min of compute per message` is not buyer value by itself.
80
- - **action lines are parallel (same subject, e.g. `It X` / `It Y` / `It Z`) but rendered as one-line paragraphs instead of bullets** — parallel action lines are the bullet case. One-line paragraphs are only for actions that carry a short narrative clause
81
+ - **action lines are parallel and harder to scan as paragraphs** — when 3
82
+ adjacent product actions repeat the same subject pattern (e.g. `It drafts...`
83
+ / `It adapts...` / `It helps...`) and none carries narrative proof context,
84
+ prefer a short bullet stack for mobile readability. Keep one-line paragraphs
85
+ when there are only 1-2 actions, one line needs narrative context, bullets
86
+ feel like a landing page, or the paragraph version is clearly more human.
81
87
  - **PS carries a second proof beat that doesn't answer a different objection** — the second beat must open a dimension beat #1 didn't address (e.g. technical reliability when beat #1 was operator empathy; named backing when beat #1 was founder track record). Default PS is ONE beat
82
- - **apologetic source-thread PS** — reject `p.s. if the source thread was just casual reading, ignore me`, `only reaching out where the role and topic looked close`, or any PS that defends why the recipient was sourced. If the source is too weak, omit the personalization line. A relevance-risk PS such as `p.s. if this is nowhere near your outbound workflow, ignore me` is allowed because it lowers pressure without narrating the source.
88
+ - **apologetic source-thread PS** — reject `p.s. if the source thread was just casual reading, ignore me`, `only reaching out where the role and topic looked close`, or any PS that defends why the recipient was sourced. If the source is too weak, omit the personalization line. A relevance-risk PS such as `p.s. if this is not relevant to your outbound workflow, ignore me` is allowed because it lowers pressure without narrating the source.
83
89
  - **subject line uses the same banned glue jargon as the body** — any B2B compound noun the buyer wouldn't say naturally in conversation. Subject follows the same jargon rules as the body
84
90
  - **jargon that a 5th-grade reader could not parse** — any B2B compound noun the buyer wouldn't say naturally in conversation. Common examples across motions: "handoff", "rip-and-replace", "pane of glass", "single source of truth", "alert fatigue", "top of funnel", "time to hire". Keep product and tool names that the buyer recognizes; cut the glue language around them
85
91
  - em dashes in copy that is otherwise plainspoken
@@ -364,16 +370,20 @@ who scraped me."
364
370
  sentence].`
365
371
  - `Hey {{first_name}}, hope this is relevant if [buyer context] is
366
372
  still on your plate.`
367
- - `Hey {{first_name}}, may be off, but if [workflow] is anywhere near
368
- your lane, this might be useful.`
373
+ - `Hey {{first_name}}, may be off, but if [workflow] is relevant to what
374
+ you're working on, this might be useful.`
369
375
  - `Hey {{first_name}}, saw you might be interested in [topic], so hope
370
376
  this is relevant.`
371
377
  - `Hey {{first_name}}, saw you in a few conversations around [topic],
372
378
  so hope this is relevant.`
379
+ - `Hey {{first_name}}, found you in a thread about [topic], so may be
380
+ off, but this seemed relevant.`
373
381
  - `Hey {{first_name}}, saw you raise your hand for [topic], so figured
374
- this was (hopefully) worth sending.`
382
+ this was (hopefully) worth sending.` Only for explicit lead-magnet
383
+ comments, replies, or opt-ins.
375
384
  - `Hey {{first_name}}, saw you raise your hand for [topic] (creepy to
376
385
  reach out based on that, i know) - but this felt too on the nose to ignore.`
386
+ Only for explicit lead-magnet comments, replies, or opt-ins.
377
387
  - `Hey {{first_name}}, quick one. My co-founder and I left [prior
378
388
  role] to build [X].`
379
389
  - `Hey {{first_name}}, reaching out because [one-line sender
@@ -294,20 +294,23 @@ The sample set must:
294
294
  multi-sentence paragraphs. Target 5-8 one-line paragraphs total
295
295
  - split sentences that are above ~15 words or carry more than one comma
296
296
  - do not stack three workflows into one mechanism line or one comma list.
297
- Give each workflow its own one-sentence paragraph, or pick the most
298
- painful one and drop the others
297
+ Give each workflow its own line, use a short bullet stack when the three
298
+ actions repeat the same subject pattern, or pick the most painful one and
299
+ drop the others
299
300
  - **product clarity is non-negotiable**: a cold reader must be able to state
300
301
  in one sentence what the product does. Require a crisp `Product is an X
301
302
  that does Y` anchor sentence before any action breakdown, then one action
302
- per one-line paragraph. Do not gesture at "that chain" / "the stack" /
303
- "that work" in place of naming specific actions
303
+ per line. Do not gesture at "that chain" / "the stack" / "that work" in
304
+ place of naming specific actions
304
305
  - body flow must follow: opener → pain → what the product IS (one sentence)
305
306
  → what it DOES (one action per line, up to three) → deployment ease →
306
307
  CTA → optional PS
307
308
  - the "what it DOES" action list may render as one-line paragraphs or as a
308
309
  bullet list — whichever reads cleaner. Bullets are acceptable here (the
309
310
  rule against bullet points applies to feature/benefit marketing lists,
310
- not to enumerable product actions). Never comma-stack three actions into
311
+ not to enumerable product actions). Prefer bullets for 3 repeated-subject
312
+ product actions; keep paragraphs when one line needs narrative context or the
313
+ paragraph version is clearly more human. Never comma-stack three actions into
311
314
  one glued sentence
312
315
  - **opener must use per-lead signal when any is present in `lead-sample.json`**
313
316
  (post, hire, visible tool, topic engagement). Category-level openers are
@@ -28,7 +28,7 @@ Each step writes its own artifact into the draft directory. The original
28
28
  Validated draft directory:
29
29
 
30
30
  ```text
31
- .sellable/create-campaign-v2/drafts/{workspace-slug}/{campaign-slug}/
31
+ ~/.sellable/create-campaign-v2/drafts/{workspace-slug}/{campaign-slug}/
32
32
  brief.md
33
33
  lead-review.md
34
34
  lead-sample.json
@@ -223,6 +223,20 @@ Orchestration requirements:
223
223
  - draft 3 internal candidates and run a Finalizer Pass that combines the
224
224
  best opener, proof sentence, bridge, and CTA across them into one winner
225
225
  - pass the Thomas revision filters before writing findings
226
+ - pass the source-transition gate before writing findings. For sender-owned
227
+ LinkedIn post sources where the sample proves a reaction/comment, a light
228
+ first-person acknowledgment is allowed (`appreciate you showing some love on
229
+ my post about [topic]`), but it must be followed by a soft relevance bridge
230
+ before broad problem or product copy (`figured this might be relevant if
231
+ LinkedIn is becoming more of a GTM channel for [company/team]`). Block drafts
232
+ that jump straight from the acknowledgment into generic `a lot of teams...` or
233
+ `most teams...` pain. For third-party post sources, keep source references
234
+ topic-level and low-certainty.
235
+ - pass the line-continuity gate before writing findings. Each message line must
236
+ make the next line feel earned: source/post signal -> relevance bridge ->
237
+ product/problem -> next step. If two adjacent lines could be swapped, deleted,
238
+ or connected with `anyway` without changing the meaning, the transition is
239
+ fake and the draft must be revised.
226
240
 
227
241
  Do not:
228
242
 
@@ -257,6 +271,8 @@ Do not:
257
271
  - `Finalizer Pass`
258
272
  - `Gold-Standard Quality Gate`
259
273
  - `Skeptical Prospect Review`
274
+ - `Source Transition Gate`
275
+ - `Line Continuity Gate`
260
276
  - `Winner Gate`
261
277
  - `Selected Winner`
262
278
  - `Findings`