@sellable/mcp 0.1.214 → 0.1.215
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 +20 -3
- package/package.json +1 -1
- package/skills/create-campaign-v2/SKILL.md +1 -1
- package/skills/create-campaign-v2/references/sellable-cleanup-rules.md +1 -0
- package/skills/create-campaign-v2-validation/SKILL.md +11 -2
- package/skills/generate-messages/SKILL.md +36 -5
|
@@ -26,11 +26,14 @@ Sellable MCP/product reads:
|
|
|
26
26
|
- optional `campaignName`
|
|
27
27
|
- optional workspace id when known
|
|
28
28
|
- selected source decision and source-use rule
|
|
29
|
+
- source ownership classification: `sender-owned-single`,
|
|
30
|
+
`sender-owned-ambiguous`, or `third-party`
|
|
31
|
+
- source post author/sender match when known
|
|
29
32
|
- `selectedLeadListId` or selected source list context
|
|
30
33
|
- filter choice at branch start
|
|
31
34
|
- concise brief summary: offer, buyer, safe proof, blocked claims
|
|
32
35
|
- 3-5 sample workflow-table rows with `rowId`, name, title, company when
|
|
33
|
-
available, and
|
|
36
|
+
available, signal, engagement type, and whether comment text exists
|
|
34
37
|
|
|
35
38
|
Do not require campaign revision, brief hash, copied row count, review-batch
|
|
36
39
|
count, row hash, or a long review-batch row-id list in the handoff. Use live
|
|
@@ -222,13 +225,27 @@ own revision. The parent renders the revised template and waits for
|
|
|
222
225
|
low-certainty, such as `found you in a thread about [topic], so may be off,
|
|
223
226
|
but this seemed relevant`.
|
|
224
227
|
- Sender-owned post sources are different: if the source post was authored by
|
|
225
|
-
the sender/client and the row proves a reaction/comment,
|
|
226
|
-
|
|
228
|
+
the sender/client and the row proves a reaction/comment, classify it as
|
|
229
|
+
`sender-owned-single` only when the final sender/source-owner match is known.
|
|
230
|
+
A light first-person acknowledgment is allowed for `sender-owned-single`, but
|
|
231
|
+
it must be followed by a soft
|
|
227
232
|
relevance bridge before broad problem or product copy. Use a bridge like
|
|
228
233
|
`figured this might be relevant if LinkedIn is becoming more of a GTM
|
|
229
234
|
channel for [company]` before any broader `a lot of B2B teams...` claim. Do
|
|
230
235
|
not jump straight from `appreciate you showing some love...` to
|
|
231
236
|
`a lot of B2B teams...` or `most teams...`.
|
|
237
|
+
- For sender-owned sources, `found you in a thread`, `saw you in a thread`, and
|
|
238
|
+
`saw you in conversations` are blocked unless the source is truly third-party.
|
|
239
|
+
The branch-level template must either use the first-person acknowledgment plus
|
|
240
|
+
bridge, or omit the source line.
|
|
241
|
+
- If multiple senders may send the campaign, or the final sender/source-owner
|
|
242
|
+
match is ambiguous, do not assume `my post`, `Grace's post`, or any specific
|
|
243
|
+
first-person post voice. Omit the sender-owned source line until row-level
|
|
244
|
+
sender ownership is proven. Neutral low-certainty thread/source language is
|
|
245
|
+
only for truly third-party sources.
|
|
246
|
+
- Do not say `you commented` or name/comment on a comment unless comment text is
|
|
247
|
+
present in row data. If only reaction/support is known, use `showing some
|
|
248
|
+
love` or `showing support`.
|
|
232
249
|
- Every line must make the next
|
|
233
250
|
line feel earned: source/post signal -> relevance bridge -> product/problem
|
|
234
251
|
-> next step. If adjacent lines could be swapped, deleted, or joined with
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@ visibility: internal
|
|
|
6
6
|
|
|
7
7
|
# Create Campaign Workflow
|
|
8
8
|
|
|
9
|
-
Fast entry point. Run the active state machine in `core/flow.v2.json`;
|
|
9
|
+
Fast entry point. This is the fast entry point. Run the active state machine in `core/flow.v2.json`;
|
|
10
10
|
load deeper references only at the stage that needs them.
|
|
11
11
|
Load the compact flow for exact gates:
|
|
12
12
|
|
|
@@ -75,6 +75,7 @@ Revise or reject the sample when any of these happen.
|
|
|
75
75
|
- **category-level opener used when a per-lead signal exists** — if `lead-sample.json` carries any per-lead signal (post, hire, visible tool, topic engagement), the opener must reference it. Category-level openers of shape `"Most [category] teams still do X by hand"` are only acceptable when zero per-lead signal is in the sample. When a category-level opener is used as fallback, Findings must flag it explicitly
|
|
76
76
|
- **mind-reading from engagement signals** — a topic engagement, post, public activity, role, company, or hiring trigger does not prove buyer intent. Reject phrases like `"AI-GTM stack is clearly on your mind"`, `"you're clearly focused on..."`, `"obviously relevant"`, or `"already thinking about..."` unless that exact priority is explicitly present in `lead-sample.json`. Translate to low-certainty buyer context or omit the signal from copy.
|
|
77
77
|
- **source-y signal narration** — reject `"saw you on..."`, `"saw you engaging with..."`, `"you commented on..."`, `"your LinkedIn activity..."`, `"you might not remember the thread..."`, `"found you through [source] and your role looked close..."`, or any line that makes the recipient feel watched unless the chosen archived motion is intentionally self-aware about the signal. For sender-owned LinkedIn post sources, a light first-person acknowledgment is allowed when row data proves a reaction/comment: `"appreciate you showing some love on my post about [topic]"` or `"thanks for showing support on my [topic] post"`. Do not name a comment unless comment text is present. Follow the acknowledgment with a soft relevance bridge before broad pain/product copy, e.g. `"figured this might be relevant if LinkedIn is becoming more of a GTM channel for [company]"`. For third-party LinkedIn-post-sourced campaigns, a topic-level bridge is allowed when it explains why the note exists and stays apologetically uncertain: `"saw you in a few conversations about [topic], so may be off, but this seemed relevant."`, `"saw you in a few conversations around [topic], so hope this is relevant."`, or `"found you in a thread about [topic], so may be off, but this seemed relevant."` Reserve `"raise your hand"` language for explicit lead-magnet comments, replies, or opt-ins. Translate the signal into natural buyer context or omit it.
|
|
78
|
+
- **sender-owned source rendered as third-party** — hard fail when the source post is sender-owned and the draft says `"found you in a thread"`, `"saw you in a thread"`, `"saw you in conversations"`, or `"saw you in a few conversations"` as if the post were third-party. For sender-owned sources, the copy must either use a light first-person acknowledgment plus a soft relevance bridge, or omit the source line. If multiple senders may send the campaign, or the final sender/source-owner match is ambiguous, do not assume a specific `my post` voice or name a specific sender; omit the sender-owned source line until row-level sender ownership is proven. Neutral low-certainty thread/source language is only for truly third-party sources.
|
|
78
79
|
- **fake line-to-line continuity** — reject line stacks where the source acknowledgment, relevance bridge, product line, and CTA do not actually build on each other. Each line must make the next line feel earned. If two adjacent lines could be swapped, deleted, or joined with `"anyway"` without changing the meaning, the transition is fake. In sender-owned post campaigns, the chain should be: support on my post -> why this topic may matter for the company -> what the product/problem does about that same topic -> low-friction next step.
|
|
79
80
|
- **assumptive title-fit opener** — reject `"Your [role] role at [company] looked close to this problem"` or `"looked close to this outbound campaign problem"`. This asserts fit from title/company. Keep the apologetic uncertainty instead: `"may be off, but if [workflow] is relevant to what you're working on..."`.
|
|
80
81
|
- **internal-metric flex** — reject compute time, token/cache details, model names, agent-counts, orchestration internals, or similar process metrics unless the brief proves the buyer cares about that exact detail. `~5 min of compute per message` is not buyer value by itself.
|
|
@@ -230,8 +230,17 @@ Orchestration requirements:
|
|
|
230
230
|
before broad problem or product copy (`figured this might be relevant if
|
|
231
231
|
LinkedIn is becoming more of a GTM channel for [company/team]`). Block drafts
|
|
232
232
|
that jump straight from the acknowledgment into generic `a lot of teams...` or
|
|
233
|
-
`most teams...` pain. For
|
|
234
|
-
|
|
233
|
+
`most teams...` pain. For sender-owned sources, third-party thread framing is
|
|
234
|
+
blocked unless the source is truly third-party: reject `found you in a thread`,
|
|
235
|
+
`saw you in a thread`, `saw you in conversations`, or `saw you in a few
|
|
236
|
+
conversations`. The message must either use the first-person acknowledgment
|
|
237
|
+
plus bridge or omit the source line. Use the first-person acknowledgment plus
|
|
238
|
+
bridge only when the final sender and source owner are proven to match. If
|
|
239
|
+
multiple senders may send the campaign, or the final sender/source-owner match
|
|
240
|
+
is ambiguous, do not assume `my post` or name a specific sender; omit the
|
|
241
|
+
sender-owned source line until row-level sender ownership is proven. Neutral
|
|
242
|
+
low-certainty source language is only for truly third-party post sources; keep
|
|
243
|
+
those source references topic-level and low-certainty.
|
|
235
244
|
- pass the line-continuity gate before writing findings. Each message line must
|
|
236
245
|
make the next line feel earned: source/post signal -> relevance bridge ->
|
|
237
246
|
product/problem -> next step. If two adjacent lines could be swapped, deleted,
|
|
@@ -407,11 +407,42 @@ artifact.**
|
|
|
407
407
|
- `saw you raise your hand for {{signal_topic}}, so figured this was (hopefully) worth sending` only when the source was an explicit lead-magnet comment, reply, or opt-in. The parenthetical uncertainty is load-bearing; do not flatten it to `so figured this was worth sending`.
|
|
408
408
|
- `saw you raise your hand for {{signal_topic}} (creepy to reach out based on that, i know) - but this felt too on the nose to ignore` only when the source was an explicit lead-magnet comment, reply, or opt-in and the sender's voice can carry the cheekier aside
|
|
409
409
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
410
|
+
Before choosing the source opener, classify source ownership:
|
|
411
|
+
|
|
412
|
+
- `sender-owned-single`: one sender/client is known, the selected source post
|
|
413
|
+
was authored by that same person, and the row/list proves a reaction or
|
|
414
|
+
comment.
|
|
415
|
+
- `sender-owned-ambiguous`: the source appears sender-owned but the final
|
|
416
|
+
sender is not known, multiple senders may be used, or the source author does
|
|
417
|
+
not clearly match the specific sender voice.
|
|
418
|
+
- `third-party`: the source post/thread/conversation was authored by someone
|
|
419
|
+
other than the sender/client.
|
|
420
|
+
|
|
421
|
+
For `sender-owned-single` LinkedIn-post-sourced campaigns, it is acceptable to
|
|
422
|
+
thank the recipient for showing some love/support on the sender's post when
|
|
423
|
+
the row proves a reaction or comment. Keep it first-person, light, and
|
|
424
|
+
non-assumptive: `appreciate you showing some love on my post about
|
|
425
|
+
{{signal_topic}}` is acceptable; do not say `you commented` unless the row
|
|
426
|
+
proves comment text. If meaningful comment text exists in the row, a comment
|
|
427
|
+
callout is allowed only at topic level; do not quote or paraphrase the comment
|
|
428
|
+
unless the row text is available and the wording materially improves the
|
|
429
|
+
opener.
|
|
430
|
+
|
|
431
|
+
For `sender-owned-single`, third-party thread framing is a hard failure:
|
|
432
|
+
do not write `found you in a thread`, `saw you in a thread`, `saw you in
|
|
433
|
+
conversations`, or `saw you in a few conversations` unless the source is
|
|
434
|
+
truly third-party. The branch-level reusable template must either use the
|
|
435
|
+
first-person acknowledgment plus bridge, or omit the source line.
|
|
436
|
+
|
|
437
|
+
For `sender-owned-ambiguous` or multi-sender campaigns, do not assume the
|
|
438
|
+
message is from a specific person. Do not write `my post`, `Grace's post`, or
|
|
439
|
+
any first-person post acknowledgment unless the final sender/source-owner
|
|
440
|
+
match is proven for that row. Omit the sender-owned source line until row
|
|
441
|
+
generation can safely fill it. Neutral thread/source language is only for
|
|
442
|
+
truly third-party sources.
|
|
443
|
+
In short: do not assume the message is from a specific person when the final
|
|
444
|
+
sender/source-owner match is ambiguous.
|
|
445
|
+
|
|
415
446
|
Do not let the acknowledgment dead-end. Follow it with a soft post-topic to
|
|
416
447
|
buyer-context bridge before broad pain or product copy. Prefer:
|
|
417
448
|
`figured this might be relevant if {{channel_context}} is becoming more of a
|