@sellable/mcp 0.1.236 → 0.1.238

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.
@@ -0,0 +1,203 @@
1
+ # Gold Standard Post Pack
2
+
3
+ The gold-standard pack is user-owned memory with an MCP-owned schema.
4
+
5
+ MCP owns:
6
+
7
+ - this schema
8
+ - selection workflow
9
+ - scoring rubric
10
+ - decomposition rules
11
+ - validation rules
12
+
13
+ The user's computer owns:
14
+
15
+ - personal best posts
16
+ - approved inspiration posts from the space
17
+ - copied or distilled examples
18
+ - approval notes
19
+ - allowed-use limits
20
+
21
+ ## Storage
22
+
23
+ Approved gold standards live under:
24
+
25
+ ```text
26
+ ~/.sellable/configs/core/references/linkedin-posts/
27
+ INDEX.md
28
+ gold-standard-<slug>.md
29
+ ```
30
+
31
+ The pack is capped at 20 approved gold standards. Candidate examples do not
32
+ count toward the cap until the user approves them.
33
+
34
+ Do not store gold standards under `~/.sellable/content/linkedin/**`. Content
35
+ folders are for ideas, hook research, drafts, published records, and future
36
+ comment history. Gold standards are durable writing memory.
37
+
38
+ ## Import Modes
39
+
40
+ ### Personal Best Import
41
+
42
+ Use when the user asks to import their best posts, calibrate on their old posts,
43
+ or build the pack from their LinkedIn profile.
44
+
45
+ 1. Ask for the user's LinkedIn profile URL or handle if it is not already known.
46
+ 2. Call `mcp__sellable__fetch_linkedin_posts`.
47
+ 3. Rank candidate personal posts by engagement quality, topic fit, full-text
48
+ availability, voice usefulness, and whether the user says the post felt like
49
+ them.
50
+ 4. Present a numbered candidate list.
51
+ 5. Ask which posts to add, skip, or mark as anti-examples.
52
+ 6. Add only the user-approved selections.
53
+
54
+ ### Space Benchmark Research
55
+
56
+ Use when the user asks to research what is working in the space or add outside
57
+ gold standards.
58
+
59
+ 1. Derive search terms from the user's topic, ICP, current idea, and proven
60
+ search memory.
61
+ 2. Use the hook research playbook and `mcp__sellable__search_engagement_posts`.
62
+ 3. Prefer recent multi-month winners, repeated creator success, strong
63
+ share/repost signals, and full-text availability.
64
+ 4. Penalize lead magnets, giveaway mechanics, engagement bait, celebrity-only
65
+ reach, and examples that cannot be adapted to the user's voice.
66
+ 5. Present candidates with a clear "should we use these as gold standards?"
67
+ approval gate.
68
+ 6. Add only the user-approved selections.
69
+
70
+ ## Candidate Presentation
71
+
72
+ Show compact candidate cards. Include:
73
+
74
+ - candidate number
75
+ - type: `personal_best`, `space_benchmark`, or `anti_example`
76
+ - author
77
+ - source URL
78
+ - engagement breakdown when available
79
+ - why it might belong in the pack
80
+ - hook mechanism
81
+ - content/body mechanism
82
+ - rhythm notes
83
+ - sentence-structure notes
84
+ - proof/story use
85
+ - voice fit
86
+ - risks
87
+ - allowed use recommendation
88
+
89
+ Approval prompt:
90
+
91
+ ```text
92
+ Gold-standard pack: <current_count>/20 approved.
93
+
94
+ These look like candidates worth saving. Which should I add?
95
+ Reply with numbers to add, "skip all", or "replace <existing> with <new>" if the pack is full.
96
+ ```
97
+
98
+ Do not write candidates to the approved pack before the user chooses.
99
+
100
+ ## Approved Index Schema
101
+
102
+ `INDEX.md` should use a table with these fields:
103
+
104
+ - `Status` - `approved` or `anti-example`
105
+ - `Type` - `personal_best` or `space_benchmark`
106
+ - `Title`
107
+ - `Source URL`
108
+ - `Copied Path`
109
+ - `Added`
110
+ - `Score`
111
+ - `Tags`
112
+ - `Primary Use`
113
+ - `Allowed Use`
114
+ - `Hook Pattern`
115
+ - `Body Pattern`
116
+ - `Rhythm Notes`
117
+ - `Sentence Notes`
118
+ - `Risks`
119
+ - `Key`
120
+
121
+ Use stable keys from normalized source URL/title plus an optional content hash.
122
+ If the same source appears again, update the existing row instead of adding a
123
+ duplicate.
124
+
125
+ ## Approved Example File Schema
126
+
127
+ Each copied or distilled `gold-standard-<slug>.md` should include:
128
+
129
+ ```text
130
+ # <Title>
131
+
132
+ Source URL:
133
+ Type:
134
+ Status:
135
+ Added:
136
+ Allowed use:
137
+ Tags:
138
+
139
+ ## Original Or Distilled Text
140
+
141
+ <Full text only when safe and approved. Otherwise store a short distilled summary.>
142
+
143
+ ## Hook Breakdown
144
+
145
+ - hook text:
146
+ - char count:
147
+ - first-line chars:
148
+ - first-two-line chars:
149
+ - mobile preview fit:
150
+ - desktop preview fit:
151
+ - hook mechanism:
152
+ - internal question:
153
+ - emotional trigger:
154
+
155
+ ## Content / Body Breakdown
156
+
157
+ - thesis:
158
+ - body mechanism:
159
+ - story mechanism:
160
+ - proof mechanism:
161
+ - argument moves:
162
+ - close:
163
+ - what made it work:
164
+
165
+ ## Rhythm
166
+
167
+ - line breaks:
168
+ - paragraph length:
169
+ - sentence length:
170
+ - pacing:
171
+ - punctuation:
172
+
173
+ ## Sentence Structure
174
+
175
+ - sentence starts:
176
+ - fragments:
177
+ - contrast moves:
178
+ - specificity moves:
179
+ - repeated syntax:
180
+
181
+ ## Usage Notes
182
+
183
+ - imitate:
184
+ - do not copy:
185
+ - voice fit:
186
+ - risks:
187
+ ```
188
+
189
+ ## Selection Rules For Drafting
190
+
191
+ Before drafting a post, use at most 1-3 relevant gold standards. Prefer:
192
+
193
+ - the user's own approved posts over outside benchmarks
194
+ - examples with matching topic, mechanism, or story shape
195
+ - examples whose allowed use includes `imitate structure`
196
+ - examples with clear hook/body/rhythm/sentence decomposition
197
+
198
+ Never copy outside wording. For personal posts, reuse wording only when the user
199
+ explicitly asks to reuse their own line. Otherwise, use the pack for structure,
200
+ taste, and judgment.
201
+
202
+ If the pack is empty, continue with core memory and hook research. Do not block
203
+ normal drafting just because no gold standards exist.
@@ -0,0 +1,126 @@
1
+ # Hook Research Playbook
2
+
3
+ Hook research must use current Sellable engagement data before drafting unless the user explicitly asks for `unsaved_preview`.
4
+
5
+ ## Search Inputs
6
+
7
+ Derive 3-8 keyword searches from:
8
+
9
+ - the raw idea
10
+ - user-supplied topic
11
+ - proven search terms in engage memory
12
+ - tracked people/inspiration references when relevant
13
+
14
+ ## Default Search
15
+
16
+ Use `mcp__sellable__search_engagement_posts` with practical constraints:
17
+
18
+ - explicit `maxAgeDays: 120` by default so research covers the past 30-120 days, not only this week's posts
19
+ - tighten to 30-60 days for trend-sensitive topics; widen only when the topic has low volume
20
+ - high enough engagement to matter
21
+ - narrow enough to match the idea
22
+ - enough result depth to see whether a creator has repeated winners, not just one viral outlier
23
+
24
+ Record every keyword, filter, search window, page, and result count.
25
+
26
+ ## Weighted Signals
27
+
28
+ Rank source posts with a weighted signal view. Do not sort by total engagement alone.
29
+
30
+ Use this scoring shape:
31
+
32
+ ```text
33
+ hook_score =
34
+ topic_fit
35
+ + hook_clarity
36
+ + creator_repeat_success
37
+ + repost_share_strength
38
+ + comment_quality
39
+ - lead_magnet_penalty
40
+ - engagement_bait_penalty
41
+ - off_voice_penalty
42
+ ```
43
+
44
+ Guidance:
45
+
46
+ - Shares/reposts are the strongest signal because a reader spends their own feed reputation.
47
+ - Comments are stronger than reactions only when they are substantive; giveaway comments are weak.
48
+ - Reactions are weak reach unless paired with shares/reposts or strong comments.
49
+ - If the tool returns `engagement.shares`, treat it as the repost/share proxy.
50
+ - If share or repost data is unavailable, record `repost_data_unavailable` instead of inventing it.
51
+ - Prefer creators with repeated high-performing posts in the same lane over one-off viral posts.
52
+
53
+ Penalize lead-magnet and engagement-bait mechanics unless the user explicitly asks for that style:
54
+
55
+ - `comment "template"` / `comment "guide"` / `comment "playbook"`
56
+ - "DM me"
57
+ - "I'll send it"
58
+ - "free template"
59
+ - "free prompt"
60
+ - "repost for access"
61
+ - "like and comment"
62
+ - broad giveaway framing that makes engagement inflate without proving the hook/body worked
63
+
64
+ ## Full Text Reality
65
+
66
+ Search results may only include previews.
67
+
68
+ When full hook/body text matters:
69
+
70
+ 1. use the result's author/profile URL
71
+ 2. call `mcp__sellable__fetch_linkedin_posts`
72
+ 3. match recent posts by URL or LinkedIn activity ID
73
+ 4. record whether the full text was found
74
+
75
+ If full text is unavailable, record `full_text_unavailable`. Use only the preview for hook analysis and do not infer missing body details.
76
+
77
+ ## Hook Extraction
78
+
79
+ Extract structure, not wording.
80
+
81
+ For each shortlisted source post, record:
82
+
83
+ - URL
84
+ - author
85
+ - engagement totals and available likes/comments/shares breakdown
86
+ - creator repeat evidence
87
+ - visible hook text or preview
88
+ - line count and mobile preview fit
89
+ - hook mechanism
90
+ - story mechanism when the post is a story
91
+ - internal question created
92
+ - emotional trigger
93
+ - proof/story dependency
94
+ - lead magnet or engagement bait penalty
95
+ - weighted signal notes
96
+ - replicability score
97
+
98
+ ## Story Mechanism
99
+
100
+ For story posts, do not reduce the source to "strong first line" or a generic lesson. Extract the mechanism that made the story travel:
101
+
102
+ - concrete first-person moment
103
+ - visible tension or tradeoff
104
+ - mistake, regret, reversal, or confession
105
+ - before/after shift
106
+ - founder/operator decision point
107
+ - uncomfortable but specific truth
108
+ - proof embedded in the scene rather than pasted on later
109
+
110
+ If the source story only works because of celebrity, outrage, giveaway mechanics, or an unavailable body section, mark it as low-replicability or `full_text_unavailable`.
111
+
112
+ ## Blocked States
113
+
114
+ Local idea capture can still succeed when research fails.
115
+
116
+ Draft-ready output must block or retry when:
117
+
118
+ - `unauthenticated`
119
+ - `no_active_workspace`
120
+ - `search_timeout_or_rate_limited`
121
+ - `zero_useful_hook_results`
122
+ - `full_text_unavailable` when the selected hook requires body context
123
+
124
+ ## Save Requirement
125
+
126
+ Save the research with `mcp__sellable__save_hook_research` before drafting.
@@ -0,0 +1,88 @@
1
+ # Post File Contract
2
+
3
+ The v1 content library is local Markdown under `~/.sellable/content/linkedin/**`.
4
+
5
+ ## Ownership
6
+
7
+ MCP/package owns:
8
+
9
+ - tool definitions
10
+ - prompt workflow
11
+ - file schemas
12
+ - validation rules
13
+ - hook research rules
14
+
15
+ Customer computer owns:
16
+
17
+ - raw ideas
18
+ - hook research artifacts
19
+ - drafts
20
+ - published post records
21
+ - future comment history
22
+
23
+ ## Layout
24
+
25
+ ```text
26
+ ~/.sellable/content/linkedin/
27
+ ideas/
28
+ idea_YYYYMMDD_slug.md
29
+ research/
30
+ hooks/
31
+ research_YYYYMMDD_slug.md
32
+ drafts/
33
+ draft_YYYYMMDD_slug_v1.md
34
+ published/
35
+ YYYY/
36
+ post_linkedinActivityId.md
37
+ comments/
38
+ library/ # reserved only; no v1 comment drafting
39
+ ```
40
+
41
+ ## Required Fields
42
+
43
+ Idea files must preserve:
44
+
45
+ - `id`
46
+ - `type: idea`
47
+ - `status: captured`
48
+ - `createdAt`
49
+ - `updatedAt`
50
+ - exact raw source between raw-source markers
51
+ - optional distilled brief that does not add new claims
52
+
53
+ Hook research files must preserve:
54
+
55
+ - source idea ID
56
+ - keywords searched
57
+ - filters used
58
+ - source post URLs
59
+ - author/profile URLs
60
+ - engagement totals
61
+ - full-text availability
62
+ - extracted hook patterns
63
+ - selected hook basis
64
+
65
+ Draft files must preserve:
66
+
67
+ - source idea ID
68
+ - hook research ID
69
+ - draft body
70
+ - validation receipt
71
+ - status: `draft`, `ready`, or `needs_revision`
72
+
73
+ Published files must preserve:
74
+
75
+ - source draft ID when available
76
+ - publish URL
77
+ - LinkedIn activity ID when available
78
+ - published date
79
+ - optional future metrics placeholders
80
+
81
+ ## Safety
82
+
83
+ - Do not write to a repo-local Sellable content directory.
84
+ - Do not append new content to `~/.sellable/configs/content/linkedin-posts-drafts.md`.
85
+ - List operations return metadata and short sanitized previews only.
86
+ - Full raw source requires a single-object get call.
87
+ - Drafts and published posts remain separate files.
88
+ - Comment drafting is out of v1 scope.
@@ -0,0 +1,149 @@
1
+ # Post Validation
2
+
3
+ Every saved draft needs a validation receipt. A draft without this receipt is not ready.
4
+
5
+ ## Required Receipt Fields
6
+
7
+ - `sourceIdeaId`
8
+ - `hookResearchId`
9
+ - `candidateHooksConsidered`
10
+ - `selectedHook`
11
+ - `selectedHookWhy`
12
+ - `proofClaimsUsed`
13
+ - `proofClaimSources`
14
+ - `storyFilesConsulted`
15
+ - `goldStandardsConsulted`
16
+ - `voiceRulesApplied`
17
+ - `linkedinPreviewAudit`
18
+ - `simplifierConcreteLanguageAudit`
19
+ - `antiAiAudit`
20
+ - `outboundAiTellAudit`
21
+ - `finalizerChanges`
22
+ - `blockedReasons`
23
+ - `retryNeededReasons`
24
+ - `readyStatus`
25
+
26
+ ## Candidate Set
27
+
28
+ Generate multiple hook candidates before drafting. Do not lock onto the first draft.
29
+
30
+ Each candidate should include:
31
+
32
+ - hook text
33
+ - source pattern
34
+ - score
35
+ - char count and first-line / first-two-line preview measurements
36
+ - mobile and desktop preview fit
37
+ - proof/story dependency
38
+ - AI-tell risk
39
+ - why it should win or lose
40
+
41
+ ## Finalizer Pass
42
+
43
+ After the first draft:
44
+
45
+ 1. remove unsupported claims
46
+ 2. tighten the hook
47
+ 3. simplify abstract phrasing
48
+ 4. replace generic language with concrete words only when supported
49
+ 5. preserve the user's actual story and point
50
+ 6. remove AI tells
51
+ 7. re-check LinkedIn preview fit after edits
52
+
53
+ ## LinkedIn Preview Audit
54
+
55
+ Audit the selected hook and top candidates against conservative LinkedIn preview budgets:
56
+
57
+ - mobile first line: 35-45 chars
58
+ - mobile first two lines: 80-100 chars
59
+ - desktop first line: 70-90 chars
60
+ - desktop first two lines: 140-180 chars
61
+
62
+ Record:
63
+
64
+ - `charCount`
65
+ - `firstLineChars`
66
+ - `firstTwoLinesChars`
67
+ - `mobilePreviewFit`
68
+ - `desktopPreviewFit`
69
+ - `lineCountEstimate`
70
+ - `truncationRisk`
71
+ - `rewriteIfTruncated`
72
+
73
+ LinkedIn rendering varies by device and line break, so this is a planning audit. If the hook only works after likely truncation, rewrite it.
74
+
75
+ ## Simplifier / Concrete-Language Audit
76
+
77
+ Flag and rewrite:
78
+
79
+ - vague abstraction
80
+ - fake profundity
81
+ - broad claims without proof
82
+ - corporate phrasing
83
+ - lines that sound polished but unsupported
84
+ - needless meta commentary
85
+
86
+ Do not make language concrete by inventing new facts.
87
+
88
+ ## Anti-AI Audit
89
+
90
+ Start with the Outbound Base AI-Tell Layer from the message pipeline, adapted for public posts. This is a starter smell detector, not permission to run outbound workflows or force outbound copy style.
91
+
92
+ Reject or rewrite outbound-derived tells when they appear in a post:
93
+
94
+ - body-level self-introductions that add no story context
95
+ - source-citation phrasing such as "your bio says", "your profile shows", or "saw on LinkedIn"
96
+ - explicit date or duration precision that feels scraped
97
+ - block quotes of another person's phrasing longer than 4 words
98
+ - parenthetical stack or feature dumps
99
+ - over-precise numerics without a traceable source
100
+ - hardcoded signoffs
101
+ - vague proof brags such as "trusted by leaders" without named or sourced proof
102
+ - formal CTA phrasing
103
+ - reusable openers that could fit any topic
104
+ - em dashes in the draft body unless the user's post rules explicitly allow them
105
+ - resume-recap or scraped-personalization bridges
106
+ - flattened "worth sending" bridges
107
+
108
+ Also reject or rewrite post-native AI tells:
109
+
110
+ - "game-changing"
111
+ - "leverage"
112
+ - "synergy"
113
+ - "this is key"
114
+ - "let that sink in"
115
+ - "read that again"
116
+ - "here's the thing"
117
+ - "unpopular opinion" without a specific argument
118
+ - generic lessons without a story
119
+ - tidy three-part frameworks that were not in the source material
120
+ - fabricated numbers or examples
121
+ - contrarian bait without proof
122
+ - lead-magnet bait when the user did not ask for a lead magnet
123
+
124
+ ## Proof And Voice Gates
125
+
126
+ Every claim must trace to at least one of:
127
+
128
+ - raw idea
129
+ - current user answer
130
+ - `core/proof-ledger.md`
131
+ - `core/wins-ledger.md`
132
+ - `core/story-bank.md`
133
+ - `core/answer-bank.md`
134
+ - approved reference material
135
+
136
+ Gold standards can guide structure, rhythm, and judgment. They cannot create new
137
+ claims. If an outside gold standard is used, verify the draft copied no outside
138
+ wording unless the user explicitly approved quotation.
139
+
140
+ If the necessary proof or story is missing, ask the user or return blocked/retry-needed.
141
+
142
+ ## Ready Status
143
+
144
+ Use:
145
+
146
+ - `ready` only when proof, voice, anti-AI, and concrete-language gates pass
147
+ - `needs_revision` when a draft exists but a gate failed
148
+ - `blocked` when required context is missing
149
+ - `retry-needed` when a tool/package/search failure blocked the pipeline
@@ -32,6 +32,25 @@ Load only the references needed for the current run:
32
32
  legacy workflow.
