@sellable/mcp 0.1.240 → 0.1.243
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 +2 -1
- package/dist/engage-memory.d.ts +1 -0
- package/dist/engage-memory.js +3 -0
- package/dist/identity-memory.d.ts +2 -0
- package/dist/identity-memory.js +5 -0
- package/dist/server.js +13 -1
- package/dist/tools/content-posts.d.ts +315 -0
- package/dist/tools/content-posts.js +370 -15
- package/dist/tools/engage-memory.js +1 -1
- package/dist/tools/registry.d.ts +204 -0
- package/package.json +1 -1
- package/skills/create-post/SKILL.md +132 -18
- package/skills/create-post/references/hook-research-playbook.md +69 -2
- package/skills/create-post/references/post-file-contract.md +24 -2
- package/skills/create-post/references/post-validation.md +101 -6
- package/skills/create-post/references/premise-development.md +159 -0
- package/skills/engage/SKILL.md +1 -0
- package/skills/engage/core/README.md +15 -12
|
@@ -31,6 +31,7 @@ Customer computer owns:
|
|
|
31
31
|
research_YYYYMMDD_slug.md
|
|
32
32
|
drafts/
|
|
33
33
|
draft_YYYYMMDD_slug_v1.md
|
|
34
|
+
draft_YYYYMMDD_slug_v2.md
|
|
34
35
|
published/
|
|
35
36
|
YYYY/
|
|
36
37
|
post_linkedinActivityId.md
|
|
@@ -69,10 +70,26 @@ Draft files must preserve:
|
|
|
69
70
|
|
|
70
71
|
- source idea ID
|
|
71
72
|
- hook research ID
|
|
73
|
+
- versioned draft ID, normally ending in `_v1`, `_v2`, `_v3`, etc.
|
|
74
|
+
- iteration metadata when there is a prior or baseline draft:
|
|
75
|
+
- `version`
|
|
76
|
+
- `priorDraftId`
|
|
77
|
+
- `changeIntent`
|
|
78
|
+
- `whatChanged`
|
|
79
|
+
- `whatImproved`
|
|
80
|
+
- `whatGotWorse`
|
|
81
|
+
- score fields for hook, proof, voice, specificity, skimmability, and publish confidence
|
|
82
|
+
- `verdict`: `baseline`, `keep`, `revise`, `reject`, `publish_candidate`, or a similarly explicit state
|
|
72
83
|
- draft body
|
|
73
84
|
- validation receipt, including LinkedIn preview pass/warn/fail status and
|
|
74
85
|
compact fallback when the selected hook carries a warning
|
|
75
|
-
- status: `draft`, `ready`, or `
|
|
86
|
+
- status: `draft`, `ready`, `needs_revision`, `published`, or `archived`
|
|
87
|
+
|
|
88
|
+
Multiple drafts for the same idea are expected. Keep the `ideaId` stable and
|
|
89
|
+
create a new versioned `draftId` for each materially different attempt. Do not
|
|
90
|
+
overwrite a prior version just to compare alternatives. Use
|
|
91
|
+
`update_post_draft` only for same-version receipt fixes, status changes, or
|
|
92
|
+
copy edits that should remain part of that version.
|
|
76
93
|
|
|
77
94
|
Published files must preserve:
|
|
78
95
|
|
|
@@ -80,7 +97,12 @@ Published files must preserve:
|
|
|
80
97
|
- publish URL
|
|
81
98
|
- LinkedIn activity ID when available
|
|
82
99
|
- published date
|
|
83
|
-
-
|
|
100
|
+
- future metrics placeholders and appended metric snapshots when available
|
|
101
|
+
|
|
102
|
+
When a draft is published, `mark_post_published` records the published post
|
|
103
|
+
separately and marks the source draft as `published` by default. Use
|
|
104
|
+
`update_published_post_metrics` to append later performance snapshots instead
|
|
105
|
+
of editing the draft.
|
|
84
106
|
|
|
85
107
|
## Safety
|
|
86
108
|
|
|
@@ -6,6 +6,8 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
6
6
|
|
|
7
7
|
- `sourceIdeaId`
|
|
8
8
|
- `hookResearchId`
|
|
9
|
+
- `iteration`
|
|
10
|
+
- `selectedPremiseCard`
|
|
9
11
|
- `candidateHooksConsidered`
|
|
10
12
|
- `selectedHook`
|
|
11
13
|
- `selectedHookWhy`
|
|
@@ -14,6 +16,8 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
14
16
|
- `storyFilesConsulted`
|
|
15
17
|
- `goldStandardsConsulted`
|
|
16
18
|
- `voiceRulesApplied`
|
|
19
|
+
- `marketBeliefAudit`
|
|
20
|
+
- `premiseValueAudit`
|
|
17
21
|
- `linkedinPreviewAudit`
|
|
18
22
|
- `simplifierConcreteLanguageAudit`
|
|
19
23
|
- `antiAiAudit`
|
|
@@ -23,6 +27,45 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
23
27
|
- `retryNeededReasons`
|
|
24
28
|
- `readyStatus`
|
|
25
29
|
|
|
30
|
+
## Iteration Receipt
|
|
31
|
+
|
|
32
|
+
Every saved draft needs iteration metadata, even the first draft. This lets the
|
|
33
|
+
content library show whether later drafts are actually improving.
|
|
34
|
+
|
|
35
|
+
For the first ready draft of an idea, record:
|
|
36
|
+
|
|
37
|
+
- `version: v1`
|
|
38
|
+
- `priorDraftId: none`
|
|
39
|
+
- `iterationRole: baseline`
|
|
40
|
+
- `changeIntent`
|
|
41
|
+
- `score`
|
|
42
|
+
- `verdict`
|
|
43
|
+
- `nextIterationTargets`
|
|
44
|
+
|
|
45
|
+
For later drafts, record:
|
|
46
|
+
|
|
47
|
+
- `version`
|
|
48
|
+
- `priorDraftId`
|
|
49
|
+
- `changeIntent`
|
|
50
|
+
- `whatChanged`
|
|
51
|
+
- `whatImproved`
|
|
52
|
+
- `whatGotWorse`
|
|
53
|
+
- `score`
|
|
54
|
+
- `verdict`
|
|
55
|
+
|
|
56
|
+
Use a score object with at least:
|
|
57
|
+
|
|
58
|
+
- `hook`
|
|
59
|
+
- `proof`
|
|
60
|
+
- `voice`
|
|
61
|
+
- `specificity`
|
|
62
|
+
- `skimmability`
|
|
63
|
+
- `publishConfidence`
|
|
64
|
+
|
|
65
|
+
Do not call a later draft better just because it is newer. If the hook is
|
|
66
|
+
stronger but proof, voice, or clarity got worse, say that in `whatGotWorse` and
|
|
67
|
+
set the verdict to `revise` or `reject`.
|
|
68
|
+
|
|
26
69
|
## Candidate Set
|
|
27
70
|
|
|
28
71
|
Generate multiple hook candidates before drafting. Do not lock onto the first draft.
|
|
@@ -30,6 +73,9 @@ Generate multiple hook candidates before drafting. Do not lock onto the first dr
|
|
|
30
73
|
Each candidate should include:
|
|
31
74
|
|
|
32
75
|
- hook text
|
|
76
|
+
- selected premise
|
|
77
|
+
- premise tension opened
|
|
78
|
+
- reader value implied
|
|
33
79
|
- source pattern
|
|
34
80
|
- score
|
|
35
81
|
- char count including newlines and first-line / first-two-line preview measurements
|
|
@@ -45,12 +91,61 @@ Each candidate should include:
|
|
|
45
91
|
After the first draft:
|
|
46
92
|
|
|
47
93
|
1. remove unsupported claims
|
|
48
|
-
2.
|
|
49
|
-
3.
|
|
50
|
-
4.
|
|
51
|
-
5.
|
|
52
|
-
6.
|
|
53
|
-
7.
|
|
94
|
+
2. verify the draft is anchored to the selected market belief and controversy
|
|
95
|
+
3. verify the real story/scene, tension, and reader value are visible early
|
|
96
|
+
4. tighten the hook
|
|
97
|
+
5. simplify abstract phrasing
|
|
98
|
+
6. replace generic language with concrete words only when supported
|
|
99
|
+
7. preserve the user's actual story and point
|
|
100
|
+
8. remove AI tells
|
|
101
|
+
9. re-check LinkedIn preview fit after edits
|
|
102
|
+
|
|
103
|
+
## Premise Value Audit
|
|
104
|
+
|
|
105
|
+
Before a draft can be `ready`, validate that the post is valuable, not just
|
|
106
|
+
well wrapped.
|
|
107
|
+
|
|
108
|
+
Record:
|
|
109
|
+
|
|
110
|
+
- `premise`: the selected premise in one sentence
|
|
111
|
+
- `realStoryOrScene`: the concrete scene, observation, or pattern used
|
|
112
|
+
- `targetReader`: who should care
|
|
113
|
+
- `commonBelief`: the belief the post argues against
|
|
114
|
+
- `contrarianTruth`: the sharper belief the post offers
|
|
115
|
+
- `visibleTension`: the uncomfortable gap or cost
|
|
116
|
+
- `readerValue`: what the reader learns, sees differently, or can do
|
|
117
|
+
- `proofAvailable`: source-backed proof used
|
|
118
|
+
- `proofMissing`: claims intentionally avoided or requiring user input
|
|
119
|
+
- `premiseQualityGates`: pass/fail for `specific_scene_or_pattern`,
|
|
120
|
+
`clear_reader`, `visible_tension`, `reader_value`, `credible_speaker`,
|
|
121
|
+
`proof_safety`, and `market_heat`
|
|
122
|
+
- `bodyOutline`: how the body delivers the premise before prose
|
|
123
|
+
|
|
124
|
+
If the draft has no specific scene or observed pattern, no visible tension, or
|
|
125
|
+
no reader value beyond "this is interesting," save as `needs_revision`. Do not
|
|
126
|
+
mark it `ready` because the hook passes preview limits.
|
|
127
|
+
|
|
128
|
+
## Market Belief Audit
|
|
129
|
+
|
|
130
|
+
Before a draft can be `ready`, validate that it is not merely an internally
|
|
131
|
+
coherent idea. It must be anchored to the saved research's market belief map.
|
|
132
|
+
|
|
133
|
+
Record:
|
|
134
|
+
|
|
135
|
+
- `resonatingIdea`: the current-space idea this draft enters
|
|
136
|
+
- `implicitBelief`: the belief the audience likely already holds
|
|
137
|
+
- `audienceWant`: what the audience wants permission, leverage, proof, or a new
|
|
138
|
+
category for
|
|
139
|
+
- `audienceResentmentOrFear`: what frustration or risk gives the post tension
|
|
140
|
+
- `selectedControversy`: the claim the post is testing
|
|
141
|
+
- `credibleWhyUs`: why the user can credibly say this from raw idea, memory,
|
|
142
|
+
story, proof, or product mechanism
|
|
143
|
+
- `engagementReason`: why someone would react, comment, repost, or argue
|
|
144
|
+
- `unsupportedHypeRemoved`: unsupported claims removed during finalizer
|
|
145
|
+
|
|
146
|
+
If `selectedControversy` is missing, if the audience belief is only a generic
|
|
147
|
+
label like "founders want growth," or if `credibleWhyUs` depends on borrowed
|
|
148
|
+
proof from another creator, save as `needs_revision`.
|
|
54
149
|
|
|
55
150
|
## LinkedIn Preview Audit
|
|
56
151
|
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Premise Development
|
|
2
|
+
|
|
3
|
+
A strong post is not an idea with a better hook. A strong post is a valuable
|
|
4
|
+
premise wrapped in a sharp opening.
|
|
5
|
+
|
|
6
|
+
Use this stage after market/hook research and before hook candidates. Do not
|
|
7
|
+
generate hook candidates until at least one `Premise Card` exists.
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Turn the raw idea into a real story, observed tension, or useful argument that a
|
|
12
|
+
specific reader would care about.
|
|
13
|
+
|
|
14
|
+
The premise must answer:
|
|
15
|
+
|
|
16
|
+
- who this is for
|
|
17
|
+
- what real scene, observation, or pattern created the idea
|
|
18
|
+
- what tension makes it worth reading
|
|
19
|
+
- what common belief it argues against
|
|
20
|
+
- what hidden truth or mechanism it reveals
|
|
21
|
+
- what value the reader gets
|
|
22
|
+
- why now
|
|
23
|
+
- why this user can credibly say it
|
|
24
|
+
- what proof is available and what proof is missing
|
|
25
|
+
|
|
26
|
+
If the premise has no real scene, no tension, and no reader value, stop before
|
|
27
|
+
drafting. Ask for the missing story or save only a `needs_revision` premise
|
|
28
|
+
artifact. Do not compensate with clever hooks.
|
|
29
|
+
|
|
30
|
+
## Real Story / Scene Search
|
|
31
|
+
|
|
32
|
+
Before writing premise cards, search the available source material:
|
|
33
|
+
|
|
34
|
+
- raw idea text
|
|
35
|
+
- voice memo or transcript if provided
|
|
36
|
+
- `core/story-bank.md`
|
|
37
|
+
- `core/answer-bank.md`
|
|
38
|
+
- `core/proof-ledger.md`
|
|
39
|
+
- `core/wins-ledger.md`
|
|
40
|
+
- approved references and gold standards
|
|
41
|
+
- current-session user corrections or rejections
|
|
42
|
+
|
|
43
|
+
Look for:
|
|
44
|
+
|
|
45
|
+
- a moment: "I saw X", "a founder said Y", "I opened Z and noticed..."
|
|
46
|
+
- a contradiction: the user wanted one thing but the workflow rewarded another
|
|
47
|
+
- a cost: time, attention, trust, missed learning, reputation, money
|
|
48
|
+
- a before/after: what changed in the user's belief
|
|
49
|
+
- a specific object: Slack note, customer call, campaign table, reply, list,
|
|
50
|
+
demo, failed draft, stale idea, messy workflow
|
|
51
|
+
|
|
52
|
+
If no real story is present, use an observed pattern only if it is traceable to
|
|
53
|
+
the raw source or memory. Mark the gap in the premise card. Do not fabricate a
|
|
54
|
+
customer, call, outcome, date, metric, or private scene.
|
|
55
|
+
|
|
56
|
+
## Premise Cards
|
|
57
|
+
|
|
58
|
+
Generate 3-5 premise cards before hooks. Each card must use this shape:
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
Premise Card
|
|
62
|
+
|
|
63
|
+
premise:
|
|
64
|
+
<one-sentence argument>
|
|
65
|
+
|
|
66
|
+
real story / scene:
|
|
67
|
+
<specific moment, observation, or pattern from source/memory>
|
|
68
|
+
|
|
69
|
+
target reader:
|
|
70
|
+
<who should care>
|
|
71
|
+
|
|
72
|
+
common belief:
|
|
73
|
+
<what the reader or market usually believes>
|
|
74
|
+
|
|
75
|
+
contrarian truth:
|
|
76
|
+
<what this post argues instead>
|
|
77
|
+
|
|
78
|
+
tension:
|
|
79
|
+
<why this is uncomfortable, costly, or worth arguing about>
|
|
80
|
+
|
|
81
|
+
reader value:
|
|
82
|
+
<what the reader learns, sees differently, or can do after reading>
|
|
83
|
+
|
|
84
|
+
why now / market heat:
|
|
85
|
+
<what current research says is resonating>
|
|
86
|
+
|
|
87
|
+
credible why-us:
|
|
88
|
+
<why this user can say it from source, memory, proof, or product mechanism>
|
|
89
|
+
|
|
90
|
+
proof available:
|
|
91
|
+
<specific usable proof or source>
|
|
92
|
+
|
|
93
|
+
proof missing:
|
|
94
|
+
<claims that cannot be made yet>
|
|
95
|
+
|
|
96
|
+
best frame:
|
|
97
|
+
story | contrarian take | teardown | founder confession | future thesis | lesson
|
|
98
|
+
|
|
99
|
+
hook territories:
|
|
100
|
+
- <territory 1>
|
|
101
|
+
- <territory 2>
|
|
102
|
+
- <territory 3>
|
|
103
|
+
|
|
104
|
+
risk:
|
|
105
|
+
<why this premise might still be weak>
|
|
106
|
+
|
|
107
|
+
score:
|
|
108
|
+
<1-100 with short reason>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Premise Quality Gate
|
|
112
|
+
|
|
113
|
+
A premise can move to hook generation only when it passes all of these:
|
|
114
|
+
|
|
115
|
+
- `specific_scene_or_pattern`: pass
|
|
116
|
+
- `clear_reader`: pass
|
|
117
|
+
- `visible_tension`: pass
|
|
118
|
+
- `reader_value`: pass
|
|
119
|
+
- `credible_speaker`: pass
|
|
120
|
+
- `proof_safety`: pass
|
|
121
|
+
- `market_heat`: pass or explained
|
|
122
|
+
|
|
123
|
+
If any gate fails:
|
|
124
|
+
|
|
125
|
+
- in research checkpoint mode, show the cards and ask for the missing story or
|
|
126
|
+
direction
|
|
127
|
+
- in immediate draft mode, save the draft as `needs_revision`, not `ready`
|
|
128
|
+
- never mark a draft `ready` because the hook is clever
|
|
129
|
+
|
|
130
|
+
## Hook Relationship
|
|
131
|
+
|
|
132
|
+
Hooks are generated from the selected premise, not from the raw idea alone.
|
|
133
|
+
|
|
134
|
+
For each hook candidate, include:
|
|
135
|
+
|
|
136
|
+
- selected premise ID or title
|
|
137
|
+
- which tension it opens
|
|
138
|
+
- which reader value it implies
|
|
139
|
+
- whether the real scene appears in the first screen or shortly after
|
|
140
|
+
|
|
141
|
+
Reject hooks that are accurate but do not reveal the premise's tension or value.
|
|
142
|
+
|
|
143
|
+
## Body Relationship
|
|
144
|
+
|
|
145
|
+
Before drafting prose, create a short body outline for the selected premise:
|
|
146
|
+
|
|
147
|
+
```text
|
|
148
|
+
body outline:
|
|
149
|
+
1. hook stack opens the tension
|
|
150
|
+
2. real scene or pattern makes it concrete
|
|
151
|
+
3. common belief gets named
|
|
152
|
+
4. contrarian truth lands
|
|
153
|
+
5. mechanism explains why
|
|
154
|
+
6. reader value becomes clear
|
|
155
|
+
7. close returns to the premise without summarizing
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
If this outline cannot be filled without inventing proof, return to premise
|
|
159
|
+
development.
|
package/skills/engage/SKILL.md
CHANGED
|
@@ -359,6 +359,7 @@ Use the smallest relevant core target:
|
|
|
359
359
|
- `core/decision-rules.md` for durable strategy rules, public/private safety rules, and correction heuristics.
|
|
360
360
|
- `core/change-log.md` for every approved correction, rejected proposal worth remembering, private mark, and downstream prompt/operator note.
|
|
361
361
|
- `core/transcripts/INDEX.md` plus a topic file under `core/transcripts/topics/` for topic-specific interview snippets or unused material that should stay transcript-first.
|
|
362
|
+
- `core/content-memory/INDEX.md` plus cluster/card files for recurring content ideas, post seeds, proof gaps, and transcript-derived story material that should evolve over time.
|
|
362
363
|
- `core/references/linkedin-posts/INDEX.md` or another `core/references/**/INDEX.md` when an approved comment/post example should become a reference artifact.
|
|
363
364
|
|
|
364
365
|
Write-backs must be idempotent: use stable source keys such as `engage-session:{date}:{senderId}:{postUrlHash}:{slug}`, check copied paths before adding references, create no duplicate reference rows, and keep manual sections preserved. If the user marks a candidate private, store only the minimum private-safe metadata and do not promote it into public proof, references, or examples.
|
|
@@ -6,23 +6,26 @@ Engage memory lives in the home-level `~/.sellable/configs/` source of truth. Th
|
|
|
6
6
|
|
|
7
7
|
| Data | Config File | MCP Tool |
|
|
8
8
|
| --------------- | --------------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
9
|
-
| Core identity | `~/.sellable/configs/core/about-me.md`
|
|
10
|
-
| Company truth | `~/.sellable/configs/core/my-company.md`
|
|
11
|
-
| Anti-AI rules | `~/.sellable/configs/core/anti-ai-writing-style.md`
|
|
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
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`
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
13
|
+
| Stories/answers | `~/.sellable/configs/core/story-bank.md`, `~/.sellable/configs/core/answer-bank.md` | `get_engage_memory` |
|
|
14
|
+
| Transcripts | `~/.sellable/configs/core/transcripts/**` | `get_engage_memory` |
|
|
15
|
+
| Content memory | `~/.sellable/configs/core/content-memory/**` | `get_engage_memory` |
|
|
16
|
+
| Context modes | `~/.sellable/configs/core/context-modes.md` | `get_engage_memory` |
|
|
17
|
+
| Style override | `~/.sellable/configs/writing/styleguide-core.md` or sender override | `get_engage_memory` / `set_engage_style_guide` |
|
|
18
|
+
| Comment rules | `~/.sellable/configs/writing/comments.md` | (read via `get_engage_memory`) |
|
|
19
|
+
| Proven searches | `~/.sellable/configs/discovery/proven-searches.md` | `get_engage_memory` / `record_engage_proven_search` |
|
|
20
|
+
| Tracked people | `~/.sellable/configs/discovery/influencers.md` | `get_engage_memory` / `upsert_engage_tracked_person` |
|
|
21
|
+
| Post filters | `~/.sellable/configs/discovery/post-filters.md` | (read by skill via Read tool) |
|
|
22
|
+
| ICP | `~/.sellable/configs/audience/icp.md` | (read by skill via Read tool) |
|
|
21
23
|
|
|
22
24
|
## How Skills Update Configs
|
|
23
25
|
|
|
24
26
|
- **Interview skill**: Populates primary `configs/core/**` identity/company memory, transcript references, answer bank, proof/wins ledgers, and anti-AI rules.
|
|
25
|
-
- **Engage skill**: Reads composed
|
|
27
|
+
- **Engage skill**: Reads composed unified memory through `get_engage_memory`, updates proven searches after each session, adds new tracked people when discovered, and writes legacy sender style overrides only when the correction is engage-specific.
|
|
28
|
+
- **Create-post skill**: Reads the same unified memory, including `core/content-memory/**`, before drafting from transcripts, recurring ideas, or post seeds.
|
|
26
29
|
|
|
27
30
|
## Migration from JSON
|
|
28
31
|
|