@sellable/install 0.1.97 → 0.1.99
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/agents/post-find-leads-message-scout.md +31 -1
- package/agents/registry.json +6 -8
- package/agents/source-scout-linkedin-engagement.md +6 -3
- package/agents/source-scout-prospeo-contact.md +4 -2
- package/agents/source-scout-sales-nav.md +4 -2
- package/bin/sellable-install.mjs +5 -5
- package/package.json +1 -1
- package/skill-templates/create-campaign.md +17 -15
|
@@ -11,11 +11,14 @@ campaign state. The main thread owns approval and campaign writes.
|
|
|
11
11
|
Use the live campaign inputs supplied by the parent thread:
|
|
12
12
|
|
|
13
13
|
- `campaignId`
|
|
14
|
+
- campaign revision or `campaignUpdatedAt`
|
|
14
15
|
- `campaignBrief` / campaign brief content model
|
|
15
16
|
- selected source decision and provider state
|
|
16
17
|
- `selectedLeadListId` or selected source list context
|
|
17
18
|
- `workflowTableId`
|
|
18
|
-
- imported review-batch rows from that selected list
|
|
19
|
+
- imported review-batch rows from that selected list, including row IDs and a
|
|
20
|
+
review-batch row hash when available
|
|
21
|
+
- filter basis at branch start: `pending`, `use-filters`, or `skip-filters`
|
|
19
22
|
- any already-saved fit/rubric result summaries supplied by the parent
|
|
20
23
|
|
|
21
24
|
Do not require or hunt for `brief.md`, `lead-review.md`, or `lead-sample.json`.
|
|
@@ -23,6 +26,13 @@ Those files are optional debug context only when the parent explicitly provides
|
|
|
23
26
|
them. Never inspect the product database directly, never run `psql`, and never
|
|
24
27
|
read stale local markdown files to reconstruct campaign state.
|
|
25
28
|
|
|
29
|
+
All live reads must come from scoped MCP/product tools by campaign and
|
|
30
|
+
workspace, such as `get_campaign`, `get_campaign_context`, and
|
|
31
|
+
`get_rows_minimal({ tableId: workflowTableId })`, or from equivalent parent
|
|
32
|
+
thread payloads. Reject the task as `blocked` if the campaign id, workspace,
|
|
33
|
+
`selectedLeadListId`, `workflowTableId`, or review-batch row ids do not match
|
|
34
|
+
the branch input.
|
|
35
|
+
|
|
26
36
|
## Required First Steps
|
|
27
37
|
|
|
28
38
|
1. Load the full long-form generate-messages prompt:
|
|
@@ -45,11 +55,31 @@ Return the following to the parent thread:
|
|
|
45
55
|
- one rendered good-fill sample for a plausible passing review-batch row
|
|
46
56
|
- one omit/fallback sample when the row signal is not safe
|
|
47
57
|
- pass/fail notes against the generate-messages quality gates
|
|
58
|
+
- compact runtime status: `ready`, `blocked`, `retry-needed`, or `stale`
|
|
59
|
+
- basis token containing campaign revision/updatedAt, brief hash,
|
|
60
|
+
`selectedLeadListId`, `workflowTableId`, review-batch row ids/hash, filter
|
|
61
|
+
choice, and rubric/filter basis when present
|
|
62
|
+
- output timestamp/hash and any retry/error detail
|
|
48
63
|
|
|
49
64
|
Write `message-validation.md`, `message-prep.md`, or
|
|
50
65
|
`message-candidate-drafts.md` only when the parent explicitly asks for debug
|
|
51
66
|
artifacts. Normal live campaign runs can return the same content directly.
|
|
52
67
|
|
|
68
|
+
When reporting branch runtime proof, use this shape under
|
|
69
|
+
`watchNarration.workerDetails.messageDraftBuilder`:
|
|
70
|
+
|
|
71
|
+
- `statusSource`: `branch` or `parent-thread-fallback`
|
|
72
|
+
- `status`: `branch-running`, `fallback-active`, `spawn-failed`,
|
|
73
|
+
`fallback-superseded`, `branch-superseded`, `ready`, `blocked`,
|
|
74
|
+
`retry-needed`, or `stale`
|
|
75
|
+
- `runId` or `fallbackId`
|
|
76
|
+
- `startedAt` and `updatedAt`
|
|
77
|
+
- `basisToken` and `basis`
|
|
78
|
+
- optional `compactOutputRef`, `compactOutput`, and `error`
|
|
79
|
+
|
|
80
|
+
Do not tell the UI to show Message Draft Builder as running unless this proof
|
|
81
|
+
exists and points at the current non-empty bounded review batch.
|
|
82
|
+
|
|
53
83
|
## Hard Rules
|
|
54
84
|
|
|
55
85
|
- Do not call product Generate Message cells. This worker drafts the template
|
package/agents/registry.json
CHANGED
|
@@ -225,10 +225,10 @@
|
|
|
225
225
|
],
|
|
226
226
|
"ownership": "proof inventory, token strategy, angle drafting, skeptical-prospect review, and selected winner only",
|
|
227
227
|
"codex": {
|
|
228
|
-
"description": "Message Draft Builder for campaign-backed template proposals
|
|
228
|
+
"description": "Message Draft Builder for campaign-backed template proposals after confirm_lead_list imports a non-empty bounded review batch.",
|
|
229
229
|
"model": "gpt-5.5",
|
|
230
230
|
"modelReasoningEffort": "high",
|
|
231
|
-
"sandboxMode": "
|
|
231
|
+
"sandboxMode": "read-only",
|
|
232
232
|
"nicknameCandidates": [
|
|
233
233
|
"Message Draft Builder",
|
|
234
234
|
"Draft Builder",
|
|
@@ -236,19 +236,17 @@
|
|
|
236
236
|
]
|
|
237
237
|
},
|
|
238
238
|
"claude": {
|
|
239
|
-
"description": "Use proactively as Message Draft Builder after
|
|
239
|
+
"description": "Use proactively as Message Draft Builder after confirm_lead_list imports a non-empty bounded review batch; load the full generate-messages prompt and draft only from scoped campaign/tool state.",
|
|
240
240
|
"model": "inherit",
|
|
241
241
|
"background": true,
|
|
242
242
|
"maxTurns": 10,
|
|
243
243
|
"color": "magenta",
|
|
244
244
|
"tools": [
|
|
245
245
|
"Read",
|
|
246
|
-
"Write",
|
|
247
|
-
"Edit",
|
|
248
|
-
"Grep",
|
|
249
|
-
"Glob",
|
|
250
246
|
"mcp__sellable__get_subskill_prompt",
|
|
251
|
-
"
|
|
247
|
+
"mcp__sellable__get_campaign",
|
|
248
|
+
"mcp__sellable__get_campaign_context",
|
|
249
|
+
"mcp__sellable__get_rows_minimal"
|
|
252
250
|
]
|
|
253
251
|
}
|
|
254
252
|
}
|
|
@@ -8,9 +8,10 @@ Required first step:
|
|
|
8
8
|
draft `campaignOfferId`, call `get_provider_prompt({ provider:
|
|
9
9
|
"signal-discovery", campaignOfferId, confirmed: true })` and include that same
|
|
10
10
|
`campaignOfferId` plus `currentStep: "signal-discovery"` in `search_signals`
|
|
11
|
-
so the
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
so the owning search route can show the source lane with current find-leads
|
|
12
|
+
narration and user options. Treat that as a campaign-attached persisted
|
|
13
|
+
search; do not run a post-mint search without the campaign ID. If no campaign
|
|
14
|
+
ID is supplied, run campaignless preview mode.
|
|
14
15
|
|
|
15
16
|
Use the inherited Sellable MCP tools when available:
|
|
16
17
|
|
|
@@ -44,6 +45,8 @@ sales Claude`; do not treat broad anchor-only lanes like `Claude Code`, `MCP`,
|
|
|
44
45
|
campaignOfferId, selectionMode: "replace", selections, headlineICPCriteria,
|
|
45
46
|
currentStep: "signal-discovery" })` before sampling so the watched Signal
|
|
46
47
|
Discovery table shows the promoted posts and the exact posts being tested.
|
|
48
|
+
Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
|
|
49
|
+
visible transition after source approval.
|
|
47
50
|
6. Fetch or sample engagers for promoted posts and score rough ICP fit from
|
|
48
51
|
visible headline/display-name cues only. Do not enrich people during
|
|
49
52
|
viability estimation.
|
|
@@ -8,10 +8,12 @@ Required first step:
|
|
|
8
8
|
draft `campaignOfferId`, call `get_provider_prompt({ provider: "prospeo",
|
|
9
9
|
campaignOfferId, confirmed: true })` and include that same `campaignOfferId`
|
|
10
10
|
plus `currentStep: "prospeo"` in `search_prospeo` so the user can watch source
|
|
11
|
-
work in the campaign UI
|
|
12
|
-
preview mode. Treat post-mint
|
|
11
|
+
work in the campaign UI with source-lane narration owned by the search route.
|
|
12
|
+
If no campaign ID is supplied, run campaignless preview mode. Treat post-mint
|
|
13
13
|
searches with `campaignOfferId` as campaign-attached persisted search tabs;
|
|
14
14
|
do not run a live campaign search without the campaign ID.
|
|
15
|
+
Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
|
|
16
|
+
visible transition after source approval.
|
|
15
17
|
|
|
16
18
|
Use the inherited Sellable MCP tools when available:
|
|
17
19
|
|
|
@@ -8,10 +8,12 @@ Required first step:
|
|
|
8
8
|
draft `campaignOfferId`, call `get_provider_prompt({ provider: "sales-nav",
|
|
9
9
|
campaignOfferId, confirmed: true })` and include that same `campaignOfferId` in
|
|
10
10
|
`search_sales_nav` with `currentStep: "sales-nav"` so the user can watch
|
|
11
|
-
source work in the campaign UI
|
|
12
|
-
campaignless preview mode. Treat post-mint
|
|
11
|
+
source work in the campaign UI with source-lane narration owned by the search
|
|
12
|
+
route. If no campaign ID is supplied, run campaignless preview mode. Treat post-mint
|
|
13
13
|
searches with `campaignOfferId` as campaign-attached persisted search tabs;
|
|
14
14
|
do not run a live campaign search without the campaign ID.
|
|
15
|
+
Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
|
|
16
|
+
visible transition after source approval.
|
|
15
17
|
|
|
16
18
|
Use the inherited Sellable MCP tools when available:
|
|
17
19
|
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -509,7 +509,6 @@ const CREATE_CAMPAIGN_ALLOWED_TOOLS = [
|
|
|
509
509
|
"mcp__sellable__get_provider_prompt",
|
|
510
510
|
"mcp__sellable__get_source_scout_registry",
|
|
511
511
|
"mcp__sellable__get_post_find_leads_scout_registry",
|
|
512
|
-
"mcp__sellable__get_message_prompt",
|
|
513
512
|
"mcp__sellable__get_active_workspace",
|
|
514
513
|
"mcp__sellable__list_senders",
|
|
515
514
|
"mcp__sellable__get_sender",
|
|
@@ -936,10 +935,11 @@ updates.
|
|
|
936
935
|
watch link and see useful setup state immediately. Import only the first
|
|
937
936
|
bounded review batch after the source is attached to the campaign; do not
|
|
938
937
|
queue workflow cells, attach a sequence, or start until filter choice is
|
|
939
|
-
resolved,
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
938
|
+
resolved, rubrics are saved when filters are enabled, template/token rules
|
|
939
|
+
are approved on the default Use Template path, and the approved message set
|
|
940
|
+
is synced into the campaign brief. After rubrics save, pause and say the fit
|
|
941
|
+
rules are saved; approve the message template next; after approval, queue the
|
|
942
|
+
bounded review-batch \`enrichCellId\` cells to kick off enrichment/filtering.
|
|
943
943
|
Product Generate Message cells must not run from the background template
|
|
944
944
|
path before that template/token approval. AI Generated uses the
|
|
945
945
|
product's AI-generated path and cancels or ignores the background template
|
package/package.json
CHANGED
|
@@ -13,7 +13,6 @@ allowed-tools:
|
|
|
13
13
|
- mcp__sellable__get_provider_prompt
|
|
14
14
|
- mcp__sellable__get_source_scout_registry
|
|
15
15
|
- mcp__sellable__get_post_find_leads_scout_registry
|
|
16
|
-
- mcp__sellable__get_message_prompt
|
|
17
16
|
- mcp__sellable__get_active_workspace
|
|
18
17
|
- mcp__sellable__list_senders
|
|
19
18
|
- mcp__sellable__get_sender
|
|
@@ -71,10 +70,11 @@ Disk artifacts are optional debug/UAT diagnostics; normal customer runs should
|
|
|
71
70
|
not create, link, or surface local draft files unless the user explicitly asks
|
|
72
71
|
for them. Resume, gating, and handoff read campaign state first. The
|
|
73
72
|
watchable campaign exists after the short brief; lead import is bounded to the
|
|
74
|
-
first review batch. After that, the user chooses whether to use filters or skip
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
first review batch. After that, the user chooses whether to use filters or skip.
|
|
74
|
+
When filters are chosen, save rubrics, then pause before queueing enrichment or
|
|
75
|
+
filtering: tell the user the fit rules are saved, the message template needs
|
|
76
|
+
approval next, and enrichment/filtering will start after that approval. Use
|
|
77
|
+
Template is the default message path; AI Generated is only an explicit opt-out.
|
|
78
78
|
|
|
79
79
|
## Opening Turn Contract
|
|
80
80
|
|
|
@@ -148,12 +148,13 @@ calls `get_post_find_leads_scout_registry`, then launches the returned
|
|
|
148
148
|
filter-leads scout and message-generation scout together when real subagents are
|
|
149
149
|
available and the current session exposes the returned names. Message
|
|
150
150
|
generation is the provisional Message Draft Builder: it may start after the
|
|
151
|
-
review batch exists, including while the user is on filter choice, but
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
MCP
|
|
151
|
+
review batch exists, including while the user is on filter choice, but workflow
|
|
152
|
+
cell execution must wait. After rubrics are saved, do not queue enrichment,
|
|
153
|
+
filtering, or Generate Message cells until the user approves the message
|
|
154
|
+
template. AI Generated is an explicit opt-out that cancels or ignores the
|
|
155
|
+
background template draft. If the post-lead agents are absent, the main thread
|
|
156
|
+
still orchestrates the same branches from the compact context with MCP
|
|
157
|
+
tools/assets.
|
|
157
158
|
|
|
158
159
|
Use rendered Markdown for user review surfaces, not fenced code blocks. Keep
|
|
159
160
|
lines short, use indexed section labels and bullets, and translate internal
|
|
@@ -574,10 +575,11 @@ updates.
|
|
|
574
575
|
watch link and see useful setup state immediately. Import only the first
|
|
575
576
|
bounded review batch after the source is attached to the campaign; do not
|
|
576
577
|
queue workflow cells, attach a sequence, or start until the filter choice is
|
|
577
|
-
resolved,
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
578
|
+
resolved, rubrics are saved when filters are enabled, template/token rules
|
|
579
|
+
are approved on the default Use Template path, and the approved message set
|
|
580
|
+
is synced into the campaign brief. After rubrics save, pause and say the fit
|
|
581
|
+
rules are saved; approve the message template next; after approval, queue the
|
|
582
|
+
bounded review-batch `enrichCellId` cells to kick off enrichment/filtering.
|
|
581
583
|
Product Generate Message cells must not run from the background template
|
|
582
584
|
path before that template/token approval.
|
|
583
585
|
Do not ask the user to approve the brief before shell creation unless they
|