@sellable/mcp 0.1.235 → 0.1.237

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,68 @@
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
+ - recent enough to reflect what is working now
19
+ - high enough engagement to matter
20
+ - narrow enough to match the idea
21
+
22
+ Record every keyword, filter, and result count.
23
+
24
+ ## Full Text Reality
25
+
26
+ Search results may only include previews.
27
+
28
+ When full hook/body text matters:
29
+
30
+ 1. use the result's author/profile URL
31
+ 2. call `mcp__sellable__fetch_linkedin_posts`
32
+ 3. match recent posts by URL or LinkedIn activity ID
33
+ 4. record whether the full text was found
34
+
35
+ If full text is unavailable, record `full_text_unavailable`. Use only the preview for hook analysis and do not infer missing body details.
36
+
37
+ ## Hook Extraction
38
+
39
+ Extract structure, not wording.
40
+
41
+ For each shortlisted source post, record:
42
+
43
+ - URL
44
+ - author
45
+ - engagement totals
46
+ - visible hook text or preview
47
+ - line count and mobile preview fit
48
+ - hook mechanism
49
+ - internal question created
50
+ - emotional trigger
51
+ - proof/story dependency
52
+ - replicability score
53
+
54
+ ## Blocked States
55
+
56
+ Local idea capture can still succeed when research fails.
57
+
58
+ Draft-ready output must block or retry when:
59
+
60
+ - `unauthenticated`
61
+ - `no_active_workspace`
62
+ - `search_timeout_or_rate_limited`
63
+ - `zero_useful_hook_results`
64
+ - `full_text_unavailable` when the selected hook requires body context
65
+
66
+ ## Save Requirement
67
+
68
+ 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,95 @@
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
+ - `voiceRulesApplied`
16
+ - `simplifierConcreteLanguageAudit`
17
+ - `antiAiAudit`
18
+ - `finalizerChanges`
19
+ - `blockedReasons`
20
+ - `retryNeededReasons`
21
+ - `readyStatus`
22
+
23
+ ## Candidate Set
24
+
25
+ Generate multiple hook candidates before drafting. Do not lock onto the first draft.
26
+
27
+ Each candidate should include:
28
+
29
+ - hook text
30
+ - source pattern
31
+ - score
32
+ - proof/story dependency
33
+ - AI-tell risk
34
+ - why it should win or lose
35
+
36
+ ## Finalizer Pass
37
+
38
+ After the first draft:
39
+
40
+ 1. remove unsupported claims
41
+ 2. tighten the hook
42
+ 3. simplify abstract phrasing
43
+ 4. replace generic language with concrete words only when supported
44
+ 5. preserve the user's actual story and point
45
+ 6. remove AI tells
46
+
47
+ ## Simplifier / Concrete-Language Audit
48
+
49
+ Flag and rewrite:
50
+
51
+ - vague abstraction
52
+ - fake profundity
53
+ - broad claims without proof
54
+ - corporate phrasing
55
+ - lines that sound polished but unsupported
56
+ - needless meta commentary
57
+
58
+ Do not make language concrete by inventing new facts.
59
+
60
+ ## Anti-AI Audit
61
+
62
+ Reject or rewrite:
63
+
64
+ - "game-changing"
65
+ - "leverage"
66
+ - "synergy"
67
+ - "this is key"
68
+ - "let that sink in"
69
+ - "read that again"
70
+ - generic lessons without a story
71
+ - tidy three-part frameworks that were not in the source material
72
+ - fabricated numbers or examples
73
+
74
+ ## Proof And Voice Gates
75
+
76
+ Every claim must trace to at least one of:
77
+
78
+ - raw idea
79
+ - current user answer
80
+ - `core/proof-ledger.md`
81
+ - `core/wins-ledger.md`
82
+ - `core/story-bank.md`
83
+ - `core/answer-bank.md`
84
+ - approved reference material
85
+
86
+ If the necessary proof or story is missing, ask the user or return blocked/retry-needed.
87
+
88
+ ## Ready Status
89
+
90
+ Use:
91
+
92
+ - `ready` only when proof, voice, anti-AI, and concrete-language gates pass
93
+ - `needs_revision` when a draft exists but a gate failed
94
+ - `blocked` when required context is missing
95
+ - `retry-needed` when a tool/package/search failure blocked the pipeline
@@ -939,9 +939,34 @@ here`. If sender proof matters, write it as a normal human sentence tied
939
939
  concreteness, or believability, keep the
940
940
  finalizer winner
941
941
 
942
- Run a `Final Subtraction Pass` after the Optional Simplifier Pass and before
943
- the Gold-Standard Quality Gate. This is the last copy pass and it optimizes
944
- for reply likelihood, not constraint coverage.
942
+ Run a `Concrete Language Audit` after the Optional Simplifier Pass and before
943
+ the Gold-Standard Quality Gate. This pass starts from the current selected
944
+ winner and highlights every word, phrase, or sentence that contains:
945
+
946
+ - abstract verbs
947
+ - abstract nouns
948
+ - abstract adjectives
949
+ - abstract adverbs
950
+ - cliches
951
+
952
+ For every highlight, write the exact text, category, why it is too abstract or
953
+ stale for this buyer, the concrete replacement, and whether the replacement was
954
+ applied or the line was cut. The replacement must name a buyer-visible action,
955
+ object, workflow, artifact, risk, result, or next step from the brief,
956
+ lead-sample, proof inventory, or approved token rules. Do not replace abstract
957
+ language with a different abstraction. If the concrete replacement would invent
958
+ proof, overclaim intent, or create a safety issue, cut the phrase or route to
959
+ `revise-message` / `revise-filter`.
960
+
961
+ Use this audit as a rewrite engine, not a style note. The selected winner must
962
+ not carry unresolved abstract or cliche language that can be made concrete from
963
+ available evidence. If an abstract term is intentionally kept because it is the
964
+ buyer-native category noun, document why it is buyer-native and why a concrete
965
+ replacement would be less clear.
966
+
967
+ Run a `Final Subtraction Pass` after the Concrete Language Audit and before the
968
+ Gold-Standard Quality Gate. This is the last copy pass and it optimizes for
969
+ reply likelihood, not constraint coverage.
945
970
 
946
971
  Goal: shortest truthful message most likely to earn a reply.
947
972
 
@@ -1830,6 +1855,14 @@ side project`, `serious company`, `legit`, or any line that argues with an
1830
1855
  prospect-side answer to "so what?" If a line is true but the prospect
