@sellable/mcp 0.1.203 → 0.1.204
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/dist/engage-memory.js +0 -5
- package/dist/identity-memory.js +0 -4
- package/dist/index-dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/tools/engage-memory.js +2 -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/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 +1 -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 +6 -1
- package/skills/create-campaign-v2/references/validation-criteria.md +8 -5
- package/skills/create-campaign-v2-validation/SKILL.md +1 -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 +99 -49
- 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
|
@@ -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
|
+
```
|
|
@@ -77,7 +77,12 @@ Revise or reject the sample when any of these happen.
|
|
|
77
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
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..."`.
|
|
79
79
|
- **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
|
|
80
|
+
- **action lines are parallel and harder to scan as paragraphs** — when 3
|
|
81
|
+
adjacent product actions repeat the same subject pattern (e.g. `It drafts...`
|
|
82
|
+
/ `It adapts...` / `It helps...`) and none carries narrative proof context,
|
|
83
|
+
prefer a short bullet stack for mobile readability. Keep one-line paragraphs
|
|
84
|
+
when there are only 1-2 actions, one line needs narrative context, bullets
|
|
85
|
+
feel like a landing page, or the paragraph version is clearly more human.
|
|
81
86
|
- **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
87
|
- **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.
|
|
83
88
|
- **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
|
|
@@ -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
|
|
298
|
-
|
|
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
|
|
303
|
-
|
|
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).
|
|
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
|
-
|
|
31
|
+
~/.sellable/create-campaign-v2/drafts/{workspace-slug}/{campaign-slug}/
|
|
32
32
|
brief.md
|
|
33
33
|
lead-review.md
|
|
34
34
|
lead-sample.json
|
|
@@ -52,21 +52,21 @@ Core principle: Find what's ALREADY working on LinkedIn → deeply autopsy the H
|
|
|
52
52
|
|
|
53
53
|
3. Load memory (single call):
|
|
54
54
|
|
|
55
|
-
- Call `get_engage_memory()` to read composed core identity/company memory, proven searches, tracked people, and legacy compatibility memory from
|
|
55
|
+
- Call `get_engage_memory()` to read composed core identity/company memory, proven searches, tracked people, and legacy compatibility memory from `~/.sellable/configs/`.
|
|
56
56
|
- Treat `memory.styleGuide.markdown` as composed engage memory: core identity/company memory first, legacy files as fallback.
|
|
57
57
|
- If both core memory and compatibility voice memory are missing, inform the user they need to run the new core `interview` flow first.
|
|
58
58
|
|
|
59
59
|
4. Read core and sender voice-specific configs (built-in Read tool):
|
|
60
60
|
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
61
|
+
- `~/.sellable/configs/core/about-me.md` and `~/.sellable/configs/core/context-modes.md` (identity + context modes for post stance)
|
|
62
|
+
- `~/.sellable/configs/core/story-bank.md` and `~/.sellable/configs/core/answer-bank.md` (real stories and reusable answers)
|
|
63
|
+
- `~/.sellable/configs/core/proof-ledger.md` and `~/.sellable/configs/core/wins-ledger.md` (safe proof and social proof)
|
|
64
|
+
- `~/.sellable/configs/core/anti-ai-writing-style.md` (anti-AI audit)
|
|
65
|
+
- `~/.sellable/configs/core/references/linkedin-posts/INDEX.md` and copied files under `core/references/linkedin-posts/`
|
|
66
|
+
- `~/.sellable/configs/core/references/inspiration/INDEX.md` (structural inspiration and anti-pattern references)
|
|
67
|
+
- `~/.sellable/configs/writing/christian-reyes-linkedin-viral.md` (post-specific voice analysis)
|
|
68
|
+
- `~/.sellable/configs/content/linkedin-posts-drafts.md` (existing drafts + hook bank)
|
|
69
|
+
- `~/.sellable/configs/discovery/post-filters.md` (exclusion rules)
|
|
70
70
|
|
|
71
71
|
5. Use `memory.provenSearches` to prioritize high hit-rate keywords in discovery.
|
|
72
72
|
</bootstrap>
|
|
@@ -76,18 +76,18 @@ Core principle: Find what's ALREADY working on LinkedIn → deeply autopsy the H
|
|
|
76
76
|
## MCP Tools
|
|
77
77
|
|
|
78
78
|
- `mcp__sellable__get_auth_status` - Verify token + workspace context
|
|
79
|
-
- `mcp__sellable__get_engage_memory` - Read all memory from
|
|
79
|
+
- `mcp__sellable__get_engage_memory` - Read all memory from `~/.sellable/configs/` (style guide, proven searches, tracked people)
|
|
80
80
|
- `mcp__sellable__search_engagement_posts` - Wide post discovery by keyword
|
|
81
81
|
- `mcp__sellable__fetch_linkedin_posts` - Fetch recent posts for any LinkedIn profile
|
|
82
82
|
- `mcp__sellable__fetch_linkedin_profile` - Get LinkedIn profile details
|
|
83
|
-
- `mcp__sellable__record_engage_proven_search` - Update keyword stats in
|
|
83
|
+
- `mcp__sellable__record_engage_proven_search` - Update keyword stats in `~/.sellable/configs/discovery/proven-searches.md`
|
|
84
84
|
|
|
85
85
|
## Built-in Tools
|
|
86
86
|
|
|
87
87
|
- Task - Agent teams for parallel hook generation, drafting, and optimization
|
|
88
88
|
- AskUserQuestion - Interviewer and approval gates
|
|
89
|
-
- Read - Load voice configs, post drafts, and cross-skill insights from
|
|
90
|
-
- Write - Save approved posts to
|
|
89
|
+
- Read - Load voice configs, post drafts, and cross-skill insights from `~/.sellable/configs/` and `~/.sellable/insights/`
|
|
90
|
+
- Write - Save approved posts to `~/.sellable/configs/content/linkedin-posts-drafts.md` and session insights to `~/.sellable/insights/`
|
|
91
91
|
|
|
92
92
|
</tools>
|
|
93
93
|
|
|
@@ -317,19 +317,19 @@ Thresholds: 8.0+ = ship it | 6.5-7.9 = strong | 5.0-6.4 = needs rewrite | below
|
|
|
317
317
|
1. Run `get_auth_status`. If not OK, stop.
|
|
318
318
|
2. Call `get_engage_memory()` to load style guide, proven searches, tracked people.
|
|
319
319
|
3. Read voice-specific configs:
|
|
320
|
-
-
|
|
321
|
-
-
|
|
322
|
-
-
|
|
320
|
+
- `~/.sellable/configs/writing/christian-reyes-linkedin-viral.md`
|
|
321
|
+
- `~/.sellable/configs/content/linkedin-posts-drafts.md`
|
|
322
|
+
- `~/.sellable/configs/discovery/post-filters.md`
|
|
323
323
|
4. If style guide is missing, tell user to run `/interview` first.
|
|
324
324
|
5. **Fetch sender's last 20 posts** via `fetch_linkedin_posts` (lightweight voice reference — NOT a deep analysis agent, just a quick fetch):
|
|
325
325
|
- Store the top 10 by engagement as voice calibration samples
|
|
326
326
|
- Note the hooks, lengths, and endings that got the most engagement
|
|
327
327
|
- These are used later for voice-matching drafts, not as the primary inspiration
|
|
328
328
|
6. **Read cross-skill context** (lightweight — local files only, no API calls):
|
|
329
|
-
-
|
|
330
|
-
-
|
|
331
|
-
-
|
|
332
|
-
-
|
|
329
|
+
- `~/.sellable/configs/audience/icp.md` (ensure posts attract the right audience)
|
|
330
|
+
- `~/.sellable/configs/writing/comments.md` (comment angles that resonate → inform post topic selection)
|
|
331
|
+
- `~/.sellable/insights/cross-skill.md` (learnings from engage sessions — trending topics, what angles got approved)
|
|
332
|
+
- `~/.sellable/insights/engage-sessions.md` (**skim latest entry only** — topics getting engagement in comments, keyword performance, audience reactions)
|
|
333
333
|
- If any insight file doesn't exist yet, skip it silently — the system builds up over time.
|
|
334
334
|
7. Ask the sender for their topic area / keywords (or "find what's hot").
|
|
335
335
|
|
|
@@ -949,7 +949,7 @@ Ask: "Which posts do you want to publish? Any edits?"
|
|
|
949
949
|
2. Apply edits while maintaining voice fidelity and mobile optimization.
|
|
950
950
|
3. Re-present edited posts.
|
|
951
951
|
4. Repeat until sender approves.
|
|
952
|
-
5. On final approval, offer to save to
|
|
952
|
+
5. On final approval, offer to save to `~/.sellable/configs/content/linkedin-posts-drafts.md`.
|
|
953
953
|
|
|
954
954
|
### Memory Candidate Review
|
|
955
955
|
|
|
@@ -978,7 +978,7 @@ For each keyword used in discovery, call `record_engage_proven_search({ keyword,
|
|
|
978
978
|
|
|
979
979
|
### 10B: Save Winning Hooks + Body Patterns
|
|
980
980
|
|
|
981
|
-
Append to
|
|
981
|
+
Append to `~/.sellable/configs/content/linkedin-posts-drafts.md`:
|
|
982
982
|
|
|
983
983
|
```markdown
|
|
984
984
|
## Session [date]
|
|
@@ -997,7 +997,7 @@ Append to `.sellable/configs/content/linkedin-posts-drafts.md`:
|
|
|
997
997
|
|
|
998
998
|
### 10C: Save What Worked to Writing Config
|
|
999
999
|
|
|
1000
|
-
Update
|
|
1000
|
+
Update `~/.sellable/configs/writing/christian-reyes-linkedin-viral.md` by appending a new section:
|
|
1001
1001
|
|
|
1002
1002
|
```markdown
|
|
1003
1003
|
## Session Insights — [date]
|
|
@@ -1039,7 +1039,7 @@ Update `.sellable/configs/writing/christian-reyes-linkedin-viral.md` by appendin
|
|
|
1039
1039
|
|
|
1040
1040
|
### 10D: Save Unused Angles for Next Time (Top 9-10 Only)
|
|
1041
1041
|
|
|
1042
|
-
If the interview surfaced stories or angles that weren't used in this session's posts, save **only the top 9-10 strongest** to
|
|
1042
|
+
If the interview surfaced stories or angles that weren't used in this session's posts, save **only the top 9-10 strongest** to `~/.sellable/configs/content/linkedin-posts-drafts.md` under a "Queued Ideas" section. Don't hoard weak angles — if it's not worth posting next week, don't save it.
|
|
1043
1043
|
|
|
1044
1044
|
```markdown
|
|
1045
1045
|
## Queued Ideas (from [date] session)
|
|
@@ -1064,7 +1064,7 @@ If any viral post authors from this session are worth tracking for future discov
|
|
|
1064
1064
|
|
|
1065
1065
|
### 10F: Update Cross-Skill Insights
|
|
1066
1066
|
|
|
1067
|
-
**Append** a session summary to
|
|
1067
|
+
**Append** a session summary to `~/.sellable/insights/post-sessions.md` using the built-in Write tool:
|
|
1068
1068
|
|
|
1069
1069
|
```markdown
|
|
1070
1070
|
## Session — [date]
|
|
@@ -1090,7 +1090,7 @@ If any viral post authors from this session are worth tracking for future discov
|
|
|
1090
1090
|
[1-2 sentence synthesis]
|
|
1091
1091
|
```
|
|
1092
1092
|
|
|
1093
|
-
**If any insight from this session would help engage or campaigns**, also append to
|
|
1093
|
+
**If any insight from this session would help engage or campaigns**, also append to `~/.sellable/insights/cross-skill.md`:
|
|
1094
1094
|
|
|
1095
1095
|
- Format: `## From create-post ([date])` with bullet points
|
|
1096
1096
|
- e.g., "Bold reframe hooks scored 9+ — counter-intuitive numbers in line 1 force scroll-stop"
|
package/skills/engage/SKILL.md
CHANGED
|
@@ -59,7 +59,7 @@ Then proceed directly to Pre-Phase (Mode Detection). All auth, memory, and confi
|
|
|
59
59
|
- `mcp__sellable__get_auth_status` - Verify token + workspace context
|
|
60
60
|
- `mcp__sellable__bootstrap_engage` - Single-sender resolve + ensure comment campaign table + fetch engaged post URLs; persists defaults
|
|
61
61
|
- `mcp__sellable__bootstrap_engage_multi` - Multi-sender resolve: parallel per-sender table creation + engaged post fetch + globalEngagedPostUrls union
|
|
62
|
-
- `mcp__sellable__get_engage_memory` - Read backward-compatible engage memory plus optional core identity/company memory from
|
|
62
|
+
- `mcp__sellable__get_engage_memory` - Read backward-compatible engage memory plus optional core identity/company memory from `~/.sellable/configs/core/`. The `memory.styleGuide.markdown` blob is composed engage memory: core identity/company files first, then legacy comment/sender overrides. Accepts optional `senderId`.
|
|
63
63
|
- `mcp__sellable__set_engage_style_guide` - Write a legacy compatibility style override. Accepts optional `senderId`; it does not replace core identity memory.
|
|
64
64
|
- `mcp__sellable__record_engage_proven_search` - Update keyword stats. Accepts optional `senderId` for per-sender configs.
|
|
65
65
|
- `mcp__sellable__upsert_engage_tracked_person` - Add/update tracked person. Accepts optional `senderId` for per-sender configs.
|
|
@@ -75,8 +75,8 @@ Then proceed directly to Pre-Phase (Mode Detection). All auth, memory, and confi
|
|
|
75
75
|
|
|
76
76
|
- Task - Parallel discovery agents (fresh-scanner + deep-scanner)
|
|
77
77
|
- AskUserQuestion - Optional interview + approvals
|
|
78
|
-
- Read - Load voice configs, post filters, and cross-skill insights from
|
|
79
|
-
- Write - Save session insights to
|
|
78
|
+
- Read - Load voice configs, post filters, and cross-skill insights from `~/.sellable/configs/` and `~/.sellable/insights/`
|
|
79
|
+
- Write - Save session insights to `~/.sellable/insights/`
|
|
80
80
|
|
|
81
81
|
</tools>
|
|
82
82
|
|
|
@@ -169,7 +169,7 @@ For EACH sender, call `fetch_linkedin_posts({ linkedinUrl: sender.senderLinkedin
|
|
|
169
169
|
For EACH sender, call `get_engage_memory({ senderId })`:
|
|
170
170
|
|
|
171
171
|
- Treat `memory.styleGuide.markdown` as composed engage memory, not a flat-only style file.
|
|
172
|
-
- Primary memory comes from
|
|
172
|
+
- Primary memory comes from `~/.sellable/configs/core/about-me.md`, `my-company.md`, `anti-ai-writing-style.md`, `proof-ledger.md`, `wins-ledger.md`, `story-bank.md`, `answer-bank.md`, `context-modes.md`, and `decision-rules.md` when present.
|
|
173
173
|
- Legacy sender files under `senders/{senderId}/` and flat `writing/*`, `audience/*`, and `faqs/*` are compatibility fallbacks and overrides.
|
|
174
174
|
- If core identity/company memory and legacy voice memory are both missing, tell the user to run the new core `interview` flow before drafting.
|
|
175
175
|
|
|
@@ -177,17 +177,17 @@ For EACH sender, call `get_engage_memory({ senderId })`:
|
|
|
177
177
|
|
|
178
178
|
Read (built-in Read tool):
|
|
179
179
|
|
|
180
|
-
-
|
|
180
|
+
- `~/.sellable/configs/writing/comments.md` (comment-specific rules, quality gate, approved examples)
|
|
181
181
|
- The composed engage memory is already loaded via `get_engage_memory` above. Treat the legacy writing style guide as fallback/source material, not as the primary voice source.
|
|
182
|
-
- If present and useful for final gates, skim
|
|
182
|
+
- If present and useful for final gates, skim `~/.sellable/configs/core/anti-ai-writing-style.md` and `~/.sellable/configs/core/proof-ledger.md`.
|
|
183
183
|
|
|
184
184
|
### Step 0.6: Read cross-skill context [OPTIONAL]
|
|
185
185
|
|
|
186
186
|
Read (lightweight — local files only, no API calls):
|
|
187
187
|
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
188
|
+
- `~/.sellable/configs/audience/icp.md` (for relevance scoring in Phase 2)
|
|
189
|
+
- `~/.sellable/insights/cross-skill.md` (learnings from other skills)
|
|
190
|
+
- `~/.sellable/insights/post-sessions.md` (**skim latest entry only** — trending topics)
|
|
191
191
|
- If any file doesn't exist, skip silently.
|
|
192
192
|
|
|
193
193
|
### Step 0.7: Build keyword strategy [REQUIRED]
|
|
@@ -365,7 +365,7 @@ Write-backs must be idempotent: use stable source keys such as `engage-session:{
|
|
|
365
365
|
|
|
366
366
|
### Mode: Full Interview (no core or compatibility memory for any sender — required, cannot skip)
|
|
367
367
|
|
|
368
|
-
Run the new core `interview` flow. Its output should populate
|
|
368
|
+
Run the new core `interview` flow. Its output should populate `~/.sellable/configs/core/**` first, then engage can keep legacy compatibility overrides where needed.
|
|
369
369
|
|
|
370
370
|
## Phase 4: Draft Comments Per Sender [REQUIRED]
|
|
371
371
|
|
|
@@ -463,7 +463,7 @@ Only keep the strongest unused angles for next session.
|
|
|
463
463
|
|
|
464
464
|
### 6E: Update Cross-Skill Insights (shared)
|
|
465
465
|
|
|
466
|
-
**Append** to
|
|
466
|
+
**Append** to `~/.sellable/insights/engage-sessions.md`:
|
|
467
467
|
|
|
468
468
|
```markdown
|
|
469
469
|
## Session — [date]
|
|
@@ -486,7 +486,7 @@ Only keep the strongest unused angles for next session.
|
|
|
486
486
|
- **Try next**: [new keywords from trends]
|
|
487
487
|
```
|
|
488
488
|
|
|
489
|
-
**If cross-skill insights found**, append to
|
|
489
|
+
**If cross-skill insights found**, append to `~/.sellable/insights/cross-skill.md`:
|
|
490
490
|
|
|
491
491
|
- Format: `## From engage ([date])` with bullet points
|
|
492
492
|
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## Where Data Lives
|
|
4
4
|
|
|
5
|
-
Engage memory lives in
|
|
5
|
+
Engage memory lives in the home-level `~/.sellable/configs/` source of truth. The primary identity/company layer is now `~/.sellable/configs/core/`; legacy writing, discovery, audience, FAQ, and sender files remain compatibility layers and fallbacks.
|
|
6
6
|
|
|
7
7
|
| Data | Config File | MCP Tool |
|
|
8
8
|
| --------------- | --------------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
9
|
-
| Core identity |
|
|
10
|
-
| Company truth |
|
|
11
|
-
| Anti-AI rules |
|
|
12
|
-
| Proof/wins |
|
|
13
|
-
| Stories/answers |
|
|
14
|
-
| Context modes |
|
|
15
|
-
| Style override |
|
|
16
|
-
| Comment rules |
|
|
17
|
-
| Proven searches |
|
|
18
|
-
| Tracked people |
|
|
19
|
-
| Post filters |
|
|
20
|
-
| ICP |
|
|
9
|
+
| Core identity | `~/.sellable/configs/core/about-me.md` | `get_engage_memory` |
|
|
10
|
+
| Company truth | `~/.sellable/configs/core/my-company.md` | `get_engage_memory` |
|
|
11
|
+
| Anti-AI rules | `~/.sellable/configs/core/anti-ai-writing-style.md` | `get_engage_memory` |
|
|
12
|
+
| Proof/wins | `~/.sellable/configs/core/proof-ledger.md`, `~/.sellable/configs/core/wins-ledger.md` | `get_engage_memory` |
|
|
13
|
+
| Stories/answers | `~/.sellable/configs/core/story-bank.md`, `~/.sellable/configs/core/answer-bank.md` | `get_engage_memory` |
|
|
14
|
+
| Context modes | `~/.sellable/configs/core/context-modes.md` | `get_engage_memory` |
|
|
15
|
+
| Style override | `~/.sellable/configs/writing/styleguide-core.md` or sender override | `get_engage_memory` / `set_engage_style_guide` |
|
|
16
|
+
| Comment rules | `~/.sellable/configs/writing/comments.md` | (read via `get_engage_memory`) |
|
|
17
|
+
| Proven searches | `~/.sellable/configs/discovery/proven-searches.md` | `get_engage_memory` / `record_engage_proven_search` |
|
|
18
|
+
| Tracked people | `~/.sellable/configs/discovery/influencers.md` | `get_engage_memory` / `upsert_engage_tracked_person` |
|
|
19
|
+
| Post filters | `~/.sellable/configs/discovery/post-filters.md` | (read by skill via Read tool) |
|
|
20
|
+
| ICP | `~/.sellable/configs/audience/icp.md` | (read by skill via Read tool) |
|
|
21
21
|
|
|
22
22
|
## How Skills Update Configs
|
|
23
23
|
|
|
@@ -26,4 +26,4 @@ Engage memory lives in `.sellable/configs/` at the project root. The primary ide
|
|
|
26
26
|
|
|
27
27
|
## Migration from JSON
|
|
28
28
|
|
|
29
|
-
The old `proven-searches.json`, `tracked-people.json`, and `style-guide.template.md` files have been replaced. All data now lives as readable markdown in
|
|
29
|
+
The old `proven-searches.json`, `tracked-people.json`, and `style-guide.template.md` files have been replaced. All data now lives as readable markdown in `~/.sellable/configs/`. Legacy `writing/*`, `audience/*`, `faqs/*`, and `content/*` files are preserved as fallback/source material while downstream prompts move to core memory.
|