Write Outreach logo

Write Outreach

OrganizationPopular
gooseworks-ai
write-outreach

Cold outreach a person sends to business buyers: email and LinkedIn sequences, a first line per prospect, reply and objection answers, and a read of replies. Use when the marketer says "write a cold email sequence", "what do I send to this list", "write LinkedIn messages for these leads", "how do I reply to this prospect" or "handle this objection", "reply to this demo request", "win back or reconnect with accounts that churned or went quiet", or "why is nobody replying to my outreach". Drafts only; the marketer sends from their own tool. Not for finding the people — use research-audience; not for emails to subscribers or users, or consumer win-back — use email-lifecycle.

Overview

Publishergooseworks-ai
Repositorygoose-skills
Skill namewrite-outreach
Stars
1.3K
Forks
219
Bundled files
11
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 11 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by gooseworks-ai on GitHub. Read the source before you install it.

Installation

Install the Write Outreach AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/gooseworks-ai/goose-skills/tree/main/skills/marketing/write-outreach
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git /tmp/goose-skills
mkdir -p .claude/skills
cp -r /tmp/goose-skills/skills/marketing/write-outreach .claude/skills/write-outreach
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Write Outreach in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Write Outreach on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Write Outreach is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

write-outreach

Turns a list, or a buyer group, into words a founder or seller can send this week: sequences per segment, a first line per person, replies and objection answers, and later what the replies say to fix. The craft is in the references; this file is the order of work.

The rule that matters most: write from evidence, send nothing. Every first line rests on a dated fact about that person or account; every proof line is signed off; every message has one ask. The marketer sends from their own mailbox and tool, after warming it up — GooseWorks' own inbox is not a cold-email sender.

What you get

  1. The outreach pack, in the shape and checks of the write-report skill. Outreach adds: the first move is who to send to first (with no list, that there is no one yet); decisions cover proof lines to sign off, the sender, the sending tool, daily volume and timing; with no list or on a first pack, the whole path and who does each step (references/handoff-and-compliance.md § The whole path); per segment the angle, the full sequence once (email and LinkedIn, with days) and 3 sample first lines; replies and objection answers; the before-you-send checklist with the one-line country summary; Sources say where each first line's facts came from and which proof was signed off and which cut. Every row's first line and finished messages go in the send file (and an appendix table when the marketer has no tool).
  2. A send file the marketer imports into their tool (one subject and body column per touch, merge fields filled) — references/handoff-and-compliance.md.
  3. Later, on request: reply drafts for real replies, and a read of results — what to fix in targeting, timing or message.

Before you start

