@sellable/install 0.1.179 → 0.1.180

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,8 @@ agent command for launching a campaign:
23
23
  sellable create
24
24
  ```
25
25
 
26
- Campaign creation itself runs inside Claude Code or Codex, where the Sellable
27
- MCP tools and approval flow are available.
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.
28
28
 
29
29
  Install is auth-free by default. If you do not pass a token, the agent handles
30
30
  Sellable sign-in on the first campaign run with a magic-link handoff.
@@ -70,19 +70,21 @@ Use the same public entrypoints in both hosts:
70
70
 
71
71
  - Claude Code: `/sellable:create-campaign`
72
72
  - Claude Code: `/sellable:interview`
73
- - Claude Code: `/sellable:load-voice`
73
+ - Claude Code: `/sellable:create-post`
74
74
  - Codex: `$sellable:create-campaign`
75
75
  - Codex: `$sellable:interview`
76
- - Codex: `$sellable:load-voice`
76
+ - Codex: `$sellable:create-post`
77
77
  - Codex Desktop plugin: `sellable@sellable`
78
78
  - Codex visible skill: `Sellable Create Campaign`
79
79
  - Codex visible skill: `Sellable Identity Interview`
80
- - Codex visible skill: `Sellable Load Voice`
80
+ - Codex visible skill: `Sellable Create Post`
81
81
  - Internal MCP workflow prompt: `create-campaign-v2`
82
82
 
83
83
  Do not ask users to run `/sellable:create-campaign-v2`,
84
- `$sellable:create-campaign-v2`, or `$sellable:sellable:create-campaign`.
85
- `create-campaign-v2` is loaded internally by the skill.
84
+ `$sellable:create-campaign-v2`, `$sellable:load-voice`, or
85
+ `$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.
86
88
 
87
89
  ## Structured Questions
88
90
 
@@ -31,7 +31,7 @@ function getInstallVersion() {
31
31
  }
32
32
  }
33
33
 
