@sellable/mcp 0.1.213 → 0.1.214

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.
Files changed (29) hide show
  1. package/agents/post-find-leads-message-scout.md +173 -151
  2. package/dist/tools/prompts.js +18 -13
  3. package/package.json +1 -1
  4. package/skills/create-campaign/SKILL.md +11 -12
  5. package/skills/create-campaign-brief/references/examples/briefs/superpower.md +3 -3
  6. package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +16 -28
  7. package/skills/create-campaign-v2/SKILL.md +12 -9
  8. package/skills/create-campaign-v2/core/auto-execute.README.md +11 -11
  9. package/skills/create-campaign-v2/core/auto-execute.yaml +4 -4
  10. package/skills/create-campaign-v2/core/flow.v2.json +1 -1
  11. package/skills/create-campaign-v2/references/ai-tells.md +3 -3
  12. package/skills/create-campaign-v2/references/approval-gate-framing.md +9 -9
  13. package/skills/create-campaign-v2/references/escalation-ladder.md +3 -3
  14. package/skills/create-campaign-v2/references/final-handoff-contract.md +3 -3
  15. package/skills/create-campaign-v2/references/gold-standard-message-examples.md +294 -239
  16. package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +13 -9
  17. package/skills/create-campaign-v2/references/gold-standard-message-validation-example.md +4 -4
  18. package/skills/create-campaign-v2/references/lead-validation-preview.md +1 -1
  19. package/skills/create-campaign-v2/references/parallel-critique-protocol.md +10 -10
  20. package/skills/create-campaign-v2/references/sample-validation-loop.md +3 -3
  21. package/skills/create-campaign-v2/references/{thomas-revision-filters.md → sellable-cleanup-rules.md} +12 -12
  22. package/skills/create-campaign-v2/references/step-15-re-cascade.md +1 -1
  23. package/skills/create-campaign-v2/references/thomas-variant-selection.md +1 -1
  24. package/skills/create-campaign-v2/references/validation-criteria.md +16 -13
  25. package/skills/create-campaign-v2-tail/SKILL.md +7 -7
  26. package/skills/create-campaign-v2-validation/SKILL.md +6 -6
  27. package/skills/generate-messages/SKILL.md +121 -88
  28. package/skills/research/config.json +9 -0
  29. package/skills/create-campaign-v2/references/gold-standard-runtime-message-pack.md +0 -252
@@ -6,10 +6,11 @@ visibility: internal
6
6
 
7
7
  # Generate Messages
8
8
 
9
- You craft messages in one of two modes:
9
+ You craft row-level messages in two active modes:
10
10
 
11
11
  - live campaign mode for selected leads in a real campaign table
12
- - caller-declared DRY MODE for Phase 84 validation artifacts before any live campaign exists
12
+ - caller-declared DRY MODE for offline validation artifacts before any live
13
+ campaign exists
13
14
 
14
15
  ## Tools
15
16
 
@@ -28,37 +29,35 @@ You craft messages in one of two modes:
28
29
 
29
30
  ### Mode 0: Message Drafting Branch
30
31
 
31
- Use this mode when create-campaign-v2 starts background Message Drafting after
32
- `confirm_lead_list` copies source rows and the first
33
- review/process sample exists.
34
- This is not the row-cell generation path.
35
-
36
- Inputs must come from the parent thread or scoped MCP/product tools for the
37
- current workspace/campaign:
38
-
39
- - campaign id plus campaign revision or `updatedAt`
40
- - current campaign brief and a brief hash
41
- - selected source state and `selectedLeadListId`
42
- - `workflowTableId`
43
- - imported review-batch contacts, row ids, and review-batch row hash
44
- - filter choice at branch start, plus filter/rubric basis when present
32
+ Use `generate-messages` for the campaign workflow's live template
33
+ recommendation branch after the source list is copied into the campaign table
34
+ and the first non-empty execution slice exists. This is not the row-cell
35
+ generation path. Before drafting, that branch must also load the required
36
+ message assets through Sellable MCP tools:
37
+
38
+ - `create-campaign-v2/references/gold-standard-message-examples.md`
39
+ - `create-campaign-v2/references/gold-standard-message-patterns.md`
40
+ - `create-campaign-v2/references/ai-tells.md`
41
+ - `create-campaign-v2/references/sellable-cleanup-rules.md`
42
+ - `create-campaign/references/ai-native-tokens.md`
43
+ - `create-campaign/references/token-fill-examples.md`
44
+
45
+ After candidate generation and revision, and before returning `ready`, load
46
+ `create-campaign-v2-validation` through Sellable MCP as the final gate.
47
+
48
+ Never reconstruct that branch from `brief.md`, `lead-review.md`,
49
+ `lead-sample.json`, `lead-filter.md`, `message-validation.md`, local files, or
50
+ direct database reads. If any required message asset cannot be loaded through MCP
51
+ before drafting, return `blocked` or `retry-needed`. If the validation prompt
52
+ cannot be loaded after generation, or the candidate fails that final gate, return
53
+ `blocked` or `retry-needed`.
45
54
 