33
33
  </reference_loading>
34
34
 
35
+ <content_bridge>
36
+ This interview owns durable core memory. Keep identity, company truth, proof,
37
+ stories, answer-bank entries, transcript entries, references, anti-AI rules,
38
+ context modes, decision rules, and change-log updates under
39
+ `~/.sellable/configs/core/**` and raw archives under `~/.sellable/interviews/**`.
40
+
41
+ If the run captures a content-specific LinkedIn post idea, hook/taste
42
+ correction, draft-first post calibration note, or voice-note transcript meant
43
+ as a post idea, offer to bridge that item into the content library with
44
+ `mcp__sellable__capture_post_idea` under
45
+ `~/.sellable/content/linkedin/ideas/**`.
46
+
47
+ Do not move or mirror core identity/proof/story material into
48
+ `~/.sellable/content/**`. The content bridge is only for post ideas and
49
+ content-specific calibration notes. `story-bank.md`, `proof-ledger.md`,
50
+ `answer-bank.md`, transcripts, references, and raw interview archives remain
51
+ the source of truth for stories and proof.
52
+ </content_bridge>
53
+
35
54
  <modes>
36
55
  Choose the lightest mode that can produce useful memory.
37
56
 
@@ -66,3 +66,30 @@ Personal LinkedIn posts and inspiration examples deserve especially clear
66
66
  notes: explain whether the lesson is voice, hook shape, proof handling,
