@sellable/install 0.1.187 → 0.1.189

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 CHANGED
@@ -23,8 +23,9 @@ agent command for launching a campaign:
23
23
  sellable create
24
24
  ```
25
25
 
26
- Campaign creation, post drafting, and identity interviews run inside Claude Code
27
- or Codex, where the Sellable MCP tools and approval flows are available.
26
+ Campaign creation, content capture/ideation, post drafting, and identity
27
+ interviews run inside Claude Code or Codex, where the Sellable MCP tools and
28
+ approval flows are available.
28
29
 
29
30
  Install is auth-free by default. If you do not pass a token, the agent handles
30
31
  Sellable sign-in on the first campaign run with a magic-link handoff.
@@ -69,13 +70,16 @@ source-scout agents.
69
70
  Use the same public entrypoints in both hosts:
70
71
 
71
72
  - Claude Code: `/sellable:create-campaign`
73
+ - Claude Code: `/sellable:content`
72
74
  - Claude Code: `/sellable:interview`
73
75
  - Claude Code: `/sellable:create-post`
74
76
  - Codex: `$sellable:create-campaign`
77
+ - Codex: `$sellable:content`
75
78
  - Codex: `$sellable:interview`
76
79
  - Codex: `$sellable:create-post`
77
80
  - Codex Desktop plugin: `sellable@sellable`
78
81
  - Codex visible skill: `Sellable Create Campaign`
82
+ - Codex visible skill: `Sellable Content`
79
83
  - Codex visible skill: `Sellable Identity Interview`
80
84
  - Codex visible skill: `Sellable Create Post`
81
85
  - Internal MCP workflow prompt: `create-campaign-v2`
@@ -83,8 +87,10 @@ Use the same public entrypoints in both hosts:
83
87
  Do not ask users to run `/sellable:create-campaign-v2`,
84
88
  `$sellable:create-campaign-v2`, `$sellable:load-voice`, or
85
89
  `$sellable:sellable:create-campaign`. `create-campaign-v2` is loaded internally
86
- by the campaign skill. `create-post` loads voice internally, so there is no
87
- separate public voice-loading command.
90
+ by the campaign skill. `content` is the preferred entrypoint for adding
91
+ transcripts, recurring ideas, and post seeds. `create-post` remains a supported
92
+ direct drafting shortcut and loads voice internally, so there is no separate
93
+ public voice-loading command.
88
94
 
89
95
  ## Structured Questions
90
96
 
@@ -31,7 +31,7 @@ function getInstallVersion() {
31
31
  }
32
32
  }
33
33
 
34
- const CODEX_PLUGIN_VERSION = "0.1.39";
34
+ const CODEX_PLUGIN_VERSION = "0.1.40";
35
35
  const CODEX_PLUGIN_COMPAT_VERSIONS = [
36
36
  "0.1.8",
37
37
  "0.1.9",
@@ -64,6 +64,7 @@ const CODEX_PLUGIN_COMPAT_VERSIONS = [
64
64
  "0.1.36",
65
65
  "0.1.37",
66
66
  "0.1.38",
67
+ "0.1.39",
67
68
  ];
68
69
  const INSTALL_PACKAGE_SPEC =
69
70
  process.env.SELLABLE_INSTALL_PACKAGE_SPEC || "@sellable/install@latest";
@@ -154,7 +155,7 @@ Options:
154
155
 
155
156
  Auth:
156
157
  Install is auth-free by default. Sign in happens on the first run of
157
- /sellable:create-campaign or /sellable:create-post in Claude Code or Codex,
158
+ /sellable:create-campaign, /sellable:content, or /sellable:create-post in Claude Code or Codex,
158
159
  where the agent walks you through signup or sign-in and stores credentials
159
160
  in ~/.sellable/config.json.
160
161
 
@@ -179,6 +180,7 @@ function printCreateCommandHint() {
179
180
  console.log("");
180
181
  printAgentBox("Using Claude Code?", "claude", [
181
182
  { label: "Campaign", command: "/sellable:create-campaign" },
183
+ { label: "Content", command: "/sellable:content" },
182
184
  { label: "Post", command: "/sellable:create-post" },
183
185
  { label: "Interview", command: "/sellable:interview" },
184
186
  ]);
@@ -186,6 +188,7 @@ function printCreateCommandHint() {
186
188
  console.log("");
187
189
  printAgentBox("Using Codex?", "codex", [
188
190
  { label: "Campaign", command: "$sellable:create-campaign" },
191
+ { label: "Content", command: "$sellable:content" },
189
192
  { label: "Post", command: "$sellable:create-post" },
190
193
  { label: "Interview", command: "$sellable:interview" },
191
194
  ]);
@@ -849,23 +852,19 @@ automation just because a watch link exists. If \`create_campaign\` returns
849
852
  approval question. It will use the URL mode to say Codex or Claude Code:
850
853
 
851
854
  \`\`\`\`markdown
852
- \`\`\`
853
- +------------------------------------------------------+
854
- | WATCH CODEX BUILD THE CAMPAIGN LIVE |
855
- +------------------------------------------------------+
856
- \`\`\`
857
-
858
- [Open live campaign builder]({watchUrl})
859
-
860
- Keep this chat open. I'll ask approval questions here before making decisions
861
- that need your judgment.
855
+ > **WATCH CODEX BUILD THE CAMPAIGN LIVE**
856
+ >
857
+ > [Open live campaign builder]({watchUrl})
858
+ >
859
+ > Keep this chat open. I'll ask approval questions here before making decisions
860
+ > that need your judgment.
862
861
  \`\`\`\`
863
862
 
864
- The ASCII banner is intentional because it is unmissable in both Codex and plain
865
- terminals. Only the banner should be fenced/preformatted; keep the Markdown link
866
- and chat note outside the fence so rendered chat clients still expose a normal
867
- click target. Do not add a code-fence language label, replace the link with a
868
- shell command, or add a browser-opening instruction.
863
+ The rendered callout is intentional: rendered chat clients highlight the
864
+ headline, link, and note without treating it as a code block, and plain terminals
865
+ still expose the tokenized URL inside the Markdown target. Do not wrap this CTA
866
+ in a fenced code block, replace it with a shell command, or add a
867
+ browser-opening instruction.
869
868
 
870
869
  The watch link should auto-login through the token in the URL. If the user says
871
870
  the link lands on auth, 404, permission, blank, or a visible error state, recover
@@ -1292,6 +1291,76 @@ then retry \`get_subskill_prompt\`.
1292
1291
  `;
