@sellable/mcp 0.1.245 → 0.1.247
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/dist/tools/campaigns.js +20 -5
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +15 -11
- package/skills/create-campaign-v2/SOUL.md +10 -6
- package/skills/create-campaign-v2/references/watch-link-handoff.md +10 -6
- package/skills/create-post/SKILL.md +30 -0
- package/skills/interview/SKILL.md +24 -0
package/dist/tools/campaigns.js
CHANGED
|
@@ -49,16 +49,31 @@ function getCampaignBuilderWatchModeFromUrl(watchUrl) {
|
|
|
49
49
|
export function getCampaignBuilderWatchModeDriverLabel(mode = getCampaignBuilderWatchModeParam()) {
|
|
50
50
|
return mode === "codex" ? "Codex" : "Claude Code";
|
|
51
51
|
}
|
|
52
|
+
function buildWatchHandoffHeadlineBox(headline) {
|
|
53
|
+
const width = 52;
|
|
54
|
+
const visibleHeadline = headline.length > width ? headline.slice(0, width) : headline;
|
|
55
|
+
const padding = Math.max(width - visibleHeadline.length, 0);
|
|
56
|
+
const left = Math.floor(padding / 2);
|
|
57
|
+
const right = padding - left;
|
|
58
|
+
const border = `+${"-".repeat(width + 2)}+`;
|
|
59
|
+
return [
|
|
60
|
+
"```",
|
|
61
|
+
border,
|
|
62
|
+
`| ${" ".repeat(left)}${visibleHeadline}${" ".repeat(right)} |`,
|
|
63
|
+
border,
|
|
64
|
+
"```",
|
|
65
|
+
].join("\n");
|
|
66
|
+
}
|
|
52
67
|
export function buildCampaignWatchHandoffMarkdown(watchUrl, mode = getCampaignBuilderWatchModeFromUrl(watchUrl) ??
|
|
53
68
|
getCampaignBuilderWatchModeParam()) {
|
|
54
69
|
const driverLabel = getCampaignBuilderWatchModeDriverLabel(mode);
|
|
55
70
|
const headline = `WATCH ${driverLabel.toUpperCase()} BUILD THE CAMPAIGN LIVE`;
|
|
56
71
|
return [
|
|
57
|
-
|
|
58
|
-
"
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
"
|
|
72
|
+
buildWatchHandoffHeadlineBox(headline),
|
|
73
|
+
"",
|
|
74
|
+
`[Open live campaign builder](${watchUrl})`,
|
|
75
|
+
"",
|
|
76
|
+
"Keep this chat open. I'll ask approval questions here before making decisions that need your judgment.",
|
|
62
77
|
].join("\n");
|
|
63
78
|
}
|
|
64
79
|
function buildCampaignBuilderWatchPath(campaignId) {
|
package/package.json
CHANGED
|
@@ -409,19 +409,23 @@ 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
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
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.
|
|
418
422
|
````
|
|
419
423
|
|
|
420
|
-
The
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
browser-opening instruction.
|
|
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.
|
|
425
429
|
|
|
426
430
|
The watch link should auto-login through the token in the URL. If the user says
|
|
427
431
|
the link lands on auth, 404, permission, blank, or a visible error state, recover
|
|
@@ -341,12 +341,16 @@ approve/revise recommendation, not fallback samples, concerns, or a QA receipt.
|
|
|
341
341
|
Be explicit about what has and has not happened:
|
|
342
342
|
|
|
343
343
|
````markdown
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
344
|
+
```
|
|
345
|
+
+------------------------------------------------------+
|
|
346
|
+
| WATCH CODEX BUILD THE CAMPAIGN LIVE |
|
|
347
|
+
+------------------------------------------------------+
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
[Open live campaign builder]({watchUrl})
|
|
351
|
+
|
|
352
|
+
Keep this chat open. I'll ask approval questions here before making decisions
|
|
353
|
+
that need your judgment.
|
|
350
354
|
````
|
|
351
355
|
|
|
352
356
|
Print that watch-link handoff only once before the brief approval question, and
|
|
@@ -39,12 +39,16 @@ useful brief instead of an empty campaign.
|
|
|
39
39
|
Example skeleton:
|
|
40
40
|
|
|
41
41
|
````markdown
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
```
|
|
43
|
+
+------------------------------------------------------+
|
|
44
|
+
| WATCH CODEX BUILD THE CAMPAIGN LIVE |
|
|
45
|
+
+------------------------------------------------------+
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
[Open live campaign builder]({watchUrl})
|
|
49
|
+
|
|
50
|
+
Keep this chat open. I'll ask approval questions here before making decisions
|
|
51
|
+
that need your judgment.
|
|
48
52
|
|
|
49
53
|
Now ask the brief approval question. Do not show the approve/revise question
|
|
50
54
|
panel until the full brief content and this exact watch-link handoff have
|
|
@@ -6,6 +6,36 @@ visibility: internal
|
|
|
6
6
|
|
|
7
7
|
# Create Post
|
|
8
8
|
|
|
9
|
+
<command_model>
|
|
10
|
+
`create-post` is the user-facing content command for LinkedIn post work.
|
|
11
|
+
|
|
12
|
+
It owns the content workflow:
|
|
13
|
+
|
|
14
|
+
- log rough post source material, voice memos, transcripts, and freestyle notes
|
|
15
|
+
- mine transcript-derived content memory for recurring ideas and hidden angles
|
|
16
|
+
- workshop a promising idea until the premise has enough story/proof/tension
|
|
17
|
+
- run external LinkedIn research
|
|
18
|
+
- draft, validate, save, and publish-track posts
|
|
19
|
+
|
|
20
|
+
It does not own foundational identity setup. Use `$sellable:interview` for the
|
|
21
|
+
foundation layer: core values, founder identity, company truth, durable stories,
|
|
22
|
+
proof ledgers, answer bank, context modes, anti-AI rules, and transcript indexes.
|
|
23
|
+
|
|
24
|
+
Implementation detail: `mcp__sellable__get_engage_memory` is the
|
|
25
|
+
backward-compatible loader for unified Sellable memory. It is not a separate
|
|
26
|
+
user-facing command. `create-post` must call it and use both:
|
|
27
|
+
|
|
28
|
+
- interview-created foundation memory: `core/about-me.md`,
|
|
29
|
+
`core/my-company.md`, `core/story-bank.md`, `core/proof-ledger.md`,
|
|
30
|
+
`core/answer-bank.md`, `core/context-modes.md`
|
|
31
|
+
- content memory: `core/content-memory/**` clusters, cards, questions, and seeds
|
|
32
|
+
|
|
33
|
+
If foundation memory is missing or too thin, ask the user to run
|
|
34
|
+
`$sellable:interview` or answer the missing foundation questions before
|
|
35
|
+
drafting. If content-memory is missing, continue from the raw source and propose
|
|
36
|
+
the smallest content-memory write-back.
|
|
37
|
+
</command_model>
|
|
38
|
+
|
|
9
39
|
<role>
|
|
10
40
|
You are the Sellable LinkedIn post writer for a specific user.
|
|
11
41
|
|
|
@@ -6,6 +6,30 @@ visibility: public
|
|
|
6
6
|
|
|
7
7
|
# Core Identity Interview
|
|
8
8
|
|
|
9
|
+
<command_model>
|
|
10
|
+
`interview` is the foundation-memory command.
|
|
11
|
+
|
|
12
|
+
It owns:
|
|
13
|
+
|
|
14
|
+
- core values and founder identity
|
|
15
|
+
- company truth and positioning
|
|
16
|
+
- durable stories and reusable answers
|
|
17
|
+
- proof/wins ledgers and proof-safety rules
|
|
18
|
+
- context modes and anti-AI writing rules
|
|
19
|
+
- transcript/topic references and raw interview archives
|
|
20
|
+
- approved reference packs
|
|
21
|
+
|
|
22
|
+
It does not own the LinkedIn post production workflow. When a user wants to log
|
|
23
|
+
post source notes, mine transcripts for post ideas, workshop a post seed, or
|
|
24
|
+
draft a LinkedIn post, route that to `$sellable:create-post`.
|
|
25
|
+
|
|
26
|
+
The bridge is unified memory: `interview` writes the foundation under
|
|
27
|
+
`~/.sellable/configs/core/**`; `create-post` loads it through
|
|
28
|
+
`mcp__sellable__get_engage_memory` before researching or drafting. This means
|
|
29
|
+
posts should always have access to interview-created values, voice, stories,
|
|
30
|
+
proof, and context modes when they exist.
|
|
31
|
+
</command_model>
|
|
32
|
+
|
|
9
33
|
<role>
|
|
10
34
|
You are the Sellable core identity/company memory interviewer. Your job is to
|
|
11
35
|
turn source material, voice samples, transcripts, corrections, and a short
|