1831
1856
  would not immediately understand why it matters, it is BLOCKED until
1832
1857
  rewritten, moved, or cut.
1858
+ - **Concrete language audit:** the selected winner must highlight and resolve
1859
+ every abstract verb, abstract noun, abstract adjective, abstract adverb, and
1860
+ cliche that weakens the message. For each highlighted item, replace it with a
1861
+ buyer-visible action, object, workflow, artifact, risk, result, or next step
1862
+ from available evidence; cut it if no safe concrete replacement exists. If a
1863
+ highlighted item remains, the audit must explain why it is buyer-native and
1864
+ clearer than the concrete alternative. Unresolved abstraction or cliche is
1865
+ BLOCKED.
1833
1866
  - **Skeptical prospect:** the selected winner must survive a skeptical
1834
1867
  prospect who has been prospected on LinkedIn by similar products hundreds
1835
1868
  of times. If that reader would dismiss the note as founder story, vague
@@ -2607,6 +2640,14 @@ hiring for`
2607
2640
  - Robustness check: PASS | BLOCKED — reason
2608
2641
  - Decision: applied | rejected
2609
2642
 
2643
+ ## Concrete Language Audit
2644
+
2645
+ | Location | Highlighted Text | Category (`abstract verb` / `abstract noun` / `abstract adjective` / `abstract adverb` / `cliche`) | Why It Weakens Reply Odds | Concrete Replacement | Decision (`applied` / `cut` / `kept as buyer-native`) |
2646
+ | -------- | ---------------- | -------------------------------------------------------------------------------------------------- | ------------------------- | -------------------- | ------------------------------------------------------ |
2647
+
2648
+ - Rewrite summary: ...
2649
+ - Remaining abstraction/cliche risk: PASS | BLOCKED — reason
2650
+
2610
2651
  ## Gold-Standard Quality Gate
2611
2652
 
2612
2653
  - Believability: PASS | BLOCKED — reason
@@ -2629,6 +2670,7 @@ hiring for`
2629
2670
  - Brief CTA obedience: PASS | BLOCKED | NOT APPLICABLE — reason
2630
2671
  - CTA clarity: PASS | BLOCKED — reason
2631
2672
  - PS restraint: PASS | BLOCKED | OMITTED — reason
2673
+ - Concrete language audit: PASS | BLOCKED — reason
2632
2674
  - YC / backing PS: PASS | BLOCKED | OMITTED — reason
2633
2675
  - Hard-to-fake proof used correctly: PASS | BLOCKED | OMITTED — reason
2634
2676
  - Gold-standard match: PASS | BLOCKED — reason
@@ -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
 
@@ -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>