Read research/market/positioning-<product>.md when present, else research/market/positioning.md, and its dated report. Carry the owner-selected launch direction into this work even when the live site/kit still uses earlier messaging. Unselected options stay proposals and every factual claim keeps its existing proof/approval status.

  1. Setup first: do the marketing-guide skill §1–2 (connect, brand, brain read) before anything else; the job line is "I write your outreach from what's saved about your brand." (get_started with wants: "more"; tool groups brand, files.)
  2. Read — free, no questions. Brain path: chapters 14 (rules — every [outreach …] and [outreach-copy …] one), 22 and 23 (what we've run, what is working) and the products chapter; gooseworks:brand_knowledge_search for outreach lessons, case studies, customer results and signed-off claims. Fallback: gooseworks:brand_read (summary, kit, products with prices, learnings) and gooseworks:knowledge_search for the same. Claims: the read step of the claims-gate skill. Workspace: research/audience/ — the newest <D>-<list>/list.csv and its report.md (the segments' angles), catch-all.csv, fit-definition.md, buyer-groups.md, voc-bank.md, ledger.csv, lessons/; outreach/ — earlier packs and results reads. The sender's voice card if one exists (the voice-card skill, read only). 2b. Since last time. (In results mode, after the paste is written to the ledger — references/run-memory.md.) The Start steps of the run-memory skill, job outreach, subject = the pack (references/run-memory.md): the last record for this pack (or, for a new pack, the brand's last outreach records), last run's recommendations checked against the ledger and the brain, and reply and meeting rates per segment and per opener recounted from the ledger — 3–5 lines that open the reply and the pack or read, and that this run acts on.
  3. Pick the mode from the ask — never ask which:
    • Sequences (default): a list, a segment or a buyer group → sequences per segment plus first lines per row.
    • Openers only: "first lines for these prospects" → one first line per row, from its signal and hook.
    • Replies: a prospect's reply pasted → the write-outreach-reply-reader skill for that one reply, then the draft answer.
    • Read results: stats or a batch of replies pasted → the write-outreach-reply-reader skill for the batch, then references/reading-results.md.
    • Consumers who signed up (a waitlist, app or newsletter sign-ups, shoppers): not cold outreach — one line pointing to email-lifecycle (the brand's own consented emails); this playbook writes only to business buyers.
    • Inbound replies: leads who asked the brand (consent_basis: asked-us from research-audience's score-a-list — demo requests, trial sign-ups at companies): a warm, prompt reply that names what they did and answers it, the ask matched to urgency (now: two times this week; today: a walkthrough of one feature; 24 hours: a useful resource) — never a cold sequence.
    • Win-back: churned business accounts → the win-back segment in references/angles-by-signal.md. Lapsed consumer customers → email-lifecycle, in one line.
  4. No list on file (no list.csv, no rows pasted) — whether or not buyer groups exist: still write the sequences for the saved buyer groups (lead first) or, with none, groups drafted from the site and brain, labelled provisional; each segment gets its default opener. The closing opens with the no-list shape (step 8). Never stop to ask for a list.
  5. Assume, don't ask: sender = the founder (from the brain) unless named, as a decision: whoever runs the buyer calls may be the better signer; their own mailbox; their sending tool is one decision, asked once (references/handoff-and-compliance.md § Your sending tool — read it when connected); about 30–50 emails a day per warmed-up mailbox in total (roughly 10–15 new people a day once a sequence runs). State each assumption in the decisions box.

Steps (sequences mode)

  1. Segments. Pick the row in references/outreach-by-company-type.md for the motion. Take the list's segments and angles from segments.csv next to list.csv (or the list's report.md), or the buyer groups. At most four segments in one pack; more → the top four by tier and value, the rest named as next. Each segment's angle: pain in the buyers' own words (from the quote bank, linked — no bank yet: two or three free searches for real posts, else our words labelled "not yet from buyers"), proof — one signed-off claim verbatim, or "proof needed: ", ask — one low-friction next step (references/email-craft.md § The ask). Timing check against the buyer's calendar: if it would land in their busiest weeks (DTC and retail from mid-November to Cyber Monday; accountants in tax season), make it the first decision: LinkedIn now with a January angle, or hold the emails.

  2. Sequence shape per segment from where the lead came from and its signal (references/sequences.md § Lead source → sequence): touches, channel per touch (email, LinkedIn connection, LinkedIn message), days between, and what each touch adds (never "just bumping this").

  3. Write. One worker per segment where the host supports it — given the write-outreach-draft-sequence skill pasted whole plus the segment's angle, rows and rules; at most four, one level, no web research beyond re-checking a hook's link. Otherwise segment by segment. Email rules: references/email-craft.md; LinkedIn: references/linkedin-craft.md; first line per signal: references/angles-by-signal.md.

  4. First lines per row. For every row in the list: one first line built on its signal and hook (the fact, why it matters to their pain), or — no hook — the segment's default opener, marked "no personal hook". Never invent a fact, a compliment or a mutual connection.

  5. Replies and objections. Per segment: the 6–8 replies the angle is most likely to draw and the answer to each (references/replies-and-objections.md) — positive, "send info", timing, "we use X", price, wrong person (ask for the referral), not interested, unsubscribe.

  6. Check with the write-outreach-outreach-qa skill: every proof line through claims-gate (cuts listed with the proof that would restore them), country rules per row (references/handoff-and-compliance.md § Country rules), length and character limits, one ask, no tracking-dependent advice, no banned hooks. Every price or offer in a message follows the guide's rule "Live facts" (the marketing-guide skill §3); a mismatch with the brain is flagged in decisions. Fix, then re-check.

  7. Deliver through write-report: the pack as a local file with a clickable link, the send file beside it, a copy saved with the save-to-brain skill (the pack's brand copy keeps the angles, sequences and replies but no person's name, company or first line — per-person text lives only in the local file and the send file) and a gooseworks:file_url link. Write each row's opener_id and sequence_id into the ledger (columns only; references/run-memory.md), then run-memory's End steps: the run record with the counts and the "send first" call as a recommendation with its test.

  8. One closing message, this shape (with no list, the first line is replaced by the no-list block below — never "Send first: <segment, N a day>" without people):

    Send first: <segment, how many people, which touch> — . · send file: · saved to your brand: open Decisions: · <sender and daily volume, if assumed> · paste the replies here as they come in — I'll draft answers and tell you what to fix.

    No list:

    Before you can send: you don't have anyone to send these to yet. Two ways on: (a) Say build the list — I'll find a first batch of about 50 right-fit companies and the buyer at the best of them (name, title, LinkedIn). A test you can read needs 300–500 accounts, so we build it in batches. I can't find or check email addresses yet, so you'll run them through an email finder (such as Apollo or Hunter) and a checker (such as ZeroBounce or NeverBounce) before sending. Start setting up a separate sending domain today — it needs 2–4 weeks of warm-up. (b) Already have a list? Paste or upload it and I'll write a first line for every person. then the links line and Decisions as above. (When the connector can find and check addresses, (a) says so instead.) The run record's recommendation is "build or paste the list".

  9. No schedule. A pack is a one-off job. Reading results is done when the marketer pastes them (suggest doing it after the first 100 sends or two weeks, whichever is first); that read is the same run-memory job and subject, so it starts from this pack's record.

Steps (replies and results)

  • One reply: classify it (the write-outreach-reply-reader skill), draft the answer in the sender's voice with one ask, and say the status it gives the row (outcomes-ledger's person statuses: replied, meeting, not-a-fit, bounced, unsubscribed, do-not-contact). Unsubscribe or "stop" → no reply draft beyond a one-line confirmation if their tool needs one, and the row is suppressed.
  • A batch or stats: deliver the read first. Pasted prospect rows that aren't in the ledger are added to it (outcomes-ledger, list_id = the paste's date) so their replies can be matched and suppressed. Counts only → the closing decisions ask who is behind each stop, angry reply, bounce and not-interested, with a Hold needed line meanwhile (references/reading-results.md § Counts only). reply-reader for every reply; then references/reading-results.md — rates by touch and segment, where objections cluster, what to fix (targeting, titles, timing, message, deliverability), with sample sizes said. Update the ledger and write lessons through the outcomes-ledger skill (entity: person). A rule the marketer states goes through the save-learning skill as [outreach-copy YYYY-MM-DD]. Deliver the read through write-report, opening with "since last time", then run-memory's End steps (the record's numbers per segment and per opener, the fixes as recommendations with review-by and test).

