mcpField
S
signal-outbound

signal-outbound

github.com/victor-shulgaMarketing & growth146 installsUpdated 4d ago
Repository

About signal-outbound

signal-outbound is a skill for managing signal-led outbound, from account targeting through reply analysis. It sets gates at each stage and routes work by symptom, with checks for data quality and sending readiness.

Key features

  1. 01Plan a ten-step outbound path
  2. 02Set stop gates for each stage
  3. 03Route issues by campaign symptom
  4. 04Distinguish events from data points
  5. 05Evaluate results per hypothesis

Use cases

  1. 01Continue from an existing list or sequence
  2. 02Find failed gates in an outbound process
  3. 03Diagnose open-rate or reply problems
  4. 04Decide whether to change or scale a hypothesis

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/victor-shulga/outbound-engine-skills --skill signal-outbound

After installing, type/signal-outboundin Claude Code to confirm it loaded.

Details

From the project README

Signal Outbound — master

Classic outbound looks for companies that resemble your customers and tells them about a service. This runs the other way: find the companies that already described their own problem in public, and open with their words.

The richest source of those words is job postings. A company that writes "our application is a majestic monolith" paid to publish that sentence and will not walk it back. That is not a guess about pain. It is pain confirmed by a hiring budget.

Everything downstream follows from one split: the event tells you when to write, the data point tells you what to say.

Locating the caller

Ask at most three questions, and stop as soon as the answer is determined.

  1. What artifact do you already hold? Nothing / an ICP / a list of companies / a scored list / a sequence / a live campaign / replies coming in.
  2. Has anything been sent from these domains before? Never / warmed but not sent / sending now.
  3. What is the actual complaint? Only when something is running: no opens, no replies, replies that go nowhere, or good replies that die later.

Do not ask for a strategy deck or a budget. If they had those they would not be asking where to start.

The gates, in one place

Every step below depends on one condition. Route past a failed gate and the work after it is wasted, so name the gate out loud and say what skipping it costs.

GateConditionIf it fails
G1 — infrastructuredomains authenticated, mailboxes warmed, send caps setdeliverability-audit. With broken sending you cannot tell weak copy from a blocked domain, so every later measurement is unreadable.
G2 — a hypothesis existsyou can say who, on what trigger, with what offerhypothesis-builder. A campaign without a stated hypothesis cannot be judged later, only argued about.
G3 — volume300 accounts per event-signal hypothesis, 500 per data-point onebundle related signals, or widen the category. Report the shortfall rather than running a test that cannot produce a readable result.
G4 — the list is really the ICP90% spot-check passesback to account-sourcing. Two thirds of raw results are agencies, government and universities.
G5 — a reason to write nowrows carry a dated signal or a data point with a sourcesignal-research. Without it, the no-signal queue has nothing to open with and the campaign is a mass mailing wearing a first name.
G6 — contactableverified addresses, or the LinkedIn route confirmedwaterfall-enrichment. Enrich only what already passed — it is the expensive step.
G7 — no meeting askevery touch ends on an interest questionback to sequence-writer.
G8 — the file is cleanfinal CSV passes the seven-layer check: no suppressed contacts, no invalid addresses, every variable renderedpre-launch-data-check. One current client or one broken {{first_line}} in the upload costs more than a day's delay.

The path

Ten steps. Each ends in an artifact, and four of them end in a gate that stops the run.

#StepRoute toEnds with
1ICP and tiersgtm-market-icp-persona ⧉tier matrix + personas + anti-ICP
2Offer and entry rungoffer-factory ⧉5–6 scored bets, entry rung chosen
3Signal catalogsignal-catalog50 triggers, scored, bundled
4Hypotheseshypothesis-builder10 scored, three picked · GATE: volume
5Account listaccount-sourcing, then signal-research over itscored CSV with dated evidence · GATE: 90% ICP spot-check
6People and emailwaterfall-enrichmentcontacts with verified addresses
7Sequencesequence-writer8 touches, both personas · GATE: no meeting ask
8Personalizationpersonalization-pipelinetwo generated fields + confidence gate
9Base checkpre-launch-data-checkGO verdict + rows-to-fix file · GATE: clean file
10Launchdeliverability-auditSPF/DKIM/DMARC, warm-up, send caps

Running later: weekly-outreach-report for the weekly read, reply-audit when replies accumulate, ab-test-analyzer for angle tests.

