@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.
Files changed (32) hide show
  1. package/README.md +7 -7
  2. package/dist/engage-memory.js +0 -5
  3. package/dist/identity-memory.js +0 -4
  4. package/dist/index-dev.js +0 -0
  5. package/dist/index.js +0 -0
  6. package/dist/tools/engage-memory.js +2 -2
  7. package/package.json +1 -1
  8. package/skills/create-campaign/context/learnings.md +1 -1
  9. package/skills/create-campaign/references/brief-template.md +2 -2
  10. package/skills/create-campaign-brief/references/brief-template.md +2 -2
  11. package/skills/create-campaign-brief/references/draft-lifecycle.md +1 -1
  12. package/skills/create-campaign-brief/references/examples/briefs/gelee.md +2 -2
  13. package/skills/create-campaign-brief/references/examples/briefs/superpower.md +41 -28
  14. package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +12 -9
  15. package/skills/create-campaign-v2/references/approval-gate-framing.md +1 -1
  16. package/skills/create-campaign-v2/references/gold-standard-message-examples.md +30 -16
  17. package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +1 -1
  18. package/skills/create-campaign-v2/references/gold-standard-runtime-message-pack.md +252 -0
  19. package/skills/create-campaign-v2/references/thomas-revision-filters.md +6 -1
  20. package/skills/create-campaign-v2/references/validation-criteria.md +8 -5
  21. package/skills/create-campaign-v2-validation/SKILL.md +1 -1
  22. package/skills/create-post/SKILL.md +27 -27
  23. package/skills/engage/SKILL.md +12 -12
  24. package/skills/engage/core/README.md +14 -14
  25. package/skills/find-leads/SKILL.md +1 -1
  26. package/skills/generate-messages/SKILL.md +99 -49
  27. package/skills/interview/SKILL.md +24 -24
  28. package/skills/interview/references/legacy-linkedin-interview.md +12 -12
  29. package/skills/interview/references/reference-curation.md +4 -4
  30. package/skills/interview/references/voice-capture-method.md +1 -1
  31. package/skills/load-voice/SKILL.md +21 -25
  32. 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 (same subject, e.g. `It X` / `It Y` / `It Z`) but rendered as one-line paragraphs instead of bullets** — parallel action lines are the bullet case. One-line paragraphs are only for actions that carry a short narrative clause
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 one-sentence paragraph, or pick the most
298
- painful one and drop the others
297
+ Give each workflow its own line, use a short bullet stack when the three
298
+ actions repeat the same subject pattern, or pick the most painful one and
299
+ drop the others
299
300
  - **product clarity is non-negotiable**: a cold reader must be able to state
300
301
  in one sentence what the product does. Require a crisp `Product is an X
301
302
  that does Y` anchor sentence before any action breakdown, then one action
302
- per one-line paragraph. Do not gesture at "that chain" / "the stack" /
303
- "that work" in place of naming specific actions
303
+ per line. Do not gesture at "that chain" / "the stack" / "that work" in
304
+ place of naming specific actions
304
305
  - body flow must follow: opener → pain → what the product IS (one sentence)
305
306
  → what it DOES (one action per line, up to three) → deployment ease →
306
307
  CTA → optional PS
307
308
  - the "what it DOES" action list may render as one-line paragraphs or as a
308
309
  bullet list — whichever reads cleaner. Bullets are acceptable here (the
309
310
  rule against bullet points applies to feature/benefit marketing lists,
310
- not to enumerable product actions). Never comma-stack three actions into
311
+ not to enumerable product actions). Prefer bullets for 3 repeated-subject
312
+ product actions; keep paragraphs when one line needs narrative context or the
313
+ paragraph version is clearly more human. Never comma-stack three actions into
311
314
  one glued sentence
312
315
  - **opener must use per-lead signal when any is present in `lead-sample.json`**
313
316
  (post, hire, visible tool, topic engagement). Category-level openers are
@@ -28,7 +28,7 @@ Each step writes its own artifact into the draft directory. The original
28
28
  Validated draft directory:
29
29
 
30
30
  ```text
31
- .sellable/create-campaign-v2/drafts/{workspace-slug}/{campaign-slug}/
31
+ ~/.sellable/create-campaign-v2/drafts/{workspace-slug}/{campaign-slug}/
32
32
  brief.md
33
33
  lead-review.md
34
34
  lead-sample.json
@@ -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 `.sellable/configs/`.
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
- - `.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)
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 `.sellable/configs/` (style guide, proven searches, tracked people)
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 `.sellable/configs/discovery/proven-searches.md`
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 `.sellable/configs/` and `.sellable/insights/`
90
- - Write - Save approved posts to `.sellable/configs/content/linkedin-posts-drafts.md` and session insights to `.sellable/insights/`
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
- - `.sellable/configs/writing/christian-reyes-linkedin-viral.md`
321
- - `.sellable/configs/content/linkedin-posts-drafts.md`
322
- - `.sellable/configs/discovery/post-filters.md`
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
- - `./.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)
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 `.sellable/configs/content/linkedin-posts-drafts.md`.
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 `.sellable/configs/content/linkedin-posts-drafts.md`:
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 `.sellable/configs/writing/christian-reyes-linkedin-viral.md` by appending a new section:
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 `.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.
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 `.sellable/insights/post-sessions.md` using the built-in Write tool:
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 `.sellable/insights/cross-skill.md`:
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"
@@ -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 `.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`.
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 `.sellable/configs/` and `.sellable/insights/`
79
- - Write - Save session insights to `.sellable/insights/`
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 `.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.
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
- - `./.sellable/configs/writing/comments.md` (comment-specific rules, quality gate, approved examples)
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 `./.sellable/configs/core/anti-ai-writing-style.md` and `./.sellable/configs/core/proof-ledger.md`.
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
- - `./.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)
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 `.sellable/configs/core/**` first, then engage can keep legacy compatibility overrides where needed.
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 `.sellable/insights/engage-sessions.md`:
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 `.sellable/insights/cross-skill.md`:
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 `.sellable/configs/` at the project root. The primary identity/company layer is now `.sellable/configs/core/`; legacy writing, discovery, audience, FAQ, and sender files remain compatibility layers and fallbacks.
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 | `.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) |
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 `.sellable/configs/`. Legacy `writing/*`, `audience/*`, `faqs/*`, and `content/*` files are preserved as fallback/source material while downstream prompts move to core memory.
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.
@@ -47,7 +47,7 @@ If a transcript is provided, mine it before asking live questions.
47
47
 
48
48
  Create or update:
49
49
 
50
- `./.sellable/gtm-kickoffs/{client-slug}-{date}.md`
50
+ `~/.sellable/gtm-kickoffs/{client-slug}-{date}.md`
51
51
 
52
52
  Minimum sections:
53
53