@sellable/mcp 0.1.46 → 0.1.48
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/package.json +1 -1
- package/skills/create-campaign/SKILL.md +6 -5
- package/skills/create-campaign-v2/SKILL.md +136 -21
- package/skills/create-campaign-v2/SOUL.md +24 -13
- package/skills/create-campaign-v2/core/flow.v2.json +111 -62
- package/skills/create-campaign-v2/core/policy.md +3 -0
- package/skills/create-campaign-v2/references/approval-gate-framing.md +30 -23
package/package.json
CHANGED
|
@@ -96,11 +96,12 @@ confidence basis. Never show a percent like "73% match" without the numerator,
|
|
|
96
96
|
denominator, and sample basis.
|
|
97
97
|
|
|
98
98
|
Every approval gate must include artifact access after the readable inline
|
|
99
|
-
content. Show an `Open
|
|
100
|
-
|
|
101
|
-
Do this for brief approval, lead-source approval/review,
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
content. Show an `Open artifact:` line with the one key clickable markdown link
|
|
100
|
+
for that stage. Do not show raw filesystem paths unless links cannot be created
|
|
101
|
+
or the user asks. Do this for brief approval, lead-source approval/review,
|
|
102
|
+
lead-filter review, message review, sequence/settings, and final approval
|
|
103
|
+
packet. The link is for deeper inspection; never use it as a substitute for
|
|
104
|
+
showing the decision in chat.
|
|
104
105
|
|
|
105
106
|
Never mention MCP namespaces, prompt chunking, plugin cache paths, missing
|
|
106
107
|
linked skill versions, runbooks, or local skill files in normal customer-facing
|
|
@@ -34,8 +34,8 @@ The JSON flow is the source of truth for stage order, `requiredArtifacts`,
|
|
|
34
34
|
replace them.
|
|
35
35
|
|
|
36
36
|
Each stage writes its own artifact into the draft directory before the next
|
|
37
|
-
stage starts. `brief-v1.md` is
|
|
38
|
-
the
|
|
37
|
+
stage starts. `brief-v1.md` is an internal first-draft snapshot; `brief.md` is
|
|
38
|
+
the current customer-facing and downstream campaign thesis input.
|
|
39
39
|
|
|
40
40
|
After validation artifacts are complete, show the user a commit gate with 6
|
|
41
41
|
choices (approve / revise-brief / revise-leads / revise-rubric /
|
|
@@ -56,6 +56,7 @@ Validated draft directory:
|
|
|
56
56
|
lead-review.md
|
|
57
57
|
lead-sample.json
|
|
58
58
|
lead-filter.md
|
|
59
|
+
sequence-settings.md
|
|
59
60
|
message-prep.md # optional speed artifact
|
|
60
61
|
message-candidate-drafts.md # optional provisional message artifact
|
|
61
62
|
message-validation.md
|
|
@@ -135,11 +136,12 @@ Validated draft directory:
|
|
|
135
136
|
"mkdir", "campaign thesis", or "same approved campaign thesis" in
|
|
136
137
|
customer-facing progress copy.
|
|
137
138
|
- Every approval gate must include artifact access after the readable inline
|
|
138
|
-
content. Show a short `Open
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
the
|
|
139
|
+
content. Show a short `Open artifact:` line with the one key clickable
|
|
140
|
+
markdown link for that stage. Do not show raw filesystem paths unless links
|
|
141
|
+
cannot be created or the user asks. Do this for brief approval, lead-source
|
|
142
|
+
approval/review, lead-filter review, message review, sequence/settings, and
|
|
143
|
+
final approval packet. Do not use the link as a substitute for rendering the
|
|
144
|
+
decision in chat; links are for deeper inspection.
|
|
143
145
|
- Do not treat the active Sellable workspace as the campaign subject. The
|
|
144
146
|
workspace only tells you where the campaign will be saved. Before buyer, CTA,
|
|
145
147
|
proof, or source questions, identify two things:
|
|
@@ -317,7 +319,7 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
|
|
|
317
319
|
persistence in this preamble.
|
|
318
320
|
|
|
319
321
|
- Before asking for brief approval, render a slim approval brief in the chat and
|
|
320
|
-
keep the rich brief in `brief
|
|
322
|
+
keep the rich current brief in `brief.md`. Do not ask the user to
|
|
321
323
|
approve a one-paragraph direction, a risk note, or hidden artifact they cannot
|
|
322
324
|
inspect. The chat approval view should be skimmable in under 45 seconds; full
|
|
323
325
|
reasoning, source notes, and robustness stay in the artifacts. Include these
|
|
@@ -357,7 +359,7 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
|
|
|
357
359
|
brief, include only:
|
|
358
360
|
|
|
359
361
|
```text
|
|
360
|
-
Open
|
|
362
|
+
Open artifact: [brief.md]
|
|
361
363
|
```
|
|
362
364
|
|
|
363
365
|
If clickable links cannot be created, show one compact fallback line:
|
|
@@ -377,8 +379,7 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
|
|
|
377
379
|
user-facing choice should be approve/revise language, not "looks good".
|
|
378
380
|
Approval options should refer to what the user just read, e.g. `Approve this
|
|
379
381
|
brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
|
|
380
|
-
Include `Open
|
|
381
|
-
approval question.
|
|
382
|
+
Include an `Open artifact:` link to `brief.md` before the approval question.
|
|
382
383
|
|
|
383
384
|
- After the brief is approved or auto-confirmed, show the next progress line:
|
|
384
385
|
`Cool. Now I'm going to find people who are both a good fit and likely to
|
|
@@ -412,11 +413,20 @@ should test for this campaign. Those can run in parallel and usually take
|
|
|
412
413
|
`npx`), call APIs, query databases, inspect prompt dumps, run git, or
|
|
413
414
|
synthesize artifact content. Use `Read`/`Write`/`Edit` for artifact files and
|
|
414
415
|
MCP tools for product actions.
|
|
415
|
-
- `brief-v1.md` is
|
|
416
|
-
|
|
416
|
+
- `brief-v1.md` is only an internal first-draft snapshot. Do not show it in the
|
|
417
|
+
normal user-facing approval view. `brief.md` is the stable downstream input,
|
|
418
|
+
current user-facing brief, and thesis source.
|
|
419
|
+
- On brief edits or revisions, update `brief.md` directly. Do not run another
|
|
420
|
+
long brief-generation pass just to create `brief-v2.md`. If version history is
|
|
421
|
+
ever needed, create it only as a cheap local copy after the edit; never spend
|
|
422
|
+
model/research time writing duplicate versions.
|
|
417
423
|
- `lead-review.md` and `lead-sample.json` are the required outputs of `find leads`.
|
|
418
424
|
- `lead-filter.md` is the primary output of `filter leads`.
|
|
419
425
|
- `rubric.json` is optional and secondary to `lead-filter.md`.
|
|
426
|
+
- `sequence-settings.md` is a cheap pre-mint preview artifact. It summarizes
|
|
427
|
+
recommended sequence/settings for the user's approval packet. It must not call
|
|
428
|
+
sequence tools or rerun research; actual sequence attachment still happens
|
|
429
|
+
after campaign creation via `attach_recommended_sequence`.
|
|
420
430
|
- `message-prep.md` is an optional speed artifact produced by the explicit
|
|
421
431
|
message path after find-leads. It can prepare proof inventory, buyer
|
|
422
432
|
objections, CTA options, gold-standard strategy maps, and candidate angles
|
|
@@ -703,14 +713,34 @@ usable leads after filtering, likely connection acceptance range, likely reply
|
|
|
703
713
|
range, and estimate basis. If exact performance data is unavailable, use a
|
|
704
714
|
directional range and label it `directional`, not definitive.
|
|
705
715
|
|
|
706
|
-
When showing `lead-review.md` to the user, render
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
716
|
+
When showing `lead-review.md` to the user, render a slim decision summary in
|
|
717
|
+
chat, not the full evidence table. The visible response must include:
|
|
718
|
+
|
|
719
|
+
- `Lead source decision`
|
|
720
|
+
- `Chosen source`
|
|
721
|
+
- `Why it won`
|
|
722
|
+
- `Key numbers` with raw volume, sampled fit rate as `n/N`, estimated usable
|
|
723
|
+
leads, expected connection acceptance range, and expected reply rate range
|
|
724
|
+
- `Sample leads` with 3-5 representative `Name — Title, Company` rows
|
|
725
|
+
- `Tradeoff`
|
|
726
|
+
- `Open artifact: lead-review.md`
|
|
727
|
+
|
|
728
|
+
Keep `## Evidence Snapshot`, selected posts, discarded paths, full sample rows,
|
|
729
|
+
and `lead-sample.json` details in artifacts. Do not show raw filesystem paths
|
|
730
|
+
unless links cannot be created or the user asks.
|
|
731
|
+
|
|
732
|
+
After the lead source is set, use this progress copy before the parallel
|
|
733
|
+
filter/message work:
|
|
734
|
+
|
|
735
|
+
```text
|
|
736
|
+
Lead source is set.
|
|
737
|
+
|
|
738
|
+
I’m kicking off two workstreams now:
|
|
739
|
+
1. Tighten the fit filter so we only reach out to the right people.
|
|
740
|
+
2. Draft the first message from the approved brief and real sample leads.
|
|
741
|
+
|
|
742
|
+
These can run in parallel and usually take ~2-3 min.
|
|
743
|
+
```
|
|
714
744
|
|
|
715
745
|
For supplied profile CSVs and existing lead lists, `lead-review.md` must not
|
|
716
746
|
describe a generic TAM estimate or pretend the rows came from Sales Nav/Prospeo
|
|
@@ -782,6 +812,29 @@ Required behavior:
|
|
|
782
812
|
- `Recommendation`
|
|
783
813
|
- `Implementation Details`
|
|
784
814
|
|
|
815
|
+
When showing the filter result in chat, render a slim summary before moving to
|
|
816
|
+
message review:
|
|
817
|
+
|
|
818
|
+
```text
|
|
819
|
+
Lead filter
|
|
820
|
+
|
|
821
|
+
Keep:
|
|
822
|
+
{1-3 lines}
|
|
823
|
+
|
|
824
|
+
Exclude:
|
|
825
|
+
{1-3 lines}
|
|
826
|
+
|
|
827
|
+
Why:
|
|
828
|
+
{sample-backed reason}
|
|
829
|
+
|
|
830
|
+
Expected impact:
|
|
831
|
+
{1 line}
|
|
832
|
+
|
|
833
|
+
Open artifact: lead-filter.md
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
Keep production rubric details and `rubric.json` internals in the artifact.
|
|
837
|
+
|
|
785
838
|
When `rubric.json` is emitted, it must use the production rubric shape, not a
|
|
786
839
|
custom sidecar schema:
|
|
787
840
|
|
|
@@ -822,6 +875,68 @@ Continue chunked-read until `hasMore=false`. Treat all chunks as one prompt load
|
|
|
822
875
|
|
|
823
876
|
Do NOT proceed to Step 4 (message review gate) without loading and following the full generate-messages workflow. `message-validation.md` must prove the full workflow ran (all required sections present + raw sendable Selected Winner) before `message-review.md` can recommend `approve-message`. If the message review or approval packet is ready but the generate-messages prompt was not retrieved in this run, route back to message-generation instead of asking the commit gate.
|
|
824
877
|
|
|
878
|
+
When showing message review in chat, lead with one fully filled sample message,
|
|
879
|
+
not the tokenized template. The visible response must include:
|
|
880
|
+
|
|
881
|
+
- `Message review`
|
|
882
|
+
- `Subject`
|
|
883
|
+
- `Sample message` with no `{{tokens}}`
|
|
884
|
+
- `Why it should work`
|
|
885
|
+
- `Concern`
|
|
886
|
+
- `Recommendation`
|
|
887
|
+
- `Open artifact: message-review.md`
|
|
888
|
+
|
|
889
|
+
Keep tokenized templates, token fill basis, rendered examples, good/bad token
|
|
890
|
+
fill examples, validation notes, and `message-validation.md` details in
|
|
891
|
+
artifacts.
|
|
892
|
+
|
|
893
|
+
## Step 4: Sequence + Settings Preview
|
|
894
|
+
|
|
895
|
+
Before the final approval packet, write a cheap `sequence-settings.md` preview.
|
|
896
|
+
This is a planning artifact only. Do not call `attach_sequence` or
|
|
897
|
+
`attach_recommended_sequence` here, and do not rerun research or message
|
|
898
|
+
generation. Actual sequence attachment happens after campaign creation at
|
|
899
|
+
`awaiting-user-greenlight`.
|
|
900
|
+
|
|
901
|
+
Show this slim chat summary:
|
|
902
|
+
|
|
903
|
+
```text
|
|
904
|
+
Sequence + settings
|
|
905
|
+
|
|
906
|
+
Recommended sequence:
|
|
907
|
+
Recommended LinkedIn sequence based on the connected sender’s tier and limits.
|
|
908
|
+
|
|
909
|
+
Review batch:
|
|
910
|
+
First review batch only.
|
|
911
|
+
|
|
912
|
+
Launch state:
|
|
913
|
+
Paused / review-gated. Nothing sends live until final greenlight.
|
|
914
|
+
|
|
915
|
+
Safety checks:
|
|
916
|
+
Sender and workspace will be checked again before start.
|
|
917
|
+
|
|
918
|
+
Open artifact: sequence-settings.md
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
## Step 5: Final Approval Packet
|
|
922
|
+
|
|
923
|
+
When showing the final approval packet, render a slim "ready to create" summary
|
|
924
|
+
in chat. The visible response must include:
|
|
925
|
+
|
|
926
|
+
- `Ready to create campaign`
|
|
927
|
+
- `Campaign`
|
|
928
|
+
- `Target`
|
|
929
|
+
- `Lead source` with one key metric
|
|
930
|
+
- `Filter`
|
|
931
|
+
- `Sample message` with one fully filled sample and no `{{tokens}}`
|
|
932
|
+
- `Sequence/settings`
|
|
933
|
+
- `What approval creates`
|
|
934
|
+
- `Safety`
|
|
935
|
+
- `Open artifact: approval-packet.md`
|
|
936
|
+
|
|
937
|
+
Keep tokenized templates, evidence tables, rubrics, validation notes, and long
|
|
938
|
+
implementation details in `approval-packet.md`.
|
|
939
|
+
|
|
825
940
|
## Tail (MANDATORY TOOL ORDER + Steps 13-16 + Threshold Trips + Hard Rules)
|
|
826
941
|
|
|
827
942
|
The full tail detail (~17k chars: MANDATORY TOOL ORDER, auto-execute-leads, validate-sample loop, auto-execute-messaging, awaiting-user-greenlight, threshold-trip logging, tail hard rules) lives in a dedicated on-demand subskill to keep this entry prompt fast to load.
|
|
@@ -60,18 +60,16 @@ any approve/revise question, show the relevant decision in plain language. For a
|
|
|
60
60
|
brief approval, render the slim approval brief, not just a direction summary.
|
|
61
61
|
|
|
62
62
|
Every approval should also give the user a way to inspect the source artifact.
|
|
63
|
-
After the readable inline content, include an `Open
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
After the readable inline content, include an `Open artifact:` line with the one
|
|
64
|
+
key link behind the decision. Do not show long plain paths in normal chat; offer
|
|
65
|
+
them only as a fallback if links cannot be created. The artifact link is a backup
|
|
66
|
+
for inspection, not a replacement for showing the decision in chat.
|
|
67
67
|
|
|
68
68
|
This applies especially to message approvals. Never ask someone to approve a
|
|
69
|
-
message they cannot see.
|
|
70
|
-
|
|
71
|
-
the bad fill is wrong, token notes,
|
|
72
|
-
|
|
73
|
-
one real prospect would receive" before approving, and understand exactly how
|
|
74
|
-
the tokens should and should not be filled.
|
|
69
|
+
message they cannot see. In chat, show the subject and one fully filled sample
|
|
70
|
+
message with no tokens first. Keep the tokenized template, good fill example,
|
|
71
|
+
good omit example, bad fill example, why the bad fill is wrong, token notes, and
|
|
72
|
+
fallback rules in `message-review.md` / `message-validation.md`.
|
|
75
73
|
|
|
76
74
|
Every token needs a fallback. If the row does not have clean data for a token,
|
|
77
75
|
the approval view should say whether to use a safe segment-level phrase, omit
|
|
@@ -94,9 +92,10 @@ Every customer-facing update should answer one of these:
|
|
|
94
92
|
- What is protected until approval?
|
|
95
93
|
|
|
96
94
|
Before a brief approval, the user should see a slim approval brief in chat. The
|
|
97
|
-
rich brief
|
|
98
|
-
|
|
99
|
-
seconds and
|
|
95
|
+
rich current brief exists in `brief.md`; the chat view is the decision surface,
|
|
96
|
+
not the full working memo. `brief-v1.md` is an internal first-draft snapshot, not
|
|
97
|
+
part of the normal approval UI. It should be skimmable in under 45 seconds and
|
|
98
|
+
include:
|
|
100
99
|
|
|
101
100
|
- who we are targeting
|
|
102
101
|
- why they should care
|
|
@@ -123,6 +122,18 @@ sampled engagers; 31 looked like real ICP fits, so I’d treat this as direction
|
|
|
123
122
|
usable people if the remaining engagers behave similarly.
|
|
124
123
|
```
|
|
125
124
|
|
|
125
|
+
Lead review chat should be short and numeric: chosen source, why it won, raw
|
|
126
|
+
volume, sampled fit rate as `n/N`, estimated good fits, expected connection
|
|
127
|
+
acceptance, expected reply rate, 3-5 sample leads, and one tradeoff. Full tables
|
|
128
|
+
belong in `lead-review.md`.
|
|
129
|
+
|
|
130
|
+
Lead filter chat should always show what changed: keep, exclude, why, expected
|
|
131
|
+
impact, and `Open artifact: lead-filter.md`.
|
|
132
|
+
|
|
133
|
+
Final approval chat should be a ready-to-create summary: campaign, target, lead
|
|
134
|
+
source, filter, sequence/settings, one filled sample message, what approval
|
|
135
|
+
creates, and the safety note that nothing sends live until greenlight.
|
|
136
|
+
|
|
126
137
|
Avoid:
|
|
127
138
|
|
|
128
139
|
```text
|
|
@@ -206,26 +206,26 @@
|
|
|
206
206
|
"onEnter": [
|
|
207
207
|
{
|
|
208
208
|
"action": "show_brief_summary",
|
|
209
|
-
"artifact": "brief
|
|
209
|
+
"artifact": "brief.md"
|
|
210
210
|
},
|
|
211
211
|
{
|
|
212
212
|
"action": "render_brief_approval_checkpoint",
|
|
213
213
|
"requiredVisibleContent": [
|
|
214
214
|
"Campaign brief",
|
|
215
|
-
"
|
|
216
|
-
"
|
|
215
|
+
"Target",
|
|
216
|
+
"Core pain",
|
|
217
217
|
"Offer / CTA",
|
|
218
|
-
"Proof
|
|
219
|
-
"Lead
|
|
218
|
+
"Proof",
|
|
219
|
+
"Lead plan",
|
|
220
220
|
"Message angle",
|
|
221
|
-
"Risks
|
|
222
|
-
"
|
|
221
|
+
"Risks",
|
|
222
|
+
"After approval",
|
|
223
223
|
"approve this brief",
|
|
224
224
|
"revise the brief",
|
|
225
225
|
"then I will find good-fit leads"
|
|
226
226
|
],
|
|
227
|
-
"minimumVisibleBriefDetail": "
|
|
228
|
-
"requiredArtifactLinks": ["brief
|
|
227
|
+
"minimumVisibleBriefDetail": "slim_approval_brief_before_question",
|
|
228
|
+
"requiredArtifactLinks": ["brief.md"],
|
|
229
229
|
"artifactLinkTiming": "before_approval_question",
|
|
230
230
|
"avoidQuestionWhenOnlyUsefulAnswerIs": "looks good"
|
|
231
231
|
},
|
|
@@ -365,14 +365,12 @@
|
|
|
365
365
|
"action": "show_lead_review",
|
|
366
366
|
"artifact": "lead-review.md",
|
|
367
367
|
"renderInlineSections": [
|
|
368
|
-
"
|
|
369
|
-
"
|
|
370
|
-
"
|
|
371
|
-
"
|
|
372
|
-
"
|
|
373
|
-
"
|
|
374
|
-
"## Tradeoffs",
|
|
375
|
-
"## Discarded Paths"
|
|
368
|
+
"Lead source decision",
|
|
369
|
+
"Chosen source",
|
|
370
|
+
"Why it won",
|
|
371
|
+
"Key numbers",
|
|
372
|
+
"Sample leads",
|
|
373
|
+
"Tradeoff"
|
|
376
374
|
],
|
|
377
375
|
"signalsFirstRequiredFields": [
|
|
378
376
|
"post URL",
|
|
@@ -397,19 +395,19 @@
|
|
|
397
395
|
"confidence note"
|
|
398
396
|
],
|
|
399
397
|
"forbidPercentOnlyFitRates": true,
|
|
400
|
-
"requiredArtifactLinks": ["lead-review.md"
|
|
398
|
+
"requiredArtifactLinks": ["lead-review.md"],
|
|
401
399
|
"artifactLinkTiming": "before_next_step_or_revision_question",
|
|
402
|
-
"
|
|
403
|
-
"doNotRenderArtifactLinksOnly": true
|
|
400
|
+
"chatRenderRule": "Show a slim decision summary only: chosen source, why it won, raw volume, sampled fit rate as n/N, estimated usable leads, expected connection acceptance range, expected reply rate range, 3-5 representative sample leads, and one tradeoff. Keep evidence tables, selected posts, discarded paths, full sample rows, and lead-sample.json details in lead-review.md. Do not show plain filesystem paths unless links cannot be created."
|
|
404
401
|
},
|
|
405
402
|
{
|
|
406
403
|
"action": "render_post_lead_parallel_progress",
|
|
407
404
|
"requiredVisibleContent": [
|
|
408
405
|
"Lead source is set",
|
|
409
|
-
"
|
|
410
|
-
"
|
|
411
|
-
"
|
|
412
|
-
"
|
|
406
|
+
"kicking off two workstreams",
|
|
407
|
+
"Tighten the fit filter",
|
|
408
|
+
"Draft the first message",
|
|
409
|
+
"approved brief and real sample leads",
|
|
410
|
+
"parallel"
|
|
413
411
|
],
|
|
414
412
|
"timeEstimate": "~2-3 min"
|
|
415
413
|
},
|
|
@@ -470,6 +468,19 @@
|
|
|
470
468
|
"artifacts": ["lead-filter.md"],
|
|
471
469
|
"optionalArtifacts": ["rubric.json"]
|
|
472
470
|
},
|
|
471
|
+
{
|
|
472
|
+
"action": "show_lead_filter_summary",
|
|
473
|
+
"artifact": "lead-filter.md",
|
|
474
|
+
"renderInlineSections": [
|
|
475
|
+
"Lead filter",
|
|
476
|
+
"Keep",
|
|
477
|
+
"Exclude",
|
|
478
|
+
"Why",
|
|
479
|
+
"Expected impact"
|
|
480
|
+
],
|
|
481
|
+
"requiredArtifactLinks": ["lead-filter.md"],
|
|
482
|
+
"chatRenderRule": "Show a slim filter summary before message review: who we keep, who we exclude, sample-backed reason, and expected impact. Keep production rubric fields and rubric.json details in lead-filter.md/rubric.json. Do not show plain filesystem paths unless links cannot be created."
|
|
483
|
+
},
|
|
473
484
|
{
|
|
474
485
|
"action": "ask_revise_only_if_filter_is_not_confirmed",
|
|
475
486
|
"autoContinueWhen": {
|
|
@@ -601,19 +612,15 @@
|
|
|
601
612
|
"requiredInlineMarker": "Status: message-review",
|
|
602
613
|
"panels": [
|
|
603
614
|
"subject",
|
|
604
|
-
"tokenized template",
|
|
605
615
|
"sample prospect fill",
|
|
606
616
|
"my take",
|
|
607
|
-
"
|
|
617
|
+
"concern",
|
|
608
618
|
"question",
|
|
609
619
|
"recommendation"
|
|
610
620
|
],
|
|
611
621
|
"mustRenderInlineBeforeQuestion": true,
|
|
612
|
-
"minimumVisibleMessageDetail": "
|
|
613
|
-
"requiredArtifactLinks": [
|
|
614
|
-
"message-review.md",
|
|
615
|
-
"message-validation.md"
|
|
616
|
-
],
|
|
622
|
+
"minimumVisibleMessageDetail": "filled_sample_message_no_tokens",
|
|
623
|
+
"requiredArtifactLinks": ["message-review.md"],
|
|
617
624
|
"artifactLinkTiming": "before_approval_question",
|
|
618
625
|
"requiredFileLabels": [
|
|
619
626
|
"Subject:",
|
|
@@ -635,15 +642,13 @@
|
|
|
635
642
|
"requiredChatLabels": [
|
|
636
643
|
"Status: message-review",
|
|
637
644
|
"Subject:",
|
|
638
|
-
"Tokenized template:",
|
|
639
645
|
"Sample prospect fill:",
|
|
640
|
-
"Token fill basis:",
|
|
641
646
|
"My take:",
|
|
642
|
-
"
|
|
647
|
+
"Concern:",
|
|
643
648
|
"Question: approve-message or revise-messaging?",
|
|
644
649
|
"Recommendation:"
|
|
645
650
|
],
|
|
646
|
-
"chatRenderRule": "Show
|
|
651
|
+
"chatRenderRule": "Show one fully filled sample message with no {{tokens}} before asking for approval. Include subject, sample message, why it should work, one concern or None, recommendation, and Open artifact: message-review.md. Keep tokenized template, token fill basis, rendered examples, good/bad token fill examples, validation notes, and message-validation.md details in artifacts. Do not show plain filesystem paths unless links cannot be created.",
|
|
647
652
|
"allowedRecommendations": ["approve-message", "revise-messaging"],
|
|
648
653
|
"judgeAgainst": [
|
|
649
654
|
"generate-messages rules",
|
|
@@ -676,11 +681,9 @@
|
|
|
676
681
|
"questionPrerequisiteVisibleLabels": [
|
|
677
682
|
"Status: message-review",
|
|
678
683
|
"Subject:",
|
|
679
|
-
"Tokenized template:",
|
|
680
684
|
"Sample prospect fill:",
|
|
681
|
-
"Token fill basis:",
|
|
682
685
|
"My take:",
|
|
683
|
-
"
|
|
686
|
+
"Concern:",
|
|
684
687
|
"Recommendation:"
|
|
685
688
|
],
|
|
686
689
|
"forbiddenWhenMissingVisibleMessage": true,
|
|
@@ -724,11 +727,60 @@
|
|
|
724
727
|
"watchRequired": false,
|
|
725
728
|
"waitFor": ["message_approved", "revise_messaging"],
|
|
726
729
|
"transitions": {
|
|
727
|
-
"message_approved": "
|
|
730
|
+
"message_approved": "sequence-settings-preview",
|
|
728
731
|
"revise_messaging": "message-generation"
|
|
729
732
|
},
|
|
730
733
|
"interruptOnly": true
|
|
731
734
|
},
|
|
735
|
+
{
|
|
736
|
+
"id": "sequence-settings-preview",
|
|
737
|
+
"label": "Sequence and settings preview",
|
|
738
|
+
"normalFlow": true,
|
|
739
|
+
"resumeOnly": false,
|
|
740
|
+
"onEnter": [
|
|
741
|
+
{
|
|
742
|
+
"action": "write_sequence_settings_preview",
|
|
743
|
+
"artifact": "sequence-settings.md",
|
|
744
|
+
"requiredInlineMarker": "Status: sequence-settings-preview",
|
|
745
|
+
"inputs": ["brief.md", "lead-review.md", "lead-filter.md", "message-review.md"],
|
|
746
|
+
"mustBeFast": true,
|
|
747
|
+
"doNotCallTailTools": true,
|
|
748
|
+
"requiredSections": [
|
|
749
|
+
"Recommended sequence",
|
|
750
|
+
"Review batch",
|
|
751
|
+
"Launch state",
|
|
752
|
+
"Safety checks"
|
|
753
|
+
],
|
|
754
|
+
"chatRenderRule": "Show a slim sequence/settings summary: recommended LinkedIn sequence based on connected sender tier and limits, first review batch only, paused/review-gated launch state, nothing sends live until final greenlight, and sender/workspace checked again before start. Keep any details in sequence-settings.md. Do not show plain filesystem paths unless links cannot be created."
|
|
755
|
+
}
|
|
756
|
+
],
|
|
757
|
+
"requiredArtifacts": [
|
|
758
|
+
"brief.md",
|
|
759
|
+
"lead-review.md",
|
|
760
|
+
"lead-filter.md",
|
|
761
|
+
"message-review.md",
|
|
762
|
+
"message-review-decision.md"
|
|
763
|
+
],
|
|
764
|
+
"producesArtifacts": ["sequence-settings.md"],
|
|
765
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
766
|
+
"doNotAllow": [
|
|
767
|
+
"attach_sequence",
|
|
768
|
+
"attach_recommended_sequence",
|
|
769
|
+
"create_campaign",
|
|
770
|
+
"save_rubrics",
|
|
771
|
+
"import_leads",
|
|
772
|
+
"confirm_lead_list",
|
|
773
|
+
"update_campaign",
|
|
774
|
+
"queue_cells",
|
|
775
|
+
"start_campaign"
|
|
776
|
+
],
|
|
777
|
+
"watchRequired": false,
|
|
778
|
+
"waitFor": "sequence_settings_ready",
|
|
779
|
+
"transitions": {
|
|
780
|
+
"sequence_settings_ready": "approval-packet"
|
|
781
|
+
},
|
|
782
|
+
"interruptOnly": true
|
|
783
|
+
},
|
|
732
784
|
{
|
|
733
785
|
"id": "approval-packet",
|
|
734
786
|
"label": "Approval packet",
|
|
@@ -744,7 +796,8 @@
|
|
|
744
796
|
"lead-filter.md",
|
|
745
797
|
"message-validation.md",
|
|
746
798
|
"message-review.md",
|
|
747
|
-
"message-review-decision.md"
|
|
799
|
+
"message-review-decision.md",
|
|
800
|
+
"sequence-settings.md"
|
|
748
801
|
],
|
|
749
802
|
"optionalFiles": ["rubric.json"]
|
|
750
803
|
},
|
|
@@ -761,19 +814,16 @@
|
|
|
761
814
|
"mustRenderInlineBeforeCommitGate": true,
|
|
762
815
|
"panels": [
|
|
763
816
|
"campaign direction",
|
|
764
|
-
"lead source
|
|
765
|
-
"
|
|
766
|
-
"
|
|
767
|
-
"
|
|
768
|
-
"
|
|
769
|
-
],
|
|
770
|
-
"requiredArtifactLinks": [
|
|
771
|
-
"approval-packet.md",
|
|
772
|
-
"message-review.md",
|
|
773
|
-
"lead-review.md",
|
|
774
|
-
"brief.md"
|
|
817
|
+
"lead source",
|
|
818
|
+
"filter",
|
|
819
|
+
"sequence and settings",
|
|
820
|
+
"sample message",
|
|
821
|
+
"what approval creates"
|
|
775
822
|
],
|
|
823
|
+
"minimumVisibleDetail": "slim_final_approval_summary",
|
|
824
|
+
"requiredArtifactLinks": ["approval-packet.md"],
|
|
776
825
|
"artifactLinkTiming": "before_commit_gate_question",
|
|
826
|
+
"chatRenderRule": "Show a slim final approval packet only. Include target, lead source with one key metric, filter summary, sequence/settings summary, one fully filled sample message with no {{tokens}}, what approval creates, and safety note that nothing sends live until the review/greenlight step. Keep tokenized templates, evidence tables, rubrics, and validation details in approval-packet.md. Do not show plain filesystem paths unless links cannot be created.",
|
|
777
827
|
"userFacing": true,
|
|
778
828
|
"doNotUseWords": ["anchor", "validation anchor", "lane"]
|
|
779
829
|
},
|
|
@@ -791,7 +841,8 @@
|
|
|
791
841
|
"lead-filter.md",
|
|
792
842
|
"message-validation.md",
|
|
793
843
|
"message-review.md",
|
|
794
|
-
"message-review-decision.md"
|
|
844
|
+
"message-review-decision.md",
|
|
845
|
+
"sequence-settings.md"
|
|
795
846
|
],
|
|
796
847
|
"producesArtifacts": ["approval-packet.md"],
|
|
797
848
|
"optionalProducesArtifacts": ["customer-roleplay.md"],
|
|
@@ -865,17 +916,15 @@
|
|
|
865
916
|
"requiredInlineMarker": "Status: approval-packet",
|
|
866
917
|
"sameTurnAsCommitQuestion": true,
|
|
867
918
|
"panels": [
|
|
868
|
-
"
|
|
869
|
-
"lead
|
|
870
|
-
"
|
|
871
|
-
"
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
"approval-packet.md",
|
|
875
|
-
"message-review.md",
|
|
876
|
-
"lead-review.md",
|
|
877
|
-
"brief.md"
|
|
919
|
+
"campaign direction",
|
|
920
|
+
"lead source",
|
|
921
|
+
"filter",
|
|
922
|
+
"sequence and settings",
|
|
923
|
+
"sample message",
|
|
924
|
+
"what approval creates"
|
|
878
925
|
],
|
|
926
|
+
"requiredArtifactLinks": ["approval-packet.md"],
|
|
927
|
+
"chatRenderRule": "Same slim approval packet as approval-packet. Include one fully filled sample message without tokens. Do not repeat tokenized template or long evidence tables in chat.",
|
|
879
928
|
"artifactLinkTiming": "same_turn_before_commit_question"
|
|
880
929
|
},
|
|
881
930
|
{
|
|
@@ -59,6 +59,9 @@ lead-filter.md
|
|
|
59
59
|
message-prep.md (optional)
|
|
60
60
|
message-candidate-drafts.md (optional, generated from find-leads basis rows)
|
|
61
61
|
message-validation.md
|
|
62
|
+
message-review.md
|
|
63
|
+
message-review-decision.md
|
|
64
|
+
sequence-settings.md
|
|
62
65
|
approval-packet.md
|
|
63
66
|
commit-gate-decision.md
|
|
64
67
|
```
|
|
@@ -121,29 +121,32 @@ rerun `$sellable:create-campaign`. A normal chat question is acceptable only for
|
|
|
121
121
|
non-interactive `codex exec` smoke/rehearsal runs because structured user input
|
|
122
122
|
is unavailable by design there.
|
|
123
123
|
|
|
124
|
-
The packet should read like an AI GTM engineer
|
|
125
|
-
internal validation report.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
summary.
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
124
|
+
The packet should read like an AI GTM engineer asking for one final creation
|
|
125
|
+
decision, not an internal validation report. Chat should show a slim approval
|
|
126
|
+
surface only:
|
|
127
|
+
|
|
128
|
+
1. **campaign** — company + sender
|
|
129
|
+
2. **target** — concise ICP summary from `brief.md`
|
|
130
|
+
3. **lead source** — selected source plus one key metric from `lead-review.md`
|
|
131
|
+
(for example `17/25 sampled fits`, `520 active profiles`, or estimated usable
|
|
132
|
+
leads). Put the full evidence table in `lead-review.md`, not chat.
|
|
133
|
+
4. **filter** — one-line keep/exclude summary from `lead-filter.md`
|
|
134
|
+
5. **sequence/settings** — conservative defaults from `sequence-settings.md`:
|
|
135
|
+
recommended sequence, first review batch, paused/review-gated launch state,
|
|
136
|
+
nothing sends live until greenlight, sender/workspace checked again before
|
|
137
|
+
start
|
|
138
|
+
6. **sample message** — one fully filled sample message with no `{{tokens}}`
|
|
139
|
+
7. **what approval creates** — campaign draft + review batch preparation, not
|
|
140
|
+
live sending
|
|
141
|
+
|
|
142
|
+
Keep implementation details, tokenized templates, lead tables, rubric JSON, and
|
|
143
|
+
validation notes available in `approval-packet.md` and the supporting artifacts.
|
|
144
|
+
Do not show raw filesystem paths unless links cannot be created or the user asks.
|
|
145
|
+
Use one normal chat link: `Open artifact: approval-packet.md`.
|
|
146
|
+
|
|
147
|
+
The packet artifact must include a dedicated `## Message Review` section
|
|
148
|
+
immediately before `## Approved Message Template`. This is the customer-facing
|
|
149
|
+
messaging gate. It should not be a raw validation dump; it should answer:
|
|
147
150
|
|
|
148
151
|
- `Verdict:` strong / usable-but-could-improve / needs-revision
|
|
149
152
|
- `What works:` why the message is likely to earn replies
|
|
@@ -163,6 +166,10 @@ message from the brief. If no winner/template can be extracted, this exact-match
|
|
|
163
166
|
gate is skipped, but the packet still needs a usable approved template unless
|
|
164
167
|
the user explicitly chose AI-generated messages.
|
|
165
168
|
|
|
169
|
+
The chat render must not lead with `## Approved Message Template` or token fill
|
|
170
|
+
rules. Show one filled sample first. The artifact can contain the tokenized
|
|
171
|
+
template and fill basis.
|
|
172
|
+
|
|
166
173
|
Do NOT render the packet as a bundle of opaque validation anchors or a dump
|
|
167
174
|
of raw JSON. The user is approving a live campaign — they need to see what
|
|
168
175
|
they are approving.
|