⧉ = lives in a different plugin. gtm-market-icp-persona is in gtm-strategy-skills, offer-factory in gtm-skills. Without them installed, run steps 1–2 by hand — the path still works, it just loses the scaffolding for those two artifacts.

The four rules that carry the whole thing

A state signal does not work alone. "Your framework is out of support" earns "we know, thanks." Pair it with an event — "you raised in March, that framework lost support in March" — and it becomes a conversation. Step 3 forces this distinction; do not let it collapse.

Volume gate: 300 accounts per event-signal hypothesis, 500 per data-point hypothesis. Under that, the test cannot produce a readable result. Bundle related signals under one email theme, or park it. If no bundle clears the gate, the niche was drawn too narrowly — turn the vertical from a targeting filter into a proof selector and widen.

No meeting ask anywhere. Not in email one, not in the breakup, not on LinkedIn. The only job of a cold touch is a reply.

Two generated fields, never a generated letter. A fully generated email drifts to the mean: correct, smooth, faceless. A fixed skeleton holds the voice while the model does the one thing a template cannot — read someone else's document and form a thought about it.

Where runs actually fail

The vertical was used as a filter when it should have been the proof. A niche with strong case studies but only a few hundred companies is an ABM target, not a campaign. Detect the signal across the wider category and show the case study that matches the reader's vertical. Catch this at step 4, not after the list comes back empty.

Two thirds of raw sourcing results are noise — agencies, government contractors, universities. No vendor flag catches them. Budget time for an explicit exclusion pass at step 5, and diff what got dropped: over-filtering quietly removes real accounts.

The quote was never read by a person. Roughly one keyword match in seven is a false positive — "building a legendary legacy" is not a modernization signal. Ten seconds per account before enrichment.

Personalization was attempted inside the sequencer. It cannot be done there. If step 7 produced a first line that carries a thought, step 8 is mandatory, not optional.

The list was enriched before it was filtered. Enrichment is the expensive step. Spend it only on accounts that already passed.

When a live campaign is underperforming, route by symptom

The complaint points at a stage. Do not restart from step 1.

SymptomMost likely stageRoute
Almost nothing opensinfrastructure, not copydeliverability-audit
Opens fine, no repliesthe opener has no reason to existsignal-research, then rewrite the no-signal queue on data points
Replies, but all "not now"targeting is right, timing is notreply-audit, then revisit signals at step 3
Replies, but all "tell me more" that diethe copy is vague — they are curious about you, not about their own problemreply-objection-handler (read the tier mix), then the sequence
Good replies that go nowhere laterthe handoff after the replylead-scoring, then reply-objection-handler
Numbers look fine, nothing closesthe offer, not the outboundsay so plainly and stop routing — this bundle cannot fix an offer

That last row matters. A router that always finds an outbound answer is useless, because sometimes the honest answer is that outbound is not the broken part.

Reading the results

StateConditionAction
Killreplies under 1.5% or interest under 17%change the signal or the angle, not the copy
Optimizeinterest 17–30%new angles, tighter filters
Scaleinterest above 30%add a channel, raise volume

Measure per hypothesis, never per campaign. A campaign mixing two signals reports an average that describes nothing.

Working ceiling on a signal campaign is around 10% positive replies. Vendor-published figures of 35–40% are marketing.

Cost, so nobody has to guess

Roughly 2.5 credits per send-ready lead plus pennies per posting scanned. A 300-lead batch lands near 750 credits and a few dollars of scraping. Say this early — teams routinely assume an order of magnitude more and scope down for no reason.

Enterprise intent platforms starting at $30k/year do not pay back at this volume. Name them, price them, move on.

What never enters the machine

The top 20–30 accounts by score. A person writes those. Automation takes the middle, not the peak.

When someone arrives mid-path

Ask what artifact they already hold, then enter at the next step. Do not restart at step 1 to be thorough — check the existing artifact against its own gate and move forward. A list with no proof quotes goes back to step 5; a sequence with a calendar link goes back to step 7.

Hand off properly

End every run with three lines, no more:

Where you are: [step]
Gate: [met / failed — which one, and what skipping it costs]
Next: run `[skill]` — [one line on what it produces]

Then stop. Do not pre-empt the skill's own questions or summarise what it will say. When someone returns with the same complaint twice, do not route them to the same skill twice — name the assumption that is probably wrong instead.

Comments

Markdown supported