@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.46",
3
+ "version": "0.1.48",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -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 artifacts:` line with clickable markdown links using
100
- absolute paths when the host supports them, plus the plain path for CLI users.
101
- Do this for brief approval, lead-source approval/review, message review, and the
102
- final approval packet. The links are for deeper inspection; never use them as a
103
- substitute for showing the content in chat.
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 the customer-facing brief output; `brief.md` is
38
- the canonical downstream campaign thesis input.
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 artifacts:` line with clickable markdown links
139
- using absolute paths when the host supports them, plus the plain path for CLI
140
- users. Do this for brief approval, lead-source approval/review, message review,
141
- and final approval packet. Do not use the links as a substitute for rendering
142
- the content inline; links are for deeper inspection.
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-v1.md` / `brief.md`. Do not ask the user to
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 artifacts: [brief-v1.md] and [brief.md]
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 artifacts:` links to `brief-v1.md` and `brief.md` before the
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 the user-facing brief. `brief.md` is the stable downstream
416
- input and remains the thesis source.
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 the customer-visible sections
707
- inline. Do not compress it to a short summary or artifact links only. The
708
- visible response must include `## Source Decision`, `## Evidence Snapshot`,
709
- `## Expected LinkedIn Funnel`, `## Pros`, `## Tradeoffs`, and `## Discarded
710
- Paths`. For Signals-first campaigns it must also include `## Selected Signal
711
- Posts` and `## Sample Leads`.
712
- Include `Open artifacts:` links to `lead-review.md` and `lead-sample.json`
713
- before moving to filter/message drafting or asking for any source revision.
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 artifacts:` line with links
64
- to the files behind the decision. Do not show long plain paths in normal chat;
65
- offer them only as a fallback if links cannot be created. The artifact links are
66
- a backup for inspection, not a replacement for showing the decision in chat.
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. Show the subject, tokenized template, a filled sample
70
- prospect version, good fill example, good omit example, bad fill example, why
71
- the bad fill is wrong, token notes, your take, and suggested adjustment first.
72
- The user should be able to compare "here is the template" against "here is what
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 still exists in `brief-v1.md` / `brief.md`; the chat view is the
98
- decision surface, not the full working memo. It should be skimmable in under 45
99
- seconds and include:
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-v1.md"
209
+ "artifact": "brief.md"
210
210
  },
211
211
  {
212
212
  "action": "render_brief_approval_checkpoint",
213
213
  "requiredVisibleContent": [
214
214
  "Campaign brief",
215
- "Who we are targeting",
216
- "Why they should care",
215
+ "Target",
216
+ "Core pain",
217
217
  "Offer / CTA",
218
- "Proof to use",
219
- "Lead source hypothesis",
218
+ "Proof",
219
+ "Lead plan",
220
220
  "Message angle",
221
- "Risks / assumptions",
222
- "What happens after approval",
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": "full_readable_brief_before_question",
228
- "requiredArtifactLinks": ["brief-v1.md", "brief.md"],
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
- "## Source Decision",
369
- "## Evidence Snapshot",
370
- "## Selected Signal Posts",
371
- "## Expected LinkedIn Funnel",
372
- "## Sample Leads",
373
- "## Pros",
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", "lead-sample.json"],
398
+ "requiredArtifactLinks": ["lead-review.md"],
401
399
  "artifactLinkTiming": "before_next_step_or_revision_question",
402
- "doNotCompressToSummaryOnly": true,
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
- "apply the fit filter",
410
- "clean the list down to great fits",
411
- "draft the first message we should test",
412
- "run in parallel"
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
- "suggested adjustment",
617
+ "concern",
608
618
  "question",
609
619
  "recommendation"
610
620
  ],
611
621
  "mustRenderInlineBeforeQuestion": true,
612
- "minimumVisibleMessageDetail": "tokenized_template_plus_sample_fill_only",
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
- "Suggested adjustment:",
647
+ "Concern:",
643
648
  "Question: approve-message or revise-messaging?",
644
649
  "Recommendation:"
645
650
  ],
646
- "chatRenderRule": "Show ONLY the tokenized template and one filled sample prospect version (with Token fill basis), then My take, Suggested adjustment, Question, Recommendation, and Open artifacts links. Do NOT inline Rendered examples, Good token fill, Good omit, Bad token fill, Why bad, Fallback if missing, or Token notes those live in message-review.md and message-validation.md only.",
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
- "Suggested adjustment:",
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": "approval-packet",
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 and sample",
765
- "filters and rubrics",
766
- "message review",
767
- "messages",
768
- "risks and next action"
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
- "brief",
869
- "lead sample",
870
- "lead filter",
871
- "message validation"
872
- ],
873
- "requiredArtifactLinks": [
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 explaining the campaign, not an
125
- internal validation report. Start with the practical direction in plain
126
- language: who we will contact, why this buyer should care, what lead source we
127
- will use, what the first message says, and what happens if the user approves.
128
- Keep implementation details available, but move them below the customer-facing
129
- summary.
130
-
131
- 1. **brief** `brief.md` thesis, product, ICP, offer
132
- 2. **lead sample** first 5-10 rows from `lead-sample.json` rendered as
133
- `Name / Title / Company` lines, plus the `lead-review.md` pass-rate
134
- and supplied-source framing when `lead-source-intake.json` exists:
135
- supplied people list, existing Sellable lead list, or supplied account list
136
- plus people search
137
- 3. **lead filter** — the `Decision`, `Who We'll Keep`, `Who We'll Exclude`,
138
- `Pass Rate`, and `Recommendation` blocks from `lead-filter.md`; keep
139
- rubric internals in `Implementation Details` unless the user asks to inspect
140
- the saved filter criteria
141
- 4. **message validation** — the `Selected Winner` from `message-validation.md`,
142
- rendered as it will appear in the outbound, plus the `Findings` + `Recommendation`
143
-
144
- The packet must include a dedicated `## Message Review` section immediately
145
- before `## Approved Message Template`. This is the customer-facing messaging
146
- gate. It should not be a raw validation dump; it should answer:
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.