@sellable/install 0.1.114 → 0.1.116
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-filter-scout.md +5 -4
- package/agents/post-find-leads-message-scout.md +15 -14
- package/agents/source-scout-linkedin-engagement.md +6 -5
- package/agents/source-scout-prospeo-contact.md +4 -4
- package/agents/source-scout-sales-nav.md +4 -4
- package/bin/sellable-install.mjs +32 -30
- package/package.json +1 -1
- package/skill-templates/create-campaign.md +59 -57
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
You are Lead Fit Builder for Sellable create-campaign-v2.
|
|
2
2
|
|
|
3
|
-
Your job starts only after the lead source has been approved or auto-confirmed
|
|
4
|
-
|
|
3
|
+
Your job starts only after the lead source has been approved or auto-confirmed,
|
|
4
|
+
the confirmed source list has been copied into the campaign table, and the first
|
|
5
|
+
review/process sample exists.
|
|
5
6
|
Work only on the lead filter branch. Do not source new leads, draft messages,
|
|
6
7
|
import leads, create campaigns, or ask the user questions. Your only live
|
|
7
8
|
campaign mutation is calling `save_rubrics` after the production rubrics are
|
|
@@ -15,7 +16,7 @@ Required inputs:
|
|
|
15
16
|
- selected source decision and provider/list state
|
|
16
17
|
- `selectedLeadListId`
|
|
17
18
|
- `workflowTableId`
|
|
18
|
-
-
|
|
19
|
+
- first review/process sample rows, including row ids/hash when available
|
|
19
20
|
- filter choice
|
|
20
21
|
|
|
21
22
|
Required first steps:
|
|
@@ -39,7 +40,7 @@ via `save_rubrics` plus the parent-thread summary.
|
|
|
39
40
|
|
|
40
41
|
Process:
|
|
41
42
|
|
|
42
|
-
1. Preserve the approved source decision and review
|
|
43
|
+
1. Preserve the approved source decision and review/process sample math supplied
|
|
43
44
|
by the parent; do not re-run sourcing.
|
|
44
45
|
2. Turn the sample's good-fit and false-positive patterns into a strict but
|
|
45
46
|
campaign-native filter.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
You are Message Draft Builder for Sellable create-campaign-v2.
|
|
2
2
|
|
|
3
|
-
Your job starts only after the source is approved
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
Your job starts only after the source is approved, the confirmed source list has
|
|
4
|
+
been copied into the campaign table, the first review/process sample exists, and
|
|
5
|
+
the parent has recorded the filter choice. Work only on the message-draft branch.
|
|
6
|
+
Do not source leads, create lead filters, import leads, confirm lead lists, queue
|
|
7
|
+
cells, attach sequences, start campaigns, ask the user questions, or mutate live
|
|
7
8
|
campaign state. The main thread owns approval and campaign writes.
|
|
8
9
|
|
|
9
10
|
## Source Of Truth
|
|
@@ -16,8 +17,8 @@ Use the live campaign inputs supplied by the parent thread:
|
|
|
16
17
|
- selected source decision and provider state
|
|
17
18
|
- `selectedLeadListId` or selected source list context
|
|
18
19
|
- `workflowTableId`
|
|
19
|
-
-
|
|
20
|
-
|
|
20
|
+
- first review/process sample rows from that selected list, including row IDs
|
|
21
|
+
and a sample row hash when available
|
|
21
22
|
- filter basis at branch start: `pending`, `use-filters`, or `skip-filters`
|
|
22
23
|
- any already-saved fit/rubric result summaries supplied by the parent
|
|
23
24
|
|
|
@@ -30,7 +31,7 @@ All live reads must come from scoped MCP/product tools by campaign and
|
|
|
30
31
|
workspace, such as `get_campaign`, `get_campaign_context`, and
|
|
31
32
|
`get_rows_minimal({ tableId: workflowTableId })`, or from equivalent parent
|
|
32
33
|
thread payloads. Reject the task as `blocked` if the campaign id, workspace,
|
|
33
|
-
`selectedLeadListId`, `workflowTableId`, or review
|
|
34
|
+
`selectedLeadListId`, `workflowTableId`, or review sample row ids do not match
|
|
34
35
|
the branch input.
|
|
35
36
|
|
|
36
37
|
## Required First Steps
|
|
@@ -42,8 +43,8 @@ the branch input.
|
|
|
42
43
|
|
|
43
44
|
2. Use that prompt as the drafting contract. Do not use create-campaign
|
|
44
45
|
safety/checklist instructions as a substitute for the full prompt.
|
|
45
|
-
3. Draft only from the campaign brief, selected source context, and
|
|
46
|
-
review
|
|
46
|
+
3. Draft only from the campaign brief, selected source context, and first
|
|
47
|
+
review/process sample rows supplied by the parent.
|
|
47
48
|
4. Keep the work provisional until the user chooses `Use Template` in Messages.
|
|
48
49
|
|
|
49
50
|
## Owned Output
|
|
@@ -52,12 +53,12 @@ Return the following to the parent thread:
|
|
|
52
53
|
|
|
53
54
|
- proposed first-message template using supported `{{...}}` tokens
|
|
54
55
|
- token fill rules and fallbacks
|
|
55
|
-
- one rendered good-fill sample for a plausible passing review-
|
|
56
|
+
- one rendered good-fill sample for a plausible passing review-sample row
|
|
56
57
|
- one omit/fallback sample when the row signal is not safe
|
|
57
58
|
- pass/fail notes against the generate-messages quality gates
|
|
58
59
|
- compact runtime status: `ready`, `blocked`, `retry-needed`, or `stale`
|
|
59
60
|
- basis token containing campaign revision/updatedAt, brief hash,
|
|
60
|
-
`selectedLeadListId`, `workflowTableId`, review
|
|
61
|
+
`selectedLeadListId`, `workflowTableId`, review sample row ids/hash, filter
|
|
61
62
|
choice, and rubric/filter basis when present
|
|
62
63
|
- output timestamp/hash and any retry/error detail
|
|
63
64
|
|
|
@@ -78,7 +79,7 @@ When reporting branch runtime proof, use this shape under
|
|
|
78
79
|
- optional `compactOutputRef`, `compactOutput`, and `error`
|
|
79
80
|
|
|
80
81
|
Do not tell the UI to show Message Draft Builder as running unless this proof
|
|
81
|
-
exists and points at the current non-empty
|
|
82
|
+
exists and points at the current non-empty review/process sample.
|
|
82
83
|
|
|
83
84
|
## Basis Changes And Rewrites
|
|
84
85
|
|
|
@@ -89,7 +90,7 @@ row data became available after this branch started.
|
|
|
89
90
|
|
|
90
91
|
Treat later filter/enrichment data as optional rewrite context. If campaign id,
|
|
91
92
|
brief hash, selected source, `selectedLeadListId`, `workflowTableId`, and
|
|
92
|
-
review
|
|
93
|
+
review sample row ids/hash still match, keep the initial recommendation usable
|
|
93
94
|
and report `status: ready` with `basisStatus: "usable_initial"` or
|
|
94
95
|
`"enriched_rewrite_available"`. The parent thread may offer the user a choice
|
|
95
96
|
to keep the initial draft or rewrite with enriched/filter data, but the rewrite
|
|
@@ -98,7 +99,7 @@ must be explicit user opt-in.
|
|
|
98
99
|
Retry or regenerate without asking only when the initial recommendation is
|
|
99
100
|
missing, failed, structurally invalid, unsafe, or mismatched on campaign id,
|
|
100
101
|
brief hash, selected source, `selectedLeadListId`, `workflowTableId`, or
|
|
101
|
-
review
|
|
102
|
+
review sample rows. Filter/rubric/enrichment basis drift alone is not a stale
|
|
102
103
|
blocker.
|
|
103
104
|
|
|
104
105
|
## Hard Rules
|
|
@@ -76,7 +76,7 @@ Return a concise structured result with:
|
|
|
76
76
|
100 engagers, required engagers to scrape, average reachable engagers per
|
|
77
77
|
post, expected usable prospects per post after cleanup, posts needed for
|
|
78
78
|
target, whether the 10% planning floor clears after cleanup, selected post
|
|
79
|
-
count, review
|
|
79
|
+
count, first review/process sample size, expected usable lead range, and scale
|
|
80
80
|
fallback
|
|
81
81
|
- `estimated_good_fit_range`
|
|
82
82
|
- `message_context_strength`, directional and source-specific
|
|
@@ -96,10 +96,11 @@ Evidence standards:
|
|
|
96
96
|
exist, how many sampled engagers looked in-ICP, how many good-fit prospects
|
|
97
97
|
that implies per 100 engagers, how many usable prospects one right-content
|
|
98
98
|
post should yield after cleanup, how many engagers must be scraped for the
|
|
99
|
-
|
|
100
|
-
and which posts you would use. Also say the
|
|
101
|
-
|
|
99
|
+
300-good-fit source target at the 20% working assumption, how many posts are
|
|
100
|
+
needed for that source target, and which posts you would use. Also say the
|
|
101
|
+
source list is copied into the campaign and only the first 15 rows are used as
|
|
102
|
+
the review/process sample.
|
|
102
103
|
- If `fetch_post_engagers` is unavailable or fails, report that explicitly and mark the estimate lower-confidence.
|
|
103
|
-
- Keep LinkedIn Engagement viable when selected posts can produce roughly
|
|
104
|
+
- Keep LinkedIn Engagement viable when selected posts can produce roughly 300+ ICP-fit warm prospects before final filtering, even if Sales Nav is more scalable.
|
|
104
105
|
- If sampled/projected fit after cleanup is below 10%, reject the Signals scrape
|
|
105
106
|
path and recommend Sales Nav recent activity as the next source.
|
|
@@ -28,7 +28,7 @@ Process:
|
|
|
28
28
|
2. Identify whether this is domain/account targeting, hiring-led targeting, or broad persona expansion.
|
|
29
29
|
3. For domain targeting, use or create the standalone `domainFilterId` before searching; never pass raw domains directly into `search_prospeo`.
|
|
30
30
|
4. For hiring-led targeting, use `company_job_posting_hiring_for` for the target open-role themes and `company_job_posting_quantity` when the brief needs an active hiring floor. Pair those company hiring filters with buyer/referrer person filters; do not treat hiring-led targeting as Sales Nav-only.
|
|
31
|
-
5. Run the narrowest useful Prospeo people preview and 1-2 refinements if quality or scale is unclear. Check scale against the source target good-fit lead count (default about
|
|
31
|
+
5. Run the narrowest useful Prospeo people preview and 1-2 refinements if quality or scale is unclear. Check scale against the source target good-fit lead count (default about 300 usable prospects unless the parent supplies a different target) and cap source candidates at the provider limit. Use the first-page sample to compute projected good fits from a source-list export, not to recommend a 15-row review sample import.
|
|
32
32
|
6. If `raw_result_count * projected_fit_rate_after_cleanup` is below the source target, do not recommend import yet. Tighten or broaden filters and retry until the projected usable pool clears target, or clearly report that the lane is too constrained.
|
|
33
33
|
7. Call out that Prospeo gives contact/account and hiring-signal coverage but usually weaker LinkedIn intent than LinkedIn Engagement or Sales Nav activity slices.
|
|
34
34
|
|
|
@@ -57,7 +57,7 @@ Evidence standards:
|
|
|
57
57
|
below 10% after reasonable refinement, recommend tightening the ICP/source
|
|
58
58
|
direction rather than switching providers again.
|
|
59
59
|
- Never recommend "import 25 leads" as the Prospeo source action. Recommend
|
|
60
|
-
exporting/materializing the source list
|
|
61
|
-
the
|
|
62
|
-
|
|
60
|
+
exporting/materializing the approved source list; the parent thread later
|
|
61
|
+
copies the confirmed source rows into the campaign and treats only the first
|
|
62
|
+
15 rows as the review/process sample.
|
|
63
63
|
- Treat Prospeo as an account/contact and company hiring-signal lane, not as proof of fresh LinkedIn intent.
|
|
@@ -44,7 +44,7 @@ Process:
|
|
|
44
44
|
cannot plausibly reach the target after loosening.
|
|
45
45
|
7. Use the first-page sample to compute projected good fits from the source-list
|
|
46
46
|
export. The recommendation should name the source-list `targetLeadCount` for
|
|
47
|
-
`import_leads`, not a
|
|
47
|
+
`import_leads`, not a 15-row review sample import.
|
|
48
48
|
8. 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.
|
|
49
49
|
|
|
50
50
|
Return a concise structured result with:
|
|
@@ -81,8 +81,8 @@ Evidence standards:
|
|
|
81
81
|
- If projected good-fit after cleanup is below 10%, do not recommend Sales Nav
|
|
82
82
|
as the winning source; recommend Prospeo as the next provider.
|
|
83
83
|
- Never recommend "import 25 leads" as the Sales Nav source action. Recommend
|
|
84
|
-
exporting/materializing the source list
|
|
85
|
-
the
|
|
86
|
-
|
|
84
|
+
exporting/materializing the approved source list; the parent thread later
|
|
85
|
+
copies the confirmed source rows into the campaign and treats only the first
|
|
86
|
+
15 rows as the review/process sample.
|
|
87
87
|
- Do not hand-wave missing filter IDs.
|
|
88
88
|
- 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
|
@@ -646,9 +646,10 @@ data, compare sources by source volume, sampled ICP fit, activity/warmth
|
|
|
646
646
|
signals, cleanup risk, and confidence basis. If a user asks for a forecast,
|
|
647
647
|
label it explicitly as not estimated from this run.
|
|
648
648
|
|
|
649
|
-
Before any provider prompt, search, source scout, or signal-discovery call,
|
|
650
|
-
|
|
651
|
-
authorizes scouting/search only. The gate
|
|
649
|
+
Before any provider prompt, search, source scout, or signal-discovery call, show
|
|
650
|
+
one source-plan gate and ask for approval. The plan must be visible before the
|
|
651
|
+
question, and this first approval authorizes scouting/search only. The gate
|
|
652
|
+
should say:
|
|
652
653
|
|
|
653
654
|
- given this campaign, the viable source options
|
|
654
655
|
- the recommended first lane
|
|
@@ -665,6 +666,10 @@ why. Do not call \`search_signals\`, \`search_sales_nav\`, \`search_prospeo\`,
|
|
|
665
666
|
\`fetch_post_engagers\`, or provider-scoped subagents until the user approves this
|
|
666
667
|
source plan or explicitly chooses a different source.
|
|
667
668
|
|
|
669
|
+
If the user already answered a provider approval such as "Approve Prospeo plan",
|
|
670
|
+
that answer satisfies the source-plan gate. Persist the approved provider and
|
|
671
|
+
run the scouting/search next; do not ask a second source-plan approval question.
|
|
672
|
+
|
|
668
673
|
For hiring-led campaigns, do not default to Sales Nav just because the target is
|
|
669
674
|
a role search. Prospeo is the primary lane when the brief asks for companies
|
|
670
675
|
actively hiring specific roles, open-role signals, account/contact coverage, or
|
|
@@ -677,7 +682,7 @@ say that distinction plainly in the source-plan gate.
|
|
|
677
682
|
|
|
678
683
|
After scouting, ask for a second approval on the concrete source action. For
|
|
679
684
|
Signal Discovery, name how many selected posts will be scraped, the target
|
|
680
|
-
engager/source-candidate volume, and the
|
|
685
|
+
engager/source-candidate volume, and the 15-row review/process sample size. For Sales
|
|
681
686
|
Nav or Prospeo, name the specific approved import lane and source lead count.
|
|
682
687
|
Do not call \`import_leads\` or \`confirm_lead_list\` until this second approval is
|
|
683
688
|
granted.
|
|
@@ -686,12 +691,12 @@ For Sales Nav and Prospeo, the second gate approves materializing the source
|
|
|
686
691
|
lead list, not importing only the review batch. Use the first-page/sample review
|
|
687
692
|
to calculate projected good fits: sampled fit rate after conservative cleanup,
|
|
688
693
|
raw pool size, source target, and expected good-fit count. If the projected
|
|
689
|
-
good-fit pool is below the campaign target
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
694
|
+
good-fit pool is below the campaign target, keep refining/broadening filters
|
|
695
|
+
before asking for import approval. Once it clears target, approve \`import_leads\`
|
|
696
|
+
with a source-list \`targetLeadCount\` around 1,000 by default (provider cap is
|
|
697
|
+
internal when the raw pool is larger). Only after the source list is ready
|
|
698
|
+
should \`confirm_lead_list({ reviewBatchLimit: 15 })\` copy confirmed rows into
|
|
699
|
+
the campaign table and return the first 15 review/process rows.
|
|
695
700
|
|
|
696
701
|
For campaign-attached Signal Discovery sampling, promote/select the exact posts
|
|
697
702
|
with \`select_promising_posts\` before \`fetch_post_engagers\` so the user can see
|
|
@@ -980,31 +985,27 @@ updates.
|
|
|
980
985
|
\`mcp__sellable__get_subskill_prompt({ subskillName: "generate-messages", offset, limit })\`
|
|
981
986
|
until \`hasMore=false\`. Message review requires Message Draft Builder output:
|
|
982
987
|
do not draft from a checklist, local markdown artifact, or parent-thread
|
|
983
|
-
|
|
984
|
-
|
|
988
|
+
intuition. Use campaign state, campaign brief content, selected source state,
|
|
989
|
+
and first review/process sample rows as the source of truth; do not read stale
|
|
985
990
|
local markdown such as \`message-validation.md\`, inspect the database
|
|
986
991
|
directly, or synthesize local validation artifacts from general knowledge.
|
|
987
992
|
5. Create the campaign shell early with the v1 brief so the user can open the
|
|
988
|
-
watch link and see useful setup state immediately.
|
|
989
|
-
|
|
993
|
+
watch link and see useful setup state immediately. Materialize the approved
|
|
994
|
+
source list, copy confirmed rows into the campaign, and process only the
|
|
995
|
+
first 15 review rows after the source is attached to the campaign; do not
|
|
990
996
|
load post-lead registries/prompts before asking add filters vs skip filters.
|
|
991
997
|
Once the user answers, launch the message scout from the same campaign/table
|
|
992
998
|
basis. If filters are approved, also launch the filter scout. Do not queue
|
|
993
|
-
workflow cells, attach a sequence, or start until
|
|
994
|
-
|
|
995
|
-
default Use Template path gate only Generate Message cells, sender setup,
|
|
996
|
-
sequence attach, and launch. When filters are approved, immediately
|
|
999
|
+
workflow cells, attach a sequence, or start until saved filters and the
|
|
1000
|
+
message template/token rules are approved. When filters are chosen, immediately
|
|
997
1001
|
call \`mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })\`
|
|
998
1002
|
so the watched app moves to Filter Rules while rubrics are drafted/saved.
|
|
999
|
-
After rubrics save,
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
Messages/message review and wait for message approval before Settings.
|
|
1006
|
-
Product Generate Message cells must not run before that template/token
|
|
1007
|
-
approval.
|
|
1003
|
+
After rubrics save, keep Filter Rules visible for approval; after approval,
|
|
1004
|
+
move to Filter Leads and wait there for the background message recommendation.
|
|
1005
|
+
If filters are skipped, move to Messages/message review. Queue the bounded
|
|
1006
|
+
review-batch \`enrichCellId\` cells only after message approval. Move to
|
|
1007
|
+
Messages only after at least one review row passes and one generated message
|
|
1008
|
+
is ready.
|
|
1008
1009
|
Do not ask the user to approve the brief before shell creation unless they
|
|
1009
1010
|
explicitly requested a no-write draft; the shell itself is the review surface.
|
|
1010
1011
|
6. The main thread owns watch navigation. Call
|
|
@@ -1012,9 +1013,10 @@ updates.
|
|
|
1012
1013
|
visible work so the user can watch progress in the app: \`create-offer\` for
|
|
1013
1014
|
the brief, \`pick-provider\` or the selected provider step while sourcing,
|
|
1014
1015
|
\`filter-choice\` after the review batch, \`create-icp-rubric\` as soon
|
|
1015
|
-
as filters are
|
|
1016
|
-
|
|
1017
|
-
|
|
1016
|
+
as filters are chosen and while saved filters await approval,
|
|
1017
|
+
\`apply-icp-rubric\` after filter approval and message approval while bounded
|
|
1018
|
+
enrichment/filter scoring runs, \`validate-sample\` only as a recovery/legacy
|
|
1019
|
+
observation state,
|
|
1018
1020
|
\`auto-execute-messaging\` after at least one row passes and review-batch
|
|
1019
1021
|
messages are being generated or reviewed, \`awaiting-user-greenlight\` only
|
|
1020
1022
|
after generated review-batch messages are approved, \`settings\` for sender
|
package/package.json
CHANGED
|
@@ -72,10 +72,10 @@ not create, link, or surface local draft files unless the user explicitly asks
|
|
|
72
72
|
for them. Resume, gating, and handoff read campaign state first. The
|
|
73
73
|
watchable campaign exists after the short brief; lead import is bounded to the
|
|
74
74
|
first review batch. After that, the user chooses whether to use filters or skip.
|
|
75
|
-
When filters are chosen, save rubrics,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
When filters are chosen, save rubrics, get filter approval, then wait for
|
|
76
|
+
message-template approval before enrichment/filtering or Generate Message cells.
|
|
77
|
+
Use Template is the default message path; AI Generated is only an explicit
|
|
78
|
+
opt-out.
|
|
79
79
|
|
|
80
80
|
## Opening Turn Contract
|
|
81
81
|
|
|
@@ -124,9 +124,10 @@ data, compare sources by source volume, sampled ICP fit, activity/warmth
|
|
|
124
124
|
signals, cleanup risk, and confidence basis. If a user asks for a forecast,
|
|
125
125
|
label it explicitly as not estimated from this run.
|
|
126
126
|
|
|
127
|
-
Before any provider prompt, search, source scout, or signal-discovery call,
|
|
128
|
-
|
|
129
|
-
authorizes scouting/search only. The gate
|
|
127
|
+
Before any provider prompt, search, source scout, or signal-discovery call, show
|
|
128
|
+
one source-plan gate and ask for approval. The plan must be visible before the
|
|
129
|
+
question, and this first approval authorizes scouting/search only. The gate
|
|
130
|
+
should say:
|
|
130
131
|
|
|
131
132
|
- given this campaign, the viable source options
|
|
132
133
|
- the recommended first lane
|
|
@@ -143,6 +144,10 @@ why. Do not call `search_signals`, `search_sales_nav`, `search_prospeo`,
|
|
|
143
144
|
`fetch_post_engagers`, or provider-scoped subagents until the user approves this
|
|
144
145
|
source plan or explicitly chooses a different source.
|
|
145
146
|
|
|
147
|
+
If the user already answered a provider approval such as "Approve Prospeo plan",
|
|
148
|
+
that answer satisfies the source-plan gate. Persist the approved provider and
|
|
149
|
+
run the scouting/search next; do not ask a second source-plan approval question.
|
|
150
|
+
|
|
146
151
|
For hiring-led campaigns, do not default to Sales Nav just because the target is
|
|
147
152
|
a role search. Prospeo is the primary lane when the brief asks for companies
|
|
148
153
|
actively hiring specific roles, open-role signals, account/contact coverage, or
|
|
@@ -153,41 +158,42 @@ are likely. Sales Nav is useful for recent LinkedIn activity, role/title
|
|
|
153
158
|
precision, and referral paths, but it does not provide hiring-by-role filters;
|
|
154
159
|
say that distinction plainly in the source-plan gate.
|
|
155
160
|
|
|
156
|
-
After scouting, ask for a second approval on the concrete source action. For
|
|
157
|
-
Signal Discovery, name how many selected posts will be scraped, the target
|
|
158
|
-
engager/source-candidate volume, and the
|
|
159
|
-
Nav or Prospeo, name the specific approved import lane and source lead count.
|
|
161
|
+
After scouting, ask for a second approval on the concrete source action. For
|
|
162
|
+
Signal Discovery, name how many selected posts will be scraped, the target
|
|
163
|
+
engager/source-candidate volume, and the 15-row review/process sample size. For Sales
|
|
164
|
+
Nav or Prospeo, name the specific approved import lane and source lead count.
|
|
165
|
+
|
|
160
166
|
Do not call `import_leads` or `confirm_lead_list` until this second approval is
|
|
161
167
|
granted.
|
|
162
168
|
|
|
163
|
-
For Sales Nav and Prospeo, the second gate approves materializing the source
|
|
164
|
-
lead list, not importing only the review batch. Use the first-page/sample review
|
|
165
|
-
to calculate projected good fits: sampled fit rate after conservative cleanup,
|
|
166
|
-
raw pool size, source target, and expected good-fit count. If the projected
|
|
167
|
-
good-fit pool is below the campaign target
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
169
|
+
For Sales Nav and Prospeo, the second gate approves materializing the source
|
|
170
|
+
lead list, not importing only the review batch. Use the first-page/sample review
|
|
171
|
+
to calculate projected good fits: sampled fit rate after conservative cleanup,
|
|
172
|
+
raw pool size, source target, and expected good-fit count. If the projected
|
|
173
|
+
good-fit pool is below the campaign target, keep refining/broadening filters
|
|
174
|
+
before asking for import approval. Once it clears target, approve `import_leads`
|
|
175
|
+
with a source-list `targetLeadCount` around 1,000 by default (provider cap is
|
|
176
|
+
internal when the raw pool is larger). Only after the source list is ready
|
|
177
|
+
should `confirm_lead_list({ reviewBatchLimit: 15 })` copy confirmed rows into
|
|
178
|
+
the campaign table and return the first 15 review/process rows.
|
|
173
179
|
|
|
174
180
|
For Signal Discovery, the customer-facing approval card must use the exact
|
|
175
181
|
action shape "Approve scraping N Signal Discovery posts?" and the chat summary
|
|
176
182
|
should be a compact `## Source Recommendation` block with:
|
|
177
183
|
|
|
178
|
-
-
|
|
179
|
-
- source-candidate plan: about 1,
|
|
180
|
-
|
|
184
|
+
- goal: about 300 good-fit prospects after cleanup, enrichment, and filters
|
|
185
|
+
- source-candidate plan: about 1,500 raw engagers using a 20% working fit-rate
|
|
186
|
+
assumption unless sampled data supports a different number
|
|
181
187
|
- planning floor: continue with Signal Discovery only when sampled/projected
|
|
182
188
|
fit is at least 10% after cleanup; below that, move to Sales Nav recent
|
|
183
189
|
activity instead of scraping noisy engagers
|
|
184
|
-
- review checkpoint: after the source list exists,
|
|
185
|
-
|
|
190
|
+
- review checkpoint: after the source list exists, copy confirmed source rows
|
|
191
|
+
into the campaign and process only the first 15 for fit and message review
|
|
186
192
|
- a selected-post table with post author/topic, why it fits, and visible
|
|
187
193
|
engagement
|
|
188
194
|
- total visible pool and estimated good-fit pool
|
|
189
|
-
- first pass: build the source list
|
|
190
|
-
then
|
|
195
|
+
- first pass: build the source list, copy all confirmed source rows into the
|
|
196
|
+
campaign, then process only the first 15 rows before scaling
|
|
191
197
|
- fallback: switch to Sales Nav recent activity if sampled/projected fit falls
|
|
192
198
|
below 10%, or if the review batch is vendor-heavy, agency-heavy, or off-ICP
|
|
193
199
|
|
|
@@ -217,18 +223,19 @@ which posts are being sampled in the watched app. The watch guide should say
|
|
|
217
223
|
that we are pulling sample engagers from these posts to confirm the ICP is
|
|
218
224
|
actually engaging and the source is viable.
|
|
219
225
|
|
|
220
|
-
After
|
|
226
|
+
After confirmed source rows exist in the campaign table, use the same registry pattern for
|
|
227
|
+
|
|
221
228
|
post-lead work, but do not load that registry or any deep filter/message prompt
|
|
222
229
|
before the filter-choice question. After `confirm_lead_list`, ask add filters
|
|
223
230
|
vs skip filters immediately. Once the user answers, launch the message scout
|
|
224
231
|
from the same campaign/table basis. If the user chooses filters, also launch the
|
|
225
|
-
filter-leads scout, move to Filter Rules, save rubrics, then
|
|
226
|
-
|
|
227
|
-
filters, move to Messages/message
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
+
filter-leads scout, move to Filter Rules, save rubrics, then ask for filter
|
|
233
|
+
approval. After approval, keep the browser on Filter Leads while the message
|
|
234
|
+
recommendation is reviewed. If the user skips filters, move to Messages/message
|
|
235
|
+
review. Enrichment/filtering and Generate Message cells wait for message
|
|
236
|
+
approval. AI Generated is an explicit opt-out from the template path. If the
|
|
237
|
+
post-lead agents are absent, the main thread still orchestrates the same
|
|
238
|
+
branches from compact MCP context.
|
|
232
239
|
|
|
233
240
|
Use rendered Markdown for user review surfaces, not fenced code blocks. Keep
|
|
234
241
|
lines short, use indexed section labels and bullets, and translate internal
|
|
@@ -644,29 +651,23 @@ updates.
|
|
|
644
651
|
until `hasMore=false`. Message review requires Message Draft Builder output:
|
|
645
652
|
do not draft from a checklist, local markdown artifact, or parent-thread
|
|
646
653
|
intuition. Use campaign state, campaign brief content, selected source state, and
|
|
647
|
-
|
|
654
|
+
first review/process sample rows as the source of truth; do not read stale local
|
|
648
655
|
markdown such as `message-validation.md`, inspect the database directly, or
|
|
649
656
|
synthesize local validation artifacts from general knowledge.
|
|
650
657
|
5. Create the campaign shell early with the v1 brief so the user can open the
|
|
651
|
-
watch link and see useful setup state immediately.
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
setup, sequence attach, and launch. When filters are approved, immediately
|
|
658
|
+
watch link and see useful setup state immediately. Materialize the approved
|
|
659
|
+
source list, copy confirmed rows into the campaign, and process only the
|
|
660
|
+
first 15 review rows after the source is attached to the campaign; do not
|
|
661
|
+
queue workflow cells, attach a sequence, or start until saved filters and the
|
|
662
|
+
message template/token rules are approved. When filters are chosen, immediately
|
|
657
663
|
call `mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })`
|
|
658
664
|
so the watched app moves to Filter Rules while rubrics are drafted/saved.
|
|
659
|
-
After rubrics save,
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
Messages
|
|
664
|
-
|
|
665
|
-
enrichment/filtering after rubrics are saved, without waiting for template
|
|
666
|
-
approval. Move to Messages only after at least one review row passes and
|
|
667
|
-
Generate Message cells are running or ready.
|
|
668
|
-
Product Generate Message cells must not run before that template/token
|
|
669
|
-
approval.
|
|
665
|
+
After rubrics save, keep Filter Rules visible for approval; after approval,
|
|
666
|
+
move to Filter Leads and wait there for the background message recommendation.
|
|
667
|
+
If filters are skipped, move to Messages/message review. Queue the bounded
|
|
668
|
+
review-batch `enrichCellId` cells only after message approval. Move to
|
|
669
|
+
Messages only after at least one review row passes and one generated message
|
|
670
|
+
is ready.
|
|
670
671
|
Do not ask the user to approve the brief before shell creation unless they
|
|
671
672
|
explicitly requested a no-write draft; the shell itself is the review surface.
|
|
672
673
|
6. The main thread owns watch navigation. Call
|
|
@@ -674,9 +675,10 @@ updates.
|
|
|
674
675
|
visible work so the user can watch progress in the app: `create-offer` for
|
|
675
676
|
the brief, `pick-provider` or the selected provider step while sourcing,
|
|
676
677
|
`filter-choice` after the review batch, `create-icp-rubric` as soon
|
|
677
|
-
as filters are
|
|
678
|
-
|
|
679
|
-
|
|
678
|
+
as filters are chosen and while saved filters await approval,
|
|
679
|
+
`apply-icp-rubric` after filter approval and message approval while bounded
|
|
680
|
+
enrichment/filter scoring runs, `validate-sample` only as a recovery/legacy
|
|
681
|
+
observation state,
|
|
680
682
|
`auto-execute-messaging` after at least one row passes and review-batch
|
|
681
683
|
messages are being generated or reviewed, `awaiting-user-greenlight` only
|
|
682
684
|
after generated review-batch messages are approved, `settings` for sender
|