@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.
- package/README.md +19 -14
- package/dist/engage-memory.d.ts +1 -0
- package/dist/engage-memory.js +18 -2
- package/dist/identity-memory.d.ts +1 -0
- package/dist/identity-memory.js +27 -0
- package/dist/server.js +28 -0
- package/dist/tools/campaigns.js +10 -7
- package/dist/tools/content-posts.d.ts +308 -0
- package/dist/tools/content-posts.js +611 -0
- package/dist/tools/engage-memory.js +1 -1
- package/dist/tools/leads.d.ts +2 -2
- package/dist/tools/registry.d.ts +105 -0
- package/dist/tools/registry.js +2 -0
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +6 -4
- package/skills/create-campaign-v2/SKILL.md +5 -4
- package/skills/create-campaign-v2/SOUL.md +10 -7
- package/skills/create-campaign-v2/core/flow.v2.json +1 -1
- package/skills/create-campaign-v2/references/approval-gate-framing.md +1 -1
- package/skills/create-campaign-v2/references/watch-link-handoff.md +6 -4
- package/skills/create-post/SKILL.md +258 -1263
- package/skills/create-post/references/gold-standard-post-pack.md +203 -0
- package/skills/create-post/references/hook-research-playbook.md +126 -0
- package/skills/create-post/references/post-file-contract.md +88 -0
- package/skills/create-post/references/post-validation.md +149 -0
- package/skills/interview/SKILL.md +19 -0
- package/skills/interview/references/reference-curation.md +27 -0
- package/skills/load-voice/SKILL.md +8 -2
|
@@ -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:
|
|
4
|
-
visibility:
|
|
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>
|