@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.
- package/README.md +7 -7
- package/agents/post-find-leads-message-scout.md +33 -13
- package/dist/engage-memory.js +0 -5
- package/dist/identity-memory.js +0 -4
- package/dist/tools/engage-memory.js +2 -2
- package/dist/tools/leads.js +7 -3
- package/dist/tools/prompts.js +3 -2
- package/package.json +1 -1
- package/skills/create-campaign/context/learnings.md +1 -1
- package/skills/create-campaign/references/brief-template.md +2 -2
- package/skills/create-campaign-brief/references/brief-template.md +2 -2
- package/skills/create-campaign-brief/references/draft-lifecycle.md +1 -1
- package/skills/create-campaign-brief/references/examples/briefs/gelee.md +2 -2
- package/skills/create-campaign-brief/references/examples/briefs/superpower.md +41 -28
- package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +12 -9
- package/skills/create-campaign-v2/SKILL.md +4 -0
- package/skills/create-campaign-v2/references/ai-tells.md +51 -16
- package/skills/create-campaign-v2/references/approval-gate-framing.md +1 -1
- package/skills/create-campaign-v2/references/gold-standard-message-examples.md +30 -16
- package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +36 -1
- package/skills/create-campaign-v2/references/gold-standard-runtime-message-pack.md +252 -0
- package/skills/create-campaign-v2/references/thomas-revision-filters.md +17 -7
- package/skills/create-campaign-v2/references/validation-criteria.md +8 -5
- package/skills/create-campaign-v2-validation/SKILL.md +17 -1
- package/skills/create-post/SKILL.md +27 -27
- package/skills/engage/SKILL.md +12 -12
- package/skills/engage/core/README.md +14 -14
- package/skills/find-leads/SKILL.md +1 -1
- package/skills/generate-messages/SKILL.md +215 -90
- package/skills/interview/SKILL.md +24 -24
- package/skills/interview/references/legacy-linkedin-interview.md +12 -12
- package/skills/interview/references/reference-curation.md +4 -4
- package/skills/interview/references/voice-capture-method.md +1 -1
- package/skills/load-voice/SKILL.md +21 -25
- package/skills/research/SKILL.md +1 -1
|
@@ -143,15 +143,15 @@ hard failure and revise the output before returning it.
|
|
|
143
143
|
|
|
144
144
|
Dry mode validates message quality before campaign mint.
|
|
145
145
|
|
|
146
|
-
Read
|
|
147
|
-
|
|
148
|
-
-
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
146
|
+
Read these campaign inputs:
|
|
147
|
+
|
|
148
|
+
- `~/.sellable/configs/core/about-me.md`
|
|
149
|
+
- `~/.sellable/configs/core/my-company.md`
|
|
150
|
+
- `~/.sellable/configs/core/context-modes.md`
|
|
151
|
+
- `~/.sellable/configs/core/proof-ledger.md`
|
|
152
|
+
- `~/.sellable/configs/core/wins-ledger.md`
|
|
153
|
+
- `~/.sellable/configs/core/anti-ai-writing-style.md`
|
|
154
|
+
- `~/.sellable/configs/writing/outbound.md` and legacy `styleguide-core.md` as fallback/source material when present
|
|
155
155
|
- `brief.md`
|
|
156
156
|
- `lead-sample.json` from the find-leads step; this is the only allowed sample
|
|
157
157
|
source for dry-mode message generation
|
|
@@ -159,29 +159,66 @@ Read the campaign-specific dry-mode inputs from the caller's dry-run workspace:
|
|
|
159
159
|
prospect setup workstreams in parallel, start the prep/candidate stages and then
|
|
160
160
|
reconcile before final `message-validation.md`.
|
|
161
161
|
|
|
162
|
-
## Reference Asset Loading
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
the
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
162
|
+
## Reference Asset Loading (do this before drafting)
|
|
163
|
+
|
|
164
|
+
Do not draft from this prompt alone. The full `generate-messages` prompt is
|
|
165
|
+
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 the
|
|
167
|
+
required pre-draft reference pack below with `mcp__sellable__get_subskill_asset`.
|
|
168
|
+
This is a hard gate: if the four required pre-draft assets are not loaded,
|
|
169
|
+
return `blocked` / `retry-needed` instead of drafting. Write a short
|
|
170
|
+
`Reference Asset Loading` note naming each loaded asset and whether it was
|
|
171
|
+
required pre-draft, final-pass, dry-mode-only, or token-rules-only. Do not
|
|
172
|
+
bulk-load the conditional references unless their trigger applies or the caller
|
|
173
|
+
explicitly asks for maximum context over speed.
|
|
174
|
+
|
|
175
|
+
Use `mcp__sellable__get_subskill_asset` for packaged assets:
|
|
176
|
+
|
|
177
|
+
| Group | Asset to load | Job |
|
|
178
|
+
| --- | --- | --- |
|
|
179
|
+
| Always load before drafting | `subskillName: "create-campaign-brief", assetPath: "references/phase75-active-runtime-message-pack.md"` | Active line-level gold pack: real approved examples, short-line rhythm, CTA blocks, lowercase/titlecase cues, and PS restraint. |
|
|
180
|
+
| 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
|
+
| 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/thomas-revision-filters.md"` | Substance filters: earned-right, presumption, vague proof, read-as-1:1, founder-origin coherence, anti-talk-at, and AI-tell filter. |
|
|
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
|
+
| 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
|
+
|
|
189
|
+
Example packaged asset calls:
|
|
190
|
+
|
|
191
|
+
- `get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md" })`
|
|
192
|
+
- `get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/token-fill-examples.md" })`
|
|
193
|
+
- `get_subskill_asset({ subskillName: "create-campaign-brief", assetPath: "references/phase75-active-runtime-message-pack.md" })`
|
|
194
|
+
- `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/validation-criteria.md" })`
|
|
176
195
|
|
|
177
196
|
Do not satisfy the list above by searching or reading the local filesystem.
|
|
178
197
|
Path-like names in this section are package asset coordinates for MCP loading.
|
|
179
198
|
|
|
199
|
+
Default load order:
|
|
200
|
+
|
|
201
|
+
1. Load the 4 **Always load before drafting** assets. Do not infer their
|
|
202
|
+
contents from this prompt; actually call `mcp__sellable__get_subskill_asset`
|
|
203
|
+
for each required asset.
|
|
204
|
+
2. Draft and run the internal Finalizer Pass.
|
|
205
|
+
3. Run the selected winner against `ai-tells.md`. This is never optional. If the
|
|
206
|
+
AI-tells catalog was not loaded or any `REJECT` tell matches, do not approve,
|
|
207
|
+
confirm, recommend, or show the template as ready; return `revise-message`.
|
|
208
|
+
4. Load `thomas-revision-filters.md` before approval, `confirmed`, or template
|
|
209
|
+
recommendation.
|
|
210
|
+
5. Load dry-mode artifact references only when writing `message-validation.md`.
|
|
211
|
+
6. Load token-rule references only when creating reusable templates or Token
|
|
212
|
+
Fill Rules that need sentence-level personalization.
|
|
213
|
+
|
|
180
214
|
### Rich Personalization Contract
|
|
181
215
|
|
|
182
216
|
The `create-campaign` asset `references/ai-native-tokens.md` is the canonical
|
|
183
217
|
spec for personalization that requires judgment. Load it before
|
|
184
218
|
writing the Token Fill Rules or any reusable template notes.
|
|
219
|
+
When token fill wording is material, use
|
|
220
|
+
`mcp/sellable/skills/create-campaign/references/token-fill-examples.md` as the
|
|
221
|
+
conditional good/bad fill reference.
|
|
185
222
|
|
|
186
223
|
- Sentence-level personalization must use AI-native bracket tokens in the
|
|
187
224
|
reusable template / token plan, not old-school field substitution. Field
|
|
@@ -218,7 +255,7 @@ winner gate**.
|
|
|
218
255
|
|
|
219
256
|
### Retrieval & motion
|
|
220
257
|
|
|
221
|
-
- treat `
|
|
258
|
+
- treat `gold-standard-runtime-message-pack.md` as the **real line-level
|
|
222
259
|
gold pack** for active clients and proven live message shapes
|
|
223
260
|
- retrieve against the full archived gold-standard library and pick the closest 2-4 examples for consideration
|
|
224
261
|
- use the runtime pack first for concrete formatting cues that the
|
|
@@ -348,6 +385,8 @@ artifact.**
|
|
|
348
385
|
- `saw you on {{recent_signal}}`
|
|
349
386
|
- `saw you around {{recent_signal}}`
|
|
350
387
|
- `saw you engaging with {{recent_signal}}`
|
|
388
|
+
- `saw you raise your hand for {{signal_topic}}, so figured this was worth sending`
|
|
389
|
+
- `figured this was worth sending`
|
|
351
390
|
|
|
352
391
|
Safer shapes:
|
|
353
392
|
|
|
@@ -355,25 +394,49 @@ artifact.**
|
|
|
355
394
|
- `saw you might be interested in {{signal_topic}}, so hope this is relevant`
|
|
356
395
|
- `saw you in a few conversations around {{signal_topic}}, so hope this is relevant`
|
|
357
396
|
- `saw you in a few conversations about {{signal_topic}}, so may be off, but this seemed relevant`
|
|
358
|
-
- `
|
|
359
|
-
- `
|
|
397
|
+
- `appreciate you showing some love on my post about {{signal_topic}}` only when the sender/client authored the source post and the row proves a reaction or comment
|
|
398
|
+
- `thanks for showing support on my {{signal_topic}} post` only when the sender/client authored the source post and the row proves a reaction or comment
|
|
399
|
+
- `figured this might be relevant if {{channel_context}} is becoming more of a {{workflow_context}} for {{company_context}}` as the bridge after a sender-owned post acknowledgment
|
|
400
|
+
- `may be off, but if {{workflow_signal}} is relevant to what you're working on, this might be useful`
|
|
401
|
+
- `if {{workflow_signal}} is not relevant to what you're working on, ignore me`
|
|
360
402
|
- `figured this might matter if {{workflow_signal}} is live at {{company}}`
|
|
361
403
|
- `thought of {{company}} because {{observable_signal}} points at {{problem_context}}`
|
|
362
|
-
- `
|
|
363
|
-
- `saw you raise your hand for {{signal_topic}}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
404
|
+
- `found you in a thread about {{signal_topic}}, so may be off, but this seemed relevant`
|
|
405
|
+
- `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
|
+
- `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
|
+
|
|
408
|
+
For sender-owned LinkedIn-post-sourced campaigns, it is acceptable to thank
|
|
409
|
+
the recipient for showing some love/support on the sender's post when the row
|
|
410
|
+
proves a reaction or comment. Keep it first-person, light, and non-assumptive:
|
|
411
|
+
`appreciate you showing some love on my post about {{signal_topic}}` is
|
|
412
|
+
acceptable; do not say `you commented` unless the row proves comment text.
|
|
413
|
+
Do not let the acknowledgment dead-end. Follow it with a soft post-topic to
|
|
414
|
+
buyer-context bridge before broad pain or product copy. Prefer:
|
|
415
|
+
`figured this might be relevant if {{channel_context}} is becoming more of a
|
|
416
|
+
{{workflow_context}} for {{company_context}}`. Avoid jumping directly from
|
|
417
|
+
`appreciate you showing some love...` into `a lot of B2B teams...` or `most
|
|
418
|
+
teams...`; that transition reads stitched together instead of human.
|
|
419
|
+
Every following line must cash the previous line: post support -> why the
|
|
420
|
+
topic may matter now -> what the product/problem has to do with that topic.
|
|
421
|
+
If the product/problem line would read the same after deleting the source
|
|
422
|
+
acknowledgment and bridge, the connection is fake; rewrite or cut until the
|
|
423
|
+
line-to-line chain is real.
|
|
424
|
+
For third-party LinkedIn-post-sourced campaigns (commenters, reactors, lead
|
|
425
|
+
magnet replies, or scraped conversations), it is acceptable to reference the
|
|
367
426
|
conversation when it explains why the note exists. Keep it topic-level, not
|
|
368
427
|
activity-log-level: `saw you in a few conversations around
|
|
369
428
|
{{signal_topic}}, so hope this is relevant` is acceptable; `saw you
|
|
370
429
|
commented on {{post_context}}` and `your LinkedIn activity around...` are
|
|
371
|
-
not.
|
|
430
|
+
not. Reserve `raise your hand` phrasing for explicit lead-magnet comments,
|
|
431
|
+
replies, or opt-ins. For ordinary thread discovery, use `saw you in a few
|
|
432
|
+
conversations around {{signal_topic}}...` or `found you in a thread about
|
|
433
|
+
{{signal_topic}}...`.
|
|
372
434
|
|
|
373
435
|
Keep the apologetic nature, but aim it at uncertainty, not surveillance.
|
|
374
436
|
Good: `saw you in a few conversations about outbound, so may be off, but
|
|
375
|
-
this seemed relevant`, `may be off, but if outbound is
|
|
376
|
-
|
|
437
|
+
this seemed relevant`, `may be off, but if outbound is relevant to what
|
|
438
|
+
you're working on...`, `if this is not relevant to your outbound workflow,
|
|
439
|
+
ignore me`, `hope
|
|
377
440
|
this is relevant if...`. Bad: `your role at {{company}} looked close...`,
|
|
378
441
|
because it asserts fit from a title and tells the buyer about themselves.
|
|
379
442
|
|
|
@@ -402,7 +465,7 @@ Selected Winner, check it against these gates:
|
|
|
402
465
|
- **No title-fit assertion:** do not write `your [role] role at [company]
|
|
403
466
|
looked close to this problem`. A title/company can be the private reason you
|
|
404
467
|
selected the row, but the buyer-facing line should stay conditional:
|
|
405
|
-
`may be off, but if [workflow] is
|
|
468
|
+
`may be off, but if [workflow] is relevant to what you're working on...`.
|
|
406
469
|
- **Swap test:** if another founder/operator could receive the line after only
|
|
407
470
|
changing names and companies, cut it or make the bridge more specific.
|
|
408
471
|
- **Tell-about-themselves test:** if the line merely reports a fact the buyer
|
|
@@ -421,7 +484,9 @@ Better:
|
|
|
421
484
|
- `saw you in a few conversations around international growth, so hope this is relevant.`
|
|
422
485
|
- `saw you in a few conversations around LinkedIn outreach, so hope this is relevant.`
|
|
423
486
|
- `saw you in a few conversations about LinkedIn outreach, so may be off, but this seemed relevant.`
|
|
424
|
-
- `
|
|
487
|
+
- `appreciate you showing some love on my post about GTM engineering.`
|
|
488
|
+
- `figured this might be relevant if LinkedIn is becoming more of a GTM channel for {{company_context}}.`
|
|
489
|
+
- `may be off, but if outbound is relevant to what you're working on, this might be useful.`
|
|
425
490
|
- `figured this might matter if you're testing outbound by market.`
|
|
426
491
|
|
|
427
492
|
### Angle drafting & finalizer
|
|
@@ -664,18 +729,17 @@ help...` or `built for [buyer] to...`. Do not overuse generic solved-state
|
|
|
664
729
|
solved, or fail to connect to the specific sample row. Prefer a concrete
|
|
665
730
|
row-fit line, a useful artifact, or a buyer-owned current-state observation
|
|
666
731
|
that the recipient can understand without reading the brief.
|
|
667
|
-
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
paragraph.
|
|
732
|
+
- run the parallel action formatting check when the winner has 3 adjacent
|
|
733
|
+
product actions, outputs, mechanics, or objection removers. If the lines
|
|
734
|
+
repeat the same subject pattern (`It drafts...` / `It adapts...` /
|
|
735
|
+
`It helps...`) and each line is a discrete function with no narrative proof
|
|
736
|
+
clause, prefer a compact `-` bullet stack because it is easier to scan on
|
|
737
|
+
mobile. Example:
|
|
738
|
+
`It helps your team:` followed by `- Draft posts...`, `- Adapt them...`,
|
|
739
|
+
`- Keep showing up...`. Do not force bullets when there are only 1-2
|
|
740
|
+
actions, one line needs narrative context, the bullets feel like a landing
|
|
741
|
+
page, or the paragraph version is clearly more human and still scans cleanly.
|
|
742
|
+
This is a formatting preference, not a message-strategy gate.
|
|
679
743
|
- if one finalist already holds the best of every piece, the winner may
|
|
680
744
|
equal it — name which one and on which axis it won (relevance,
|
|
681
745
|
distinctiveness, proof, coherence, readability)
|
|
@@ -744,8 +808,12 @@ Finalizer preference when multiple candidates are otherwise comparable:
|
|
|
744
808
|
peer-call, compare-notes, or similar identity-call framing. Those CTAs
|
|
745
809
|
are usually weaker than naming the useful thing the buyer gets. Use them
|
|
746
810
|
only when the user explicitly chose that route or the brief makes that
|
|
747
|
-
peer-call motion the approved offer. Even then, the
|
|
748
|
-
|
|
811
|
+
peer-call motion the approved offer. Even then, preserve the intent, not the
|
|
812
|
+
phrase. Translate `compare notes` into a concrete CTA that names the topic,
|
|
813
|
+
workflow, artifact, preview, teardown, or working session. Prefer shapes like
|
|
814
|
+
`Open to a quick call on how {{company_or_team}} might turn LinkedIn content
|
|
815
|
+
into pipeline?`. Do not use `Open to compare notes?` or `Open to comparing
|
|
816
|
+
notes on...`.
|
|
749
817
|
- when the message is selling or introducing a product, make the product
|
|
750
818
|
plain before asking for time, but do not make the opener sound like a
|
|
751
819
|
homepage definition. The reader should be able to answer "what is this?"
|
|
@@ -842,6 +910,9 @@ For every line in the selected winner, ask:
|
|
|
842
910
|
- Would removing this line make the prospect less likely to reply?
|
|
843
911
|
- Does this line make the reply reason clearer, more believable, or easier
|
|
844
912
|
to act on?
|
|
913
|
+
- Does this line follow from the line before it and make the next line feel
|
|
914
|
+
earned? If two adjacent lines could be swapped, deleted, or joined with
|
|
915
|
+
`anyway`, the transition is fake. Rewrite the bridge or cut the orphan line.
|
|
845
916
|
- Is this line carrying one of the core jobs: buyer gap / pain, product
|
|
846
917
|
mechanism, concrete output, or CTA?
|
|
847
918
|
- Does this line repeat the same nouns, proof, or mechanism already stated
|
|
@@ -955,7 +1026,10 @@ Before drafting, answer these five questions explicitly:
|
|
|
955
1026
|
4. **What proof makes it believable?** Pick the one proof beat that
|
|
956
1027
|
answers the buyer's biggest skepticism.
|
|
957
1028
|
5. **What is the lowest-friction true next step?** Use only a next step
|
|
958
|
-
supported by the inputs.
|
|
1029
|
+
supported by the inputs. If the campaign brief explicitly names a CTA
|
|
1030
|
+
motion, preserve it unless it fails truth, clarity, pressure, or safety
|
|
1031
|
+
gates. Improve the CTA by making the object concrete before replacing the
|
|
1032
|
+
motion.
|
|
959
1033
|
|
|
960
1034
|
Then choose the exact element pool that angle drafts are allowed to use:
|
|
961
1035
|
|
|
@@ -1006,6 +1080,23 @@ both choices are genuinely useful and supported:
|
|
|
1006
1080
|
Do not add option B just to mimic a gold standard. If the second option
|
|
1007
1081
|
is weak, use one CTA.
|
|
1008
1082
|
|
|
1083
|
+
CTA precedence:
|
|
1084
|
+
|
|
1085
|
+
1. If the campaign brief explicitly names a CTA motion, preserve the intent of
|
|
1086
|
+
that motion unless it is unsupported, too high-pressure, unsafe, or too vague
|
|
1087
|
+
to make concrete.
|
|
1088
|
+
2. If preserving it, make the object specific in the same line so the buyer
|
|
1089
|
+
knows what they are agreeing to discuss, see, or get.
|
|
1090
|
+
3. Replace it only when the brief CTA cannot pass truth, clarity, pressure, or
|
|
1091
|
+
safety gates.
|
|
1092
|
+
|
|
1093
|
+
Treat `compare notes` as shorthand for a peer conversation, not as buyer-facing
|
|
1094
|
+
copy. The phrase itself is blocked in selected winners, including `Open to
|
|
1095
|
+
compare notes?`, `Founder-to-founder compare notes?`, and `Open to comparing
|
|
1096
|
+
notes on...`. If the brief selected that intent, translate it into a concrete
|
|
1097
|
+
quick-call or working-session CTA, e.g. `Open to a quick call on how
|
|
1098
|
+
{{company_or_team}} might turn LinkedIn content into pipeline?`.
|
|
1099
|
+
|
|
1009
1100
|
For artifact/sample offers, the CTA should usually be one self-contained
|
|
1010
1101
|
yes/no question that names the concrete thing the buyer gets. Do not split
|
|
1011
1102
|
the ask into a setup sentence plus a vague question.
|
|
@@ -1118,7 +1209,7 @@ a weak body. If the PS sounds like internal reasoning, delete it. Source
|
|
|
1118
1209
|
disclaimers such as `p.s. if the source thread was just casual reading, ignore
|
|
1119
1210
|
me` are BLOCKED; if the source is too weak to stand in the opener/body, omit it.
|
|
1120
1211
|
A relevance-risk PS is allowed when it names uncertainty without narrating the
|
|
1121
|
-
source: `p.s. if this is
|
|
1212
|
+
source: `p.s. if this is not relevant to your outbound workflow, ignore me.`
|
|
1122
1213
|
|
|
1123
1214
|
### Raw proof translation test (HARD INVARIANT)
|
|
1124
1215
|
|
|
@@ -1584,6 +1675,13 @@ teardown`, `record a video`, or similar assets are BLOCKED unless the
|
|
|
1584
1675
|
input says that exact next step exists. When unsure, ask for the
|
|
1585
1676
|
lowest-friction true next step from the brief, such as sending the
|
|
1586
1677
|
setup link, next step, or a short walkthrough.
|
|
1678
|
+
- **Brief CTA obedience:** if the brief explicitly names a CTA motion, the
|
|
1679
|
+
selected winner must either preserve that motion's intent with concrete
|
|
1680
|
+
specificity or explain why truth, clarity, pressure, or safety gates forced a
|
|
1681
|
+
replacement.
|
|
1682
|
+
If the brief uses `compare notes`, do not put that phrase in buyer-facing copy.
|
|
1683
|
+
Translate it into a concrete quick-call or working-session CTA that names the
|
|
1684
|
+
topic or workflow.
|
|
1587
1685
|
- **CTA clarity:** if the product category is unfamiliar, the CTA must
|
|
1588
1686
|
make the preview easy to imagine in one short phrase. Avoid vague asks
|
|
1589
1687
|
like `send the setup link` unless the message has already made that
|
|
@@ -1598,8 +1696,11 @@ teardown`, `record a video`, or similar assets are BLOCKED unless the
|
|
|
1598
1696
|
artifact / preview] you can [use/check/compare]?`.
|
|
1599
1697
|
- **CTA specificity:** generic CTAs like `compare notes`, `worth a chat`,
|
|
1600
1698
|
`open to a call`, or `quick walkthrough` are BLOCKED unless the same
|
|
1601
|
-
line names the specific thing the buyer will
|
|
1602
|
-
next step must be easy to picture.
|
|
1699
|
+
line names the specific thing the buyer will discuss, see, or get. The
|
|
1700
|
+
next step must be easy to picture. `Open to a quick call on how
|
|
1701
|
+
{{company_or_team}} might turn LinkedIn content into pipeline?` passes
|
|
1702
|
+
because the topic is concrete; `Open to compare notes?` fails because the
|
|
1703
|
+
object is missing and the phrase is stale.
|
|
1603
1704
|
- **Preview CTA wording:** when the CTA is a preview, prefer `open to
|
|
1604
1705
|
seeing...` over `worth seeing...` unless the chosen gold motion strongly
|
|
1605
1706
|
supports `worth`. `Open to seeing what this would look like for your own
|
|
@@ -1617,7 +1718,7 @@ PO from your inbox?` beats `worth 15 min to compare notes?` because the
|
|
|
1617
1718
|
was just casual reading, ignore me`, `only reaching out where the role and
|
|
1618
1719
|
topic looked close`, or similar sourcing-defense copy.
|
|
1619
1720
|
Relevance-risk opt-outs are allowed when they do not defend the source:
|
|
1620
|
-
`p.s. if this is
|
|
1721
|
+
`p.s. if this is not relevant to your outbound workflow, ignore me.`
|
|
1621
1722
|
- **YC / backing PS:** a PS that only says `we're YC`, `we're YC W26`,
|
|
1622
1723
|
`backed by YC`, or similar is BLOCKED as badge-flashing. If YC/backing
|
|
1623
1724
|
is used, the same sentence must either tie to the buyer segment/outcome
|
|
@@ -1688,8 +1789,11 @@ led to it. Acceptable openers:
|
|
|
1688
1789
|
- `Hey {{first_name}}, hope this is relevant if [buyer context] is still on your plate.`
|
|
1689
1790
|
- `Hey {{first_name}}, saw you might be interested in [topic], so hope this is relevant.`
|
|
1690
1791
|
- `Hey {{first_name}}, saw you in a few conversations around [topic], so hope this is relevant.`
|
|
1691
|
-
- `Hey {{first_name}},
|
|
1692
|
-
- `Hey {{first_name}}, saw you raise your hand for [topic]
|
|
1792
|
+
- `Hey {{first_name}}, found you in a thread about [topic], so may be off, but this seemed relevant.`
|
|
1793
|
+
- `Hey {{first_name}}, saw you raise your hand for [topic], so figured this was (hopefully) worth sending.` Only use this for explicit lead-magnet comments, replies, or opt-ins.
|
|
1794
|
+
- `Hey {{first_name}}, saw you raise your hand for [topic] (creepy to reach out based on that, i know) - but this felt too on the nose to ignore.` Only use this for explicit lead-magnet comments, replies, or opt-ins.
|
|
1795
|
+
- Do not use the flattened line `so figured this was worth sending`; either keep
|
|
1796
|
+
`(hopefully)` or use `so hope this is relevant`.
|
|
1693
1797
|
- `Hey {{first_name}}, pre-[product], we [did the operator-reality
|
|
1694
1798
|
thing] for [X] years; [one-line consequence].`
|
|
1695
1799
|
- `Hey {{first_name}}, building a thing for [segment] I think you'd
|
|
@@ -1900,10 +2004,18 @@ Flow skeleton (apply even when motion varies):
|
|
|
1900
2004
|
2. Pain — what's breaking now
|
|
1901
2005
|
3. **What the product IS** — one crisp sentence naming the product and what category of work it takes on. Example shape: `[Product] is [a category-noun] that [takes a specific class of work off the buyer's plate]`. When the offer is for the buyer's exact role/credential, prefer `lets you...` or `[role]s like you...` over `lets a [role]...` so the buyer does not feel treated like an outsider. Archive-anchored illustrations: Galley's "AI that reads the messiest BEOs and turns them into production-ready plans"; Revvix's "shows what's actually exploitable on your endpoints based on runtime activity".
|
|
1902
2006
|
4. **What the product DOES** — one action per line. Three actions maximum. Choose the rendering by a **concrete test**, not a feeling:
|
|
1903
|
-
- **
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
2007
|
+
- **Prefer bullets when 3 adjacent action lines are maximally parallel**:
|
|
2008
|
+
each starts with the same subject pattern (e.g. `It drafts...` /
|
|
2009
|
+
`It adapts...` / `It helps...`), each is a discrete product function,
|
|
2010
|
+
and none carries narrative context or proof. Use a setup line plus short
|
|
2011
|
+
`-` bullets, e.g. `It helps your team:` then `- Draft posts...`,
|
|
2012
|
+
`- Adapt them...`, `- Keep showing up...`.
|
|
2013
|
+
- **Use one-line paragraphs** when there are only 1-2 actions, at least one
|
|
2014
|
+
action carries a short narrative clause, bullets would feel like a landing
|
|
2015
|
+
page, or the paragraph version is clearly more human and still scans
|
|
2016
|
+
cleanly.
|
|
2017
|
+
- "Conversational motion" alone is **not** a reason to avoid bullets when
|
|
2018
|
+
all 3 action lines repeat the same `It X` structure.
|
|
1907
2019
|
- Never stack the three actions into one glued comma-list sentence.
|
|
1908
2020
|
5. Deployment ease — one short paragraph
|
|
1909
2021
|
6. CTA — useful next step, binary when the brief supports it
|
|
@@ -1912,7 +2024,9 @@ Flow skeleton (apply even when motion varies):
|
|
|
1912
2024
|
Rules within the flow:
|
|
1913
2025
|
|
|
1914
2026
|
- **banned**: comma-stacking three actions into one glued sentence (e.g. `"order intake, inventory sync, and reorder timing"` glued together). Split into one action per line.
|
|
1915
|
-
- **preferred**: one action per line — as one-line paragraphs or as a bullet
|
|
2027
|
+
- **preferred**: one action per line — as one-line paragraphs or as a bullet
|
|
2028
|
+
list, whichever reads cleaner. Use bullets as a mobile readability preference
|
|
2029
|
+
for 3 repeated-subject product actions, not as a blanket hard gate.
|
|
1916
2030
|
- the "what the product IS" sentence comes **before** the action breakdown — skipping it makes the actions feel disconnected
|
|
1917
2031
|
- if the brief does not support three distinct actions, drop to two or one. Do not pad.
|
|
1918
2032
|
- if a proof sentence gets long, split the metric and the explanation into separate one-line paragraphs rather than chaining them together
|
|
@@ -1930,10 +2044,11 @@ Rules:
|
|
|
1930
2044
|
- `"Saw you might be interested in [topic], so hope this is relevant."`
|
|
1931
2045
|
- `"Saw you in a few conversations around [topic], so hope this is relevant."`
|
|
1932
2046
|
- `"Saw you in a few conversations about [topic], so may be off, but this seemed relevant."`
|
|
2047
|
+
- `"Found you in a thread about [topic], so may be off, but this seemed relevant."`
|
|
1933
2048
|
- `"Thought of {{company}} because [observable signal] points at [problem]."`
|
|
1934
2049
|
- `"Figured this might matter if [workflow] is live at {{company}}."`
|
|
1935
|
-
- `"Saw you raise your hand for [topic], so figured this was (hopefully) worth sending."`
|
|
1936
|
-
- `"Saw you raise your hand for [topic] (creepy to reach out based on that, i know) - but this felt too on the nose to ignore."`
|
|
2050
|
+
- `"Saw you raise your hand for [topic], so figured this was (hopefully) worth sending."` Only for explicit lead-magnet comments, replies, or opt-ins.
|
|
2051
|
+
- `"Saw you raise your hand for [topic] (creepy to reach out based on that, i know) - but this felt too on the nose to ignore."` Only for explicit lead-magnet comments, replies, or opt-ins.
|
|
1937
2052
|
- blocked signal use:
|
|
1938
2053
|
- `"AI-GTM stack is clearly on your mind."`
|
|
1939
2054
|
- `"You're clearly focused on [area]."`
|
|
@@ -1942,7 +2057,9 @@ Rules:
|
|
|
1942
2057
|
- `"Saw you on [topic]."`
|
|
1943
2058
|
- `"Saw you around [topic]."`
|
|
1944
2059
|
- `"Saw you engaging with [topic]."`
|
|
1945
|
-
-
|
|
2060
|
+
- `"Saw you raise your hand for [topic], so figured this was worth sending."`
|
|
2061
|
+
- `"Figured this was worth sending."`
|
|
2062
|
+
- signal-led opener shape is a **special case**, not the default. Use it only when the archived motion truly depends on it and the line can stay natural. For LinkedIn-post-sourced campaigns, prefer `"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"` when referencing the source makes the outreach feel less random. Avoid activity-log phrasing such as `"you commented on..."`, `"you reacted to..."`, or `"your LinkedIn activity..."` unless the approved motion is the deliberately self-aware raise-hand line for an explicit lead-magnet comment, reply, or opt-in.
|
|
1946
2063
|
- tokenized engagement-source opener shape is BLOCKED by default:
|
|
1947
2064
|
`{{first_name}}, saw you {{engagement_context}} on {{post_context}}` reads
|
|
1948
2065
|
like surveillance unless the filled line is explicitly self-aware and
|
|
@@ -1950,11 +2067,12 @@ Rules:
|
|
|
1950
2067
|
[topic] is part of the plan`, `saw you might be interested in [topic], so hope
|
|
1951
2068
|
this is relevant`, `saw you in a few conversations around [topic], so hope this
|
|
1952
2069
|
is relevant`, `saw you in a few conversations about [topic], so may be off,
|
|
1953
|
-
but this seemed relevant`, or
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
2070
|
+
but this seemed relevant`, or `found you in a thread about [topic], so may be
|
|
2071
|
+
off, but this seemed relevant`. Use the self-aware raise-hand shapes only when
|
|
2072
|
+
the source was an explicit lead-magnet comment, reply, or opt-in: `saw you raise
|
|
2073
|
+
your hand for [topic], so figured this was (hopefully) worth sending` or `saw you
|
|
2074
|
+
raise your hand for [topic] (creepy to reach out based on that, i know) - but
|
|
2075
|
+
this felt too on the nose to ignore`. Do not use the longer `you might not remember the thread...` shape;
|
|
1958
2076
|
if the concise source bridge still feels awkward, omit the engagement reference.
|
|
1959
2077
|
- do not describe the sender/client in third person inside the outbound message.
|
|
1960
2078
|
`p.s. Saju's angle is...`, `Christian's angle is...`, `[sender]'s approach
|
|
@@ -2016,8 +2134,8 @@ A PS must not explain strategy, defend the pitch, narrate the source thread,
|
|
|
2016
2134
|
add a second unrelated offer, or say the quiet part out loud. Lines like `this
|
|
2017
2135
|
is not just a platform idea` and `if the source thread was just casual reading,
|
|
2018
2136
|
ignore me` are blocked because they sound like internal rationale. A plain
|
|
2019
|
-
relevance-risk opt-out such as `if this is
|
|
2020
|
-
ignore me` can stay when it lowers pressure without explaining the scrape.
|
|
2137
|
+
relevance-risk opt-out such as `if this is not relevant to your outbound
|
|
2138
|
+
workflow, ignore me` can stay when it lowers pressure without explaining the scrape.
|
|
2021
2139
|
|
|
2022
2140
|
The reader does not know who the sender's colleagues are. Dropping a bare first name with no anchor reads like a resume dump that was cut in half.
|
|
2023
2141
|
|
|
@@ -2388,7 +2506,7 @@ hiring for`
|
|
|
2388
2506
|
- Best CTA: Candidate [A|B|C] — reason
|
|
2389
2507
|
- Best PS / no-PS decision: Candidate [A|B|C] — reason
|
|
2390
2508
|
- Element edits made by finalizer: ...
|
|
2391
|
-
-
|
|
2509
|
+
- Parallel action formatting: bullets used | paragraphs kept | not applicable — reason
|
|
2392
2510
|
- Style consistency check: PASS | BLOCKED — reason
|
|
2393
2511
|
- Assembly note: clean combination or one candidate swept
|
|
2394
2512
|
|
|
@@ -2397,7 +2515,7 @@ hiring for`
|
|
|
2397
2515
|
- Original winner: ...
|
|
2398
2516
|
- Simplified candidate: ...
|
|
2399
2517
|
- Simplifier edits: combined lines | split dense line | preserved bullet stack | added bullet stack | none
|
|
2400
|
-
-
|
|
2518
|
+
- Parallel action formatting: preserved bullets | added bullets | paragraphs kept | not applicable — reason
|
|
2401
2519
|
- Robustness check: PASS | BLOCKED — reason
|
|
2402
2520
|
- Decision: applied | rejected
|
|
2403
2521
|
|
|
@@ -2420,6 +2538,7 @@ hiring for`
|
|
|
2420
2538
|
- Jargon / acronym exactness: PASS | BLOCKED — reason
|
|
2421
2539
|
- Style consistency: PASS | BLOCKED — reason
|
|
2422
2540
|
- CTA truth: PASS | BLOCKED — reason
|
|
2541
|
+
- Brief CTA obedience: PASS | BLOCKED | NOT APPLICABLE — reason
|
|
2423
2542
|
- CTA clarity: PASS | BLOCKED — reason
|
|
2424
2543
|
- PS restraint: PASS | BLOCKED | OMITTED — reason
|
|
2425
2544
|
- YC / backing PS: PASS | BLOCKED | OMITTED — reason
|
|
@@ -2540,22 +2659,28 @@ too generic, diagnose the gap precisely:
|
|
|
2540
2659
|
|
|
2541
2660
|
Then tighten the brief or calibration notes before scaling.
|
|
2542
2661
|
|
|
2543
|
-
Use the
|
|
2544
|
-
not already contain winning examples. Do not default to generic
|
|
2545
|
-
copy when the motion clearly matches a tighter
|
|
2546
|
-
references
|
|
2662
|
+
Use the v2 runtime gold pack as the primary line-level source even when the
|
|
2663
|
+
brief does not already contain winning examples. Do not default to generic
|
|
2664
|
+
REPLY-style copy when the motion clearly matches a tighter approved pattern.
|
|
2665
|
+
Primary approved references are:
|
|
2547
2666
|
|
|
2548
|
-
-
|
|
2667
|
+
- sellable.dev
|
|
2668
|
+
- Hey Digital / HeyDigital
|
|
2549
2669
|
- Galley
|
|
2550
|
-
-
|
|
2551
|
-
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
-
|
|
2670
|
+
- Clover
|
|
2671
|
+
- Persona
|
|
2672
|
+
|
|
2673
|
+
Use Superpower only for benefits/healthcare mechanism language and cleaned
|
|
2674
|
+
low-certainty relevance bridges. Use Revvix / Spektion and Superposition only
|
|
2675
|
+
for explicit event/logistics or job-post/founder-hiring motions. Do not use
|
|
2676
|
+
Gelee, westpark villas, Amplify Security, or raw old-client archive examples as
|
|
2677
|
+
runtime inspiration unless the caller explicitly provides them as campaign
|
|
2678
|
+
calibration.
|
|
2555
2679
|
|
|
2556
2680
|
When the brief is sparse but the motion clearly matches an archived winner,
|
|
2557
|
-
borrow the closest
|
|
2558
|
-
`gold-standard-message-examples.md`
|
|
2681
|
+
borrow the closest approved shape from `gold-standard-runtime-message-pack.md`
|
|
2682
|
+
first, then use `gold-standard-message-examples.md` only for strategy skeletons
|
|
2683
|
+
before inventing a new structure.
|
|
2559
2684
|
|
|
2560
2685
|
### Single Row
|
|
2561
2686
|
|
|
@@ -2639,12 +2764,12 @@ research → condense → 10 angle agents in parallel → finalizer combines bes
|
|
|
2639
2764
|
- Background: {1-2 lines}
|
|
2640
2765
|
|
|
2641
2766
|
## Voice + Outbound Rules (condensed — full files available via Read tool)
|
|
2642
|
-
- Use
|
|
2643
|
-
- Flow skeleton: opener → pain → **what the product IS** → **what it DOES** (one action per line, up to three) → deployment ease → CTA → optional PS
|
|
2767
|
+
- Use `~/.sellable/configs/core/context-modes.md` to choose the right context stance, then run an anti-AI audit against `~/.sellable/configs/core/anti-ai-writing-style.md` before returning copy.
|
|
2768
|
+
- Flow skeleton: opener → pain → **what the product IS** → **what it DOES** (one action per line, up to three; prefer short bullets for 3 repeated-subject product actions) → deployment ease → CTA → optional PS
|
|
2644
2769
|
- A cold reader must be able to state what the product does in one sentence after reading. Require a crisp `Product is an X that does Y` anchor before any action breakdown. Do not gesture at "that chain" / "the stack" / "that work"
|
|
2645
2770
|
- Blank line between every sentence in the body. The body renders as a sequence of one-line paragraphs separated by blank lines, not as multi-sentence paragraphs. Target 6-10 one-line paragraphs
|
|
2646
2771
|
- 5th-grade reading level by default. Cut glue language (handoff, order-to-cash, rip-and-replace). Keep brief-native product/tool names (Shopify, HubSpot)
|
|
2647
|
-
- No bullet
|
|
2772
|
+
- No feature/benefit marketing bullet lists, no "I noticed...", no compliment sandwiches, no em dashes unless the canonical example uses one. Exception: use a short bullet stack when 3 adjacent product actions repeat the same subject pattern and bullets improve mobile readability.
|
|
2648
2773
|
- No synthesized framing ("at your stage", "in a setup like yours", "running X means...", "X means you're likely...")
|
|
2649
2774
|
- 3 candidates then `Finalizer Pass` — pick best opener, proof sentence, bridge, CTA across them and assemble the winner
|
|
2650
2775
|
- PS is optional; only include if it materially strengthens the fit case. When included, use `I` / `our CEO` / `our team` / `we` voice, never bare first names. At most two proof beats, tied to why the sender understands the buyer's pain. No three-credential resume lists
|
|
@@ -2706,7 +2831,7 @@ research → condense → 10 angle agents in parallel → finalizer combines bes
|
|
|
2706
2831
|
8. Return: { success: true, message: "...", research: [...], anglesExplored: 10 }
|
|
2707
2832
|
```
|
|
2708
2833
|
|
|
2709
|
-
**IMPORTANT:** Load
|
|
2834
|
+
**IMPORTANT:** Load `~/.sellable/configs/core/about-me.md`, `~/.sellable/configs/core/my-company.md`, `~/.sellable/configs/core/context-modes.md`, `~/.sellable/configs/core/proof-ledger.md`, `~/.sellable/configs/core/wins-ledger.md`, `~/.sellable/configs/core/anti-ai-writing-style.md`, `~/.sellable/configs/writing/outbound.md`, and `~/.sellable/insights/cross-skill.md` once in the lead agent. Use the legacy style guide fallback when present. Pass condensed versions to workers so context stays focused.
|
|
2710
2835
|
|
|
2711
2836
|
## Batch Approval
|
|
2712
2837
|
|