@sellable/install 0.1.213 → 0.1.215

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
@@ -31,9 +31,9 @@ agent command for launching a campaign:
31
31
  sellable create
32
32
  ```
33
33
 
34
- Campaign creation, foundation memory, content capture/ideation, and post
35
- drafting run inside Claude Code or Codex, where the Sellable MCP tools and
36
- approval flows are available.
34
+ Campaign creation, foundation memory, content capture/ideation, post drafting,
35
+ and inbox reply management run inside Claude Code or Codex, where the Sellable
36
+ MCP tools and approval flows are available.
37
37
 
38
38
  Install is auth-free by default. If you do not pass a token, the agent handles
39
39
  Sellable sign-in on the first campaign run with a magic-link handoff.
@@ -97,17 +97,20 @@ Use the same public entrypoints in both hosts:
97
97
  - Claude Code: `/sellable:foundation`
98
98
  - Claude Code: `/sellable:content`
99
99
  - Claude Code: `/sellable:create-post`
100
+ - Claude Code: `/sellable:inbox`
100
101
  - Codex: `$sellable:create-campaign`
101
102
  - Codex: `$sellable:create-ab-test`
102
103
  - Codex: `$sellable:foundation`
103
104
  - Codex: `$sellable:content`
104
105
  - Codex: `$sellable:create-post`
106
+ - Codex: `$sellable:inbox`
105
107
  - Codex Desktop plugin: `sellable@sellable`
106
108
  - Codex visible skill: `Sellable Create Campaign`
107
109
  - Codex visible skill: `Sellable Create A/B Test`
108
110
  - Codex visible skill: `Sellable Foundation`
109
111
  - Codex visible skill: `Sellable Content`
110
112
  - Codex visible skill: `Sellable Create Post`
113
+ - Codex visible skill: `Sellable Inbox`
111
114
  - Internal MCP workflow prompt: `create-campaign-v2`
112
115
  - Internal/backward-compatible memory prompt: `interview`
113
116
 
@@ -182,7 +182,7 @@ Options:
182
182
 
183
183
  Auth:
184
184
  Install is auth-free by default. Sign in happens on the first run of
185
- /sellable:create-campaign, /sellable:foundation, /sellable:content, or /sellable:create-post in Claude Code or Codex,
185
+ /sellable:create-campaign, /sellable:foundation, /sellable:content, /sellable:create-post, or /sellable:inbox in Claude Code or Codex,
186
186
  where the agent walks you through signup or sign-in and stores credentials
187
187
  in ~/.sellable/config.json.
188
188
 
@@ -211,6 +211,7 @@ function printCreateCommandHint() {
211
211
  { label: "Foundation", command: "/sellable:foundation" },
212
212
  { label: "Content", command: "/sellable:content" },
213
213
  { label: "Post", command: "/sellable:create-post" },
214
+ { label: "Inbox", command: "/sellable:inbox" },
214
215
  ]);
215
216
  console.log("");
216
217
  console.log("");
@@ -220,6 +221,7 @@ function printCreateCommandHint() {
220
221
  { label: "Foundation", command: "$sellable:foundation" },
221
222
  { label: "Content", command: "$sellable:content" },
222
223
  { label: "Post", command: "$sellable:create-post" },
224
+ { label: "Inbox", command: "$sellable:inbox" },
223
225
  ]);
224
226
  console.log("");
225
227
  console.log(` ${"─".repeat(63)}`);
@@ -1753,6 +1755,67 @@ then retry \`get_subskill_prompt\`.
1753
1755
  `, host, "create-post");
1754
1756
  }
1755
1757
 
