@sellable/install 0.1.100 → 0.1.101

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
@@ -55,12 +55,15 @@ starts in one registry entry instead of scattered prompt edits.
55
55
 
56
56
  ## Names
57
57
 
58
- Use the same public entrypoint in both hosts:
58
+ Use the same public entrypoints in both hosts:
59
59
 
60
60
  - Claude Code: `/sellable:create-campaign`
61
+ - Claude Code: `/sellable:interview`
61
62
  - Codex: `$sellable:create-campaign`
63
+ - Codex: `$sellable:interview`
62
64
  - Codex Desktop plugin: `sellable@sellable`
63
65
  - Codex visible skill: `Sellable Create Campaign`
66
+ - Codex visible skill: `Sellable Identity Interview`
64
67
  - Internal MCP workflow prompt: `create-campaign-v2`
65
68
 
66
69
  Do not ask users to run `/sellable:create-campaign-v2`,
@@ -134,7 +134,7 @@ Usage:
134
134
  npx -y @sellable/install@latest -- [options]
135
135
 
136
136
  Commands:
137
- create Show how to launch the create-campaign workflow.
137
+ create Show how to launch public Sellable workflows.
138
138
  auth set <token> Save a Sellable API token for first-run auth.
139
139
  uninstall Remove Sellable host config and installed artifacts.
140
140
 
