@sellable/install 0.1.93 → 0.1.95
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.
|
@@ -80,6 +80,9 @@ Quality bar:
|
|
|
80
80
|
|
|
81
81
|
- Do not synthesize a lightweight message from general knowledge. The artifact
|
|
82
82
|
must prove the embedded message-review safety-gate workflow ran.
|
|
83
|
+
- There is no generate-message fast mode in this path. The embedded gate is the
|
|
84
|
+
same campaign-launch quality contract used by the parent-thread compatibility
|
|
85
|
+
path, not a lower-quality shortcut.
|
|
83
86
|
- Message generation can start before `lead-filter.md`, but message review
|
|
84
87
|
cannot start until the parent verifies the selected basis rows still pass the
|
|
85
88
|
final filter.
|
|
@@ -128,6 +131,13 @@ Quality gates:
|
|
|
128
131
|
`[insert]`, or `[generated]`.
|
|
129
132
|
- Optional row-specific personalization must be grounded in a row field or
|
|
130
133
|
omitted entirely.
|
|
134
|
+
- Engagement-source personalization is a special case, not the default opener.
|
|
135
|
+
Do not write `saw you {{engagement_context}} on {{post_context}}`, `saw you
|
|
136
|
+
reacted to`, `saw you engaging with`, or equivalent source-citation copy as a
|
|
137
|
+
default hook. Only refer to the prospect's engagement when the line is
|
|
138
|
+
self-aware and low-certainty, for example `not sure if this is too specific,
|
|
139
|
+
but the [topic] thread felt close enough to send`. Otherwise omit the
|
|
140
|
+
engagement signal and use role/company/problem context.
|
|
131
141
|
- Subjects should be short, buyer-relevant, and specific. Avoid `quick
|
|
132
142
|
question`, `demo`, `founder call`, sender names, and generic `outbound`.
|
|
133
143
|
- If the message is plausible but not ready to send, set `Recommendation:
|
|
@@ -26,15 +26,38 @@ Use the inherited Sellable MCP tools when available:
|
|
|
26
26
|
Process:
|
|
27
27
|
|
|
28
28
|
1. Read the campaign brief, kickoff doc, or lane prompt supplied by the parent.
|
|
29
|
-
2.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
2. Generate 3-5 intersection keyword/topic lanes, favoring fresh posts from the
|
|
30
|
+
last 7-14 days. Each lane should combine the campaign anchor with the buyer
|
|
31
|
+
pain, use case, or ICP role so fit is high before sampling. For example, for
|
|
32
|
+
a Claude + GTM/outbound campaign, prefer `Claude outbound`, `Claude Code
|
|
33
|
+
LinkedIn outreach`, `AI SDR Claude`, `GTM automation Claude`, and `founder-led
|
|
34
|
+
sales Claude`; do not treat broad anchor-only lanes like `Claude Code`, `MCP`,
|
|
35
|
+
`AI agents`, or `agentic coding` as selectable unless they also include the
|
|
36
|
+
GTM/outbound wedge or the narrower lanes fail.
|
|
37
|
+
3. Inspect finalist posts by content type before final selection. Prefer posts
|
|
38
|
+
where the topic matches the campaign wedge, not generic high-engagement news.
|
|
39
|
+
4. If Round 1 produced broad anchor-only inventory, retarget immediately around
|
|
40
|
+
the wedge before sampling. Do not promote or sample broad posts when there are
|
|
41
|
+
narrower posts about the actual campaign pain/use case.
|
|
42
|
+
5. Promote the first narrow sample set when campaign-attached. If a
|
|
43
|
+
`campaignOfferId` was supplied, call `select_promising_posts({
|
|
44
|
+
campaignOfferId, selectionMode: "replace", selections, headlineICPCriteria,
|
|
45
|
+
currentStep: "signal-discovery" })` before sampling so the watched Signal
|
|
46
|
+
Discovery table shows the promoted posts and the exact posts being tested.
|
|
47
|
+
6. Fetch or sample engagers for promoted posts and score rough ICP fit from
|
|
48
|
+
visible headline/display-name cues only. Do not enrich people during
|
|
49
|
+
viability estimation.
|
|
50
|
+
7. Compute capacity before recommending the source: source target good-fit
|
|
51
|
+
leads (default 300 unless the parent supplies a target), reachable engagers,
|
|
52
|
+
sampled ICP-fit rate as `n/N` plus an easy percentage/range, expected usable
|
|
53
|
+
leads per 100 engagers before and after a conservative dedupe/cleanup
|
|
54
|
+
factor, required engagers to scrape (`source target / fit rate`), average
|
|
55
|
+
reachable engagers per right-content post, expected usable leads per
|
|
56
|
+
right-content post after dedupe/cleanup, and posts needed to hit the target.
|
|
57
|
+
8. Select/promote enough right-content posts to plausibly hit the target. If the
|
|
58
|
+
warm Signals pool is useful but too small, return the expected warm range and
|
|
59
|
+
recommend Sales Nav/Prospeo for scale instead of padding with noisy posts.
|
|
60
|
+
9. Return false positives and dead ends explicitly.
|
|
38
61
|
|
|
39
62
|
Return a concise structured result with:
|
|
40
63
|
|
|
@@ -43,8 +66,14 @@ Return a concise structured result with:
|
|
|
43
66
|
- `keyword_lanes` with timeframe, raw posts found, finalist posts reviewed
|
|
44
67
|
- `selected_posts` with URL/title, author/topic, age, engager count, sampled engagers, good fits as n/N, estimated usable prospects per post, use/discard
|
|
45
68
|
- `sample_leads`, if any
|
|
69
|
+
- `approval_math` with eligible posts, source target good-fit leads, sampled
|
|
70
|
+
engagers, ICP-fit rate as `n/N` plus percentage/range, good-fit prospects per
|
|
71
|
+
100 engagers, required engagers to scrape, average reachable engagers per
|
|
72
|
+
post, expected usable prospects per post after cleanup, posts needed for
|
|
73
|
+
target, selected post count, review-batch import limit, expected usable lead
|
|
74
|
+
range, and scale fallback
|
|
46
75
|
- `estimated_good_fit_range`
|
|
47
|
-
- `
|
|
76
|
+
- `message_context_strength`, directional and source-specific
|
|
48
77
|
- `false_positive_patterns`
|
|
49
78
|
- `recommendation`
|
|
50
79
|
- `confidence`
|
|
@@ -53,5 +82,16 @@ Evidence standards:
|
|
|
53
82
|
|
|
54
83
|
- Do not trust raw post volume without inspecting finalist post quality.
|
|
55
84
|
- Prefer sample-based pass rates over intuition.
|
|
85
|
+
- Prefer narrow intersection topics over broad audience topics. A post about
|
|
86
|
+
the anchor technology alone is not enough; the post should also express the
|
|
87
|
+
GTM/outbound/buyer pain, workflow, or role context that makes the campaign
|
|
88
|
+
relevant.
|
|
89
|
+
- Do not make the user infer capacity. Say, plainly, how many eligible posts
|
|
90
|
+
exist, how many sampled engagers looked in-ICP, how many good-fit prospects
|
|
91
|
+
that implies per 100 engagers, how many usable prospects one right-content
|
|
92
|
+
post should yield after cleanup, how many engagers must be scraped for the
|
|
93
|
+
300-good-fit source target, how many posts are needed for that source target,
|
|
94
|
+
and which posts you would use. Also say the first campaign import remains the
|
|
95
|
+
bounded 15-row review batch.
|
|
56
96
|
- If `fetch_post_engagers` is unavailable or fails, report that explicitly and mark the estimate lower-confidence.
|
|
57
97
|
- Keep LinkedIn Engagement viable when selected posts can produce roughly 150+ ICP-fit warm prospects before final filtering, even if Sales Nav is more scalable.
|
|
@@ -26,8 +26,16 @@ Process:
|
|
|
26
26
|
2. Preserve target role names with `CURRENT_TITLE` lookups; do not rely on seniority alone when the brief names concrete roles.
|
|
27
27
|
3. When `lookup_sales_nav_filter` returns multiple title options, choose the closest semantic title match instead of the first result.
|
|
28
28
|
4. Build a broad-but-reasonable baseline from role/title, geography, company size, industry/account context, and recent LinkedIn activity when relevant.
|
|
29
|
-
5.
|
|
30
|
-
|
|
29
|
+
5. Check scale against the source target good-fit lead count (default 300
|
|
30
|
+
unless the parent supplies a target). If raw preview volume or projected usable volume
|
|
31
|
+
is below target, do not present the tiny result as the scale fallback yet.
|
|
32
|
+
Loosen nonessential filters in order: remove recent-activity first, widen
|
|
33
|
+
adjacent title variants, widen geography/company-size constraints, and only
|
|
34
|
+
keep hard ICP requirements from the brief.
|
|
35
|
+
6. Run the baseline plus 1-2 refinements or loosening passes if the first pass
|
|
36
|
+
is noisy or under-scaled. Label the final pool as constrained if it still
|
|
37
|
+
cannot plausibly reach the target after loosening.
|
|
38
|
+
7. Verify filters actually applied: returned search URL contains filters, first-page rows match the intended lane, and result count does not look like an unfiltered pool.
|
|
31
39
|
|
|
32
40
|
Return a concise structured result with:
|
|
33
41
|
|
|
@@ -36,6 +44,11 @@ Return a concise structured result with:
|
|
|
36
44
|
- `exact_filter_recipe`
|
|
37
45
|
- `lookup_ids_used`
|
|
38
46
|
- `raw_result_count`
|
|
47
|
+
- `scale_check` with source target good-fit lead count, preview/raw volume, sampled
|
|
48
|
+
good fits as n/N, projected usable count, and whether the pool can reach the
|
|
49
|
+
target
|
|
50
|
+
- `loosening_attempts` with what was removed or widened when the pool was too
|
|
51
|
+
tight
|
|
39
52
|
- `sampled_people` and good fits as n/N
|
|
40
53
|
- `estimated_good_fit_range_after_cleanup`
|
|
41
54
|
- `expected_acceptance_rate_range`, directional if inferred
|
|
@@ -49,5 +62,9 @@ Evidence standards:
|
|
|
49
62
|
|
|
50
63
|
- Optimize for a useful prospect pool, not max volume at any cost.
|
|
51
64
|
- Bias toward `POSTED_ON_LINKEDIN` for reply-likelihood when the pool still has enough scale.
|
|
65
|
+
- Do not over-tighten fallback filters into a pool that cannot be meaningfully
|
|
66
|
+
larger than the warm-post path. If Sales Nav is offered for scale, it should
|
|
67
|
+
either project to the target good-fit count or clearly say it is too tight and
|
|
68
|
+
name the next broadening/Prospeo option.
|
|
52
69
|
- Do not hand-wave missing filter IDs.
|
|
53
70
|
- If Sales Nav returns a giant unfiltered pool, discard that result and retry with valid filters before recommending it.
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -929,6 +929,7 @@ updates.
|
|
|
929
929
|
Do not load the full long-form \`generate-messages\` subskill in this
|
|
930
930
|
create-campaign path; if the safety gate cannot safely approve the draft, route
|
|
931
931
|
to revise messaging with the concrete failure.
|
|
932
|
+
This compatibility path is not a generate-message fast mode.
|
|
932
933
|
Do not synthesize \`message-validation.md\` from the brief, lead review, or
|
|
933
934
|
general knowledge.
|
|
934
935
|
5. Create the campaign shell early with the v1 brief so the user can open the
|
package/package.json
CHANGED
|
@@ -561,6 +561,7 @@ updates.
|
|
|
561
561
|
Do not load the full long-form `generate-messages` subskill in this
|
|
562
562
|
create-campaign path; if the safety gate cannot safely approve the draft,
|
|
563
563
|
route to revise messaging with the concrete failure.
|
|
564
|
+
This compatibility path is not a generate-message fast mode.
|
|
564
565
|
Do not synthesize `message-validation.md` from the brief, lead review, or
|
|
565
566
|
general knowledge.
|
|
566
567
|
5. Create the campaign shell early with the v1 brief so the user can open the
|