46
55
  Reject the branch as blocked if the campaign id, selected lead list, workflow
47
- table, or review-batch row ids/hash do not match. Do not reconstruct state from
48
- stale local markdown artifacts or direct database reads.
49
-
50
- Before drafting, load the packaged reference assets in "Reference Asset Loading"
51
- below through `mcp__sellable__get_subskill_asset`. In customer/package runs,
52
- the `mcp/sellable/skills/...` strings are asset identifiers, not local files.
53
- Do not use shell commands, local `Read`, `rg`, `cat`, `wc`, plugin-cache paths,
54
- repo paths, or `/Users/...` paths to load them. If a required asset cannot be
55
- loaded through the MCP asset loader, return `blocked` or `retry-needed` instead
56
- of drafting from memory.
57
-
58
- Return message-draft output only: template recommendation, token fill rules,
59
- rendered sample, concerns, status, basis token, output timestamp/hash, and error or
60
- retry detail. Do not write message cells, enrich rows, update the campaign
61
- brief, attach sequence, or imply send readiness from this branch.
56
+ table, or initial execution-slice rows do not match. Return message-draft output
57
+ only: template recommendation, token fill rules, rendered good sample, status,
58
+ basis token, output timestamp/hash, and blocked/retry detail when applicable.
59
+ Do not write message cells, enrich rows, update the campaign brief, attach a
60
+ sequence, or imply send readiness from this branch.
62
61
 
63
62
  ### Mode 1: Live Campaign Mode
64
63
 
@@ -92,18 +91,18 @@ to live mode drafts, with live-mode-specific allowances:
92
91
  - personalization from research is allowed, but it does not replace the
93
92
  "what the product IS" / "what it DOES" anchors
94
93
  - save behavior and calibration loop follow the live-mode workflow below,
95
- but the drafted message itself is subject to the same Thomas revision
94
+ but the drafted message itself is subject to the same Sellable cleanup
96
95
  filters as dry mode
97
96
 
98
97
  ### Mode 2: Caller-Declared DRY MODE
99
98
 
100
- Use this mode when the caller explicitly says `DRY MODE`, `Phase 84`,
99
+ Use this mode when the caller explicitly says `DRY MODE`, `offline validation`,
101
100
  `create-campaign-v2`, or provides:
102
101
 
103
102
  - `brief.md`
104
103
  - `lead-sample.json`
105
- - `lead-filter.md` when available. In the create-campaign-v2
106
- Prospect Setup step, message generation may start before
104
+ - `lead-filter.md` when available. In the campaign workflow's post-lead
105
+ workstream, message generation may start before
107
106
  `lead-filter.md` exists so it can prepare proof inventory, token strategy,
108
107
  and candidate angles while filter-leads runs.
109
108
 
@@ -139,7 +138,7 @@ Required dry-mode contract:
139
138
  If the dry-mode response is missing the no-mutation preamble, treat that as a
140
139
  hard failure and revise the output before returning it.
141
140
 
142
- ## Phase 84 Dry-Mode Validation
141
+ ## Offline Validation
143
142
 
144
143
  Dry mode validates message quality before campaign mint.
145
144
 
@@ -158,17 +157,17 @@ Read these campaign inputs:
158
157
  - `lead-filter.md` when present. If it is absent because the caller launched
159
158
  prospect setup workstreams in parallel, start the prep/candidate stages and then
160
159
  reconcile before final `message-validation.md`.
161
-
162
160
  ## Reference Asset Loading (do this before drafting)
163
161
 
164
162
  Do not draft from this prompt alone. The full `generate-messages` prompt is
165
163
  only the contract; the reference assets below are the evidence and examples