67
67
  argument structure, audience fit, or a pattern to avoid. Do not mix admiration
68
68
  with permission to copy; many inspiration examples should be structural only.
69
+
70
+ ## LinkedIn Post Gold Standards
71
+
72
+ The approved LinkedIn post gold-standard pack lives in
73
+ `~/.sellable/configs/core/references/linkedin-posts/` and is capped at 20
74
+ approved examples. User-owned examples can be personal best posts or
75
+ user-approved space benchmarks researched from high-performing posts in the
76
+ space.
77
+
78
+ Do not add researched outside posts directly to the approved pack. First show a
79
+ candidate list and ask which examples the user wants to add, skip, mark as
80
+ anti-examples, or use to replace an existing item when the pack is full.
81
+
82
+ Each approved post reference should split the lesson into:
83
+
84
+ - hook mechanism
85
+ - content/body mechanism
86
+ - rhythm and pacing
87
+ - sentence structure
88
+ - proof/story use
89
+ - voice fit
90
+ - risks and allowed use
91
+
92
+ Outside examples are structure/taste references only unless the user explicitly
93
+ approves quotation. Personal posts can be stronger voice references, but still
94
+ record whether to quote, imitate structure, summarize, keep private, or treat as
95
+ an anti-example.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: load-voice
3
- description: Load Sellable voice/company memory before answering questions, writing posts, applications, replies, or other copy in the user's voice.
4
- visibility: public
3
+ description: Internal utility for loading Sellable voice/company memory before generic writing tasks that are not covered by create-post or create-campaign.
4
+ visibility: internal
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Glob
@@ -18,6 +18,12 @@ answering, rewriting, reviewing, or calibrating copy in the user's voice.
18
18
  This is a read-only usage workflow. Do not interview by default, do not write
19
19
  memory files, and do not update `~/.sellable/**` unless the user explicitly
20
20
  asks to switch into `$sellable:interview`.
21
+
22
+ This is no longer a normal public command. Use `$sellable:create-post` for
23
+ LinkedIn posts; that workflow loads voice internally. Use
24
+ `$sellable:create-campaign` for campaign/outbound work; that workflow loads its
25
+ own campaign/sender context. This prompt remains available as a direct MCP
26
+ utility for generic writing and review surfaces.
21
27
  </role>
22
28
 
23
29
  <default_use_cases>