@sellable/mcp 0.1.213 → 0.1.215
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/agents/post-find-leads-message-scout.md +190 -151
- package/dist/tools/prompts.js +18 -13
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +11 -12
- package/skills/create-campaign-brief/references/examples/briefs/superpower.md +3 -3
- package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +16 -28
- package/skills/create-campaign-v2/SKILL.md +12 -9
- package/skills/create-campaign-v2/core/auto-execute.README.md +11 -11
- package/skills/create-campaign-v2/core/auto-execute.yaml +4 -4
- package/skills/create-campaign-v2/core/flow.v2.json +1 -1
- package/skills/create-campaign-v2/references/ai-tells.md +3 -3
- package/skills/create-campaign-v2/references/approval-gate-framing.md +9 -9
- package/skills/create-campaign-v2/references/escalation-ladder.md +3 -3
- package/skills/create-campaign-v2/references/final-handoff-contract.md +3 -3
- package/skills/create-campaign-v2/references/gold-standard-message-examples.md +294 -239
- package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +13 -9
- package/skills/create-campaign-v2/references/gold-standard-message-validation-example.md +4 -4
- package/skills/create-campaign-v2/references/lead-validation-preview.md +1 -1
- package/skills/create-campaign-v2/references/parallel-critique-protocol.md +10 -10
- package/skills/create-campaign-v2/references/sample-validation-loop.md +3 -3
- package/skills/create-campaign-v2/references/{thomas-revision-filters.md → sellable-cleanup-rules.md} +13 -12
- package/skills/create-campaign-v2/references/step-15-re-cascade.md +1 -1
- package/skills/create-campaign-v2/references/thomas-variant-selection.md +1 -1
- package/skills/create-campaign-v2/references/validation-criteria.md +16 -13
- package/skills/create-campaign-v2-tail/SKILL.md +7 -7
- package/skills/create-campaign-v2-validation/SKILL.md +17 -8
- package/skills/generate-messages/SKILL.md +157 -93
- package/skills/research/config.json +9 -0
- package/skills/create-campaign-v2/references/gold-standard-runtime-message-pack.md +0 -252
|
@@ -6,10 +6,11 @@ visibility: internal
|
|
|
6
6
|
|
|
7
7
|
# Generate Messages
|
|
8
8
|
|
|
9
|
-
You craft messages in
|
|
9
|
+
You craft row-level messages in two active modes:
|
|
10
10
|
|
|
11
11
|
- live campaign mode for selected leads in a real campaign table
|
|
12
|
-
- caller-declared DRY MODE for
|
|
12
|
+
- caller-declared DRY MODE for offline validation artifacts before any live
|
|
13
|
+
campaign exists
|
|
13
14
|
|
|
14
15
|
## Tools
|
|
15
16
|
|
|
@@ -28,37 +29,35 @@ You craft messages in one of two modes:
|
|
|
28
29
|
|
|
29
30
|
### Mode 0: Message Drafting Branch
|
|
30
31
|
|
|
31
|
-
Use
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- campaign
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
- `
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
Use `generate-messages` for the campaign workflow's live template
|
|
33
|
+
recommendation branch after the source list is copied into the campaign table
|
|
34
|
+
and the first non-empty execution slice exists. This is not the row-cell
|
|
35
|
+
generation path. Before drafting, that branch must also load the required
|
|
36
|
+
message assets through Sellable MCP tools:
|
|
37
|
+
|
|
38
|
+
- `create-campaign-v2/references/gold-standard-message-examples.md`
|
|
39
|
+
- `create-campaign-v2/references/gold-standard-message-patterns.md`
|
|
40
|
+
- `create-campaign-v2/references/ai-tells.md`
|
|
41
|
+
- `create-campaign-v2/references/sellable-cleanup-rules.md`
|
|
42
|
+
- `create-campaign/references/ai-native-tokens.md`
|
|
43
|
+
- `create-campaign/references/token-fill-examples.md`
|
|
44
|
+
|
|
45
|
+
After candidate generation and revision, and before returning `ready`, load
|
|
46
|
+
`create-campaign-v2-validation` through Sellable MCP as the final gate.
|
|
47
|
+
|
|
48
|
+
Never reconstruct that branch from `brief.md`, `lead-review.md`,
|
|
49
|
+
`lead-sample.json`, `lead-filter.md`, `message-validation.md`, local files, or
|
|
50
|
+
direct database reads. If any required message asset cannot be loaded through MCP
|
|
51
|
+
before drafting, return `blocked` or `retry-needed`. If the validation prompt
|
|
52
|
+
cannot be loaded after generation, or the candidate fails that final gate, return
|
|
53
|
+
`blocked` or `retry-needed`.
|
|
45
54
|
|
|
46
55
|
Reject the branch as blocked if the campaign id, selected lead list, workflow
|
|
47
|
-
table, or
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
the `mcp/sellable/skills/...` strings are asset identifiers, not local files.
|
|
53
|
-
Do not use shell commands, local `Read`, `rg`, `cat`, `wc`, plugin-cache paths,
|
|
54
|
-
repo paths, or `/Users/...` paths to load them. If a required asset cannot be
|
|
55
|
-
loaded through the MCP asset loader, return `blocked` or `retry-needed` instead
|
|
56
|
-
of drafting from memory.
|
|
57
|
-
|
|
58
|
-
Return message-draft output only: template recommendation, token fill rules,
|
|
59
|
-
rendered sample, concerns, status, basis token, output timestamp/hash, and error or
|
|
60
|
-
retry detail. Do not write message cells, enrich rows, update the campaign
|
|
61
|
-
brief, attach sequence, or imply send readiness from this branch.
|
|
56
|
+
table, or initial execution-slice rows do not match. Return message-draft output
|
|
57
|
+
only: template recommendation, token fill rules, rendered good sample, status,
|
|
58
|
+
basis token, output timestamp/hash, and blocked/retry detail when applicable.
|
|
59
|
+
Do not write message cells, enrich rows, update the campaign brief, attach a
|
|
60
|
+
sequence, or imply send readiness from this branch.
|
|
62
61
|
|
|
63
62
|
### Mode 1: Live Campaign Mode
|
|
64
63
|
|
|
@@ -92,18 +91,18 @@ to live mode drafts, with live-mode-specific allowances:
|
|
|
92
91
|
- personalization from research is allowed, but it does not replace the
|
|
93
92
|
"what the product IS" / "what it DOES" anchors
|
|
94
93
|
- save behavior and calibration loop follow the live-mode workflow below,
|
|
95
|
-
but the drafted message itself is subject to the same
|
|
94
|
+
but the drafted message itself is subject to the same Sellable cleanup
|
|
96
95
|
filters as dry mode
|
|
97
96
|
|
|
98
97
|
### Mode 2: Caller-Declared DRY MODE
|
|
99
98
|
|
|
100
|
-
Use this mode when the caller explicitly says `DRY MODE`, `
|
|
99
|
+
Use this mode when the caller explicitly says `DRY MODE`, `offline validation`,
|
|
101
100
|
`create-campaign-v2`, or provides:
|
|
102
101
|
|
|
103
102
|
- `brief.md`
|
|
104
103
|
- `lead-sample.json`
|
|
105
|
-
- `lead-filter.md` when available. In the
|
|
106
|
-
|
|
104
|
+
- `lead-filter.md` when available. In the campaign workflow's post-lead
|
|
105
|
+
workstream, message generation may start before
|
|
107
106
|
`lead-filter.md` exists so it can prepare proof inventory, token strategy,
|
|
108
107
|
and candidate angles while filter-leads runs.
|
|
109
108
|
|
|
@@ -139,7 +138,7 @@ Required dry-mode contract:
|
|
|
139
138
|
If the dry-mode response is missing the no-mutation preamble, treat that as a
|
|
140
139
|
hard failure and revise the output before returning it.
|
|
141
140
|
|
|
142
|
-
##
|
|
141
|
+
## Offline Validation
|
|
143
142
|
|
|
144
143
|
Dry mode validates message quality before campaign mint.
|
|
145
144
|
|
|
@@ -158,17 +157,17 @@ Read these campaign inputs:
|
|
|
158
157
|
- `lead-filter.md` when present. If it is absent because the caller launched
|
|
159
158
|
prospect setup workstreams in parallel, start the prep/candidate stages and then
|
|
160
159
|
reconcile before final `message-validation.md`.
|
|
161
|
-
|
|
162
160
|
## Reference Asset Loading (do this before drafting)
|
|
163
161
|
|
|
164
162
|
Do not draft from this prompt alone. The full `generate-messages` prompt is
|
|
165
163
|
only the contract; the reference assets below are the evidence and examples
|
|
166
|
-
that define the desired output. Before writing angle drafts, you MUST load
|
|
167
|
-
required pre-draft reference
|
|
168
|
-
This is
|
|
164
|
+
that define the desired output. Before writing angle drafts, you MUST load every
|
|
165
|
+
required pre-draft reference below with `mcp__sellable__get_subskill_asset`.
|
|
166
|
+
This is the required pre-draft reference pack for Mode 0 message drafting.
|
|
167
|
+
This is a hard gate: if the required pre-draft assets are not loaded,
|
|
169
168
|
return `blocked` / `retry-needed` instead of drafting. Write a short
|
|
170
|
-
`Reference Asset Loading` note naming each loaded asset and whether it
|
|
171
|
-
required pre-draft,
|
|
169
|
+
internal `Reference Asset Loading` note naming each loaded asset and whether it
|
|
170
|
+
was required pre-draft, dry-mode-only, or token-rules-only. Do not
|
|
172
171
|
bulk-load the conditional references unless their trigger applies or the caller
|
|
173
172
|
explicitly asks for maximum context over speed.
|
|
174
173
|
|
|
@@ -176,21 +175,22 @@ Use `mcp__sellable__get_subskill_asset` for packaged assets:
|
|
|
176
175
|
|
|
177
176
|
| Group | Asset to load | Job |
|
|
178
177
|
| --- | --- | --- |
|
|
179
|
-
| Always load before drafting | `subskillName: "create-campaign-
|
|
178
|
+
| Always load before drafting | `subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-examples.md"` | Active line-level gold pack. Full archive quality bar: exact motion examples, hard rules, and transfer limits. Use it to choose 1 primary example, not to recolor copy. |
|
|
180
179
|
| Always load before drafting | `subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-patterns.md"` | Strategy selector: event-led vs signal-led vs job-post-led vs proof-led fallback, proof inventory, candidate set, and Finalizer Pass. |
|
|
181
|
-
| Always load before drafting | `subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-examples.md"` | Full archive quality bar: exact motion examples, hard rules, and transfer limits. Use it to choose 1 primary example, not to recolor copy. |
|
|
182
180
|
| Always load before drafting (never optional) | `subskillName: "create-campaign-v2", assetPath: "references/ai-tells.md"` | Canonical anti-AI checklist: body self-intros, source citations, resume recaps, title-fit assumptions, em dashes, signoffs, weak proof brags, and flattened "worth sending" source bridges. |
|
|
183
|
-
| Load before approval / final pass | `subskillName: "create-campaign-v2", assetPath: "references/
|
|
181
|
+
| Load before approval / final pass | `subskillName: "create-campaign-v2", assetPath: "references/sellable-cleanup-rules.md"` | Substance filters: earned-right, presumption, vague proof, read-as-1:1, founder-origin coherence, anti-talk-at, AI-tell filter, line continuity, PS shape, and proof safety. |
|
|
182
|
+
| Reusable token rules only | `subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md"` | Token spec for rich judgment tokens, including required clauses and fallback behavior. Always load before reusable template/token rules. |
|
|
183
|
+
| Reusable token rules only | `subskillName: "create-campaign", assetPath: "references/token-fill-examples.md"` | Concrete good/bad token fills, interpolation guardrails, and product-noun substitution traps. Always load before reusable template/token rules. |
|
|
184
184
|
| Dry-mode artifact output only | `subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-validation-example.md"` | Fully worked example for proof inventory, candidate messages, Finalizer Pass, Selected Winner, findings, and recommendation. |
|
|
185
185
|
| Dry-mode artifact output only | `subskillName: "create-campaign-v2", assetPath: "references/validation-criteria.md"` | Step-level acceptance criteria and dry-mode message validation expectations. |
|
|
186
|
-
| Reusable token rules only | `subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md"` | Token spec for rich judgment tokens, including required clauses and fallback behavior. |
|
|
187
|
-
| Reusable token rules only | `subskillName: "create-campaign", assetPath: "references/token-fill-examples.md"` | Concrete good/bad token fills, interpolation guardrails, and product-noun substitution traps. |
|
|
188
186
|
|
|
189
187
|
Example packaged asset calls:
|
|
190
188
|
|
|
191
189
|
- `get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md" })`
|
|
192
190
|
- `get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/token-fill-examples.md" })`
|
|
193
191
|
- `get_subskill_asset({ subskillName: "create-campaign-brief", assetPath: "references/phase75-active-runtime-message-pack.md" })`
|
|
192
|
+
- `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-examples.md" })`
|
|
193
|
+
- `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/sellable-cleanup-rules.md" })`
|
|
194
194
|
- `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/validation-criteria.md" })`
|
|
195
195
|
|
|
196
196
|
Do not satisfy the list above by searching or reading the local filesystem.
|
|
@@ -198,18 +198,18 @@ Path-like names in this section are package asset coordinates for MCP loading.
|
|
|
198
198
|
|
|
199
199
|
Default load order:
|
|
200
200
|
|
|
201
|
-
1. Load the
|
|
201
|
+
1. Load the **Always load before drafting** assets. Do not infer their
|
|
202
202
|
contents from this prompt; actually call `mcp__sellable__get_subskill_asset`
|
|
203
203
|
for each required asset.
|
|
204
204
|
2. Draft and run the internal Finalizer Pass.
|
|
205
205
|
3. Run the selected winner against `ai-tells.md`. This is never optional. If the
|
|
206
206
|
AI-tells catalog was not loaded or any `REJECT` tell matches, do not approve,
|
|
207
207
|
confirm, recommend, or show the template as ready; return `revise-message`.
|
|
208
|
-
4.
|
|
209
|
-
recommendation.
|
|
208
|
+
4. Run the selected winner against `sellable-cleanup-rules.md` before approval,
|
|
209
|
+
`confirmed`, or template recommendation.
|
|
210
210
|
5. Load dry-mode artifact references only when writing `message-validation.md`.
|
|
211
|
-
|
|
212
|
-
|
|
211
|
+
|
|
212
|
+
Do not load retired branch/runtime packs.
|
|
213
213
|
|
|
214
214
|
### Rich Personalization Contract
|
|
215
215
|
|
|
@@ -255,14 +255,16 @@ winner gate**.
|
|
|
255
255
|
|
|
256
256
|
### Retrieval & motion
|
|
257
257
|
|
|
258
|
-
- treat `gold-standard-
|
|
259
|
-
|
|
260
|
-
- retrieve against the
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
`two options:` formatting, short
|
|
264
|
-
`p.s.` lines
|
|
265
|
-
- treat the
|
|
258
|
+
- treat `gold-standard-message-examples.md` as the canonical examples asset for
|
|
259
|
+
both primary runtime examples and conditional motion references
|
|
260
|
+
- retrieve against the primary runtime examples first, then conditional examples
|
|
261
|
+
only when the campaign motion matches
|
|
262
|
+
- use the examples for concrete formatting cues that abstract patterns may
|
|
263
|
+
flatten away: lowercase vs title case, exact `two options:` formatting, short
|
|
264
|
+
line rhythm, and load-bearing `p.s.` lines
|
|
265
|
+
- treat the examples as the **quality bar and motion reference**, not a paste
|
|
266
|
+
source. Your job is to write a new message that could plausibly belong in the
|
|
267
|
+
archive, not to recolor an existing one
|
|
266
268
|
- before choosing any example, name the **strongest true reason this buyer
|
|
267
269
|
should reply**. This is the north star: the most compelling safe mechanism,
|
|
268
270
|
proof, asset, diagnostic, offer, or buyer outcome available from the brief and
|
|
@@ -282,7 +284,7 @@ winner gate**.
|
|
|
282
284
|
packaging tools. Use them only when they make the strongest true reason more
|
|
283
285
|
compelling or easier to reply to.
|
|
284
286
|
- **exact-template preservation only applies when the archived winner is the same company as the brief** (e.g., Superposition drafting for Superposition). In that case preserve casing, spacing, CTA shape, and proof ordering, and change only the documented tokens. For every other case, match the quality bar and motion shape; do not recolor the exemplar's wording
|
|
285
|
-
- if the
|
|
287
|
+
- if the examples file shows a proven same-company or same-motion line that is
|
|
286
288
|
doing real work, do not silently flatten it away in the name of generic
|
|
287
289
|
cleanliness
|
|
288
290
|
- choose the highest-specificity validated strategy available: event-led, signal-led, job-post-led, then proof-led specialist fallback (full patterns in `gold-standard-message-patterns.md`)
|
|
@@ -405,11 +407,42 @@ artifact.**
|
|
|
405
407
|
- `saw you raise your hand for {{signal_topic}}, so figured this was (hopefully) worth sending` only when the source was an explicit lead-magnet comment, reply, or opt-in. The parenthetical uncertainty is load-bearing; do not flatten it to `so figured this was worth sending`.
|
|
406
408
|
- `saw you raise your hand for {{signal_topic}} (creepy to reach out based on that, i know) - but this felt too on the nose to ignore` only when the source was an explicit lead-magnet comment, reply, or opt-in and the sender's voice can carry the cheekier aside
|
|
407
409
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
410
|
+
Before choosing the source opener, classify source ownership:
|
|
411
|
+
|
|
412
|
+
- `sender-owned-single`: one sender/client is known, the selected source post
|
|
413
|
+
was authored by that same person, and the row/list proves a reaction or
|
|
414
|
+
comment.
|
|
415
|
+
- `sender-owned-ambiguous`: the source appears sender-owned but the final
|
|
416
|
+
sender is not known, multiple senders may be used, or the source author does
|
|
417
|
+
not clearly match the specific sender voice.
|
|
418
|
+
- `third-party`: the source post/thread/conversation was authored by someone
|
|
419
|
+
other than the sender/client.
|
|
420
|
+
|
|
421
|
+
For `sender-owned-single` LinkedIn-post-sourced campaigns, it is acceptable to
|
|
422
|
+
thank the recipient for showing some love/support on the sender's post when
|
|
423
|
+
the row proves a reaction or comment. Keep it first-person, light, and
|
|
424
|
+
non-assumptive: `appreciate you showing some love on my post about
|
|
425
|
+
{{signal_topic}}` is acceptable; do not say `you commented` unless the row
|
|
426
|
+
proves comment text. If meaningful comment text exists in the row, a comment
|
|
427
|
+
callout is allowed only at topic level; do not quote or paraphrase the comment
|
|
428
|
+
unless the row text is available and the wording materially improves the
|
|
429
|
+
opener.
|
|
430
|
+
|
|
431
|
+
For `sender-owned-single`, third-party thread framing is a hard failure:
|
|
432
|
+
do not write `found you in a thread`, `saw you in a thread`, `saw you in
|
|
433
|
+
conversations`, or `saw you in a few conversations` unless the source is
|
|
434
|
+
truly third-party. The branch-level reusable template must either use the
|
|
435
|
+
first-person acknowledgment plus bridge, or omit the source line.
|
|
436
|
+
|
|
437
|
+
For `sender-owned-ambiguous` or multi-sender campaigns, do not assume the
|
|
438
|
+
message is from a specific person. Do not write `my post`, `Grace's post`, or
|
|
439
|
+
any first-person post acknowledgment unless the final sender/source-owner
|
|
440
|
+
match is proven for that row. Omit the sender-owned source line until row
|
|
441
|
+
generation can safely fill it. Neutral thread/source language is only for
|
|
442
|
+
truly third-party sources.
|
|
443
|
+
In short: do not assume the message is from a specific person when the final
|
|
444
|
+
sender/source-owner match is ambiguous.
|
|
445
|
+
|
|
413
446
|
Do not let the acknowledgment dead-end. Follow it with a soft post-topic to
|
|
414
447
|
buyer-context bridge before broad pain or product copy. Prefer:
|
|
415
448
|
`figured this might be relevant if {{channel_context}} is becoming more of a
|
|
@@ -804,6 +837,13 @@ Finalizer preference when multiple candidates are otherwise comparable:
|
|
|
804
837
|
supports
|
|
805
838
|
- if an A/B CTA adds ceremony without increasing buyer confidence, cut
|
|
806
839
|
it back to one ask
|
|
840
|
+
- if a selected template or gold-standard influence ends with a
|
|
841
|
+
non-question CTA statement, do not preserve the surface wording. Preserve
|
|
842
|
+
the buyer promise and rewrite the CTA as one concrete yes/no question.
|
|
843
|
+
Example: `easiest way to see if it's worth a look is to try it with one of
|
|
844
|
+
your actual menus. happy to set that up or I can send a 2-min video
|
|
845
|
+
instead.` should become a single question that names the useful object, such
|
|
846
|
+
as `open to seeing what one real menu would look like in the product?`
|
|
807
847
|
- do not default to founder-to-founder, MD-to-MD, doctor-to-doctor,
|
|
808
848
|
peer-call, compare-notes, or similar identity-call framing. Those CTAs
|
|
809
849
|
are usually weaker than naming the useful thing the buyer gets. Use them
|
|
@@ -973,7 +1013,7 @@ Message-validation artifact budget:
|
|
|
973
1013
|
|
|
974
1014
|
**Substance-filter gate before the Finalizer Pass:** each candidate is
|
|
975
1015
|
checked against the 8 Substance Filters in
|
|
976
|
-
`../create-campaign-v2/references/
|
|
1016
|
+
`../create-campaign-v2/references/sellable-cleanup-rules.md` (Earned-
|
|
977
1017
|
right, Presumption, Vague-proof, Read-as-1:1, Founder-origin coherence,
|
|
978
1018
|
Anti-AI-tell, Anti-talk-at, Anti-self-introduction). A candidate that
|
|
979
1019
|
fails any filter is marked BLOCKED in `message-validation.md` (cite
|
|
@@ -1070,6 +1110,20 @@ Return `revise-message` with the missing strategy pieces.
|
|
|
1070
1110
|
|
|
1071
1111
|
CTA and PS are tools, not defaults.
|
|
1072
1112
|
|
|
1113
|
+
The final CTA must be a question unless the user explicitly approved a
|
|
1114
|
+
non-question outbound motion. Template preservation does not override this. If
|
|
1115
|
+
the best draft or primary example has a statement CTA (`happy to set that up`,
|
|
1116
|
+
`I can send...`, `let me know`, `worth a look is...`), run a CTA normalization
|
|
1117
|
+
pass before selecting the winner:
|
|
1118
|
+
|
|
1119
|
+
- keep the useful object the buyer gets
|
|
1120
|
+
- cut weak second options unless both choices are independently valuable
|
|
1121
|
+
- make the ask one self-contained yes/no question on its own line
|
|
1122
|
+
- preserve the campaign's approved intent, not the exact words
|
|
1123
|
+
- write the question from the campaign's real object and product category; do
|
|
1124
|
+
not hard-code wording from a gold example when the buyer input, artifact,
|
|
1125
|
+
preview, or product is different
|
|
1126
|
+
|
|
1073
1127
|
CTA options must be scored before drafting. Use `two options:` only when
|
|
1074
1128
|
both choices are genuinely useful and supported:
|
|
1075
1129
|
|
|
@@ -1154,11 +1208,17 @@ message / artifact] was made with [product].`
|
|
|
1154
1208
|
lowers "is this real?" / "will this company be around?" risk without
|
|
1155
1209
|
bloating the body. Its job can be legitimacy, not direct persuasion:
|
|
1156
1210
|
it answers whether the company and offer are real enough to take a look.
|
|
1157
|
-
It must still tie the backing to the buyer
|
|
1158
|
-
|
|
1211
|
+
It must still tie the backing to the buyer outcome instead of flashing a
|
|
1212
|
+
badge or describing the seller's focus. Good shapes:
|
|
1159
1213
|
`p.s. we're YC-backed and built for [specific buyer segment] trying to
|
|
1160
|
-
[buyer outcome].` or `p.s. we're backed by [credible
|
|
1161
|
-
[
|
|
1214
|
+
[buyer outcome].` or `p.s. we're backed by [credible backers] to help
|
|
1215
|
+
[buyer segment] turn [buyer-owned workflow/channel] into [buyer outcome].`
|
|
1216
|
+
Keep it short and test it against no-PS. Do not use
|
|
1217
|
+
`focused on [category/problem]` in prospect-facing copy; translate company
|
|
1218
|
+
focus into the buyer's problem/outcome, or omit the PS. For a
|
|
1219
|
+
LinkedIn-content motion only, a good translation is:
|
|
1220
|
+
`p.s. we're backed by operators from [credible companies] to help teams
|
|
1221
|
+
turn LinkedIn content into dependable pipeline.`
|
|
1162
1222
|
|
|
1163
1223
|
If YC, notable backing, funding, or named investor proof is present AND
|
|
1164
1224
|
the buyer is in healthcare, financial services, security, enterprise, or
|
|
@@ -1280,7 +1340,7 @@ Truth is not enough. The line must do a job for the prospect.
|
|
|
1280
1340
|
|
|
1281
1341
|
### Single-send-unit gate (HARD INVARIANT)
|
|
1282
1342
|
|
|
1283
|
-
|
|
1343
|
+
Offline-validation message generation approves the **first outbound
|
|
1284
1344
|
send only**. The Selected Winner must be exactly one send unit for one channel:
|
|
1285
1345
|
one INVITE, one INMAIL_OPEN / INMAIL_CLOSED body plus optional subject, or one
|
|
1286
1346
|
DM body when the campaign explicitly starts with DM.
|
|
@@ -1725,6 +1785,9 @@ PO from your inbox?` beats `worth 15 min to compare notes?` because the
|
|
|
1725
1785
|
(`we're YC-backed and trying to help banks stop scam money before it
|
|
1726
1786
|
moves`) or materially lower commitment (`happy to send the sample
|
|
1727
1787
|
without a call first`). Prefer the buyer-outcome version when both fit.
|
|
1788
|
+
Do not write `backed by [X] and focused on [Y]`; "focused on" describes
|
|
1789
|
+
the seller. Translate it to `backed by [X] to help [buyer] [outcome]`,
|
|
1790
|
+
or choose no PS.
|
|
1728
1791
|
For high-trust or new-category offers, YC/backing should be tested as a
|
|
1729
1792
|
PS before being marked internal-only; the question is whether the PS
|
|
1730
1793
|
lowers trust risk for the buyer, not whether the body already has one
|
|
@@ -2150,7 +2213,7 @@ Rules:
|
|
|
2150
2213
|
- write the PS in a voice the reader can place:
|
|
2151
2214
|
- if the **sender is the founder/operator**, write in `I` voice. Archive anchor: Superposition's `"I placed the first engineering hire at Brex."`
|
|
2152
2215
|
- if the **sender is not the founder**, use `our CEO`, `our team`, or `we` as the anchor — never drop a bare first name with no anchor. Shape: `"Our CEO [did the prior thing that shows they understand this buyer's pain]."`
|
|
2153
|
-
- `our team` and `we` voices work well for backing, funding, or collective proof. Shape: `"Our team is backed by [investor]
|
|
2216
|
+
- `our team` and `we` voices work well for backing, funding, or collective proof. Shape: `"Our team is backed by [investor] to help [buyer segment] [buyer outcome]."`
|
|
2154
2217
|
- **default to ONE proof beat** — the single beat that most directly answers "why is this sender a fit for my specific pain?"
|
|
2155
2218
|
- a second beat is only allowed when it answers a **different objection** the buyer would actually have — not when it's merely available. Structural examples of valid second beats (objection-shaped, motion-agnostic):
|
|
2156
2219
|
- the buyer's likely concern is "does this actually work reliably" → a beat about technical depth or track record strengthens the fit
|
|
@@ -2164,14 +2227,15 @@ Rules:
|
|
|
2164
2227
|
- the proof is purely credential without a relevance hook you can write in one sentence
|
|
2165
2228
|
- the body already carries the mechanism and relevance and adding a PS would dilute rather than reinforce
|
|
2166
2229
|
- except when the PS itself is the proof/demo that makes the core claim more believable
|
|
2167
|
-
- examples of good shapes (abstract — to be instantiated from the brief's safe-claims list, not copied):
|
|
2230
|
+
- examples of good shapes (abstract — to be instantiated from the brief's safe-claims list, not copied):
|
|
2168
2231
|
- `"Our CEO [ran a comparable operation before this], so the product is built for how [buyer-specific failure mode] actually breaks."`
|
|
2169
2232
|
- `"I spent [X years] watching this exact [named handoff] fall apart at a previous role, which is why the first thing we built fixes it."`
|
|
2170
|
-
- `"Our team is backed by [named investor]
|
|
2233
|
+
- `"Our team is backed by [named investor] to help [buyer segment] [buyer outcome]."`
|
|
2171
2234
|
- examples of bad shapes (automatic revisions):
|
|
2172
2235
|
- `"Alex did X. Jordan did Y."` — bare first names with no anchor, no relevance to the buyer's pain
|
|
2173
2236
|
- `"CEO Alex, 2x founder. CTO Jordan, ex-FAANG."` — credential list, no relevance hook
|
|
2174
2237
|
- `"Our team has deep [X] and [Y] experience."` — generic, no specifics
|
|
2238
|
+
- `"We're backed by [investor] and focused on [category/problem]."` — company-focus copy; translate to buyer outcome or cut
|
|
2175
2239
|
- any PS that could be dropped without weakening the fit case — drop it instead
|
|
2176
2240
|
|
|
2177
2241
|
### Safety
|
|
@@ -2182,7 +2246,7 @@ Rules:
|
|
|
2182
2246
|
- reject personalization that cannot be traced to `lead-sample.json`
|
|
2183
2247
|
- keep proof claims inside the brief's safe-claims boundary
|
|
2184
2248
|
- use only signals validated in `lead-sample.json`
|
|
2185
|
-
- pass the
|
|
2249
|
+
- pass the Sellable cleanup rules before returning
|
|
2186
2250
|
|
|
2187
2251
|
When token sourcing is weak:
|
|
2188
2252
|
|
|
@@ -2388,7 +2452,7 @@ hiring for`
|
|
|
2388
2452
|
|
|
2389
2453
|
## Token Adherence Table
|
|
2390
2454
|
|
|
2391
|
-
| Sample | Supported Tokens Only | All Tokens Resolved | Proof Safe | Personalization Grounded |
|
|
2455
|
+
| Sample | Supported Tokens Only | All Tokens Resolved | Proof Safe | Personalization Grounded | Sellable Cleanup Rules | Result |
|
|
2392
2456
|
| ------ | --------------------- | ------------------- | ---------- | ------------------------ | -------------- | ------ |
|
|
2393
2457
|
|
|
2394
2458
|
## Message Element Plan
|
|
@@ -2607,7 +2671,7 @@ Automatic failures in dry mode:
|
|
|
2607
2671
|
- invented proof or personalization
|
|
2608
2672
|
- no compelling proof element despite the brief supporting one
|
|
2609
2673
|
- a CTA that depends on missing proof
|
|
2610
|
-
- copy that fails the
|
|
2674
|
+
- copy that fails the Sellable cleanup rules
|
|
2611
2675
|
- any post-accept DM, follow-up, second touch, cadence branch, or sequence copy
|
|
2612
2676
|
in the first-message validation artifact
|
|
2613
2677
|
- any mutation tool usage
|
|
@@ -2619,7 +2683,7 @@ Automatic failures in dry mode:
|
|
|
2619
2683
|
Goal: lock tone + offer with 1-3 examples before scaling.
|
|
2620
2684
|
Only hard requirement: draft at least one message before batch; saving examples is strongly recommended but optional.
|
|
2621
2685
|
|
|
2622
|
-
Before drafting, read any
|
|
2686
|
+
Before drafting, read any brief-calibration assets already present:
|
|
2623
2687
|
|
|
2624
2688
|
- the campaign brief itself
|
|
2625
2689
|
- any "Messaging Calibration" section saved back into the brief
|
|
@@ -2659,27 +2723,27 @@ too generic, diagnose the gap precisely:
|
|
|
2659
2723
|
|
|
2660
2724
|
Then tighten the brief or calibration notes before scaling.
|
|
2661
2725
|
|
|
2662
|
-
Use
|
|
2663
|
-
brief does not already contain winning examples. Do not default to
|
|
2664
|
-
REPLY-style copy when the motion clearly matches a tighter approved
|
|
2665
|
-
Primary
|
|
2726
|
+
Use `gold-standard-message-examples.md` as the primary line-level source even
|
|
2727
|
+
when the brief does not already contain winning examples. Do not default to
|
|
2728
|
+
generic REPLY-style copy when the motion clearly matches a tighter approved
|
|
2729
|
+
pattern. Primary runtime references are:
|
|
2666
2730
|
|
|
2667
2731
|
- sellable.dev
|
|
2668
|
-
- Hey Digital
|
|
2732
|
+
- Hey Digital
|
|
2669
2733
|
- Galley
|
|
2670
2734
|
- Clover
|
|
2671
2735
|
- Persona
|
|
2672
2736
|
|
|
2673
2737
|
Use Superpower only for benefits/healthcare mechanism language and cleaned
|
|
2674
|
-
low-certainty relevance bridges. Use
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2738
|
+
low-certainty relevance bridges. Use Galley only for matching foodservice,
|
|
2739
|
+
event/demo, or signal-led operator motions. Use Revvix / Spektion and
|
|
2740
|
+
Superposition only for explicit event/logistics or job-post/founder-hiring
|
|
2741
|
+
motions. Do not use Gelee, westpark villas, Amplify Security, or raw old-client
|
|
2742
|
+
archive examples as runtime inspiration unless the caller explicitly provides
|
|
2743
|
+
them as campaign calibration.
|
|
2744
|
+
|
|
2745
|
+
When the brief is sparse but the motion clearly matches an approved winner,
|
|
2746
|
+
borrow the closest approved shape from `gold-standard-message-examples.md`
|
|
2683
2747
|
before inventing a new structure.
|
|
2684
2748
|
|
|
2685
2749
|
### Single Row
|