@@ -167,7 +167,7 @@ Auth:
167
167
  function printCreateCommandHint() {
168
168
  printBanner();
169
169
  console.log(
170
- ` ${C.bold}Create campaigns from Claude Code or Codex.${C.reset}`
170
+ ` ${C.bold}Run Sellable from Claude Code or Codex.${C.reset}`
171
171
  );
172
172
  console.log("");
173
173
  console.log(
@@ -175,14 +175,20 @@ function printCreateCommandHint() {
175
175
  );
176
176
  console.log("");
177
177
  console.log(` ${"═".repeat(63)}`);
178
- console.log(` ${C.bold}Start a Sellable campaign:${C.reset}`);
178
+ console.log(` ${C.bold}Start a Sellable workflow:${C.reset}`);
179
179
  console.log(` ${"═".repeat(63)}`);
180
180
  console.log("");
181
181
  console.log("");
182
- printAgentBox("Using Claude Code?", "claude", "/sellable:create-campaign");
182
+ printAgentBox("Using Claude Code?", "claude", [
183
+ { label: "Campaign", command: "/sellable:create-campaign" },
184
+ { label: "Identity", command: "/sellable:interview" },
185
+ ]);
183
186
  console.log("");
184
187
  console.log("");
185
- printAgentBox("Using Codex?", "codex", "$sellable:create-campaign");
188
+ printAgentBox("Using Codex?", "codex", [
189
+ { label: "Campaign", command: "$sellable:create-campaign" },
190
+ { label: "Identity", command: "$sellable:interview" },
191
+ ]);
186
192
  console.log("");
187
193
  console.log(` ${"─".repeat(63)}`);
188
194
  console.log(` ${C.grey}If those commands are missing, run:${C.reset}`);
@@ -1000,6 +1006,59 @@ If subskill lookup fails, use \`mcp__sellable__search_subskill_prompts({ query:
1000
1006
  `;
1001
1007
  }
1002
1008
 
1009
+ function interviewSkillMd() {
1010
+ return `---
1011
+ name: interview
1012
+ description: Build Sellable core identity/company memory for writing workflows.
1013
+ allowed-tools:
1014
+ - mcp__sellable__get_subskill_prompt
1015
+ - mcp__sellable__get_subskill_asset
1016
+ - mcp__sellable__search_subskill_prompts
1017
+ - Read
1018
+ - Write
1019
+ - Edit
1020
+ - Glob
1021
+ - Grep
1022
+ ---
1023
+
1024
+ # Sellable Identity Interview
1025
+
1026
+ Use this as the customer-facing entrypoint for the Sellable \`interview\`
1027
+ workflow. It builds durable identity/company memory, proof hygiene, reusable
1028
+ answers, transcript references, and anti-AI writing rules for downstream
1029
+ Sellable writing workflows.
1030
+
1031
+ ## Bootstrap
1032
+
1033
+ MCP prompt access is required. Do not inspect repo files, run shell commands,
1034
+ use \`npm\`, \`node\`, local harness scripts, or read local prompt files to
1035
+ emulate this workflow.
1036
+
1037
+ If the Sellable MCP prompt tools are unavailable, stop and say this is a Codex
1038
+ install/reload problem. Tell the user to run
1039
+ \`npx -y ${INSTALL_PACKAGE_SPEC} --host all\`, fully quit and reopen Codex
1040
+ Desktop, then start a new thread.
1041
+
1042
+ ## Execute Workflow
1043
+
1044
+ 1. Load the canonical prompt via
1045
+ \`mcp__sellable__get_subskill_prompt({ subskillName: "interview" })\`.
1046
+ If the response has \`hasMore=true\`, continue with \`nextOffset\` until
1047
+ \`hasMore=false\`.
1048
+ 2. When the canonical prompt asks for \`references/*.md\`, load those files
1049
+ with \`mcp__sellable__get_subskill_asset({ subskillName: "interview", assetPath: "references/<file>.md" })\`.
1050
+ 3. Follow the canonical prompt exactly. Save local memory only where that prompt
1051
+ directs, under \`.sellable/configs/core/**\` and
1052
+ \`.sellable/interviews/**\`.
1053
+
1054
+ ## MCP Prompt Fallback
1055
+
1056
+ If exact subskill lookup fails, use
1057
+ \`mcp__sellable__search_subskill_prompts({ query: "interview", includePublic: true })\`,
1058
+ then retry \`get_subskill_prompt\`.
1059
+ `;
1060
+ }
1061
+
1003
1062
  function createCampaignSoulMd() {
1004
1063
  return `# Sellable Campaign GTM Engineer Soul
1005
1064
 
@@ -1189,6 +1248,12 @@ function codexPluginSkills() {
1189
1248
  skillMd: createCampaignSkillMd(),
1190
1249
  soulMd: createCampaignSoulMd(),
1191
1250
  },
1251
+ {
1252
+ dir: "sellable-interview",
1253
+ displayName: "Sellable Identity Interview",
1254
+ description: "Build durable identity and company memory",
1255
+ skillMd: interviewSkillMd(),
1256
+ },
1192
1257
  ];
1193
1258
  }
1194
1259
 
@@ -1795,16 +1860,21 @@ function verify(opts) {
1795
1860
  ".codex-plugin",
1796
1861
  "plugin.json"
1797
1862
  );
1798
- const skillPath = join(
1799
- codexHome(),
1800
- "plugins",
1801
- "cache",
1802
- "sellable",
1803
- "sellable",
1804
- CODEX_PLUGIN_VERSION,
1805
- "skills",
1806
- "sellable-create-campaign",
1807
- "SKILL.md"
1863
+ const skillPaths = codexPluginSkills().map((skill) =>
1864
+ join(
1865
+ codexHome(),
1866
+ "plugins",
1867
+ "cache",
1868
+ "sellable",
1869
+ "sellable",
1870
+ CODEX_PLUGIN_VERSION,
1871
+ "skills",
1872
+ skill.dir,
1873
+ "SKILL.md"
1874
+ )
1875
+ );
1876
+ const hasSkillBundles = skillPaths.every((skillPath) =>
1877
+ existsSync(skillPath)
1808
1878
  );
1809
1879
  checks.push({
1810
1880
  ok: existsSync(pluginPath),
@@ -1813,10 +1883,10 @@ function verify(opts) {
1813
1883
  : "Codex Desktop plugin missing",
1814
1884
  });
1815
1885
  checks.push({
1816
- ok: existsSync(skillPath),
1817
- label: existsSync(skillPath)
1818
- ? "Codex skill bundle present"
1819
- : "Codex skill bundle missing",
1886
+ ok: hasSkillBundles,
1887
+ label: hasSkillBundles
1888
+ ? "Codex skill bundles present"
1889
+ : "Codex skill bundles missing",
1820
1890
  });
1821
1891
  const codexAgentPaths = codexCustomAgents().map((agent) =>
1822
1892
  join(codexHome(), "agents", agent.filename)
@@ -1878,10 +1948,13 @@ function visibleLen(s) {
1878
1948
  return s.replace(/\x1b\[[0-9;]*m/g, "").length;
1879
1949
  }
1880
1950
 
1881
- function printAgentBox(title, terminalCmd, agentCmd) {
1951
+ function printAgentBox(title, terminalCmd, agentCommands) {
1882
1952
  // Inner width between │ ... │ — i.e. the printable area excluding the borders.
1883
1953
  const W = 58;
1884
1954
  const agentName = title.replace("Using ", "").replace("?", "");
1955
+ const commands = Array.isArray(agentCommands)
1956
+ ? agentCommands
1957
+ : [{ label: "", command: agentCommands }];
1885
1958
 
1886
1959
  const line = (text) => {
1887
1960
  const pad = Math.max(0, W - visibleLen(text));
@@ -1902,7 +1975,10 @@ function printAgentBox(title, terminalCmd, agentCmd) {
1902
1975
  console.log(blank());
1903
1976
  console.log(line(` ${C.bold}STEP 2${C.reset} Then in ${agentName}, run:`));
1904
1977
  console.log(blank());
1905
- console.log(line(` ${C.cyan}${agentCmd}${C.reset}`));
1978
+ for (const item of commands) {
1979
+ const label = item.label ? `${item.label.padEnd(8)} ` : "";
1980
+ console.log(line(` ${label}${C.cyan}${item.command}${C.reset}`));
1981
+ }
1906
1982
  console.log(blank());
1907
1983
  console.log(bot);
1908
1984
  }
@@ -2015,18 +2091,24 @@ function printNextSteps(installedHosts, authReused) {
2015
2091
  console.log("");
2016
2092
  console.log("");
2017
2093
  console.log(` ${"═".repeat(63)}`);
2018
- console.log(` ${C.bold}To launch your first campaign:${C.reset}`);
2094
+ console.log(` ${C.bold}To launch a Sellable workflow:${C.reset}`);
2019
2095
  console.log(` ${"═".repeat(63)}`);
2020
2096
  console.log("");
2021
2097
  console.log("");
2022
2098
 
2023
2099
  if (hasClaude) {
2024
- printAgentBox("Using Claude Code?", "claude", "/sellable:create-campaign");
2100
+ printAgentBox("Using Claude Code?", "claude", [
2101
+ { label: "Campaign", command: "/sellable:create-campaign" },
2102
+ { label: "Identity", command: "/sellable:interview" },
2103
+ ]);
2025
2104
  console.log("");
2026
2105
  console.log("");
2027
2106
  }
2028
2107
  if (hasCodex) {
2029
- printAgentBox("Using Codex?", "codex", "$sellable:create-campaign");
2108
+ printAgentBox("Using Codex?", "codex", [
2109
+ { label: "Campaign", command: "$sellable:create-campaign" },
2110
+ { label: "Identity", command: "$sellable:interview" },
2111
+ ]);
2030
2112
  console.log("");
2031
2113
  }
2032
2114
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.100",
3
+ "version": "0.1.101",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {