@sellable/mcp 0.1.205 → 0.1.206
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 +11 -10
- package/agents/post-find-leads-filter-scout.md +2 -2
- package/agents/post-find-leads-message-scout.md +18 -23
- package/agents/registry.json +17 -17
- package/agents/source-scout-linkedin-engagement.md +2 -2
- package/agents/source-scout-prospeo-contact.md +3 -3
- package/agents/source-scout-sales-nav.md +3 -3
- package/dist/engage-memory.js +5 -0
- package/dist/identity-memory.js +4 -0
- package/dist/index-dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/tools/engage-memory.js +2 -2
- package/dist/tools/leads.js +7 -11
- package/dist/tools/prompts.js +6 -7
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +24 -11
- 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 +28 -41
- package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +9 -12
- package/skills/create-campaign-v2/SKILL.md +27 -21
- package/skills/create-campaign-v2/SOUL.md +12 -9
- package/skills/create-campaign-v2/core/flow.v2.json +1 -1
- package/skills/create-campaign-v2/references/ai-tells.md +10 -35
- package/skills/create-campaign-v2/references/approval-gate-framing.md +3 -3
- package/skills/create-campaign-v2/references/gold-standard-message-examples.md +16 -30
- package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +1 -1
- package/skills/create-campaign-v2/references/step-13-import-leads.md +2 -2
- package/skills/create-campaign-v2/references/thomas-revision-filters.md +3 -12
- package/skills/create-campaign-v2/references/validation-criteria.md +5 -8
- package/skills/create-campaign-v2/references/watch-guide-narration.md +2 -2
- package/skills/create-campaign-v2-tail/SKILL.md +9 -9
- 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 +75 -175
- 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 +25 -21
- package/skills/providers/signal-discovery.md +2 -2
- package/skills/research/SKILL.md +1 -1
- package/skills/create-campaign-v2/references/gold-standard-runtime-message-pack.md +0 -252
- package/skills/research/config.json +0 -9
|
@@ -294,23 +294,20 @@ 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
|
-
|
|
299
|
-
drop the others
|
|
297
|
+
Give each workflow its own one-sentence paragraph, or pick the most
|
|
298
|
+
painful one and drop the others
|
|
300
299
|
- **product clarity is non-negotiable**: a cold reader must be able to state
|
|
301
300
|
in one sentence what the product does. Require a crisp `Product is an X
|
|
302
301
|
that does Y` anchor sentence before any action breakdown, then one action
|
|
303
|
-
per line. Do not gesture at "that chain" / "the stack" /
|
|
304
|
-
place of naming specific actions
|
|
302
|
+
per one-line paragraph. Do not gesture at "that chain" / "the stack" /
|
|
303
|
+
"that work" in place of naming specific actions
|
|
305
304
|
- body flow must follow: opener → pain → what the product IS (one sentence)
|
|
306
305
|
→ what it DOES (one action per line, up to three) → deployment ease →
|
|
307
306
|
CTA → optional PS
|
|
308
307
|
- the "what it DOES" action list may render as one-line paragraphs or as a
|
|
309
308
|
bullet list — whichever reads cleaner. Bullets are acceptable here (the
|
|
310
309
|
rule against bullet points applies to feature/benefit marketing lists,
|
|
311
|
-
not to enumerable product actions).
|
|
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
|
|
310
|
+
not to enumerable product actions). Never comma-stack three actions into
|
|
314
311
|
one glued sentence
|
|
315
312
|
- **opener must use per-lead signal when any is present in `lead-sample.json`**
|
|
316
313
|
(post, hire, visible tool, topic engagement). Category-level openers are
|
|
@@ -173,7 +173,7 @@ Review/process sample:
|
|
|
173
173
|
}
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
Start Import approved and import starting:
|
|
177
177
|
|
|
178
178
|
```json
|
|
179
179
|
{
|
|
@@ -211,7 +211,7 @@ saved. The filter recommendation must be row-specific: say why filters are
|
|
|
211
211
|
recommended from the sample counts and examples, or say filtering may not be
|
|
212
212
|
needed when the visible review rows already look clean. This is a user decision
|
|
213
213
|
gate, not active filtering; do not say filtering the batch before rubrics are
|
|
214
|
-
saved.
|
|
214
|
+
saved. Message Drafting should start after the filter-choice answer;
|
|
215
215
|
mark it running only when that branch actually started.
|
|
216
216
|
When the user chooses filters, immediately persist `enableICPFilters: true` and
|
|
217
217
|
move to `create-icp-rubric` so the watched app shows Filter Rules while Codex
|
|
@@ -26,8 +26,8 @@ Do NOT manually run rubric-check, enrich, or message-generation
|
|
|
26
26
|
tools — the cascade already does them.
|
|
27
27
|
|
|
28
28
|
```text
|
|
29
|
-
Step 13 —
|
|
30
|
-
materialize/reuse approved source with campaignOfferId
|
|
29
|
+
Step 13 — Start Import + confirm initial campaign slice
|
|
30
|
+
materialize/reuse the approved source with campaignOfferId
|
|
31
31
|
import_leads(source-list target; SalesNav/Prospeo default ~1000, Signal Discovery default ~1500 engagers)
|
|
32
32
|
wait_for_lead_list_ready
|
|
33
33
|
confirm_lead_list(reviewBatchLimit=15) # compact reviewBatch metadata is stored on the campaign table
|
|
@@ -35,11 +35,11 @@ Step 13 — materialize source list + confirm initial campaign slice
|
|
|
35
35
|
update_campaign(currentStep=filter-choice)
|
|
36
36
|
|
|
37
37
|
Post-import main thread
|
|
38
|
-
launch Message
|
|
39
|
-
launch
|
|
38
|
+
launch Message Drafting after the filter-choice answer
|
|
39
|
+
launch Prospect Filters only after user chooses filters
|
|
40
40
|
save_rubrics({ campaignOfferId, leadScoringRubrics }) after the campaign table exists
|
|
41
41
|
keep the watched app on Filter Leads after rubrics are saved
|
|
42
|
-
while on Filter Leads, show the message template recommendation from
|
|
42
|
+
while on Filter Leads, show the message template recommendation from background Message Drafting
|
|
43
43
|
after approve-message, update_campaign_brief writes `## Approved Message Template` with `{{...}}` tokens
|
|
44
44
|
only then start the initial-slice cascade
|
|
45
45
|
|
|
@@ -187,7 +187,7 @@ import milestone.
|
|
|
187
187
|
`messaging.critique.enabled`, `handoff.autoStart`,
|
|
188
188
|
`handoff.orientation`, `retry.sameToolSameError`,
|
|
189
189
|
`logging.logEveryThresholdTrip`.
|
|
190
|
-
2. Resolve and materialize the approved source
|
|
190
|
+
2. Resolve and materialize the approved source after Start Import approval. Load
|
|
191
191
|
`references/post-mint-source-materialization.md` when the source is normal
|
|
192
192
|
discovery or when a legacy no-shell approval fixture must be replayed. If
|
|
193
193
|
CampaignOffer state already attached searches/selections to this campaign,
|
|
@@ -237,7 +237,7 @@ headlineICPCriteria })` ->
|
|
|
237
237
|
re-run a narrow campaign-scoped `search_signals` call to recover current
|
|
238
238
|
post rows, or ask the user to promote the desired posts in the UI and then
|
|
239
239
|
retry `import_leads`.
|
|
240
|
-
|
|
240
|
+
Start Import approval is the explicit confirmation for this selected-post
|
|
241
241
|
scrape; do not ask for a second yes/no gate between
|
|
242
242
|
`select_promising_posts` and `import_leads`.
|
|
243
243
|
- Sales Nav: `get_provider_prompt({ provider: "sales-nav", campaignOfferId,
|
|
@@ -352,7 +352,7 @@ Entered on `CampaignOffer.currentStep === "auto-execute-messaging"`.
|
|
|
352
352
|
**Messages are produced by the `Generate Message` column cascade, not
|
|
353
353
|
by a separate tool.** Do NOT call a `generate_messages` MCP tool —
|
|
354
354
|
that tool does not exist; the full `generate-messages` subskill prompt is the
|
|
355
|
-
Message
|
|
355
|
+
Message Drafting contract for the approved template. In the autonomous tail, messages
|
|
356
356
|
flow through the column pipeline: `Enrich Prospect` →
|
|
357
357
|
`DNC Check` → `ICP Score` → `Passes Rubric` → `Generate Message`.
|
|
358
358
|
Each column's http_request auto-fires when its upstream dependency
|
|
@@ -525,7 +525,7 @@ runs.
|
|
|
525
525
|
|
|
526
526
|
- Source-list materialization and initial-slice confirmation happen in Step 13,
|
|
527
527
|
not during atomic mint.
|
|
528
|
-
- Step 13 materializes/reuses the approved source with `campaignOfferId` before
|
|
528
|
+
- Step 13 materializes/reuses the approved source with `campaignOfferId` after Start Import approval and before
|
|
529
529
|
import. Do not import a legacy campaignless Signal source until selected posts
|
|
530
530
|
exist on the campaign.
|
|
531
531
|
- Full-list expansion happens only after the initial campaign setup proves out.
|
|
@@ -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 append
|
|
|
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 `.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.
|
|
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 the home-level `~/.sellable/configs/` source of truth. Th
|
|
|
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.
|