166
- that define the desired output. Before writing angle drafts, you MUST load the
167
- required pre-draft reference pack below with `mcp__sellable__get_subskill_asset`.
168
- This is a hard gate: if the four required pre-draft assets are not loaded,
164
+ that define the desired output. Before writing angle drafts, you MUST load every
165
+ required pre-draft reference below with `mcp__sellable__get_subskill_asset`.
166
+ This is the required pre-draft reference pack for Mode 0 message drafting.
167
+ This is a hard gate: if the required pre-draft assets are not loaded,
169
168
  return `blocked` / `retry-needed` instead of drafting. Write a short
170
- `Reference Asset Loading` note naming each loaded asset and whether it was
171
- required pre-draft, final-pass, dry-mode-only, or token-rules-only. Do not
169
+ internal `Reference Asset Loading` note naming each loaded asset and whether it
170
+ was required pre-draft, dry-mode-only, or token-rules-only. Do not
172
171
  bulk-load the conditional references unless their trigger applies or the caller
173
172
  explicitly asks for maximum context over speed.
174
173
 
@@ -176,21 +175,22 @@ Use `mcp__sellable__get_subskill_asset` for packaged assets:
176
175
 
177
176
  | Group | Asset to load | Job |
178
177
  | --- | --- | --- |
179
- | Always load before drafting | `subskillName: "create-campaign-brief", assetPath: "references/phase75-active-runtime-message-pack.md"` | Active line-level gold pack: real approved examples, short-line rhythm, CTA blocks, lowercase/titlecase cues, and PS restraint. |
178
+ | Always load before drafting | `subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-examples.md"` | Active line-level gold pack. Full archive quality bar: exact motion examples, hard rules, and transfer limits. Use it to choose 1 primary example, not to recolor copy. |
180
179
  | Always load before drafting | `subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-patterns.md"` | Strategy selector: event-led vs signal-led vs job-post-led vs proof-led fallback, proof inventory, candidate set, and Finalizer Pass. |
181
- | Always load before drafting | `subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-examples.md"` | Full archive quality bar: exact motion examples, hard rules, and transfer limits. Use it to choose 1 primary example, not to recolor copy. |
182
180
  | Always load before drafting (never optional) | `subskillName: "create-campaign-v2", assetPath: "references/ai-tells.md"` | Canonical anti-AI checklist: body self-intros, source citations, resume recaps, title-fit assumptions, em dashes, signoffs, weak proof brags, and flattened "worth sending" source bridges. |
183
- | Load before approval / final pass | `subskillName: "create-campaign-v2", assetPath: "references/thomas-revision-filters.md"` | Substance filters: earned-right, presumption, vague proof, read-as-1:1, founder-origin coherence, anti-talk-at, and AI-tell filter. |
181
+ | Load before approval / final pass | `subskillName: "create-campaign-v2", assetPath: "references/sellable-cleanup-rules.md"` | Substance filters: earned-right, presumption, vague proof, read-as-1:1, founder-origin coherence, anti-talk-at, AI-tell filter, line continuity, PS shape, and proof safety. |
182
+ | Reusable token rules only | `subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md"` | Token spec for rich judgment tokens, including required clauses and fallback behavior. Always load before reusable template/token rules. |
183
+ | Reusable token rules only | `subskillName: "create-campaign", assetPath: "references/token-fill-examples.md"` | Concrete good/bad token fills, interpolation guardrails, and product-noun substitution traps. Always load before reusable template/token rules. |
184
184
  | Dry-mode artifact output only | `subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-validation-example.md"` | Fully worked example for proof inventory, candidate messages, Finalizer Pass, Selected Winner, findings, and recommendation. |
185
185
  | Dry-mode artifact output only | `subskillName: "create-campaign-v2", assetPath: "references/validation-criteria.md"` | Step-level acceptance criteria and dry-mode message validation expectations. |
186
- | Reusable token rules only | `subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md"` | Token spec for rich judgment tokens, including required clauses and fallback behavior. |
187
- | Reusable token rules only | `subskillName: "create-campaign", assetPath: "references/token-fill-examples.md"` | Concrete good/bad token fills, interpolation guardrails, and product-noun substitution traps. |
188
186
 
189
187
  Example packaged asset calls:
190
188
 
191
189
  - `get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/ai-native-tokens.md" })`
192
190
  - `get_subskill_asset({ subskillName: "create-campaign", assetPath: "references/token-fill-examples.md" })`
193
191
  - `get_subskill_asset({ subskillName: "create-campaign-brief", assetPath: "references/phase75-active-runtime-message-pack.md" })`
