@sellable/mcp 0.1.135 → 0.1.136
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/post-find-leads-message-scout.md +31 -1
- package/agents/registry.json +6 -8
- package/agents/source-scout-linkedin-engagement.md +6 -3
- package/agents/source-scout-prospeo-contact.md +4 -2
- package/agents/source-scout-sales-nav.md +4 -2
- package/dist/tools/campaigns.js +0 -11
- package/dist/tools/leads.d.ts +14 -0
- package/dist/tools/leads.js +160 -15
- package/dist/tools/processing.js +1 -1
- package/dist/tools/prompts.d.ts +10 -0
- package/dist/tools/prompts.js +46 -2
- package/dist/tools/sequencer.d.ts +1 -0
- package/dist/tools/sequencer.js +1 -1
- package/package.json +1 -1
- package/skills/create-campaign-v2/SKILL.md +37 -8
- package/skills/create-campaign-v2/core/flow.v2.json +147 -462
- package/skills/create-campaign-v2/references/watch-guide-narration.md +12 -10
- package/skills/find-leads/SKILL.md +5 -2
- package/skills/generate-messages/SKILL.md +25 -0
- package/skills/providers/prospeo.md +5 -4
- package/skills/providers/sales-nav.md +1 -2
- package/skills/providers/signal-discovery.md +1 -1
|
@@ -168,10 +168,7 @@
|
|
|
168
168
|
{
|
|
169
169
|
"action": "confirm_ambiguous_campaign_focus_with_structured_gate",
|
|
170
170
|
"when": "after_identity_before_founder_strategy_source_packet",
|
|
171
|
-
"allowedTools": [
|
|
172
|
-
"AskUserQuestion",
|
|
173
|
-
"request_user_input"
|
|
174
|
-
],
|
|
171
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
175
172
|
"questionType": "single-choice only; plain chat only for free-text custom detail",
|
|
176
173
|
"multiSelect": false,
|
|
177
174
|
"maxOptions": 4,
|
|
@@ -273,11 +270,7 @@
|
|
|
273
270
|
"Risks",
|
|
274
271
|
"What happens next"
|
|
275
272
|
],
|
|
276
|
-
"mustRunBefore": [
|
|
277
|
-
"optional_debug_artifact_writer",
|
|
278
|
-
"Bash",
|
|
279
|
-
"mkdir"
|
|
280
|
-
],
|
|
273
|
+
"mustRunBefore": ["optional_debug_artifact_writer", "Bash", "mkdir"],
|
|
281
274
|
"chatRenderRule": "After synthesizing the brief, render the approval-ready brief in chat before any optional local folder creation, file write, or artifact copy. Normal customer runs should not create local draft files here. The user should see useful brief content and live campaign state, not local persistence chrome. Do not ask the user to approve a hidden artifact."
|
|
282
275
|
},
|
|
283
276
|
{
|
|
@@ -308,10 +301,7 @@
|
|
|
308
301
|
"watchNarration.stage": "brief-review"
|
|
309
302
|
},
|
|
310
303
|
"briefMode": "v1 campaign brief shown to the user; not an empty placeholder",
|
|
311
|
-
"capture": [
|
|
312
|
-
"campaignId",
|
|
313
|
-
"watchUrl"
|
|
314
|
-
],
|
|
304
|
+
"capture": ["campaignId", "watchUrl"],
|
|
315
305
|
"surfaceWatchLink": true,
|
|
316
306
|
"watchLinkRule": "Show the link only after the brief is on the campaign, so the user lands on a useful brief instead of an empty campaign.",
|
|
317
307
|
"onFailure": "stop_and_surface_campaign_shell_creation_error; no no-shell mint fallback in shell-first flow",
|
|
@@ -322,9 +312,7 @@
|
|
|
322
312
|
"enrich_with_prospeo",
|
|
323
313
|
"bulk_enrich_with_prospeo"
|
|
324
314
|
],
|
|
325
|
-
"forbiddenUntilSenderAndSequenceReady": [
|
|
326
|
-
"start_campaign"
|
|
327
|
-
],
|
|
315
|
+
"forbiddenUntilSenderAndSequenceReady": ["start_campaign"],
|
|
328
316
|
"canonicalStateWrites": [
|
|
329
317
|
"campaignId",
|
|
330
318
|
"watchUrl",
|
|
@@ -336,11 +324,7 @@
|
|
|
336
324
|
{
|
|
337
325
|
"action": "surface_campaign_shell_watch_link",
|
|
338
326
|
"reference": "references/watch-link-handoff.md",
|
|
339
|
-
"requires": [
|
|
340
|
-
"campaignId",
|
|
341
|
-
"watchUrl",
|
|
342
|
-
"campaignBrief"
|
|
343
|
-
],
|
|
327
|
+
"requires": ["campaignId", "watchUrl", "campaignBrief"],
|
|
344
328
|
"requiredVisibleContent": [
|
|
345
329
|
"draft campaign shell",
|
|
346
330
|
"brief is already there",
|
|
@@ -348,11 +332,7 @@
|
|
|
348
332
|
"no leads import and nothing sends yet",
|
|
349
333
|
"Watch link:"
|
|
350
334
|
],
|
|
351
|
-
"requiresCampaignState": [
|
|
352
|
-
"campaignId",
|
|
353
|
-
"watchUrl",
|
|
354
|
-
"campaignBrief"
|
|
355
|
-
],
|
|
335
|
+
"requiresCampaignState": ["campaignId", "watchUrl", "campaignBrief"],
|
|
356
336
|
"watchUrlSource": "create_campaign.watchUrl",
|
|
357
337
|
"requiredWatchUrlShape": "direct /campaign-builder/{campaignId}?mode={claude|codex} watch URL with token auto-login and workspace routing",
|
|
358
338
|
"codexBrowserHandoff": {
|
|
@@ -395,23 +375,14 @@
|
|
|
395
375
|
"bulk_enrich_with_prospeo"
|
|
396
376
|
],
|
|
397
377
|
"watchRequired": false,
|
|
398
|
-
"waitFor": [
|
|
399
|
-
"brief_ready",
|
|
400
|
-
"campaign_shell_created",
|
|
401
|
-
"confirm_with_user"
|
|
402
|
-
],
|
|
378
|
+
"waitFor": ["brief_ready", "campaign_shell_created", "confirm_with_user"],
|
|
403
379
|
"transitions": {
|
|
404
380
|
"brief_ready": "brief-review",
|
|
405
381
|
"confirm_with_user": "brief-review",
|
|
406
382
|
"campaign_shell_created": "brief-review"
|
|
407
383
|
},
|
|
408
|
-
"optionalProducesArtifacts": [
|
|
409
|
-
|
|
410
|
-
],
|
|
411
|
-
"debugProducesArtifacts": [
|
|
412
|
-
"brief.md",
|
|
413
|
-
"campaign-shell.json"
|
|
414
|
-
]
|
|
384
|
+
"optionalProducesArtifacts": ["lead-source-intake.json"],
|
|
385
|
+
"debugProducesArtifacts": ["brief.md", "campaign-shell.json"]
|
|
415
386
|
},
|
|
416
387
|
{
|
|
417
388
|
"id": "brief-review",
|
|
@@ -440,9 +411,7 @@
|
|
|
440
411
|
],
|
|
441
412
|
"minimumVisibleBriefDetail": "full_readable_brief_before_question",
|
|
442
413
|
"forbiddenSubstituteApprovalSurface": "Do not replace the visible brief with a summary like `the brief is visible there`; the user must see the actual campaign brief content in chat before the approval question.",
|
|
443
|
-
"requiredCampaignLinks": [
|
|
444
|
-
"watchUrl"
|
|
445
|
-
],
|
|
414
|
+
"requiredCampaignLinks": ["watchUrl"],
|
|
446
415
|
"campaignLinkTiming": "before_approval_question",
|
|
447
416
|
"questionToolGate": "Do not call AskUserQuestion or request_user_input for brief approval until the immediately preceding customer-visible chat text includes `Watch link:` with the create_campaign.watchUrl for this campaign shell.",
|
|
448
417
|
"missingWatchLinkRecovery": "If the brief approval question would appear before the watch link, stop and send the rendered brief checkpoint plus `Watch link: {watchUrl}` first; then ask the approve/revise question.",
|
|
@@ -463,19 +432,14 @@
|
|
|
463
432
|
"mustNotCallQuestionToolUntil": "The watch link has already been shown in normal chat text after create_campaign returned watchUrl.",
|
|
464
433
|
"autoContinueWhen": {
|
|
465
434
|
"artifactStatus": "confirmed",
|
|
466
|
-
"confidenceIn": [
|
|
467
|
-
"high",
|
|
468
|
-
"medium"
|
|
469
|
-
],
|
|
435
|
+
"confidenceIn": ["high", "medium"],
|
|
470
436
|
"noOpenStrategicTradeoff": true,
|
|
471
437
|
"noMissingRequiredInputs": true
|
|
472
438
|
}
|
|
473
439
|
},
|
|
474
440
|
{
|
|
475
441
|
"action": "optional_debug_artifact_sync",
|
|
476
|
-
"artifacts": [
|
|
477
|
-
"brief.md"
|
|
478
|
-
],
|
|
442
|
+
"artifacts": ["brief.md"],
|
|
479
443
|
"debugOrUatOnly": true,
|
|
480
444
|
"requiredBeforeTransition": false,
|
|
481
445
|
"reconcileRule": "If debug/UAT artifacts are enabled, verify the sidecar persisted the same brief shown in chat. Normal customer Find Leads work reads CampaignOffer.campaignBrief, not brief.md.",
|
|
@@ -484,10 +448,7 @@
|
|
|
484
448
|
{
|
|
485
449
|
"action": "sync_approved_brief_to_campaign_shell",
|
|
486
450
|
"tool": "update_campaign",
|
|
487
|
-
"requires": [
|
|
488
|
-
"campaignId",
|
|
489
|
-
"campaignBrief"
|
|
490
|
-
],
|
|
451
|
+
"requires": ["campaignId", "campaignBrief"],
|
|
491
452
|
"when": "after_user_brief_confirmed_or_auto_continue",
|
|
492
453
|
"fields": [
|
|
493
454
|
"campaignBrief",
|
|
@@ -496,10 +457,7 @@
|
|
|
496
457
|
],
|
|
497
458
|
"fallback": "If campaignId is missing from CampaignOffer state, stop; shell-first flow requires an existing campaign before sourcing leads.",
|
|
498
459
|
"readsCampaignStateFirst": true,
|
|
499
|
-
"debugArtifacts": [
|
|
500
|
-
"campaign-shell.json",
|
|
501
|
-
"brief.md"
|
|
502
|
-
]
|
|
460
|
+
"debugArtifacts": ["campaign-shell.json", "brief.md"]
|
|
503
461
|
}
|
|
504
462
|
],
|
|
505
463
|
"requiredArtifacts": [],
|
|
@@ -521,22 +479,14 @@
|
|
|
521
479
|
"bulk_enrich_with_prospeo"
|
|
522
480
|
],
|
|
523
481
|
"watchRequired": false,
|
|
524
|
-
"waitFor": [
|
|
525
|
-
"user_brief_confirmed",
|
|
526
|
-
"revise_brief",
|
|
527
|
-
"auto_continue"
|
|
528
|
-
],
|
|
482
|
+
"waitFor": ["user_brief_confirmed", "revise_brief", "auto_continue"],
|
|
529
483
|
"transitions": {
|
|
530
484
|
"user_brief_confirmed": "find-leads",
|
|
531
485
|
"revise_brief": "brief-interview",
|
|
532
486
|
"auto_continue": "find-leads"
|
|
533
487
|
},
|
|
534
488
|
"interruptOnly": true,
|
|
535
|
-
"requiredCampaignState": [
|
|
536
|
-
"campaignId",
|
|
537
|
-
"campaignBrief",
|
|
538
|
-
"currentStep"
|
|
539
|
-
]
|
|
489
|
+
"requiredCampaignState": ["campaignId", "campaignBrief", "currentStep"]
|
|
540
490
|
},
|
|
541
491
|
{
|
|
542
492
|
"id": "find-leads",
|
|
@@ -582,11 +532,7 @@
|
|
|
582
532
|
{
|
|
583
533
|
"action": "advance_watch_to_source_selection",
|
|
584
534
|
"tool": "update_campaign",
|
|
585
|
-
"requiredFields": [
|
|
586
|
-
"campaignId",
|
|
587
|
-
"currentStep",
|
|
588
|
-
"watchNarration"
|
|
589
|
-
],
|
|
535
|
+
"requiredFields": ["campaignId", "currentStep", "watchNarration"],
|
|
590
536
|
"requiredValues": {
|
|
591
537
|
"currentStep": "pick-provider",
|
|
592
538
|
"watchNarration.stage": "find-leads"
|
|
@@ -600,11 +546,7 @@
|
|
|
600
546
|
{
|
|
601
547
|
"action": "advance_watch_to_initial_source_lane",
|
|
602
548
|
"tool": "update_campaign",
|
|
603
|
-
"requiredFields": [
|
|
604
|
-
"campaignId",
|
|
605
|
-
"currentStep",
|
|
606
|
-
"watchNarration"
|
|
607
|
-
],
|
|
549
|
+
"requiredFields": ["campaignId", "currentStep", "watchNarration"],
|
|
608
550
|
"currentStepByPrimaryLane": {
|
|
609
551
|
"signals": "signal-discovery",
|
|
610
552
|
"salesNav": "sales-nav",
|
|
@@ -619,10 +561,7 @@
|
|
|
619
561
|
},
|
|
620
562
|
{
|
|
621
563
|
"action": "run_first_campaign_attached_source_search",
|
|
622
|
-
"requiredFields": [
|
|
623
|
-
"campaignOfferId",
|
|
624
|
-
"currentStep"
|
|
625
|
-
],
|
|
564
|
+
"requiredFields": ["campaignOfferId", "currentStep"],
|
|
626
565
|
"before": "evaluating_source_viability_gate",
|
|
627
566
|
"rule": "The parent thread must run the campaign-attached provider prompt + provider search for the current visible lane with campaignOfferId and currentStep (signal-discovery, sales-nav, prospeo, or the user-directed lane) so the campaign UI creates the corresponding live search/tab. Do not wait on background scouts before the user sees the active lane. Run only enough evidence to pass/fail this lane, then either recommend it or update the visible lane before trying the next fallback."
|
|
628
567
|
},
|
|
@@ -668,10 +607,7 @@
|
|
|
668
607
|
},
|
|
669
608
|
{
|
|
670
609
|
"action": "optional_debug_artifacts",
|
|
671
|
-
"artifacts": [
|
|
672
|
-
"lead-review.md",
|
|
673
|
-
"lead-sample.json"
|
|
674
|
-
],
|
|
610
|
+
"artifacts": ["lead-review.md", "lead-sample.json"],
|
|
675
611
|
"debugOrUatOnly": true,
|
|
676
612
|
"shouldNotRunInNormalCustomerPath": true,
|
|
677
613
|
"chatRenderRule": "Do not create or surface local lead-review artifacts in normal customer runs. The main thread renders the source decision in chat and persists provider/source state to the campaign."
|
|
@@ -708,19 +644,13 @@
|
|
|
708
644
|
"bulk_enrich_with_prospeo"
|
|
709
645
|
],
|
|
710
646
|
"watchRequired": false,
|
|
711
|
-
"waitFor": [
|
|
712
|
-
"lead_review_ready",
|
|
713
|
-
"revise_brief",
|
|
714
|
-
"confirm_with_user"
|
|
715
|
-
],
|
|
647
|
+
"waitFor": ["lead_review_ready", "revise_brief", "confirm_with_user"],
|
|
716
648
|
"transitions": {
|
|
717
649
|
"lead_review_ready": "lead-review",
|
|
718
650
|
"revise_brief": "brief-interview",
|
|
719
651
|
"confirm_with_user": "lead-review"
|
|
720
652
|
},
|
|
721
|
-
"optionalRequiredArtifacts": [
|
|
722
|
-
"lead-source-intake.json"
|
|
723
|
-
],
|
|
653
|
+
"optionalRequiredArtifacts": ["lead-source-intake.json"],
|
|
724
654
|
"toolRules": {
|
|
725
655
|
"suppliedLinkedinProfiles": "Preview only before the bounded import step. campaignOfferId may attach the preview/list choice to campaign state, but do not import into the campaign table until auto-execute-leads confirms the source list.",
|
|
726
656
|
"suppliedDomains": "May confirm load_csv_domains to produce a domainFilterId. Campaign-associated Prospeo preview searches must use campaignOfferId so the user can watch source state in the campaign, but no import/enrichment happens until rubrics and message set are ready.",
|
|
@@ -743,15 +673,8 @@
|
|
|
743
673
|
"selected source state"
|
|
744
674
|
]
|
|
745
675
|
},
|
|
746
|
-
"requiredCampaignState": [
|
|
747
|
-
|
|
748
|
-
"campaignBrief",
|
|
749
|
-
"currentStep"
|
|
750
|
-
],
|
|
751
|
-
"debugProducesArtifacts": [
|
|
752
|
-
"lead-review.md",
|
|
753
|
-
"lead-sample.json"
|
|
754
|
-
]
|
|
676
|
+
"requiredCampaignState": ["campaignId", "campaignBrief", "currentStep"],
|
|
677
|
+
"debugProducesArtifacts": ["lead-review.md", "lead-sample.json"]
|
|
755
678
|
},
|
|
756
679
|
{
|
|
757
680
|
"id": "lead-review",
|
|
@@ -846,9 +769,7 @@
|
|
|
846
769
|
"use or discard decision"
|
|
847
770
|
],
|
|
848
771
|
"forbidPercentOnlyFitRates": true,
|
|
849
|
-
"requiredArtifactLinks": [
|
|
850
|
-
"lead-review.md"
|
|
851
|
-
],
|
|
772
|
+
"requiredArtifactLinks": ["lead-review.md"],
|
|
852
773
|
"artifactLinkTiming": "before_next_step_or_revision_question",
|
|
853
774
|
"doNotCompressToSummaryOnly": false,
|
|
854
775
|
"doNotRenderArtifactLinksOnly": true,
|
|
@@ -878,10 +799,7 @@
|
|
|
878
799
|
"approvalMathRule": "Immediately above the approval question, render the compact Math block: given this many eligible relevant posts, this many reachable engagers, this sampled ICP fit as n/N plus percentage/range, this many good-fit prospects per 100 engagers, this many required engagers to scrape, this average reachable engagers per post, this expected good-fit prospects per post after cleanup, this source target good-fit lead count defaulting to 300, and this many posts needed, we expect this usable lead range from the selected posts; also state that approval only imports a 15-row campaign review batch first after the source list is materialized. If the user wants more volume, name the Sales Nav or Prospeo alternative, its preview/sample math, any Sales Nav loosening used to avoid an over-tight pool, and the colder/weaker-context tradeoff. Do not ask the approval question until this math is visible.",
|
|
879
800
|
"autoContinueWhen": {
|
|
880
801
|
"status": "confirmed",
|
|
881
|
-
"confidenceIn": [
|
|
882
|
-
"high",
|
|
883
|
-
"medium"
|
|
884
|
-
],
|
|
802
|
+
"confidenceIn": ["high", "medium"],
|
|
885
803
|
"projectedGoodFitsAtLeast": 150,
|
|
886
804
|
"samplePassRateAtLeast": 0.7,
|
|
887
805
|
"noProviderMismatch": true,
|
|
@@ -891,28 +809,21 @@
|
|
|
891
809
|
{
|
|
892
810
|
"action": "sync_selected_source_to_campaign_shell",
|
|
893
811
|
"tool": "update_campaign",
|
|
894
|
-
"requires": [
|
|
895
|
-
"campaignId",
|
|
896
|
-
"lead-review.md"
|
|
897
|
-
],
|
|
812
|
+
"requires": ["campaignId", "lead-review.md"],
|
|
898
813
|
"when": "after_source_confirmed_or_auto_continue",
|
|
899
814
|
"fields": [
|
|
900
815
|
"leadSourceType",
|
|
901
816
|
"leadSourceProvider",
|
|
902
817
|
"providerSearchAssociation",
|
|
903
|
-
"
|
|
904
|
-
"watchNarration: find-leads source recommendation ready, or review-batch import starting when source approval already happened",
|
|
818
|
+
"watchNarration only when paired to an already-visible source recommendation; do not create a separate source-approved navigation beat before import",
|
|
905
819
|
"selectedLeadListId as source list id only for existing-list or supplied-list preview"
|
|
906
820
|
],
|
|
907
|
-
"sourceApprovalWatchRule": "Immediately after the user approves a source,
|
|
821
|
+
"sourceApprovalWatchRule": "Immediately after the user approves a source, persist the approved source as the active provider on the CampaignOffer without a separate source-approved currentStep fix. If the recommendation already switched the watched source lane before approval, leave it there; the next visible navigation after approval is owned by import_leads after it has a leadListId/jobId. Apply the same rule for signal-discovery, sales-nav, and prospeo approvals.",
|
|
908
822
|
"fallback": "Stop if campaignId is missing; the source must be attached to the existing CampaignOffer before import.",
|
|
909
823
|
"readsCampaignStateFirst": true
|
|
910
824
|
}
|
|
911
825
|
],
|
|
912
|
-
"requiredArtifacts": [
|
|
913
|
-
"lead-review.md",
|
|
914
|
-
"lead-sample.json"
|
|
915
|
-
],
|
|
826
|
+
"requiredArtifacts": ["lead-review.md", "lead-sample.json"],
|
|
916
827
|
"producesArtifacts": [],
|
|
917
828
|
"allowedTools": [
|
|
918
829
|
"AskUserQuestion",
|
|
@@ -985,16 +896,14 @@
|
|
|
985
896
|
},
|
|
986
897
|
{
|
|
987
898
|
"action": "watch_mode_orient",
|
|
988
|
-
"watchNarrationRule": "Before import_leads starts,
|
|
899
|
+
"watchNarrationRule": "Before import_leads starts, keep the guide aligned with the already-approved source without creating a separate source-approved step fix. Persist the approved source provider if needed, but do not set currentStep to `confirm-lead-list` before import_leads returns a leadListId/jobId; import_leads owns that move after the provider import API call so the import page has progress state when it appears. Use import progress copy only once the owning tool has a table/job to show; include a no-launch safety note."
|
|
989
900
|
},
|
|
990
901
|
{
|
|
991
902
|
"tool": "import_leads",
|
|
992
903
|
"currentStepTiming": "Omit currentStep or pass `confirm-lead-list`; either way the tool must start the provider import API first, then update CampaignOffer.selectedLeadListId/currentStep after it has a leadListId/jobId. Never navigate the watched UI to confirm-lead-list with no import job/table to show.",
|
|
904
|
+
"watchNarrationAfterJob": "When import_leads moves currentStep to confirm-lead-list, it must also persist current-tense source import copy such as `Scraping source leads from posts` or `Importing source leads`. Do not leave stale source-approval narration like `Review the source in Codex` while the import progress page is visible.",
|
|
993
905
|
"sameTurnPreflight": "Immediately before import_leads, call get_provider_prompt({ provider, campaignOfferId }) in the same resumed turn, even if source discovery loaded the provider prompt earlier.",
|
|
994
|
-
"requiredFields": [
|
|
995
|
-
"campaignOfferId",
|
|
996
|
-
"targetLeadCount"
|
|
997
|
-
],
|
|
906
|
+
"requiredFields": ["campaignOfferId", "targetLeadCount"],
|
|
998
907
|
"targetLeadCountFromConfig": "sourceTargetGoodFitLeadCount (default 300) for provider source-list materialization, not import.importLimit",
|
|
999
908
|
"signalDiscoveryRequiredFields": [
|
|
1000
909
|
"targetEngagerCount from approved source math",
|
|
@@ -1018,10 +927,7 @@
|
|
|
1018
927
|
},
|
|
1019
928
|
{
|
|
1020
929
|
"tool": "wait_for_lead_list_ready",
|
|
1021
|
-
"sourceBranches": [
|
|
1022
|
-
"normal-discovery",
|
|
1023
|
-
"supplied-domains"
|
|
1024
|
-
],
|
|
930
|
+
"sourceBranches": ["normal-discovery", "supplied-domains"],
|
|
1025
931
|
"skipWhen": "resolved source branch is supplied-linkedin-profiles or existing-lead-list; direct lead-list branches have no provider import job to wait on and this probe can poison the campaign import status"
|
|
1026
932
|
},
|
|
1027
933
|
{
|
|
@@ -1033,13 +939,9 @@
|
|
|
1033
939
|
"supplied-linkedin-profiles",
|
|
1034
940
|
"existing-lead-list"
|
|
1035
941
|
],
|
|
1036
|
-
"requiredBeforeCall": [
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
"persists": [
|
|
1040
|
-
"selectedLeadListId",
|
|
1041
|
-
"workflowTableId"
|
|
1042
|
-
],
|
|
942
|
+
"requiredBeforeCall": ["campaign_attached_source_state"],
|
|
943
|
+
"persists": ["selectedLeadListId", "workflowTableId"],
|
|
944
|
+
"watchNarrationAfterImport": "When confirm_lead_list imports a non-empty review batch and moves currentStep to filter-choice, it must persist fit-message watch copy in the same beat: `I recommend adding filters`, explain that the visible 15-row sample is ready, and ask the user to choose filters or skip. Do not leave stale source-review narration while the filter-choice screen is visible.",
|
|
1043
945
|
"identityBoundary": "selectedLeadListId remains the source list; workflowTableId is the campaign table returned by confirm/import."
|
|
1044
946
|
},
|
|
1045
947
|
{
|
|
@@ -1099,23 +1001,36 @@
|
|
|
1099
1001
|
"ownership": "proof inventory, token strategy, angle drafting, skeptical-prospect review, and selected winner only"
|
|
1100
1002
|
},
|
|
1101
1003
|
"requiredBeforeFilterChoiceWatchCopy": true,
|
|
1102
|
-
"
|
|
1103
|
-
"
|
|
1004
|
+
"runtimeProofTransport": "watchNarration.workerDetails.messageDraftBuilder",
|
|
1005
|
+
"runtimeProofRequiredBeforeRunning": [
|
|
1006
|
+
"runId or fallbackId",
|
|
1007
|
+
"statusSource",
|
|
1008
|
+
"status",
|
|
1009
|
+
"startedAt",
|
|
1010
|
+
"updatedAt",
|
|
1011
|
+
"basisToken",
|
|
1012
|
+
"basis.selectedLeadListId",
|
|
1013
|
+
"basis.workflowTableId",
|
|
1014
|
+
"basis.reviewBatchRowHash or basis.reviewBatchRowIds"
|
|
1015
|
+
],
|
|
1016
|
+
"basisFields": [
|
|
1017
|
+
"campaign revision or updatedAt",
|
|
1018
|
+
"brief hash",
|
|
1019
|
+
"selectedLeadListId",
|
|
1020
|
+
"workflowTableId",
|
|
1021
|
+
"bounded review-batch row ids/hash",
|
|
1022
|
+
"filter choice at branch start",
|
|
1023
|
+
"filter/rubric basis when present"
|
|
1024
|
+
],
|
|
1025
|
+
"chatAnnouncementRule": "After a live branch or explicit parent-thread fallback starts, tell the user the background Message Draft Builder is running from the full generate-messages prompt and the real review-batch contacts while they decide filters. Do not say it is running before runtime proof exists.",
|
|
1026
|
+
"racePrecedence": "ready output from the current basis wins; branch-superseded and fallback-superseded are ignored for display; spawn-failed, blocked, retry-needed, or stale show blocked/retry copy; fallback-active shows running only until a current branch-ready output supersedes it.",
|
|
1027
|
+
"rule": "Immediately after get_rows_minimal proves the bounded review batch is non-empty, start the Message Draft Builder from the live campaign brief, approved source, selectedLeadListId, and imported workflowTableId rows. Do this after confirm_lead_list succeeds and before any guide copy saying Message Draft Builder is In Progress. confirm_lead_list remains the first allowed start point; do not start from source recommendation, provider import job alone, or a zero-row review batch.",
|
|
1028
|
+
"fallback": "If the host cannot launch the post-find-leads-message-scout in the background, load the full generate-messages prompt in the parent thread and start the message-generation work with a fallbackId before reporting Message Draft Builder as In Progress. If message work cannot start, do not show running copy; surface pending/blocked template-start copy instead."
|
|
1104
1029
|
},
|
|
1105
1030
|
{
|
|
1106
|
-
"
|
|
1107
|
-
"
|
|
1108
|
-
|
|
1109
|
-
"currentStep",
|
|
1110
|
-
"watchNarration"
|
|
1111
|
-
],
|
|
1112
|
-
"requiredValues": {
|
|
1113
|
-
"currentStep": "filter-choice",
|
|
1114
|
-
"watchNarration.stage": "fit-message",
|
|
1115
|
-
"watchNarration.headline": "Added to Campaign",
|
|
1116
|
-
"watchNarration.workerStatuses.messageDraftBuilder": "running_after_launch_message_draft_builder_after_review_batch_import_only"
|
|
1117
|
-
},
|
|
1118
|
-
"watchNarrationRule": "After the bounded review batch is present and non-empty, and after launch_message_draft_builder_after_review_batch_import has actually started or resumed message-generation, update the watched guide to `Added to Campaign` and ask the user to Choose filters or skip. This is filter intent only: do not say filtering the batch before rubrics and message approval are saved. The Message Draft Builder should be reported as In Progress only if the worker or parent-thread fallback has actually started. No enrichment, filtering, Generate Message cells, sequence, or sending starts until the message template is approved and saved to the campaign brief. Do not set enableICPFilters=true until save_rubrics succeeds with active criteria."
|
|
1031
|
+
"action": "confirm_tool_owned_filter_choice_beat",
|
|
1032
|
+
"requiredAfter": ["confirm_lead_list", "non_empty_review_batch"],
|
|
1033
|
+
"rule": "confirm_lead_list owns the move to filter-choice after the bounded review batch is present and non-empty. Its watch copy must say `I recommend adding filters`, include sample assessment, ask the user to Choose filters or skip, and avoid claiming enrichment, filtering, Generate Message cells, sequence, or sending has started. Do not call update_campaign as a post-confirm step fix."
|
|
1119
1034
|
}
|
|
1120
1035
|
],
|
|
1121
1036
|
"allowedTools": [
|
|
@@ -1210,11 +1125,7 @@
|
|
|
1210
1125
|
"bulk_enrich_with_prospeo"
|
|
1211
1126
|
],
|
|
1212
1127
|
"watchRequired": true,
|
|
1213
|
-
"waitFor": [
|
|
1214
|
-
"filters_enabled",
|
|
1215
|
-
"filters_skipped",
|
|
1216
|
-
"revise_leads"
|
|
1217
|
-
],
|
|
1128
|
+
"waitFor": ["filters_enabled", "filters_skipped", "revise_leads"],
|
|
1218
1129
|
"transitions": {
|
|
1219
1130
|
"filters_enabled": "post-lead-workstreams",
|
|
1220
1131
|
"filters_skipped": "message-generation",
|
|
@@ -1252,12 +1163,8 @@
|
|
|
1252
1163
|
"selectedLeadListId",
|
|
1253
1164
|
"workflowTableId review-batch rows"
|
|
1254
1165
|
],
|
|
1255
|
-
"producesArtifacts": [
|
|
1256
|
-
|
|
1257
|
-
],
|
|
1258
|
-
"optionalProducesArtifacts": [
|
|
1259
|
-
"rubric.json"
|
|
1260
|
-
],
|
|
1166
|
+
"producesArtifacts": ["lead-filter.md"],
|
|
1167
|
+
"optionalProducesArtifacts": ["rubric.json"],
|
|
1261
1168
|
"ownership": "lead quality, false-positive patterns, keep/exclude rules, and production rubric translation only"
|
|
1262
1169
|
},
|
|
1263
1170
|
{
|
|
@@ -1285,7 +1192,7 @@
|
|
|
1285
1192
|
}
|
|
1286
1193
|
],
|
|
1287
1194
|
"earlyMessageStartRule": "After auto-execute-leads confirms the 15-row review batch, workflowTableId is ready, and get_rows_minimal proves rows exist, the Message Draft Builder must start immediately from campaignBrief, selected source state, selectedLeadListId, and imported campaign table rows. post-lead-workstreams must reuse that in-flight message branch; if it is missing, launch it before saving rubrics or claiming message progress. This background template draft is provisional speed work only. The message worker must load the full generate-messages prompt; parent-thread fallback loads the same prompt and may use references/message-review-safety-gate.md only as a supplemental approval checklist. It may run beside filter-leads, but no enrichment, ICP scoring, filtering, or product Generate Message cells can queue until save_rubrics and update_campaign_brief both succeed.",
|
|
1288
|
-
"workerStatusContract": "Only show Lead Fit Builder or Message Draft Builder as In Progress when a Task/spawn_agent branch actually started and returned a live branch id, or when the parent-thread fallback is actively doing that branch before the next user-visible step. If a branch is completed in the parent thread, show it as Ready. After update_campaign_brief saves the approved template, Message Draft Builder is Ready even if row-level Generate Message cells have not completed.",
|
|
1195
|
+
"workerStatusContract": "Only show Lead Fit Builder or Message Draft Builder as In Progress when a Task/spawn_agent branch actually started and returned a live branch id, or when the parent-thread fallback is actively doing that branch with fallbackId before the next user-visible step. Message Draft Builder runtime proof must be stored under watchNarration.workerDetails.messageDraftBuilder with statusSource, status, startedAt, updatedAt, basisToken, and current selectedLeadListId/workflowTableId/review-batch basis. If a branch is completed in the parent thread, show it as Ready. After update_campaign_brief saves the approved template, Message Draft Builder is Ready even if row-level Generate Message cells have not completed.",
|
|
1289
1196
|
"finalMessageReconcileRule": "The message recommendation may start before lead-filter.md exists, but before message-review it must cite only imported review-batch rows that still pass the saved rubric/filter results. If the selected winner depends on a row later excluded by saved filters, revise message-generation before message review.",
|
|
1290
1197
|
"finalTemplateReviewLockRule": "template review does not require a Use Template vs AI Generated mode choice. After filters are enabled, lock template review until saved rubrics exist and the draft reconciles to the approved brief, selected source, and imported review batch. Keep the watched browser on Filter Leads while approval is pending. After approval writes the Approved Message Template into campaignBrief, queue enrichment/ICP scoring for the bounded review batch; prefer at least 2 usable passing/probably passing rows before moving the watched browser to Messages, with weak-sample escalation if only 1 passes.",
|
|
1291
1198
|
"claudeRule": "In Claude Code, launch the returned message-generation scout immediately after post-import rows exist, then launch/reuse the filter-leads scout when the user chooses filters. When both named agents are available and both branches are ready in the same assistant message, use Task/Agent subagents in parallel; otherwise never claim background message progress until message-generation actually started.",
|
|
@@ -1294,9 +1201,7 @@
|
|
|
1294
1201
|
},
|
|
1295
1202
|
{
|
|
1296
1203
|
"action": "wait_for_lead_filter_rules",
|
|
1297
|
-
"requiredArtifacts": [
|
|
1298
|
-
"lead-filter.md"
|
|
1299
|
-
],
|
|
1204
|
+
"requiredArtifacts": ["lead-filter.md"],
|
|
1300
1205
|
"optionalArtifacts": [
|
|
1301
1206
|
"rubric.json",
|
|
1302
1207
|
"message-validation.md",
|
|
@@ -1308,30 +1213,19 @@
|
|
|
1308
1213
|
{
|
|
1309
1214
|
"action": "save_filter_rubrics_to_campaign",
|
|
1310
1215
|
"tool": "save_rubrics",
|
|
1311
|
-
"requires": [
|
|
1312
|
-
"campaignId",
|
|
1313
|
-
"workflowTableId",
|
|
1314
|
-
"lead-filter.md"
|
|
1315
|
-
],
|
|
1216
|
+
"requires": ["campaignId", "workflowTableId", "lead-filter.md"],
|
|
1316
1217
|
"optionalInput": "rubric.json",
|
|
1317
1218
|
"when": "after_imported_campaign_table_sample_and_lead_filter_ready_before_message_review",
|
|
1318
1219
|
"fallback": "Stop if campaignId/workflowTableId is missing or save_rubrics fails; do not queue the review-batch cascade without saved rubrics.",
|
|
1319
1220
|
"requiredBeforeImport": false,
|
|
1320
|
-
"requiredFields": [
|
|
1321
|
-
"campaignOfferId",
|
|
1322
|
-
"leadScoringRubrics"
|
|
1323
|
-
],
|
|
1221
|
+
"requiredFields": ["campaignOfferId", "leadScoringRubrics"],
|
|
1324
1222
|
"writesCampaignState": "leadScoringRubrics",
|
|
1325
1223
|
"requiredBeforeCascade": true
|
|
1326
1224
|
},
|
|
1327
1225
|
{
|
|
1328
1226
|
"action": "advance_watch_to_filter_leads_after_rubrics_saved",
|
|
1329
1227
|
"tool": "update_campaign",
|
|
1330
|
-
"requires": [
|
|
1331
|
-
"campaignId",
|
|
1332
|
-
"workflowTableId",
|
|
1333
|
-
"leadScoringRubrics"
|
|
1334
|
-
],
|
|
1228
|
+
"requires": ["campaignId", "workflowTableId", "leadScoringRubrics"],
|
|
1335
1229
|
"requiredValues": {
|
|
1336
1230
|
"currentStep": "apply-icp-rubric",
|
|
1337
1231
|
"enableICPFilters": true,
|
|
@@ -1362,10 +1256,7 @@
|
|
|
1362
1256
|
}
|
|
1363
1257
|
],
|
|
1364
1258
|
"requiredArtifacts": [],
|
|
1365
|
-
"producesArtifacts": [
|
|
1366
|
-
"lead-filter.md",
|
|
1367
|
-
"message-validation.md"
|
|
1368
|
-
],
|
|
1259
|
+
"producesArtifacts": ["lead-filter.md", "message-validation.md"],
|
|
1369
1260
|
"optionalProducesArtifacts": [
|
|
1370
1261
|
"rubric.json",
|
|
1371
1262
|
"message-prep.md",
|
|
@@ -1458,9 +1349,7 @@
|
|
|
1458
1349
|
"bulk_enrich_with_prospeo"
|
|
1459
1350
|
],
|
|
1460
1351
|
"watchRequired": true,
|
|
1461
|
-
"waitFor": [
|
|
1462
|
-
"legacy_resume_only"
|
|
1463
|
-
],
|
|
1352
|
+
"waitFor": ["legacy_resume_only"],
|
|
1464
1353
|
"transitions": {
|
|
1465
1354
|
"legacy_resume_only": "message-generation"
|
|
1466
1355
|
},
|
|
@@ -1482,20 +1371,12 @@
|
|
|
1482
1371
|
{
|
|
1483
1372
|
"action": "run_stage",
|
|
1484
1373
|
"target": "filter-leads",
|
|
1485
|
-
"inputs": [
|
|
1486
|
-
"brief.md",
|
|
1487
|
-
"lead-review.md",
|
|
1488
|
-
"lead-sample.json"
|
|
1489
|
-
]
|
|
1374
|
+
"inputs": ["brief.md", "lead-review.md", "lead-sample.json"]
|
|
1490
1375
|
},
|
|
1491
1376
|
{
|
|
1492
1377
|
"action": "write_artifacts",
|
|
1493
|
-
"artifacts": [
|
|
1494
|
-
|
|
1495
|
-
],
|
|
1496
|
-
"optionalArtifacts": [
|
|
1497
|
-
"rubric.json"
|
|
1498
|
-
]
|
|
1378
|
+
"artifacts": ["lead-filter.md"],
|
|
1379
|
+
"optionalArtifacts": ["rubric.json"]
|
|
1499
1380
|
},
|
|
1500
1381
|
{
|
|
1501
1382
|
"action": "show_lead_filter_summary",
|
|
@@ -1507,27 +1388,18 @@
|
|
|
1507
1388
|
"Why",
|
|
1508
1389
|
"Expected impact"
|
|
1509
1390
|
],
|
|
1510
|
-
"requiredArtifactLinks": [
|
|
1511
|
-
"lead-filter.md"
|
|
1512
|
-
],
|
|
1391
|
+
"requiredArtifactLinks": ["lead-filter.md"],
|
|
1513
1392
|
"chatRenderRule": "Show a slim rendered-Markdown filter summary before message review, never a fenced code block. Use ## Lead filter plus indexed sections and short bullets for 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."
|
|
1514
1393
|
},
|
|
1515
1394
|
{
|
|
1516
1395
|
"action": "save_filter_rubrics_to_campaign",
|
|
1517
1396
|
"tool": "save_rubrics",
|
|
1518
|
-
"requires": [
|
|
1519
|
-
"campaignId",
|
|
1520
|
-
"workflowTableId",
|
|
1521
|
-
"lead-filter.md"
|
|
1522
|
-
],
|
|
1397
|
+
"requires": ["campaignId", "workflowTableId", "lead-filter.md"],
|
|
1523
1398
|
"optionalInput": "rubric.json",
|
|
1524
1399
|
"when": "after_filter_confirmed_or_auto_continue",
|
|
1525
1400
|
"fallback": "Stop if campaignId/workflowTableId is missing or save_rubrics fails; do not queue the review-batch cascade without saved rubrics.",
|
|
1526
1401
|
"requiredBeforeImport": false,
|
|
1527
|
-
"requiredFields": [
|
|
1528
|
-
"campaignOfferId",
|
|
1529
|
-
"leadScoringRubrics"
|
|
1530
|
-
],
|
|
1402
|
+
"requiredFields": ["campaignOfferId", "leadScoringRubrics"],
|
|
1531
1403
|
"writesCampaignState": "leadScoringRubrics",
|
|
1532
1404
|
"requiredBeforeCascade": true
|
|
1533
1405
|
},
|
|
@@ -1535,27 +1407,16 @@
|
|
|
1535
1407
|
"action": "ask_revise_only_if_filter_is_not_confirmed",
|
|
1536
1408
|
"autoContinueWhen": {
|
|
1537
1409
|
"status": "confirmed",
|
|
1538
|
-
"decisionIn": [
|
|
1539
|
-
"continue",
|
|
1540
|
-
"confirmed"
|
|
1541
|
-
],
|
|
1410
|
+
"decisionIn": ["continue", "confirmed"],
|
|
1542
1411
|
"expectedUsableLeadsAtLeast": 150,
|
|
1543
1412
|
"noHeavyFilteringWarning": true,
|
|
1544
1413
|
"noCampaignMissRisk": true
|
|
1545
1414
|
}
|
|
1546
1415
|
}
|
|
1547
1416
|
],
|
|
1548
|
-
"requiredArtifacts": [
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
"lead-sample.json"
|
|
1552
|
-
],
|
|
1553
|
-
"producesArtifacts": [
|
|
1554
|
-
"lead-filter.md"
|
|
1555
|
-
],
|
|
1556
|
-
"optionalProducesArtifacts": [
|
|
1557
|
-
"rubric.json"
|
|
1558
|
-
],
|
|
1417
|
+
"requiredArtifacts": ["brief.md", "lead-review.md", "lead-sample.json"],
|
|
1418
|
+
"producesArtifacts": ["lead-filter.md"],
|
|
1419
|
+
"optionalProducesArtifacts": ["rubric.json"],
|
|
1559
1420
|
"allowedTools": [
|
|
1560
1421
|
"get_subskill_prompt",
|
|
1561
1422
|
"get_subskill_asset",
|
|
@@ -1588,10 +1449,7 @@
|
|
|
1588
1449
|
"auto_continue": "message-generation"
|
|
1589
1450
|
},
|
|
1590
1451
|
"interruptOnly": true,
|
|
1591
|
-
"requiredCampaignState": [
|
|
1592
|
-
"campaignId",
|
|
1593
|
-
"workflowTableId"
|
|
1594
|
-
]
|
|
1452
|
+
"requiredCampaignState": ["campaignId", "workflowTableId"]
|
|
1595
1453
|
},
|
|
1596
1454
|
{
|
|
1597
1455
|
"id": "message-generation",
|
|
@@ -1615,9 +1473,7 @@
|
|
|
1615
1473
|
}
|
|
1616
1474
|
],
|
|
1617
1475
|
"requiredArtifacts": [],
|
|
1618
|
-
"producesArtifacts": [
|
|
1619
|
-
"message-validation.md"
|
|
1620
|
-
],
|
|
1476
|
+
"producesArtifacts": ["message-validation.md"],
|
|
1621
1477
|
"allowedTools": [
|
|
1622
1478
|
"get_subskill_prompt",
|
|
1623
1479
|
"get_subskill_asset",
|
|
@@ -1629,6 +1485,8 @@
|
|
|
1629
1485
|
"Do not use brief.md, lead-review.md, or lead-sample.json as required live state; those files are optional debug context only.",
|
|
1630
1486
|
"Do not hand-write message-validation.md from message-prep.md, message-candidate-drafts.md, stale markdown files, database reads, or general campaign knowledge.",
|
|
1631
1487
|
"message-validation.md or the returned recommendation must prove the generate-messages workflow ran and include Token Fill Rules, good-fill and omit/fallback examples, a raw sendable selected winner, and quality gate notes before message-review can recommend approve-message.",
|
|
1488
|
+
"The compact messageDraftRecommendation must return only templateRecommendation, tokenFillRules, renderedSample, concerns, status, basisToken, outputAt, outputHash, and error/retry detail. Its basis must include campaign revision or updatedAt, brief hash, selectedLeadListId, workflowTableId, bounded review-batch row ids/hash, filter choice, and filter/rubric basis when present.",
|
|
1489
|
+
"If current campaign state, selectedLeadListId, workflowTableId, or review-batch row ids/hash do not match the branch basis, classify the output stale or blocked; do not write message cells, enrich rows, attach sequence, or imply send readiness.",
|
|
1632
1490
|
"If the generate-messages output is plausible but weaker than the gold-standard rules, stop at message-review with revise-messaging. Do not continue to approval or mint just because the mechanical flow worked.",
|
|
1633
1491
|
"The approved message set must be written back into campaignBrief before auto-execute-messaging observes or queues product Generate Message cells. Normal create-campaign runs use the approved-template path; legacy AI-generated mode is not part of the normal flow."
|
|
1634
1492
|
],
|
|
@@ -1709,9 +1567,7 @@
|
|
|
1709
1567
|
],
|
|
1710
1568
|
"mustRenderInlineBeforeQuestion": true,
|
|
1711
1569
|
"minimumVisibleMessageDetail": "filled_sample_message_only",
|
|
1712
|
-
"requiredArtifactLinks": [
|
|
1713
|
-
"message-review.md"
|
|
1714
|
-
],
|
|
1570
|
+
"requiredArtifactLinks": ["message-review.md"],
|
|
1715
1571
|
"artifactLinkTiming": "before_approval_question",
|
|
1716
1572
|
"requiredFileLabels": [
|
|
1717
1573
|
"Subject:",
|
|
@@ -1740,10 +1596,7 @@
|
|
|
1740
1596
|
"Recommendation:"
|
|
1741
1597
|
],
|
|
1742
1598
|
"chatRenderRule": "Show a slim rendered-Markdown message review, never a fenced code block. Use ## Message review plus indexed sections and short bullets. 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 Watch link when a campaign shell exists. Keep tokenized template, token fill basis, rendered examples, good/bad token fill examples, validation notes, and message-validation.md details in campaign state or optional debug artifacts. Do not show plain filesystem paths unless the user asks.",
|
|
1743
|
-
"allowedRecommendations": [
|
|
1744
|
-
"approve-message",
|
|
1745
|
-
"revise-messaging"
|
|
1746
|
-
],
|
|
1599
|
+
"allowedRecommendations": ["approve-message", "revise-messaging"],
|
|
1747
1600
|
"judgeAgainst": [
|
|
1748
1601
|
"generate-messages rules",
|
|
1749
1602
|
"gold-standard-* references",
|
|
@@ -1771,10 +1624,7 @@
|
|
|
1771
1624
|
},
|
|
1772
1625
|
{
|
|
1773
1626
|
"action": "ask_message_review_choice",
|
|
1774
|
-
"choices": [
|
|
1775
|
-
"approve-message",
|
|
1776
|
-
"revise-messaging"
|
|
1777
|
-
],
|
|
1627
|
+
"choices": ["approve-message", "revise-messaging"],
|
|
1778
1628
|
"questionPrerequisiteVisibleLabels": [
|
|
1779
1629
|
"Status: message-review",
|
|
1780
1630
|
"Subject:",
|
|
@@ -1792,10 +1642,7 @@
|
|
|
1792
1642
|
{
|
|
1793
1643
|
"action": "write_message_review_decision",
|
|
1794
1644
|
"artifact": "message-review-decision.md",
|
|
1795
|
-
"allowedChoices": [
|
|
1796
|
-
"approve-message",
|
|
1797
|
-
"revise-messaging"
|
|
1798
|
-
],
|
|
1645
|
+
"allowedChoices": ["approve-message", "revise-messaging"],
|
|
1799
1646
|
"authorizesReviewBatchImportWhenApproved": true
|
|
1800
1647
|
},
|
|
1801
1648
|
{
|
|
@@ -1850,11 +1697,7 @@
|
|
|
1850
1697
|
"requiredValues": {
|
|
1851
1698
|
"tableId": "workflowTableId",
|
|
1852
1699
|
"cellSource": "bounded_review_batch_enrichCellIds",
|
|
1853
|
-
"statusFilter": [
|
|
1854
|
-
"pending",
|
|
1855
|
-
"error",
|
|
1856
|
-
"dependency_blocked"
|
|
1857
|
-
]
|
|
1700
|
+
"statusFilter": ["pending", "error", "dependency_blocked"]
|
|
1858
1701
|
},
|
|
1859
1702
|
"purpose": "queue_bounded_review_batch_enrichment_after_approved_template",
|
|
1860
1703
|
"rule": "Queue only enrichCellId values from get_rows_minimal for the bounded review batch after update_campaign_brief has saved the Approved Message Template. Do not queue Generate Message cells directly here; the workflow cascade runs enrichment, ICP scoring, then Generate Message for passing rows."
|
|
@@ -1895,13 +1738,8 @@
|
|
|
1895
1738
|
"lead-sample.json",
|
|
1896
1739
|
"message-validation.md"
|
|
1897
1740
|
],
|
|
1898
|
-
"optionalRequiredArtifacts": [
|
|
1899
|
-
|
|
1900
|
-
],
|
|
1901
|
-
"producesArtifacts": [
|
|
1902
|
-
"message-review.md",
|
|
1903
|
-
"message-review-decision.md"
|
|
1904
|
-
],
|
|
1741
|
+
"optionalRequiredArtifacts": ["lead-filter.md"],
|
|
1742
|
+
"producesArtifacts": ["message-review.md", "message-review-decision.md"],
|
|
1905
1743
|
"allowedTools": [
|
|
1906
1744
|
"AskUserQuestion",
|
|
1907
1745
|
"request_user_input",
|
|
@@ -1922,19 +1760,13 @@
|
|
|
1922
1760
|
"bulk_enrich_with_prospeo"
|
|
1923
1761
|
],
|
|
1924
1762
|
"watchRequired": false,
|
|
1925
|
-
"waitFor": [
|
|
1926
|
-
"message_approved",
|
|
1927
|
-
"revise_messaging"
|
|
1928
|
-
],
|
|
1763
|
+
"waitFor": ["message_approved", "revise_messaging"],
|
|
1929
1764
|
"transitions": {
|
|
1930
1765
|
"message_approved": "auto-execute-messaging",
|
|
1931
1766
|
"revise_messaging": "message-generation"
|
|
1932
1767
|
},
|
|
1933
1768
|
"interruptOnly": true,
|
|
1934
|
-
"requiredCampaignState": [
|
|
1935
|
-
"campaignId",
|
|
1936
|
-
"workflowTableId"
|
|
1937
|
-
]
|
|
1769
|
+
"requiredCampaignState": ["campaignId", "workflowTableId"]
|
|
1938
1770
|
},
|
|
1939
1771
|
{
|
|
1940
1772
|
"id": "approval-packet",
|
|
@@ -1953,9 +1785,7 @@
|
|
|
1953
1785
|
"message-review.md",
|
|
1954
1786
|
"message-review-decision.md"
|
|
1955
1787
|
],
|
|
1956
|
-
"optionalFiles": [
|
|
1957
|
-
"rubric.json"
|
|
1958
|
-
]
|
|
1788
|
+
"optionalFiles": ["rubric.json"]
|
|
1959
1789
|
},
|
|
1960
1790
|
{
|
|
1961
1791
|
"action": "require_message_review_decision",
|
|
@@ -1976,17 +1806,11 @@
|
|
|
1976
1806
|
"what approval creates"
|
|
1977
1807
|
],
|
|
1978
1808
|
"minimumVisibleDetail": "slim_final_approval_summary",
|
|
1979
|
-
"requiredArtifactLinks": [
|
|
1980
|
-
"approval-packet.md"
|
|
1981
|
-
],
|
|
1809
|
+
"requiredArtifactLinks": ["approval-packet.md"],
|
|
1982
1810
|
"artifactLinkTiming": "before_commit_gate_question",
|
|
1983
1811
|
"chatRenderRule": "Show a slim rendered-Markdown final approval packet only, never a fenced code block. Use ## Ready to create campaign plus indexed sections and short bullets. Include target with concrete role/title names, lead source with one key metric, filter 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 sequence/settings in final approval; that comes after campaign creation. Do not show plain filesystem paths unless links cannot be created.",
|
|
1984
1812
|
"userFacing": true,
|
|
1985
|
-
"doNotUseWords": [
|
|
1986
|
-
"anchor",
|
|
1987
|
-
"validation anchor",
|
|
1988
|
-
"lane"
|
|
1989
|
-
]
|
|
1813
|
+
"doNotUseWords": ["anchor", "validation anchor", "lane"]
|
|
1990
1814
|
},
|
|
1991
1815
|
{
|
|
1992
1816
|
"action": "optional_customer_roleplay",
|
|
@@ -2004,12 +1828,8 @@
|
|
|
2004
1828
|
"message-review.md",
|
|
2005
1829
|
"message-review-decision.md"
|
|
2006
1830
|
],
|
|
2007
|
-
"producesArtifacts": [
|
|
2008
|
-
|
|
2009
|
-
],
|
|
2010
|
-
"optionalProducesArtifacts": [
|
|
2011
|
-
"customer-roleplay.md"
|
|
2012
|
-
],
|
|
1831
|
+
"producesArtifacts": ["approval-packet.md"],
|
|
1832
|
+
"optionalProducesArtifacts": ["customer-roleplay.md"],
|
|
2013
1833
|
"allowedTools": [
|
|
2014
1834
|
"AskUserQuestion",
|
|
2015
1835
|
"request_user_input",
|
|
@@ -2029,9 +1849,7 @@
|
|
|
2029
1849
|
"watchRequired": false,
|
|
2030
1850
|
"waitFor": "approval_packet_ready",
|
|
2031
1851
|
"transitions": {},
|
|
2032
|
-
"optionalRequiredArtifacts": [
|
|
2033
|
-
"lead-source-intake.json"
|
|
2034
|
-
],
|
|
1852
|
+
"optionalRequiredArtifacts": ["lead-source-intake.json"],
|
|
2035
1853
|
"deprecated": true,
|
|
2036
1854
|
"deprecatedReason": "Shell-first flow has no final approval gate or mint. Message approval syncs the final template into the existing campaign and transitions directly to Step 13."
|
|
2037
1855
|
},
|
|
@@ -2048,9 +1866,7 @@
|
|
|
2048
1866
|
"lead-filter.md",
|
|
2049
1867
|
"message-validation.md"
|
|
2050
1868
|
],
|
|
2051
|
-
"optionalFiles": [
|
|
2052
|
-
"rubric.json"
|
|
2053
|
-
]
|
|
1869
|
+
"optionalFiles": ["rubric.json"]
|
|
2054
1870
|
},
|
|
2055
1871
|
{
|
|
2056
1872
|
"action": "validate_anchors",
|
|
@@ -2063,16 +1879,11 @@
|
|
|
2063
1879
|
"doesNotAuthorizeMint": true
|
|
2064
1880
|
}
|
|
2065
1881
|
],
|
|
2066
|
-
"allowedTools": [
|
|
2067
|
-
"AskUserQuestion",
|
|
2068
|
-
"request_user_input"
|
|
2069
|
-
],
|
|
1882
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
2070
1883
|
"watchRequired": false,
|
|
2071
1884
|
"waitFor": "artifacts_validated",
|
|
2072
1885
|
"transitions": {},
|
|
2073
|
-
"optionalRequiredArtifacts": [
|
|
2074
|
-
"lead-source-intake.json"
|
|
2075
|
-
],
|
|
1886
|
+
"optionalRequiredArtifacts": ["lead-source-intake.json"],
|
|
2076
1887
|
"deprecated": true,
|
|
2077
1888
|
"deprecatedReason": "Shell-first flow has no final approval gate or mint. Message approval syncs the final template into the existing campaign and transitions directly to Step 13.",
|
|
2078
1889
|
"resumeOnly": true,
|
|
@@ -2099,9 +1910,7 @@
|
|
|
2099
1910
|
"sample message",
|
|
2100
1911
|
"what approval creates"
|
|
2101
1912
|
],
|
|
2102
|
-
"requiredArtifactLinks": [
|
|
2103
|
-
"approval-packet.md"
|
|
2104
|
-
],
|
|
1913
|
+
"requiredArtifactLinks": ["approval-packet.md"],
|
|
2105
1914
|
"chatRenderRule": "Same slim rendered-Markdown approval packet as approval-packet, never a fenced code block. Use indexed sections and short bullets. Include target with concrete role/title names and one fully filled sample message without tokens. Do not include sequence/settings. Do not repeat tokenized template or long evidence tables in chat.",
|
|
2106
1915
|
"artifactLinkTiming": "same_turn_before_commit_question"
|
|
2107
1916
|
},
|
|
@@ -2130,10 +1939,7 @@
|
|
|
2130
1939
|
"onlyApproveAuthorizesMint": true
|
|
2131
1940
|
}
|
|
2132
1941
|
],
|
|
2133
|
-
"allowedTools": [
|
|
2134
|
-
"AskUserQuestion",
|
|
2135
|
-
"request_user_input"
|
|
2136
|
-
],
|
|
1942
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
2137
1943
|
"watchRequired": false,
|
|
2138
1944
|
"waitFor": [
|
|
2139
1945
|
"user_approved",
|
|
@@ -2144,9 +1950,7 @@
|
|
|
2144
1950
|
"user_abort"
|
|
2145
1951
|
],
|
|
2146
1952
|
"transitions": {},
|
|
2147
|
-
"optionalRequiredArtifacts": [
|
|
2148
|
-
"lead-source-intake.json"
|
|
2149
|
-
],
|
|
1953
|
+
"optionalRequiredArtifacts": ["lead-source-intake.json"],
|
|
2150
1954
|
"deprecated": true,
|
|
2151
1955
|
"deprecatedReason": "Shell-first flow has no final approval gate or mint. Message approval syncs the final template into the existing campaign and transitions directly to Step 13.",
|
|
2152
1956
|
"resumeOnly": true,
|
|
@@ -2167,10 +1971,7 @@
|
|
|
2167
1971
|
"tool": "create_campaign",
|
|
2168
1972
|
"mode": "create_new_or_resume_draft_shell",
|
|
2169
1973
|
"shellArtifact": "campaign-shell.json",
|
|
2170
|
-
"requiredFields": [
|
|
2171
|
-
"campaignBrief",
|
|
2172
|
-
"currentStep"
|
|
2173
|
-
],
|
|
1974
|
+
"requiredFields": ["campaignBrief", "currentStep"],
|
|
2174
1975
|
"requiredValues": {
|
|
2175
1976
|
"currentStep": "auto-execute-leads"
|
|
2176
1977
|
},
|
|
@@ -2192,35 +1993,22 @@
|
|
|
2192
1993
|
"Fallback if missing:",
|
|
2193
1994
|
"Token fill basis:"
|
|
2194
1995
|
],
|
|
2195
|
-
"capture": [
|
|
2196
|
-
"campaignId",
|
|
2197
|
-
"watchUrl"
|
|
2198
|
-
],
|
|
1996
|
+
"capture": ["campaignId", "watchUrl"],
|
|
2199
1997
|
"onMissingWatchUrl": "recoverable_failure_abort_before_rubric_save"
|
|
2200
1998
|
},
|
|
2201
1999
|
{
|
|
2202
2000
|
"tool": "update_campaign",
|
|
2203
2001
|
"when": "campaign-shell.json exists",
|
|
2204
|
-
"requiredFields": [
|
|
2205
|
-
"campaignId",
|
|
2206
|
-
"campaignBrief",
|
|
2207
|
-
"currentStep"
|
|
2208
|
-
],
|
|
2002
|
+
"requiredFields": ["campaignId", "campaignBrief", "currentStep"],
|
|
2209
2003
|
"requiredValues": {
|
|
2210
2004
|
"currentStep": "auto-execute-leads"
|
|
2211
2005
|
},
|
|
2212
|
-
"fields": [
|
|
2213
|
-
"campaignBrief",
|
|
2214
|
-
"leadSourceType",
|
|
2215
|
-
"leadSourceProvider"
|
|
2216
|
-
],
|
|
2006
|
+
"fields": ["campaignBrief", "leadSourceType", "leadSourceProvider"],
|
|
2217
2007
|
"skipWhen": "create_campaign minted a new campaign with the final approved brief and currentStep already set"
|
|
2218
2008
|
},
|
|
2219
2009
|
{
|
|
2220
2010
|
"tool": "save_rubrics",
|
|
2221
|
-
"requiredFields": [
|
|
2222
|
-
"rubric"
|
|
2223
|
-
],
|
|
2011
|
+
"requiredFields": ["rubric"],
|
|
2224
2012
|
"idempotentWhenAlreadySavedToDraftShell": true,
|
|
2225
2013
|
"onFailure": "rollback_or_recoverable_stop"
|
|
2226
2014
|
},
|
|
@@ -2232,10 +2020,7 @@
|
|
|
2232
2020
|
},
|
|
2233
2021
|
{
|
|
2234
2022
|
"action": "surface_watch_link",
|
|
2235
|
-
"requires": [
|
|
2236
|
-
"create_campaign_succeeded",
|
|
2237
|
-
"save_rubrics_succeeded"
|
|
2238
|
-
],
|
|
2023
|
+
"requires": ["create_campaign_succeeded", "save_rubrics_succeeded"],
|
|
2239
2024
|
"reference": "references/watch-link-handoff.md",
|
|
2240
2025
|
"requiredVisibleContent": [
|
|
2241
2026
|
"Campaign created",
|
|
@@ -2257,9 +2042,7 @@
|
|
|
2257
2042
|
"AskUserQuestion",
|
|
2258
2043
|
"request_user_input"
|
|
2259
2044
|
],
|
|
2260
|
-
"doNotAllow": [
|
|
2261
|
-
"import_leads"
|
|
2262
|
-
],
|
|
2045
|
+
"doNotAllow": ["import_leads"],
|
|
2263
2046
|
"watchRequired": true,
|
|
2264
2047
|
"waitFor": "autonomous_tail_started",
|
|
2265
2048
|
"transitions": {},
|
|
@@ -2348,10 +2131,7 @@
|
|
|
2348
2131
|
},
|
|
2349
2132
|
{
|
|
2350
2133
|
"tool": "wait_for_rubric_results",
|
|
2351
|
-
"requiredFields": [
|
|
2352
|
-
"targetCount",
|
|
2353
|
-
"minPassedCount"
|
|
2354
|
-
],
|
|
2134
|
+
"requiredFields": ["targetCount", "minPassedCount"],
|
|
2355
2135
|
"targetCountSource": "stats.totalRows_or_imported_batch_count",
|
|
2356
2136
|
"minPassedCountSource": "firstPassingRowForMessageStart (1)",
|
|
2357
2137
|
"requiredValues": {
|
|
@@ -2431,10 +2211,7 @@
|
|
|
2431
2211
|
"generate_message_cells_do_not_run_from_background_template_until_template_token_rules_approved"
|
|
2432
2212
|
],
|
|
2433
2213
|
"watchRequired": true,
|
|
2434
|
-
"waitFor": [
|
|
2435
|
-
"sample_validated",
|
|
2436
|
-
"sample_revision_required"
|
|
2437
|
-
],
|
|
2214
|
+
"waitFor": ["sample_validated", "sample_revision_required"],
|
|
2438
2215
|
"transitions": {
|
|
2439
2216
|
"sample_validated": "auto-execute-messaging",
|
|
2440
2217
|
"sample_revision_required": "lead-review",
|
|
@@ -2525,11 +2302,7 @@
|
|
|
2525
2302
|
},
|
|
2526
2303
|
{
|
|
2527
2304
|
"tool": "update_campaign",
|
|
2528
|
-
"requiredFields": [
|
|
2529
|
-
"campaignId",
|
|
2530
|
-
"currentStep",
|
|
2531
|
-
"watchNarration"
|
|
2532
|
-
],
|
|
2305
|
+
"requiredFields": ["campaignId", "currentStep", "watchNarration"],
|
|
2533
2306
|
"requiredValues": {
|
|
2534
2307
|
"currentStep": "awaiting-user-greenlight",
|
|
2535
2308
|
"watchNarration.stage": "review-ready"
|
|
@@ -2547,11 +2320,7 @@
|
|
|
2547
2320
|
"AskUserQuestion",
|
|
2548
2321
|
"request_user_input"
|
|
2549
2322
|
],
|
|
2550
|
-
"doNotAllow": [
|
|
2551
|
-
"import_leads",
|
|
2552
|
-
"start_campaign",
|
|
2553
|
-
"generate_messages"
|
|
2554
|
-
],
|
|
2323
|
+
"doNotAllow": ["import_leads", "start_campaign", "generate_messages"],
|
|
2555
2324
|
"hardRules": [
|
|
2556
2325
|
"critique_failure_never_escalates",
|
|
2557
2326
|
"critique_sample_size_bounded_by_config",
|
|
@@ -2564,10 +2333,7 @@
|
|
|
2564
2333
|
"generate_message_cells_do_not_run_from_background_template_until_template_token_rules_approved"
|
|
2565
2334
|
],
|
|
2566
2335
|
"watchRequired": true,
|
|
2567
|
-
"waitFor": [
|
|
2568
|
-
"review_batch_ready",
|
|
2569
|
-
"sample_revision_required"
|
|
2570
|
-
],
|
|
2336
|
+
"waitFor": ["review_batch_ready", "sample_revision_required"],
|
|
2571
2337
|
"transitions": {
|
|
2572
2338
|
"review_batch_ready": "awaiting-user-greenlight",
|
|
2573
2339
|
"escalation_triggered": "escalation"
|
|
@@ -2629,9 +2395,7 @@
|
|
|
2629
2395
|
"tool": "update_campaign",
|
|
2630
2396
|
"when": "user selected an available connected sender",
|
|
2631
2397
|
"requiredValues": {
|
|
2632
|
-
"senderIds": [
|
|
2633
|
-
"{selectedSenderId}"
|
|
2634
|
-
],
|
|
2398
|
+
"senderIds": ["{selectedSenderId}"],
|
|
2635
2399
|
"currentStep": "sequence",
|
|
2636
2400
|
"watchNarration.stage": "review-ready"
|
|
2637
2401
|
},
|
|
@@ -2647,20 +2411,11 @@
|
|
|
2647
2411
|
"when": "after senderIds are attached",
|
|
2648
2412
|
"requiredValues": {
|
|
2649
2413
|
"campaignId": "{campaignId}",
|
|
2650
|
-
"currentStep": "send"
|
|
2651
|
-
},
|
|
2652
|
-
"purpose": "bind the tier-aware recommended sequence before the launch decision",
|
|
2653
|
-
"watchNarrationRule": "The sequence tool may persist currentStep. If it does, the same visible beat must still explain that the recommended sequence is attached and Send is next; otherwise follow with update_campaign and watchNarration before asking for launch greenlight."
|
|
2654
|
-
},
|
|
2655
|
-
{
|
|
2656
|
-
"tool": "update_campaign",
|
|
2657
|
-
"when": "after recommended sequence attach; required if sequence attach did not persist watchNarration with currentStep",
|
|
2658
|
-
"requiredValues": {
|
|
2659
2414
|
"currentStep": "send",
|
|
2660
2415
|
"watchNarration.stage": "review-ready"
|
|
2661
2416
|
},
|
|
2662
|
-
"purpose": "
|
|
2663
|
-
"watchNarrationRule": "
|
|
2417
|
+
"purpose": "bind the tier-aware recommended sequence before the launch decision",
|
|
2418
|
+
"watchNarrationRule": "The sequence tool owns the visible beat: say the recommended sequence is attached, the browser is now on Send, and the next action is final launch greenlight. Do not follow with a separate step-only update_campaign fixup; do not imply anything has sent yet."
|
|
2664
2419
|
},
|
|
2665
2420
|
{
|
|
2666
2421
|
"tool": "get_campaign_navigation_state",
|
|
@@ -2693,11 +2448,7 @@
|
|
|
2693
2448
|
"action": "ask_final_launch_greenlight",
|
|
2694
2449
|
"uses": "request_user_input",
|
|
2695
2450
|
"singleChoice": true,
|
|
2696
|
-
"choices": [
|
|
2697
|
-
"Start campaign",
|
|
2698
|
-
"Review campaign first",
|
|
2699
|
-
"Pause here"
|
|
2700
|
-
],
|
|
2451
|
+
"choices": ["Start campaign", "Review campaign first", "Pause here"],
|
|
2701
2452
|
"onUserStart": "claude-greenlight",
|
|
2702
2453
|
"onReviewFirst": "awaiting-user-greenlight",
|
|
2703
2454
|
"onPause": "awaiting-user-greenlight"
|
|
@@ -2713,10 +2464,7 @@
|
|
|
2713
2464
|
"AskUserQuestion",
|
|
2714
2465
|
"request_user_input"
|
|
2715
2466
|
],
|
|
2716
|
-
"doNotAllow": [
|
|
2717
|
-
"start_campaign",
|
|
2718
|
-
"import_leads"
|
|
2719
|
-
],
|
|
2467
|
+
"doNotAllow": ["start_campaign", "import_leads"],
|
|
2720
2468
|
"autoStart": false,
|
|
2721
2469
|
"watchRequired": true,
|
|
2722
2470
|
"waitFor": [
|
|
@@ -2735,9 +2483,7 @@
|
|
|
2735
2483
|
"user_greenlight": "claude-greenlight",
|
|
2736
2484
|
"ui_start_detected": "running"
|
|
2737
2485
|
},
|
|
2738
|
-
"optionalRequiredArtifacts": [
|
|
2739
|
-
"lead-source-intake.json"
|
|
2740
|
-
]
|
|
2486
|
+
"optionalRequiredArtifacts": ["lead-source-intake.json"]
|
|
2741
2487
|
},
|
|
2742
2488
|
{
|
|
2743
2489
|
"id": "claude-greenlight",
|
|
@@ -2778,9 +2524,7 @@
|
|
|
2778
2524
|
},
|
|
2779
2525
|
{
|
|
2780
2526
|
"tool": "start_campaign",
|
|
2781
|
-
"requiredFields": [
|
|
2782
|
-
"campaignId"
|
|
2783
|
-
],
|
|
2527
|
+
"requiredFields": ["campaignId"],
|
|
2784
2528
|
"persistsCurrentStep": "running",
|
|
2785
2529
|
"watchNarrationRule": "After start_campaign succeeds, the running state must say the final greenlight was accepted, the campaign is now live/running, and the user can watch progress from the campaign."
|
|
2786
2530
|
},
|
|
@@ -2818,14 +2562,8 @@
|
|
|
2818
2562
|
"action": "surface_campaign_live_confirmation"
|
|
2819
2563
|
}
|
|
2820
2564
|
],
|
|
2821
|
-
"allowedTools": [
|
|
2822
|
-
|
|
2823
|
-
"AskUserQuestion",
|
|
2824
|
-
"request_user_input"
|
|
2825
|
-
],
|
|
2826
|
-
"doNotAllow": [
|
|
2827
|
-
"start_campaign"
|
|
2828
|
-
],
|
|
2565
|
+
"allowedTools": ["get_campaign", "AskUserQuestion", "request_user_input"],
|
|
2566
|
+
"doNotAllow": ["start_campaign"],
|
|
2829
2567
|
"terminal": true
|
|
2830
2568
|
},
|
|
2831
2569
|
{
|
|
@@ -2853,14 +2591,8 @@
|
|
|
2853
2591
|
]
|
|
2854
2592
|
}
|
|
2855
2593
|
],
|
|
2856
|
-
"allowedTools": [
|
|
2857
|
-
|
|
2858
|
-
"request_user_input"
|
|
2859
|
-
],
|
|
2860
|
-
"doNotAllow": [
|
|
2861
|
-
"start_campaign",
|
|
2862
|
-
"import_leads"
|
|
2863
|
-
],
|
|
2594
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
2595
|
+
"doNotAllow": ["start_campaign", "import_leads"],
|
|
2864
2596
|
"terminal": true
|
|
2865
2597
|
},
|
|
2866
2598
|
{
|
|
@@ -2883,15 +2615,8 @@
|
|
|
2883
2615
|
]
|
|
2884
2616
|
}
|
|
2885
2617
|
],
|
|
2886
|
-
"allowedTools": [
|
|
2887
|
-
|
|
2888
|
-
"request_user_input"
|
|
2889
|
-
],
|
|
2890
|
-
"doNotAllow": [
|
|
2891
|
-
"create_campaign",
|
|
2892
|
-
"save_rubrics",
|
|
2893
|
-
"import_leads"
|
|
2894
|
-
],
|
|
2618
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
2619
|
+
"doNotAllow": ["create_campaign", "save_rubrics", "import_leads"],
|
|
2895
2620
|
"terminal": true
|
|
2896
2621
|
},
|
|
2897
2622
|
{
|
|
@@ -2904,9 +2629,7 @@
|
|
|
2904
2629
|
},
|
|
2905
2630
|
{
|
|
2906
2631
|
"action": "reset_draft_artifacts",
|
|
2907
|
-
"preserve": [
|
|
2908
|
-
"brief.md"
|
|
2909
|
-
],
|
|
2632
|
+
"preserve": ["brief.md"],
|
|
2910
2633
|
"delete": [
|
|
2911
2634
|
"lead-review.md",
|
|
2912
2635
|
"lead-sample.json",
|
|
@@ -2916,15 +2639,8 @@
|
|
|
2916
2639
|
]
|
|
2917
2640
|
}
|
|
2918
2641
|
],
|
|
2919
|
-
"allowedTools": [
|
|
2920
|
-
|
|
2921
|
-
"request_user_input"
|
|
2922
|
-
],
|
|
2923
|
-
"doNotAllow": [
|
|
2924
|
-
"create_campaign",
|
|
2925
|
-
"save_rubrics",
|
|
2926
|
-
"import_leads"
|
|
2927
|
-
],
|
|
2642
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
2643
|
+
"doNotAllow": ["create_campaign", "save_rubrics", "import_leads"],
|
|
2928
2644
|
"terminal": true
|
|
2929
2645
|
},
|
|
2930
2646
|
{
|
|
@@ -2937,27 +2653,12 @@
|
|
|
2937
2653
|
},
|
|
2938
2654
|
{
|
|
2939
2655
|
"action": "reset_draft_artifacts",
|
|
2940
|
-
"preserve": [
|
|
2941
|
-
|
|
2942
|
-
"lead-review.md",
|
|
2943
|
-
"lead-sample.json"
|
|
2944
|
-
],
|
|
2945
|
-
"delete": [
|
|
2946
|
-
"lead-filter.md",
|
|
2947
|
-
"message-validation.md",
|
|
2948
|
-
"rubric.json"
|
|
2949
|
-
]
|
|
2656
|
+
"preserve": ["brief.md", "lead-review.md", "lead-sample.json"],
|
|
2657
|
+
"delete": ["lead-filter.md", "message-validation.md", "rubric.json"]
|
|
2950
2658
|
}
|
|
2951
2659
|
],
|
|
2952
|
-
"allowedTools": [
|
|
2953
|
-
|
|
2954
|
-
"request_user_input"
|
|
2955
|
-
],
|
|
2956
|
-
"doNotAllow": [
|
|
2957
|
-
"create_campaign",
|
|
2958
|
-
"save_rubrics",
|
|
2959
|
-
"import_leads"
|
|
2960
|
-
],
|
|
2660
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
2661
|
+
"doNotAllow": ["create_campaign", "save_rubrics", "import_leads"],
|
|
2961
2662
|
"terminal": true
|
|
2962
2663
|
},
|
|
2963
2664
|
{
|
|
@@ -2976,20 +2677,11 @@
|
|
|
2976
2677
|
"lead-sample.json",
|
|
2977
2678
|
"lead-filter.md"
|
|
2978
2679
|
],
|
|
2979
|
-
"delete": [
|
|
2980
|
-
"message-validation.md"
|
|
2981
|
-
]
|
|
2680
|
+
"delete": ["message-validation.md"]
|
|
2982
2681
|
}
|
|
2983
2682
|
],
|
|
2984
|
-
"allowedTools": [
|
|
2985
|
-
|
|
2986
|
-
"request_user_input"
|
|
2987
|
-
],
|
|
2988
|
-
"doNotAllow": [
|
|
2989
|
-
"create_campaign",
|
|
2990
|
-
"save_rubrics",
|
|
2991
|
-
"import_leads"
|
|
2992
|
-
],
|
|
2683
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
2684
|
+
"doNotAllow": ["create_campaign", "save_rubrics", "import_leads"],
|
|
2993
2685
|
"terminal": true
|
|
2994
2686
|
},
|
|
2995
2687
|
{
|
|
@@ -3001,15 +2693,8 @@
|
|
|
3001
2693
|
"target": ".aborted/"
|
|
3002
2694
|
}
|
|
3003
2695
|
],
|
|
3004
|
-
"allowedTools": [
|
|
3005
|
-
|
|
3006
|
-
"request_user_input"
|
|
3007
|
-
],
|
|
3008
|
-
"doNotAllow": [
|
|
3009
|
-
"create_campaign",
|
|
3010
|
-
"save_rubrics",
|
|
3011
|
-
"import_leads"
|
|
3012
|
-
],
|
|
2696
|
+
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
2697
|
+
"doNotAllow": ["create_campaign", "save_rubrics", "import_leads"],
|
|
3013
2698
|
"terminal": true
|
|
3014
2699
|
}
|
|
3015
2700
|
],
|