1758
+ function inboxSkillMd(host = "shared") {
1759
+ return stampInstalledHost(`---
1760
+ name: inbox
1761
+ description: Search Sellable inbox threads, review reply eligibility, and manage approval-gated LinkedIn replies.
1762
+ allowed-tools:
1763
+ - mcp__sellable__get_auth_status
1764
+ - mcp__sellable__search_inbox_threads
1765
+ - mcp__sellable__get_inbox_thread
1766
+ - mcp__sellable__check_inbox_reply_eligibility
1767
+ - mcp__sellable__update_inbox_draft
1768
+ - mcp__sellable__send_inbox_draft
1769
+ - mcp__sellable__send_inbox_manual_reply
1770
+ ---
1771
+
1772
+ # Sellable Inbox
1773
+
1774
+ Use this as the customer-facing entrypoint for Sellable inbox reply management.
1775
+ It can search LinkedIn inbox threads, load thread history, check product reply
1776
+ eligibility, update an existing draft, send an approved draft, or send one exact
1777
+ manual reply.
1778
+
1779
+ ## Bootstrap
1780
+
1781
+ MCP tool access is required. First call \`mcp__sellable__get_auth_status({})\`.
1782
+ Do not inspect repo files, run shell commands, use \`npm\`, \`node\`, local
1783
+ harness scripts, browser automation, or product API routes to emulate this
1784
+ workflow.
1785
+
1786
+ If the Sellable MCP tool is unavailable, stop and say this is a Codex
1787
+ install/reload problem. Tell the user to run
1788
+ \`curl -fsSL "https://app.sellable.dev/api/v2/cli/install" | sh\`, fully quit and reopen Codex
1789
+ Desktop, then start a new thread.
1790
+
1791
+ ## Read Workflow
1792
+
1793
+ 1. Call \`mcp__sellable__get_auth_status({})\`.
1794
+ 2. Use \`mcp__sellable__search_inbox_threads({ limit, search?, filter?, status?, senderId?, classification?, includeReplyEligibility? })\` to find candidate threads.
1795
+ 3. Use \`mcp__sellable__get_inbox_thread({ threadId })\` before summarizing or drafting.
1796
+ 4. Use \`mcp__sellable__check_inbox_reply_eligibility({ threadId })\` before proposing any reply send path.
1797
+
1798
+ ## Approval Gates
1799
+
1800
+ Never call \`mcp__sellable__update_inbox_draft\`,
1801
+ \`mcp__sellable__send_inbox_draft\`, or
1802
+ \`mcp__sellable__send_inbox_manual_reply\` until the user has explicitly
1803
+ approved all of:
1804
+
1805
+ - workspace/account context
1806
+ - sender
1807
+ - thread or recipient
1808
+ - exact body
1809
+ - exact tool to call
1810
+ - expected side effect
1811
+
1812
+ Draft edits only edit an existing draft. They do not create a new reply draft.
1813
+ Send tools support one thread at a time; do not batch sends. If any approval,
1814
+ snapshot, hash, version, eligibility, or idempotency value is missing or stale,
1815
+ stop and re-read the thread instead of guessing.
1816
+ `, host, "inbox");
1817
+ }
1818
+
1756
1819
  function createCampaignSoulMd() {
1757
1820
  return `# Sellable Campaign GTM Engineer Soul
1758
1821
 
@@ -1974,6 +2037,12 @@ function codexPluginSkills() {
1974
2037
  description: "Capture ideas and draft LinkedIn posts in your voice",
1975
2038
  skillMd: createPostSkillMd(),
1976
2039
  },
2040
+ {
2041
+ dir: "sellable-inbox",
2042
+ displayName: "Sellable Inbox",
2043
+ description: "Search and manage approval-gated LinkedIn inbox replies",
2044
+ skillMd: inboxSkillMd(),
2045
+ },
1977
2046
  ];
1978
2047
  }
1979
2048
 
@@ -2199,6 +2268,23 @@ function claudeCommands() {
2199
2268
  argumentHint: "[post idea or source material]",
2200
2269
  skillMd: createPostSkillMd(),
2201
2270
  },
2271
+ {
2272
+ name: "inbox",
2273
+ title: "Inbox",
2274
+ filename: join("sellable", "inbox.md"),
2275
+ description: "Search and manage approval-gated Sellable inbox replies.",
2276
+ argumentHint: "[thread, sender, recipient, or reply goal]",
2277
+ skillMd: inboxSkillMd(),
2278
+ allowedTools: [
2279
+ "mcp__sellable__get_auth_status",
2280
+ "mcp__sellable__search_inbox_threads",
2281
+ "mcp__sellable__get_inbox_thread",
2282
+ "mcp__sellable__check_inbox_reply_eligibility",
2283
+ "mcp__sellable__update_inbox_draft",
2284
+ "mcp__sellable__send_inbox_draft",
2285
+ "mcp__sellable__send_inbox_manual_reply",
2286
+ ],
2287
+ },
2202
2288
  ].map((command) => ({
2203
2289
  ...command,
2204
2290
  content: claudeCommandMd(command),
@@ -3422,6 +3508,7 @@ function printNextSteps(installedHosts, authReused) {
3422
3508
  { label: "Foundation", command: "/sellable:foundation" },
3423
3509
  { label: "Content", command: "/sellable:content" },
3424
3510
  { label: "Post", command: "/sellable:create-post" },
3511
+ { label: "Inbox", command: "/sellable:inbox" },
3425
3512
  ]);
3426
3513
  console.log("");
3427
3514
  console.log("");
@@ -3432,6 +3519,7 @@ function printNextSteps(installedHosts, authReused) {
3432
3519
  { label: "Foundation", command: "$sellable:foundation" },
3433
3520
  { label: "Content", command: "$sellable:content" },
3434
3521
  { label: "Post", command: "$sellable:create-post" },
3522
+ { label: "Inbox", command: "$sellable:inbox" },
3435
3523
  ]);
3436
3524
  console.log("");
3437
3525
  }
@@ -3709,10 +3797,12 @@ async function main() {
3709
3797
  console.log(` Claude Code: /sellable:foundation`);
3710
3798
  console.log(` Claude Code: /sellable:content`);
3711
3799
  console.log(` Claude Code: /sellable:create-post`);
3800
+ console.log(` Claude Code: /sellable:inbox`);
3712
3801
  console.log(` Codex: $sellable:create-campaign`);
3713
3802
  console.log(` Codex: $sellable:foundation`);
3714
3803
  console.log(` Codex: $sellable:content`);
3715
3804
  console.log(` Codex: $sellable:create-post`);
3805
+ console.log(` Codex: $sellable:inbox`);
3716
3806
  process.exit(0);
3717
3807
  }
3718
3808
  if (rawArgs[0] === "prefs") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.213",
3
+ "version": "0.1.215",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -80,6 +80,14 @@ It bootstraps auth and host capabilities, then loads the internal
80
80
  the internal campaign workflow prompt and `core/flow.v2.json` through MCP. Keep
81
81
  this wrapper thin; the packaged workflow is the operational source of truth.
82
82
 
83
+ ## Inbox Reply Tool Boundary
84
+
85
+ Inbox reply tools are outside campaign creation. If a user asks to search,
86
+ review, edit, or send inbox replies, treat that as a separate inbox workflow
87
+ using the existing product /api/v3/inbox routes. Any draft edit or send requires
88
+ exact approval for the workspace, sender, thread, body, tool, and expected side
89
+ effect before the write tool is called.
90
+
83
91
  CampaignOffer state and the watch link are the customer-facing source of truth.
84
92
  Disk artifacts are optional debug/UAT diagnostics; normal customer runs should
85
93
  not create, link, or surface local draft files unless the user explicitly asks