1293
1292
  }
1294
1293
 
1294
+ function contentSkillMd() {
1295
+ return `---
1296
+ name: content
1297
+ description: Add transcripts and rough ideas, cluster recurring themes, ideate post seeds, and hand draft requests to create-post.
1298
+ allowed-tools:
1299
+ - mcp__sellable__get_auth_status
1300
+ - mcp__sellable__get_subskill_prompt
1301
+ - mcp__sellable__get_subskill_asset
1302
+ - mcp__sellable__search_subskill_prompts
1303
+ - mcp__sellable__get_engage_memory
1304
+ - mcp__sellable__capture_post_idea
1305
+ - mcp__sellable__get_post_idea
1306
+ - mcp__sellable__list_post_ideas
1307
+ - mcp__sellable__save_hook_research
1308
+ - mcp__sellable__save_post_draft
1309
+ - mcp__sellable__get_post_draft
1310
+ - mcp__sellable__mark_post_published
1311
+ - mcp__sellable__list_published_posts
1312
+ - mcp__sellable__search_engagement_posts
1313
+ - mcp__sellable__fetch_linkedin_posts
1314
+ - mcp__sellable__fetch_linkedin_profile
1315
+ - mcp__sellable__record_engage_proven_search
1316
+ - mcp__sellable__upsert_engage_tracked_person
1317
+ - Read
1318
+ - Write
1319
+ - Edit
1320
+ - Glob
1321
+ - Grep
1322
+ ---
1323
+
1324
+ # Sellable Content
1325
+
1326
+ Use this as the customer-facing entrypoint for the Sellable \`content\`
1327
+ workflow. It captures raw transcripts and rough notes, clusters recurring
1328
+ ideas, extracts story/proof/question cards, produces post seeds, and only drafts
1329
+ by handing off to the canonical \`create-post\` workflow.
1330
+
1331
+ ## Bootstrap
1332
+
1333
+ MCP prompt access is required. Do not inspect repo files, run shell commands,
1334
+ use \`npm\`, \`node\`, local harness scripts, or read local prompt files to
1335
+ emulate this workflow.
1336
+
1337
+ If the Sellable MCP prompt tools are unavailable, stop and say this is a Codex
1338
+ install/reload problem. Tell the user to run
1339
+ \`npx -y ${INSTALL_PACKAGE_SPEC} --host all\`, fully quit and reopen Codex
1340
+ Desktop, then start a new thread.
1341
+
1342
+ ## Execute Workflow
1343
+
1344
+ 1. Call \`mcp__sellable__get_auth_status({})\` so research and save failures can
1345
+ be distinguished from local content capture.
1346
+ 2. Load the canonical prompt via
1347
+ \`mcp__sellable__get_subskill_prompt({ subskillName: "content" })\`.
1348
+ If the response has \`hasMore=true\`, continue with \`nextOffset\` until
1349
+ \`hasMore=false\`.
1350
+ 3. Follow the canonical prompt exactly. Use \`content\` for capture, clustering,
1351
+ ideation, and development. If the user asks for a draft, load and follow
1352
+ \`mcp__sellable__get_subskill_prompt({ subskillName: "create-post" })\`.
1353
+ 4. Do not create a parallel post drafting flow. Do not write repo-local prompt
1354
+ files or append to legacy flat draft files.
1355
+
1356
+ ## MCP Prompt Fallback
1357
+
1358
+ If exact subskill lookup fails, use
1359
+ \`mcp__sellable__search_subskill_prompts({ query: "content", includePublic: true, includeInternal: true })\`,
1360
+ then retry \`get_subskill_prompt\`.
1361
+ `;
1362
+ }
1363
+
1295
1364
  function createPostSkillMd() {
1296
1365
  return `---
1297
1366
  name: create-post
@@ -1558,10 +1627,10 @@ function codexPluginSkills() {
1558
1627
  soulMd: createCampaignSoulMd(),
1559
1628
  },
1560
1629
  {
1561
- dir: "sellable-interview",
1562
- displayName: "Sellable Identity Interview",
1563
- description: "Build durable identity and company memory",
1564
- skillMd: interviewSkillMd(),
1630
+ dir: "sellable-content",
1631
+ displayName: "Sellable Content",
1632
+ description: "Add ideas, transcripts, clusters, and post seeds",
1633
+ skillMd: contentSkillMd(),
1565
1634
  },
1566
1635
  {
1567
1636
  dir: "sellable-create-post",
@@ -1569,6 +1638,12 @@ function codexPluginSkills() {
1569
1638
  description: "Capture ideas and draft LinkedIn posts in your voice",
1570
1639
  skillMd: createPostSkillMd(),
1571
1640
  },
1641
+ {
1642
+ dir: "sellable-interview",
1643
+ displayName: "Sellable Identity Interview",
1644
+ description: "Build durable identity and company memory",
1645
+ skillMd: interviewSkillMd(),
1646
+ },
1572
1647
  ];
1573
1648
  }
1574
1649
 
@@ -2555,6 +2630,7 @@ function printNextSteps(installedHosts, authReused) {
2555
2630
  if (hasClaude) {
2556
2631
  printAgentBox("Using Claude Code?", "claude", [
2557
2632
  { label: "Campaign", command: "/sellable:create-campaign" },
2633
+ { label: "Content", command: "/sellable:content" },
2558
2634
  { label: "Post", command: "/sellable:create-post" },
2559
2635
  { label: "Interview", command: "/sellable:interview" },
2560
2636
  ]);
@@ -2564,6 +2640,7 @@ function printNextSteps(installedHosts, authReused) {
2564
2640
  if (hasCodex) {
2565
2641
  printAgentBox("Using Codex?", "codex", [
2566
2642
  { label: "Campaign", command: "$sellable:create-campaign" },
2643
+ { label: "Content", command: "$sellable:content" },
2567
2644
  { label: "Post", command: "$sellable:create-post" },
2568
2645
  { label: "Interview", command: "$sellable:interview" },
2569
2646
  ]);
@@ -2836,9 +2913,11 @@ async function main() {
2836
2913
  console.log(` apiUrl: ${apiUrl}`);
2837
2914
  console.log(` Continue in your agent:`);
2838
2915
  console.log(` Claude Code: /sellable:create-campaign`);
2916
+ console.log(` Claude Code: /sellable:content`);
2839
2917
  console.log(` Claude Code: /sellable:create-post`);
2840
2918
  console.log(` Claude Code: /sellable:interview`);
2841
2919
  console.log(` Codex: $sellable:create-campaign`);
2920
+ console.log(` Codex: $sellable:content`);
2842
2921
  console.log(` Codex: $sellable:create-post`);
2843
2922
  console.log(` Codex: $sellable:interview`);
2844
2923
  process.exit(0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.187",
3
+ "version": "0.1.189",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -409,23 +409,19 @@ automation just because a watch link exists. If `create_campaign` returns
409
409
  approval question. It will use the URL mode to say Codex or Claude Code:
410
410
 
411
411
  ````markdown
412
- ```
413
- +------------------------------------------------------+
414
- | WATCH CODEX BUILD THE CAMPAIGN LIVE |
415
- +------------------------------------------------------+
416
- ```
417
-
418
- [Open live campaign builder]({watchUrl})
419
-
420
- Keep this chat open. I'll ask approval questions here before making decisions
421
- that need your judgment.
412
+ > **WATCH CODEX BUILD THE CAMPAIGN LIVE**
413
+ >
414
+ > [Open live campaign builder]({watchUrl})
415
+ >
416
+ > Keep this chat open. I'll ask approval questions here before making decisions
417
+ > that need your judgment.
422
418
  ````
423
419
 
424
- The ASCII banner is intentional because it is unmissable in both Codex and plain
425
- terminals. Only the banner should be fenced/preformatted; keep the Markdown link
426
- and chat note outside the fence so rendered chat clients still expose a normal
427
- click target. Do not add a code-fence language label, replace the link with a
428
- shell command, or add a browser-opening instruction.
420
+ The rendered callout is intentional: rendered chat clients highlight the
421
+ headline, link, and note without treating it as a code block, and plain terminals
422
+ still expose the tokenized URL inside the Markdown target. Do not wrap this CTA
423
+ in a fenced code block, replace it with a shell command, or add a
424
+ browser-opening instruction.
429
425
 
430
426
  The watch link should auto-login through the token in the URL. If the user says
431
427
  the link lands on auth, 404, permission, blank, or a visible error state, recover