@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.
@@ -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 `needs_revision`
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
- - optional future metrics placeholders
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. tighten the hook
49
- 3. simplify abstract phrasing
50
- 4. replace generic language with concrete words only when supported
51
- 5. preserve the user's actual story and point
52
- 6. remove AI tells
53
- 7. re-check LinkedIn preview fit after edits
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.
@@ -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` | `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` |
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` | `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) |
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 core 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.
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