34
- const CODEX_PLUGIN_VERSION = "0.1.34";
34
+ const CODEX_PLUGIN_VERSION = "0.1.35";
35
35
  const CODEX_PLUGIN_COMPAT_VERSIONS = [
36
36
  "0.1.8",
37
37
  "0.1.9",
@@ -59,6 +59,7 @@ const CODEX_PLUGIN_COMPAT_VERSIONS = [
59
59
  "0.1.31",
60
60
  "0.1.32",
61
61
  "0.1.33",
62
+ "0.1.34",
62
63
  ];
63
64
  const INSTALL_PACKAGE_SPEC =
64
65
  process.env.SELLABLE_INSTALL_PACKAGE_SPEC || "@sellable/install@latest";
@@ -149,9 +150,9 @@ Options:
149
150
 
150
151
  Auth:
151
152
  Install is auth-free by default. Sign in happens on the first run of
152
- /sellable:create-campaign in Claude Code or Codex, where the agent walks
153
- you through signup or sign-in and stores credentials in
154
- ~/.sellable/config.json.
153
+ /sellable:create-campaign or /sellable:create-post in Claude Code or Codex,
154
+ where the agent walks you through signup or sign-in and stores credentials
155
+ in ~/.sellable/config.json.
155
156
 
156
157
  For CI/scripted installs, pass --token + --workspace-id or set
157
158
  SELLABLE_TOKEN + SELLABLE_WORKSPACE_ID and the installer will write the
@@ -174,11 +175,15 @@ function printCreateCommandHint() {
174
175
  console.log("");
175
176
  printAgentBox("Using Claude Code?", "claude", [
176
177
  { label: "Campaign", command: "/sellable:create-campaign" },
178
+ { label: "Post", command: "/sellable:create-post" },
179
+ { label: "Interview", command: "/sellable:interview" },
177
180
  ]);
178
181
  console.log("");
179
182
  console.log("");
180
183
  printAgentBox("Using Codex?", "codex", [
181
184
  { label: "Campaign", command: "$sellable:create-campaign" },
185
+ { label: "Post", command: "$sellable:create-post" },
186
+ { label: "Interview", command: "$sellable:interview" },
182
187
  ]);
183
188
  console.log("");
184
189
  console.log(` ${"─".repeat(63)}`);
@@ -839,16 +844,18 @@ automation just because a watch link exists. If \`create_campaign\` returns
839
844
  \`watchHandoff.markdown\`, print that exact value once, directly before the brief
840
845
  approval question. It will use the URL mode to say Codex or Claude Code:
841
846
 
847
+ \`\`\`\`markdown
842
848
  \`\`\`text
843
- ╔══════════════════════════════════════════════════════════════╗
844
- ║ OPEN THIS LINK TO WATCH CODEX BUILD THE CAMPAIGN LIVE
845
- ╚══════════════════════════════════════════════════════════════╝
849
+ +------------------------------------------------------+
850
+ | WATCH CODEX BUILD THE CAMPAIGN LIVE |
851
+ +------------------------------------------------------+
852
+ \`\`\`
846
853
 
847
854
  [Open live campaign builder]({watchUrl})
848
855
 
849
856
  Keep this chat open. I'll ask approval questions here before making decisions
850
857
  that need your judgment.
851
- \`\`\`
858
+ \`\`\`\`
852
859
 
853
860
  The Markdown link is intentional: rendered chat clients turn it into a large
854
861
  click target, and plain terminals still expose the tokenized URL inside the
@@ -1226,6 +1233,7 @@ allowed-tools:
1226
1233
  - mcp__sellable__get_subskill_prompt
1227
1234
  - mcp__sellable__get_subskill_asset
1228
1235
  - mcp__sellable__search_subskill_prompts
1236
+ - mcp__sellable__capture_post_idea
1229
1237
  - Read
1230
1238
  - Write
1231
1239
  - Edit
@@ -1262,6 +1270,14 @@ Desktop, then start a new thread.
1262
1270
  3. Follow the canonical prompt exactly. Save local memory only where that prompt
1263
1271
  directs, under \`~/.sellable/configs/core/**\` and
1264
1272
  \`~/.sellable/interviews/**\`.
1273
+ 4. If the interview captures a content-specific LinkedIn post idea, hook/taste
1274
+ correction, draft-first post calibration note, or voice-note transcript meant
1275
+ as a post idea, the canonical prompt may bridge only that item with
1276
+ \`mcp__sellable__capture_post_idea\` under
1277
+ \`~/.sellable/content/linkedin/ideas/**\`. Core identity, proof, stories,
1278
+ answer-bank entries, transcripts, references, and raw archives must stay in
1279
+ \`~/.sellable/configs/core/**\` and \`~/.sellable/interviews/**\`.
1280
+ Core identity, proof, stories, answer-bank entries, transcripts, references, and raw archives must stay in core/interviews.
1265
1281
 
1266
1282
  ## MCP Prompt Fallback
1267
1283
 
@@ -1271,27 +1287,40 @@ then retry \`get_subskill_prompt\`.
1271
1287
  `;
1272
1288
  }
1273
1289
 
1274
- function loadVoiceSkillMd() {
1290
+ function createPostSkillMd() {
1275
1291
  return `---
1276
- name: load-voice
1277
- description: Load Sellable voice/company memory for answering questions, writing posts, applications, replies, and reviews in the user's voice.
1292
+ name: create-post
1293
+ description: Capture rough LinkedIn post ideas, research currently working hooks, and save validated drafts in the user's voice.
1278
1294
  allowed-tools:
1295
+ - mcp__sellable__get_auth_status
1279
1296
  - mcp__sellable__get_subskill_prompt
1297
+ - mcp__sellable__get_subskill_asset
1280
1298
  - mcp__sellable__search_subskill_prompts
1281
- - Read
1282
- - Glob
1283
- - Grep
1299
+ - mcp__sellable__get_engage_memory
1300
+ - mcp__sellable__capture_post_idea
1301
+ - mcp__sellable__get_post_idea
1302
+ - mcp__sellable__list_post_ideas
1303
+ - mcp__sellable__save_hook_research
1304
+ - mcp__sellable__save_post_draft
1305
+ - mcp__sellable__get_post_draft
1306
+ - mcp__sellable__mark_post_published
1307
+ - mcp__sellable__list_published_posts
1308
+ - mcp__sellable__search_engagement_posts
1309
+ - mcp__sellable__fetch_linkedin_posts
1310
+ - mcp__sellable__fetch_linkedin_profile
1311
+ - mcp__sellable__record_engage_proven_search
1284
1312
  ---
1285
1313
 
1286
- # Sellable Load Voice
1314
+ # Sellable Create Post
1287
1315
 
1288
- Use this as the customer-facing entrypoint for loading Sellable voice/company
1289
- memory before drafting, answering, rewriting, reviewing, or calibrating copy in
1290
- the user's voice.
1316
+ Use this as the customer-facing entrypoint for the Sellable \`create-post\`
1317
+ workflow. It captures raw LinkedIn post ideas, preserves the user's source
1318
+ wording, researches currently working hooks, validates proof/voice/AI tells, and
1319
+ saves drafts under \`~/.sellable/content/linkedin/**\`.
1291
1320
 
1292
1321
  ## Bootstrap
1293
1322
 
1294
- MCP prompt access and local read tools are required. Do not run shell commands,
1323
+ MCP prompt access is required. Do not inspect repo files, run shell commands,
1295
1324
  use \`npm\`, \`node\`, local harness scripts, or read local prompt files to
1296
1325
  emulate this workflow.
1297
1326
 
@@ -1302,20 +1331,24 @@ Desktop, then start a new thread.
1302
1331
 
1303
1332
  ## Execute Workflow
1304
1333
 
1305
- 1. Load the canonical prompt via
1306
- \`mcp__sellable__get_subskill_prompt({ subskillName: "load-voice" })\`.
1334
+ 1. Call \`mcp__sellable__get_auth_status({})\` so hook research failures can be
1335
+ distinguished from local content capture.
1336
+ 2. Load the canonical prompt via
1337
+ \`mcp__sellable__get_subskill_prompt({ subskillName: "create-post" })\`.
1307
1338
  If the response has \`hasMore=true\`, continue with \`nextOffset\` until
1308
1339
  \`hasMore=false\`.
1309
- 2. Follow the canonical prompt exactly. Read the relevant
1310
- \`~/.sellable/configs/**\` memory files it names.
1311
- 3. Apply the loaded memory silently to the user's requested writing or answer.
1312
- If the user only asked to load voice, summarize the active rules briefly and
1313
- ask what they want drafted, answered, or reviewed.
1340
+ 3. Load every required create-post reference with
1341
+ \`mcp__sellable__get_subskill_asset({ subskillName: "create-post", assetPath: "references/<file>.md" })\`.
1342
+ If any asset response has \`hasMore=true\`, continue with \`nextOffset\`
1343
+ until \`hasMore=false\`.
1344
+ 4. Follow the canonical prompt exactly. Use the content tools for ideas,
1345
+ research, drafts, and published records. Do not write repo-local prompt files
1346
+ or append to legacy flat draft files.
1314
1347
 
1315
1348
  ## MCP Prompt Fallback
1316
1349
 
1317
1350
  If exact subskill lookup fails, use
1318
- \`mcp__sellable__search_subskill_prompts({ query: "load-voice", includePublic: true })\`,
1351
+ \`mcp__sellable__search_subskill_prompts({ query: "create-post", includePublic: true, includeInternal: true })\`,
1319
1352
  then retry \`get_subskill_prompt\`.
1320
1353
  `;
1321
1354
  }
@@ -1524,10 +1557,10 @@ function codexPluginSkills() {
1524
1557
  skillMd: interviewSkillMd(),
1525
1558
  },
1526
1559
  {
1527
- dir: "sellable-load-voice",
1528
- displayName: "Sellable Load Voice",
1529
- description: "Load voice memory for writing and answers",
1530
- skillMd: loadVoiceSkillMd(),
1560
+ dir: "sellable-create-post",
1561
+ displayName: "Sellable Create Post",
1562
+ description: "Capture ideas and draft LinkedIn posts in your voice",
1563
+ skillMd: createPostSkillMd(),
1531
1564
  },
1532
1565
  ];
1533
1566
  }