Approval gates

  • No questions before the first draft; decisions come after it.
  • New proof lines only through claims-gate's scoped sign-off; without it, plain product facts only.
  • Nothing is sent, connected, scheduled or posted — ever, by this playbook. Ledger statuses change only from what the marketer reports.

Output and write-back

ArtifactWhereRead by
Outreach packlocal gooseworks-reports/<brand-slug>/<D>-outreach.md; workspace outreach/<D>-<slug>/pack.md → Outreach pack — <slug> — <Brand> — <D> (keep-history)the marketer, the next run
Send filelocal gooseworks-reports/<brand-slug>/<D>-outreach-send.csv; workspace outreach/<D>-<slug>/send.csv (not imported — it holds people's data)the marketer's sending tool
Results readlocal gooseworks-reports/<brand-slug>/<D>-outreach-results.md; workspace outreach/<D>-<slug>/results.md → Outreach results — <slug> — <Brand> — <D> (keep-history; counts, rates and fixes only — no names, emails, reply text or per-reply rows); per-reply lines and the Hold / Find / Quote request lines in outreach/<D>-<slug>/results-working.md (not imported)the next pack, research-audience (re-scoring signals)
Run recordsruns/write-outreach/outreach/<pack-slug>/<D>.md → Run record — outreach — <pack-slug> — <Brand> — <D> (keep-history, via run-memory; counts, rates and links only)the next read or pack
Ledger statuses, lessonsresearch/audience/ledger.csv, research/audience/lessons/<D>.md (outcomes-ledger, entity: person)research-audience, the next pack

Done when

"Since last time" opened the reply (or "no earlier run"), rates per segment and per opener recounted from the ledger with sample sizes, and the run record saved with counts and links only. The pack passes write-report §3 and outreach-qa. Per segment: an angle in the buyers' words with a link, signed-off proof or "proof needed", one ask; a sequence of email and LinkedIn touches with days and what each adds; within the character limits; 6–8 replies and objection answers. Every list row has a first line resting on a dated fact, or says "no personal hook". Every row's country rule is applied (footer and opt-out on email; no email for rows that can't take one). The send file imports (one subject and body column per touch). With no list, the closing opened with the no-list block and named no send volume. Nothing was sent. In results mode: replies classified, rates by touch and segment with sample sizes, what to fix, ledger updated.

Out of scope

Finding people and emails — research-audience · emails to subscribers and customers, consumer win-back — email-lifecycle · creators — work-with-creators · sending, connecting, scheduling, warming up domains — not covered (the marketer's tool) · SMS, cold calls · scraping who liked or commented on posts · personal emails or phones · sales decks, battlecards — not covered yet.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Write Outreach AI skill do?

Cold outreach a person sends to business buyers: email and LinkedIn sequences, a first line per prospect, reply and objection answers, and a read of replies. Use when the marketer says "write a cold email sequence", "what do I send to this list", "write LinkedIn messages for these leads", "how do I reply to this prospect" or "handle this objection", "reply to this demo request", "win back or reconnect with accounts that churned or went quiet", or "why is nobody replying to my outreach". Drafts only; the marketer sends from their own tool. Not for finding the people — use research-audience;...

Why use Write Outreach on TypingMind?

Because you install it once and use it with any model. Write Outreach is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Write Outreach in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/gooseworks-ai/goose-skills/tree/main/skills/marketing/write-outreach. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Write Outreach?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Write Outreach?

As many as you like. As long as a model supports skills, you can use Write Outreach with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Write Outreach AI skill free?

Yes. It is published on GitHub by gooseworks-ai under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