192
+ - `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/gold-standard-message-examples.md" })`
193
+ - `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/sellable-cleanup-rules.md" })`
194
194
  - `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/validation-criteria.md" })`
195
195
 
196
196
  Do not satisfy the list above by searching or reading the local filesystem.
@@ -198,18 +198,18 @@ Path-like names in this section are package asset coordinates for MCP loading.
198
198
 
199
199
  Default load order:
200
200
 
201
- 1. Load the 4 **Always load before drafting** assets. Do not infer their
201
+ 1. Load the **Always load before drafting** assets. Do not infer their
202
202
  contents from this prompt; actually call `mcp__sellable__get_subskill_asset`
203
203
  for each required asset.
204
204
  2. Draft and run the internal Finalizer Pass.
205
205
  3. Run the selected winner against `ai-tells.md`. This is never optional. If the
206
206
  AI-tells catalog was not loaded or any `REJECT` tell matches, do not approve,
207
207
  confirm, recommend, or show the template as ready; return `revise-message`.
208
- 4. Load `thomas-revision-filters.md` before approval, `confirmed`, or template
209
- recommendation.
208
+ 4. Run the selected winner against `sellable-cleanup-rules.md` before approval,
209
+ `confirmed`, or template recommendation.
210
210
  5. Load dry-mode artifact references only when writing `message-validation.md`.
211
- 6. Load token-rule references only when creating reusable templates or Token
212
- Fill Rules that need sentence-level personalization.
211
+
212
+ Do not load retired branch/runtime packs.
213
213
 
214
214
  ### Rich Personalization Contract
215
215
 
@@ -255,14 +255,16 @@ winner gate**.
255
255
 
256
256
  ### Retrieval & motion
257
257
 
258
- - treat `gold-standard-runtime-message-pack.md` as the **real line-level
259
- gold pack** for active clients and proven live message shapes
260
- - retrieve against the full archived gold-standard library and pick the closest 2-4 examples for consideration
261
- - use the runtime pack first for concrete formatting cues that the
262
- abstract archive may flatten away: lowercase vs title case, exact
263
- `two options:` formatting, short line rhythm, and load-bearing
264
- `p.s.` lines
265
- - treat the archive as the **quality bar and motion reference**, not a paste source. Your job is to write a new message that could plausibly belong in the archive, not to recolor an existing one
258
+ - treat `gold-standard-message-examples.md` as the canonical examples asset for
259
+ both primary runtime examples and conditional motion references
260
+ - retrieve against the primary runtime examples first, then conditional examples
261
+ only when the campaign motion matches
262
+ - use the examples for concrete formatting cues that abstract patterns may
263
+ flatten away: lowercase vs title case, exact `two options:` formatting, short
264
+ line rhythm, and load-bearing `p.s.` lines
265
+ - treat the examples as the **quality bar and motion reference**, not a paste
266
+ source. Your job is to write a new message that could plausibly belong in the
267
+ archive, not to recolor an existing one
266
268
  - before choosing any example, name the **strongest true reason this buyer
267
269
  should reply**. This is the north star: the most compelling safe mechanism,
268
270
  proof, asset, diagnostic, offer, or buyer outcome available from the brief and
@@ -282,7 +284,7 @@ winner gate**.
282
284
  packaging tools. Use them only when they make the strongest true reason more
283
285
  compelling or easier to reply to.
284
286
  - **exact-template preservation only applies when the archived winner is the same company as the brief** (e.g., Superposition drafting for Superposition). In that case preserve casing, spacing, CTA shape, and proof ordering, and change only the documented tokens. For every other case, match the quality bar and motion shape; do not recolor the exemplar's wording
285
- - if the runtime pack shows a proven same-company or same-motion line that is
287
+ - if the examples file shows a proven same-company or same-motion line that is
286
288
  doing real work, do not silently flatten it away in the name of generic
287
289
  cleanliness
288
290
  - choose the highest-specificity validated strategy available: event-led, signal-led, job-post-led, then proof-led specialist fallback (full patterns in `gold-standard-message-patterns.md`)
@@ -804,6 +806,13 @@ Finalizer preference when multiple candidates are otherwise comparable:
804
806
  supports
805
807
  - if an A/B CTA adds ceremony without increasing buyer confidence, cut
806
808
  it back to one ask
