| name | anysite-outreach |
| description | Write COLD first-touch and follow-up outreach (email, LinkedIn DM) grounded in a real, dated detail collected by the other anysite skills - a funding round, a job change, a recent post, a competitor switch. Not generic personalization. Turns "we found the contact" into "here's the message". Use when the user wants to draft cold outreach, a first-touch email/DM, a follow-up sequence, or subject lines - "напиши письмо", "cold email", "аутрич", "холодное сообщение". NOT for replying to an inbound lead or an existing thread (that needs a real answer, not this cold formula - see anysite-crm-inbound). Drafts text only; the operator sends via their own tool. |
Outreach
The other skills end at "found the contact, here's the email". This one writes
the message — and its value is that the message rides a specific, dated fact you
already collected, not a generic template every competitor also sends.
The rule behind everything: could this exact message be sent to another
company? Yes → generic, rewrite or don't send. No → ready. This "mental test"
is the skill's core; run it literally on every draft.
Step 0 — the offer (once per user, before any draft)
The message has three slots: [their detail] — [your offer, one line] — [question].
The middle slot is about the SENDER, and no other skill in the pack knows it.
Establish it once and reuse:
- what you sell, in one plain line;
- one number that matters (a price, a metric) — optional but strong;
- 1–2 proof points (a named customer, a hard figure) for touches 3–4;
- words to avoid (competitor names in touch 1, internal jargon).
Ask the user if it isn't already saved. Store it next to the CRM profile
(~/.claude/skills/anysite-crm-profile/) so future sessions skip the question.
(Do not import anysite's own pitch — "$1 per 1k", "don't mention LinkedIn" are
that internal playbook's rules, not yours; see the gold examples file only for
STYLE, not content.)
Where the detail comes from — and it must be fresh
You already have these from the sourcing/signal skills. A detail without a date
is not a detail — stale facts are worse than none ("congrats on the round" about a
2021 raise reads as a bot). Freshness gates:
| Source skill | Detail | Fresh if |
|---|
anysite-crm-champions | job change / were your champion at | ≤180 days |
anysite-crm-signals | funding round, exec hire, hiring surge, layoff, news | ≤90 days, and DATED |
anysite-crm-competitor-intel | uses + a pain from its reviews | pain quote is timeless; usage claim must be PROVEN |
anysite-crm-account-brief / anysite-people-sourcing | a recent post/comment, a stated priority | post ≤30 days |
anysite-company-sourcing | homepage quote, product name, a specific metric | timeless |
Two traps proven on live data:
secondary_market / post_ipo funding rows are NOT a raise — don't
congratulate. Take the newest row whose type is a real round AND whose amount is
non-null AND whose date is within the gate. (Fireflies' newest funding_rounds
row was a 2025 secondary with money_raised_usd: null; the real raise was 2021.)
- Competitor usage from technographics is a SAMPLE, not proof. Claim "you use
X" only with direct evidence (their job post requiring it, their review, a case
study). Otherwise phrase as a hypothesis or drop it.
No fresh, specific detail → do NOT manufacture one. Manufactured insight reads
as mansplaining. Either ask the user for a category angle to use as a plainly
generic template, or mark the lead "weak data, skip" and say so. (There is no
built-in template library — don't promise one.)
The formula (first touch)
[one detail about THEM] — [your offer, one line] — [one simple question]?
Constraints (violate none):
- ≤2 sentences, ~25–40 words. Five seconds to read. This holds for enterprise
too — short cold copy converts on every segment.
- One detail — but a detail can be a single COMPOUND thesis built from a few
facts (anchor + competitor + pain is ONE displacement angle, not three details;
it passes the mental test precisely because the combination is non-transferable).
- One number of YOURS. A number inside the detail ("across 4 channels", "back
after 5 years") doesn't count against this — it's theirs.
- End on a question, not a CTA. "worth a look?" / "open to a test?"
- Plain language. No analyst-speak, no sycophancy ("you say X — agreed"), no
"Saw…/I noticed…" openers (mass-mail tell).
Modulate by seniority (ATL vs BTL)
search_sql_users returns seniority — use it. To a CXO/VP, the offer line is a
business outcome or risk ("keeps data cost invisible as you scale"); to an IC/
manager, it's the workflow specifics they own ("fresh records into your sequence
without the monthly credit cliff"). Same detail, different value slot. This is the
highest-leverage upgrade over a one-size message.
Channel differences
- Email: give 2–3 subject options (2–4 words, lower-case, the detail itself —
"your series b", "stale lists" — never the pitch; run the mental test on the
subject too). But opens follow the subject while REPLIES follow the first line —
make the first line carry the detail, not a greeting. Deliverability today is
domain reputation + SPF/DKIM/DMARC + warmup, not word-filters — so the real
advice is "confirm domain auth and warmup" and "keep trigger words ('free',
'guarantee') out of the SUBJECT and avoid links in touch 1". Legal: cold
commercial email needs a working opt-out, sender identity and a physical address
(CAN-SPAM; EU/UK also a legitimate-interest basis) — the unsubscribe line sits
OUTSIDE the 25–40 word count.
- LinkedIn DM: lower-case start, no subject, and don't write the word
"linkedin" in the body (moderation). Even tighter.
Email address gate
Send only to a WORK email confirmed against the person's CURRENT company domain.
Note which cascade step it came from (anysite-mcp → Email finding): only step 2
(user_find_email_by_url) returns valid_email/email_status; step 1
(user_email) has no validation and its found is always true — treat step-1
addresses as unverified (send at own risk or run them through step 2 first).
The sequence (4 touches, one idea each)
| # | Job | Length | Contents |
|---|
| 1 Hook | catch them with the detail | 25–40 w | detail + offer line + simple question |
| 2 Math/Fit | the value in THEIR numbers | 30–45 w | their scale × the stakes + "worth comparing?" |
| 3 Proof | one proof point | 30–50 w | a named customer + one figure + soft CTA |
| 4 Break-up | close, door open | 20–30 w | "no worries" + a low-friction offer if ever useful |
Incentives (a trial, a credit grant) belong in touch 3–4, never touch 1.
Voice-of-customer: quote, don't paraphrase
When anysite-crm-competitor-intel has a verbatim review line, use it verbatim —
a real "after your credits are gone it's a brick tool" beats any paraphrase. Keep
the source; never invent a quote.
Self-check before it ships (all must pass)
Fail one → rewrite. Deterministic, ported from the validate_hook discipline.
Boundaries & routing
- Cold only, drafts only. For an inbound lead or a live thread, answer the
question and offer a slot — don't apply this formula;
anysite-crm-inbound
scopes the inbound case. This skill produces text; the operator sends.
- Supersedes the ad-hoc outreach lines in
anysite-lead-generation and
anysite-vc-analyst — when the task is "write the cold message", use this skill's
rules, not theirs.
- Storing the copy:
anysite-crm-* can write it to a mapped field (e.g.
hook_text) via the profile — dry-run first, per the Writing rules.
- Style reference (gold examples + four failure modes):
sales_agent/anysite_hook_style_guide.md — for STYLE, not for anysite's offer.