@sellable/install 0.1.213 → 0.1.214
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 +6 -3
- package/bin/sellable-install.mjs +99 -9
- package/package.json +1 -1
- package/skill-templates/create-campaign.md +8 -0
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,
|
|
35
|
-
|
|
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
|
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -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,
|
|
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
|
}
|
|
@@ -3706,14 +3794,16 @@ async function main() {
|
|
|
3706
3794
|
console.log(` apiUrl: ${apiUrl}`);
|
|
3707
3795
|
console.log(` Continue in your agent:`);
|
|
3708
3796
|
console.log(` Claude Code: /sellable:create-campaign`);
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
|
|
3797
|
+
console.log(` Claude Code: /sellable:foundation`);
|
|
3798
|
+
console.log(` Claude Code: /sellable:content`);
|
|
3799
|
+
console.log(` Claude Code: /sellable:create-post`);
|
|
3800
|
+
console.log(` Claude Code: /sellable:inbox`);
|
|
3801
|
+
console.log(` Codex: $sellable:create-campaign`);
|
|
3802
|
+
console.log(` Codex: $sellable:foundation`);
|
|
3803
|
+
console.log(` Codex: $sellable:content`);
|
|
3804
|
+
console.log(` Codex: $sellable:create-post`);
|
|
3805
|
+
console.log(` Codex: $sellable:inbox`);
|
|
3806
|
+
process.exit(0);
|
|
3717
3807
|
}
|
|
3718
3808
|
if (rawArgs[0] === "prefs") {
|
|
3719
3809
|
const dryRun = rawArgs.includes("--dry-run");
|
package/package.json
CHANGED
|
@@ -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
|