809
+ - if a selected template or gold-standard influence ends with a
810
+ non-question CTA statement, do not preserve the surface wording. Preserve
811
+ the buyer promise and rewrite the CTA as one concrete yes/no question.
812
+ Example: `easiest way to see if it's worth a look is to try it with one of
813
+ your actual menus. happy to set that up or I can send a 2-min video
814
+ instead.` should become a single question that names the useful object, such
815
+ as `open to seeing what one real menu would look like in the product?`
807
816
  - do not default to founder-to-founder, MD-to-MD, doctor-to-doctor,
808
817
  peer-call, compare-notes, or similar identity-call framing. Those CTAs
809
818
  are usually weaker than naming the useful thing the buyer gets. Use them
@@ -973,7 +982,7 @@ Message-validation artifact budget:
973
982
 
974
983
  **Substance-filter gate before the Finalizer Pass:** each candidate is
975
984
  checked against the 8 Substance Filters in
976
- `../create-campaign-v2/references/thomas-revision-filters.md` (Earned-
985
+ `../create-campaign-v2/references/sellable-cleanup-rules.md` (Earned-
977
986
  right, Presumption, Vague-proof, Read-as-1:1, Founder-origin coherence,
978
987
  Anti-AI-tell, Anti-talk-at, Anti-self-introduction). A candidate that
979
988
  fails any filter is marked BLOCKED in `message-validation.md` (cite
@@ -1070,6 +1079,20 @@ Return `revise-message` with the missing strategy pieces.
1070
1079
 
1071
1080
  CTA and PS are tools, not defaults.
1072
1081
 
1082
+ The final CTA must be a question unless the user explicitly approved a
1083
+ non-question outbound motion. Template preservation does not override this. If
1084
+ the best draft or primary example has a statement CTA (`happy to set that up`,
1085
+ `I can send...`, `let me know`, `worth a look is...`), run a CTA normalization
1086
+ pass before selecting the winner:
1087
+
1088
+ - keep the useful object the buyer gets
1089
+ - cut weak second options unless both choices are independently valuable
1090
+ - make the ask one self-contained yes/no question on its own line
1091
+ - preserve the campaign's approved intent, not the exact words
1092
+ - write the question from the campaign's real object and product category; do
1093
+ not hard-code wording from a gold example when the buyer input, artifact,
1094
+ preview, or product is different
1095
+
1073
1096
  CTA options must be scored before drafting. Use `two options:` only when
1074
1097
  both choices are genuinely useful and supported:
1075
1098
 
@@ -1154,11 +1177,17 @@ message / artifact] was made with [product].`
1154
1177
  lowers "is this real?" / "will this company be around?" risk without
1155
1178
  bloating the body. Its job can be legitimacy, not direct persuasion:
1156
1179
  it answers whether the company and offer are real enough to take a look.
1157
- It must still tie the backing to the buyer segment, product boundary, or
1158
- buyer outcome instead of flashing a badge. Shapes:
1180
+ It must still tie the backing to the buyer outcome instead of flashing a
1181
+ badge or describing the seller's focus. Good shapes:
1159
1182
  `p.s. we're YC-backed and built for [specific buyer segment] trying to
1160
- [buyer outcome].` or `p.s. we're backed by [credible backer] and focused on
1161
- [specific buyer segment / problem].` Keep it short and test it against no-PS.
1183
+ [buyer outcome].` or `p.s. we're backed by [credible backers] to help
1184
+ [buyer segment] turn [buyer-owned workflow/channel] into [buyer outcome].`
1185
+ Keep it short and test it against no-PS. Do not use
1186
+ `focused on [category/problem]` in prospect-facing copy; translate company
1187
+ focus into the buyer's problem/outcome, or omit the PS. For a
1188
+ LinkedIn-content motion only, a good translation is:
1189
+ `p.s. we're backed by operators from [credible companies] to help teams
1190
+ turn LinkedIn content into dependable pipeline.`
1162
1191
 
1163
1192
  If YC, notable backing, funding, or named investor proof is present AND
1164
1193
  the buyer is in healthcare, financial services, security, enterprise, or
@@ -1280,7 +1309,7 @@ Truth is not enough. The line must do a job for the prospect.
1280
1309
 
1281
1310
  ### Single-send-unit gate (HARD INVARIANT)
1282
1311
 
1283
- Dry-mode create-campaign-v2 message generation approves the **first outbound
1312
+ Offline-validation message generation approves the **first outbound
1284
1313
  send only**. The Selected Winner must be exactly one send unit for one channel:
1285
1314
  one INVITE, one INMAIL_OPEN / INMAIL_CLOSED body plus optional subject, or one
1286
1315
  DM body when the campaign explicitly starts with DM.
@@ -1725,6 +1754,9 @@ PO from your inbox?` beats `worth 15 min to compare notes?` because the
1725
1754
  (`we're YC-backed and trying to help banks stop scam money before it
1726
1755
  moves`) or materially lower commitment (`happy to send the sample
1727
1756
  without a call first`). Prefer the buyer-outcome version when both fit.
1757
+ Do not write `backed by [X] and focused on [Y]`; "focused on" describes
1758
+ the seller. Translate it to `backed by [X] to help [buyer] [outcome]`,
1759
+ or choose no PS.
1728
1760
  For high-trust or new-category offers, YC/backing should be tested as a
1729
1761
  PS before being marked internal-only; the question is whether the PS
1730
1762
  lowers trust risk for the buyer, not whether the body already has one
@@ -2150,7 +2182,7 @@ Rules:
2150
2182
  - write the PS in a voice the reader can place:
2151
2183
  - if the **sender is the founder/operator**, write in `I` voice. Archive anchor: Superposition's `"I placed the first engineering hire at Brex."`
2152
2184
  - if the **sender is not the founder**, use `our CEO`, `our team`, or `we` as the anchor — never drop a bare first name with no anchor. Shape: `"Our CEO [did the prior thing that shows they understand this buyer's pain]."`
2153
- - `our team` and `we` voices work well for backing, funding, or collective proof. Shape: `"Our team is backed by [investor] because they're seeing the same [buyer pain] everywhere we look."`
2185
+ - `our team` and `we` voices work well for backing, funding, or collective proof. Shape: `"Our team is backed by [investor] to help [buyer segment] [buyer outcome]."`
2154
2186
  - **default to ONE proof beat** — the single beat that most directly answers "why is this sender a fit for my specific pain?"
2155
2187
  - a second beat is only allowed when it answers a **different objection** the buyer would actually have — not when it's merely available. Structural examples of valid second beats (objection-shaped, motion-agnostic):
2156
2188
  - the buyer's likely concern is "does this actually work reliably" → a beat about technical depth or track record strengthens the fit
@@ -2164,14 +2196,15 @@ Rules:
2164
2196
  - the proof is purely credential without a relevance hook you can write in one sentence
2165
2197
  - the body already carries the mechanism and relevance and adding a PS would dilute rather than reinforce
2166
2198
  - except when the PS itself is the proof/demo that makes the core claim more believable
2167
- - examples of good shapes (abstract — to be instantiated from the brief's safe-claims list, not copied):
2199
+ - examples of good shapes (abstract — to be instantiated from the brief's safe-claims list, not copied):
2168
2200
  - `"Our CEO [ran a comparable operation before this], so the product is built for how [buyer-specific failure mode] actually breaks."`
2169
2201
  - `"I spent [X years] watching this exact [named handoff] fall apart at a previous role, which is why the first thing we built fixes it."`
2170
- - `"Our team is backed by [named investor] because they're seeing the same [buyer pain] at every [segment] we talk to."`
2202
+ - `"Our team is backed by [named investor] to help [buyer segment] [buyer outcome]."`
2171
2203
  - examples of bad shapes (automatic revisions):
2172
2204
  - `"Alex did X. Jordan did Y."` — bare first names with no anchor, no relevance to the buyer's pain
2173
2205
  - `"CEO Alex, 2x founder. CTO Jordan, ex-FAANG."` — credential list, no relevance hook
2174
2206
  - `"Our team has deep [X] and [Y] experience."` — generic, no specifics
2207
+ - `"We're backed by [investor] and focused on [category/problem]."` — company-focus copy; translate to buyer outcome or cut
2175
2208
  - any PS that could be dropped without weakening the fit case — drop it instead
2176
2209
 
2177
2210
  ### Safety
@@ -2182,7 +2215,7 @@ Rules:
2182
2215
  - reject personalization that cannot be traced to `lead-sample.json`
2183
2216
  - keep proof claims inside the brief's safe-claims boundary
2184
2217
  - use only signals validated in `lead-sample.json`
2185
- - pass the Thomas revision filters before returning
2218
+ - pass the Sellable cleanup rules before returning
2186
2219
 
2187
2220
  When token sourcing is weak:
2188
2221
 
@@ -2388,7 +2421,7 @@ hiring for`
2388
2421
 
2389
2422
  ## Token Adherence Table
2390
2423
 
2391
- | Sample | Supported Tokens Only | All Tokens Resolved | Proof Safe | Personalization Grounded | Thomas Filters | Result |
2424
+ | Sample | Supported Tokens Only | All Tokens Resolved | Proof Safe | Personalization Grounded | Sellable Cleanup Rules | Result |
2392
2425
  | ------ | --------------------- | ------------------- | ---------- | ------------------------ | -------------- | ------ |
2393
2426
 
2394
2427
  ## Message Element Plan
@@ -2607,7 +2640,7 @@ Automatic failures in dry mode:
2607
2640
  - invented proof or personalization
2608
2641
  - no compelling proof element despite the brief supporting one
2609
2642
  - a CTA that depends on missing proof
2610
- - copy that fails the Thomas revision filters
2643
+ - copy that fails the Sellable cleanup rules
2611
2644
  - any post-accept DM, follow-up, second touch, cadence branch, or sequence copy
2612
2645
  in the first-message validation artifact
2613
2646
  - any mutation tool usage
@@ -2619,7 +2652,7 @@ Automatic failures in dry mode:
2619
2652
  Goal: lock tone + offer with 1-3 examples before scaling.
2620
2653
  Only hard requirement: draft at least one message before batch; saving examples is strongly recommended but optional.
2621
2654
 
2622
- Before drafting, read any Phase 75 brief-calibration assets already present:
2655
+ Before drafting, read any brief-calibration assets already present:
2623
2656
 
2624
2657
  - the campaign brief itself
2625
2658
  - any "Messaging Calibration" section saved back into the brief
@@ -2659,27 +2692,27 @@ too generic, diagnose the gap precisely:
2659
2692
 
2660
2693
  Then tighten the brief or calibration notes before scaling.
2661
2694
 
2662
- Use the v2 runtime gold pack as the primary line-level source even when the
2663
- brief does not already contain winning examples. Do not default to generic
2664
- REPLY-style copy when the motion clearly matches a tighter approved pattern.
2665
- Primary approved references are:
2695
+ Use `gold-standard-message-examples.md` as the primary line-level source even
2696
+ when the brief does not already contain winning examples. Do not default to
2697
+ generic REPLY-style copy when the motion clearly matches a tighter approved
2698
+ pattern. Primary runtime references are:
2666
2699
 
2667
2700
  - sellable.dev
2668
- - Hey Digital / HeyDigital
2701
+ - Hey Digital
2669
2702
  - Galley
2670
2703
  - Clover
2671
2704
  - Persona
2672
2705
 
2673
2706
  Use Superpower only for benefits/healthcare mechanism language and cleaned
2674
- low-certainty relevance bridges. Use Revvix / Spektion and Superposition only
2675
- for explicit event/logistics or job-post/founder-hiring motions. Do not use
2676
- Gelee, westpark villas, Amplify Security, or raw old-client archive examples as
2677
- runtime inspiration unless the caller explicitly provides them as campaign
2678
- calibration.
2679
-
2680
- When the brief is sparse but the motion clearly matches an archived winner,
2681
- borrow the closest approved shape from `gold-standard-runtime-message-pack.md`
2682
- first, then use `gold-standard-message-examples.md` only for strategy skeletons
2707
+ low-certainty relevance bridges. Use Galley only for matching foodservice,
2708
+ event/demo, or signal-led operator motions. Use Revvix / Spektion and
2709
+ Superposition only for explicit event/logistics or job-post/founder-hiring
2710
+ motions. Do not use Gelee, westpark villas, Amplify Security, or raw old-client
2711
+ archive examples as runtime inspiration unless the caller explicitly provides
2712
+ them as campaign calibration.
2713
+
2714
+ When the brief is sparse but the motion clearly matches an approved winner,
2715
+ borrow the closest approved shape from `gold-standard-message-examples.md`
2683
2716
  before inventing a new structure.
2684
2717
 
2685
2718
  ### Single Row
@@ -0,0 +1,9 @@
1
+ {
2
+ "parallelMode": "wide",
3
+ "agentCount": 6,
4
+ "maxToolCallsPerAgent": 2,
5
+ "senderMaxAgents": 2,
6
+ "senderMaxToolCallsPerAgent": 3,
7
+ "progressMode": true,
8
+ "debugMode": true
9
+ }