@@ -2500,6 +2533,8 @@ function printNextSteps(installedHosts, authReused) {
2500
2533
  if (hasClaude) {
2501
2534
  printAgentBox("Using Claude Code?", "claude", [
2502
2535
  { label: "Campaign", command: "/sellable:create-campaign" },
2536
+ { label: "Post", command: "/sellable:create-post" },
2537
+ { label: "Interview", command: "/sellable:interview" },
2503
2538
  ]);
2504
2539
  console.log("");
2505
2540
  console.log("");
@@ -2507,6 +2542,8 @@ function printNextSteps(installedHosts, authReused) {
2507
2542
  if (hasCodex) {
2508
2543
  printAgentBox("Using Codex?", "codex", [
2509
2544
  { label: "Campaign", command: "$sellable:create-campaign" },
2545
+ { label: "Post", command: "$sellable:create-post" },
2546
+ { label: "Interview", command: "$sellable:interview" },
2510
2547
  ]);
2511
2548
  console.log("");
2512
2549
  }
@@ -2777,7 +2814,11 @@ async function main() {
2777
2814
  console.log(` apiUrl: ${apiUrl}`);
2778
2815
  console.log(` Continue in your agent:`);
2779
2816
  console.log(` Claude Code: /sellable:create-campaign`);
2817
+ console.log(` Claude Code: /sellable:create-post`);
2818
+ console.log(` Claude Code: /sellable:interview`);
2780
2819
  console.log(` Codex: $sellable:create-campaign`);
2820
+ console.log(` Codex: $sellable:create-post`);
2821
+ console.log(` Codex: $sellable:interview`);
2781
2822
  process.exit(0);
2782
2823
  }
2783
2824
  if (rawArgs[0] === "uninstall") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.179",
3
+ "version": "0.1.180",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -408,16 +408,18 @@ automation just because a watch link exists. If `create_campaign` returns
408
408
  `watchHandoff.markdown`, print that exact value once, directly before the brief
409
409
  approval question. It will use the URL mode to say Codex or Claude Code:
410
410
 
411
+ ````markdown
411
412
  ```text
412
- ╔══════════════════════════════════════════════════════════════╗
413
- ║ OPEN THIS LINK TO WATCH CODEX BUILD THE CAMPAIGN LIVE
414
- ╚══════════════════════════════════════════════════════════════╝
413
+ +------------------------------------------------------+
414
+ | WATCH CODEX BUILD THE CAMPAIGN LIVE |
415
+ +------------------------------------------------------+
416
+ ```
415
417
 
416
418
  [Open live campaign builder]({watchUrl})
417
419
 
418
420
  Keep this chat open. I'll ask approval questions here before making decisions
419
421
  that need your judgment.
420
- ```
422
+ ````
421
423
 
422
424
  The Markdown link is intentional: rendered chat clients turn it into a large
423
425
  click target, and plain terminals still expose the tokenized URL inside the