Skill 寫法圖鑑

outreach-composer

Anthropic | 行銷與 SEO | 原文 | Apache-2.0

學老闆的語氣寫開發信和跟進序列,寄送前一律等核准

中文翻譯

---
name: outreach-composer
description: >
  撰寫潛在客戶的開發信和後續跟進序列,讀起來像老闆本人寫的,不像 AI 寫的。
  從老闆自己寄出的信件學出語氣檔案(voice profile),讓每一封訊息都扣著該
  潛在客戶的某個具體細節,在後面接上跟進序列,每一次寄送都先排進佇列等核准,
  並把每一次接觸記錄到 CRM。沒有信件 connector 時會以只擬稿的方式執行,文案
  可以貼到任何地方。只要老闆需要聯絡潛在客戶或既有客戶就使用,包括這些說法:
  「write this cold email」、「draft a follow-up」、「reach out to these
  leads」、「what do I say to them」、「I need a sequence for this list」、
  「nudge the people who didn't reply」,或「write it but don't make it sound
  like a robot」。只要開發文案是交付物,哪怕只有一封訊息,也該用它。
allowed-tools: Read, WebFetch
---

# 開發信撰寫(Outreach Composer)

寫出老闆真的會用自己名字寄出去的開發信。

老闆們最常重複提出的條件,就是某種版本的「不要聽起來像機器人」。老闆不會寄出讓自己丟臉的文案,所以一封讀起來像生成的訊息,不管結構多完整都毫無價值。語氣的擬真是這裡的產品本身,不是最後的潤飾。

## 步驟 1:動筆之前先學語氣

先讀[共用的語氣檔案](../../shared/voice-profile.md)。如果那裡已經有檔案,就直接用,並跳到步驟 2。每次都重建只會消耗老闆的耐心,還會讓語氣漂移。

如果沒有檔案,就用證據建一份:

- **Gmail 或 Microsoft 365**:拉 15 到 30 封老闆寄給客戶和潛在客戶的信。這是遠遠最好的來源。先確認信箱是老闆本人的(`../../shared/tenant-scope.md`);別的租戶(tenant)寄出的信會教出錯的語氣。
- **HubSpot**:記錄下來的 email 和備註
- **他們的網站和任何公開發表的文章**:比較弱,但是真實的
- **貼上來的範例**:請對方給三封他們滿意的信

然後抽出具體、可以模仿的特徵:句子長度、問候和結尾署名的習慣、縮寫用法、有沒有用驚嘆號、提出請求有多直接、怎麼稱呼自己的產品、地方用語,還有他們絕對不會做的事。把檔案存起來,讓之後每次執行都沿用。

**沒有任何樣本時,要直說,並請對方提供三封。** 用猜出來的語氣寫,產出的正是老闆想避開的那種通用文案。

## 步驟 2:讓每一封訊息扣著真實的事

個人化的 email 不是把公司名稱套進範本。而是只有寄給那個人才說得通的信。

對每位潛在客戶,找出具體的切入點。依強度排序:

1. 來自 `lead-finder` 的購買訊號:申請了許可證、開了新據點、刊登了職缺
2. 共同的人脈或客戶
3. 老闆真的能談的、關於他們業務的某個具體細節
4. 老闆為類似客戶創造過的相關成果

如果除了類別相符之外沒有任何切入點,就寫一封更短、明白承認是陌生開發的信,並且說明它是陌生開發。假裝熱絡的開場比誠實的陌生開發更糟,因為它讀起來像大量套印的郵件,第一行就毀掉可信度。

**Apollo 或 Clay 有連接時,可以補上讓薄弱切入點變得可用的聯絡人和公司細節**,例如職位、任職時間、公司規模、技術堆疊,也就是讓訊息不致讀起來太籠統的那種具體資訊。這是補強資料,本身不構成切入點。

## 步驟 3:寫序列

依情境的結構請讀 `reference/sequence_patterns.md`。預設值:

- **陌生開發**:3 週內 4 封訊息
- **熱絡或轉介**:2 週內 3 封訊息
- **會議後跟進**:10 天內 2 封訊息
- **重新喚起沉寂的客戶**:4 週內 3 封訊息

序列裡的每一封訊息都必須加入新的東西。整封內容只有「just bumping this」的跟進,會訓練對方忽略寄件人。每一次接觸都要給出新的存在理由:不同的角度、相關的成果、真正有用的資訊,或是乾淨的收尾。

長度規則:第一封訊息要少於 120 字。這個客群的老闆賣給的是在工作空檔用手機讀信的人。

## 步驟 4:用垃圾文案測試做自我檢查

給任何人看之前,先把每一份草稿對照 `reference/slop_test.md` 檢查。它能抓出讓文案讀起來像機器寫的那些特定模式。

最快的檢查:

- 老闆會把這句話大聲說出口嗎?不會的話就重寫。
- 這封訊息只改兩個字,就能寄給任何其他公司嗎?如果能,就不算個人化。
- 開頭是不是稱讚對方的業務?刪掉,每個人都這樣做,每個人都認得出來。
- 這裡有沒有哪個詞,是老闆這輩子從沒用過的?砍掉。

這一步不是選擇性的,也不是走形式。它決定了文案是會被寄出去,還是被人手動重寫,而這個 skill 存在的目的就是防止後面這個結果。

## 步驟 5:呈現給老闆核准

任何東西排進佇列之前,先展示完整序列。依照 `reference/output_template.md`。

完整呈現第一封訊息,其餘序列則呈現主旨行和每一封採取的角度。老闆會想仔細讀第一封,其他的只想大致掃過整體輪廓。

**依老闆儲存的輸出偏好交付,絕對不要預設產出 markdown 檔。** 檢查 `## Business context` 區塊裡的 `Output preference`(共用風格指南規則,`../../shared/artifact-style.md`):

- **視覺化 artifact(預設):** 符合 house style 的 HTML 頁面,每位潛在客戶或每個序列一張卡片,每封訊息做成一個可複製區塊,這樣任何一封都能單獨複製後手動寄出。
- **docx / md / notion / canva 偏好:** 用該格式交付同樣的內容:DOCX 或 markdown 檔、透過 connector 建立的 Notion 頁面(指定目的地,絕不覆寫),或透過 Canva connector 建立的 Canva Doc(每次執行都建新設計,用日期命名;表格改成清單);如果 Notion 或 Canva 沒連,就退回視覺化 artifact,並說明這就是原因。
- **Best for skill:** 用視覺化 artifact,因為可複製區塊就是重點。

無論哪種情況,聊天裡都保留重點回顧和核准的提問。

然後問要改什麼。預期會有修改,第一版是提案,不是交付。把每一次修改都回填到語氣檔案裡,因為改過一次的地方,不該再改第二次。

## 步驟 6:排進寄送佇列,要核准,一次一道關卡

用老闆的名義寄 email,是這個 skill 裡後果最重的動作。

- **沒有針對該批次的明確同意,絕對不准寄出**
- **詢問之前先說清楚會發生什麼**:幾封訊息、寄給誰、什麼時間表、從哪個帳號寄
- **絕對不要寄給標記為「inferred(推測)」的聯絡人**,除非另外標出來。大量退信會損害老闆的寄信網域好幾個月,這種傷害還會波及他們真正的客戶郵件
- **核准第一封,不等於核准整個序列。** 後續跟進要另外確認,或設成草稿,讓老闆逐封放行

**Mailchimp 是擬稿的目的地,不是寄送的路徑。** 當它有連接時,核准過的序列可以存進 Mailchimp 當作活動內容,由老闆自己在那裡排程。
有三件事管著這件事:

- **它不能寄。** 這個 skill 放進 Mailchimp 的任何東西都不會自己寄出。要由老闆在 Mailchimp 裡按下寄送。
- **它的 planner 拒絕單一活動。** Mailchimp 的活動 planner 只會產出多通路計畫,也就是 email 加簡訊加社群。單發的 email 在這裡用老闆的語氣寫,然後存成內容。不要把單一訊息送進 planner,也不要把它的拒絕回報成失敗。
- **不要假設你讀得到受眾名單。** 除非某次呼叫真的回傳了,否則就當聯絡人名單不可用。收件人名單照舊從 CRM 或老闆自己的檔案建立。

**沒有信件 connector 時,以只擬稿的方式執行。** 產出可以貼到任何地方的排好版文案。這是完整的成果,不是降級的成果,反正很多老闆本來就偏好從自己的信件軟體寄出。

## 步驟 7:記錄下來

連了 HubSpot 時,把每一次接觸都記錄進去:寄了什麼、什麼時候、寄給誰、在序列中的哪個位置。沒有 CRM 的話,就把紀錄存在檔案裡,這樣下次執行才知道誰已經被聯絡過。

用同一個開場白聯絡同一個人兩次,是一個看得見、又可以避免的錯誤。

## 不要做的事

- **不要在學會語氣之前動筆。** 後面所有東西都依賴它。
- **不要用對方業務的奉承話開場。** 這是最明顯的破綻。
- **不要寄只寫「checking in」的跟進。** 每一次接觸都要有存在的價值。
- **不要把公司名稱套進範本就說是個人化。**
- **沒有針對該批次的明確核准,不要寄出任何東西。**
- **不要宣稱老闆實際上沒有創造過的成果。** 開發信裡捏造的案例研究是嚴重的問題,不只是誇大。

## 寄送之後

序列已核准、已排進佇列或已存成草稿,每一次接觸都已記錄。很自然的下一步是「update the CRM」,`crm-autopilot` 會在回覆進來時持續更新下一步的佇列。附近還有:「leads are going cold」(`speed-to-lead`)能快速抓到回應,以及這份名單用完時的「find me customers」(`lead-finder`)。最多提議三個,而且這個 session 裡老闆已經拒絕過的提議就跳過。

## Reference 檔案

- [`../../shared/voice-profile.md`](../../shared/voice-profile.md):老闆的語氣,所有用他名義寫東西的 skill 共用
- `reference/sequence_patterns.md`:依情境區分的結構與節奏
- `reference/slop_test.md`:抓出機器寫的文案的檢查清單
- `reference/output_template.md`:序列如何呈現以供核准
- `reference/gotchas.md`:會讓老闆不想再用這個 skill 的失敗模式

## 使用沒列出來的工具

這個 skill 裡提到的 connector 是測試過的路徑,不是一道牆。如果老闆想讓這個流程用沒連接或沒列出來的工具,就提議 `build-connector`:它會先查 connector 目錄,找不到才透過 Zapier 連接,絕不直接對原始 API 手刻。連線建立之後,這個工具就像任何其他選用的 connector 一樣加入這個 skill,並遵守同樣的核准關卡。

英文原文

---
name: outreach-composer
description: >
  Writes prospect outreach and follow-up sequences that sound like the owner
  wrote them, not like an AI did. Learns a voice profile from the owner's own
  sent mail, grounds every message in something specific about that prospect,
  builds the follow-up sequence behind it, queues every send for approval, and
  logs each touch to the CRM. Runs draft-only when no mail connector is
  available, so the copy can be pasted anywhere. Use this whenever the owner
  needs to reach out to prospects or customers — including phrasings like
  "write this cold email," "draft a follow-up," "reach out to these leads,"
  "what do I say to them," "I need a sequence for this list," "nudge the people
  who didn't reply," or "write it but don't make it sound like a robot." Reach
  for it whenever outreach copy is the deliverable, even for a single message.
allowed-tools: Read, WebFetch
---

# Outreach Composer

Write outreach the owner would actually send under their own name.

The single most repeated condition owners set is some version of "without sounding like a bot." Owners will not send copy that embarrasses them, so a message that reads as generated is worth nothing regardless of how well structured it is. Voice fidelity is the product here, not a finishing touch.

## Step 1 — Learn the voice before writing anything

Read [the shared voice profile](../../shared/voice-profile.md) first. If a profile already exists there, use it and skip to Step 2 — rebuilding it every time wastes the owner's patience and produces drift.

If there is no profile, build one from evidence:

- **Gmail or Microsoft 365** — pull 15 to 30 of the owner's own sent messages to customers and prospects. This is the best source by a wide margin. Confirm the mailbox is the owner's first (`../../shared/tenant-scope.md`); another tenant's sent mail would teach the wrong voice.
- **HubSpot** — logged emails and notes
- **Their website and any published writing** — weaker, but real
- **Pasted examples** — ask for three emails they were happy with

Then extract the specific, imitable traits: sentence length, greeting and sign-off habits, contractions, whether they use exclamation marks, how direct the ask is, what they call their own product, regionalisms, and the things they never do. Save the profile so every later run inherits it.

**Without any sample, say so and ask for three.** Writing in a guessed voice produces exactly the generic copy the owner is trying to avoid.

## Step 2 — Ground each message in something real

A personalized email is not one with the company name merged into a template. It is one that could only have been sent to that person.

For each prospect, find the specific hook. In order of strength:

1. The buying signal from `lead-finder` — a permit filed, a location opened, a role posted
2. A shared connection or customer
3. Something specific about their business the owner can genuinely speak to
4. A relevant result the owner produced for a similar customer

If no hook exists beyond category fit, write a shorter, plainly cold message and say it is cold. A fake-warm opener is worse than an honest cold one, because it reads as a mail merge and destroys credibility in the first line.

**Apollo or Clay, when connected, can fill in the contact and company detail that makes a thin hook usable** — role, tenure, company size, tech stack — the kind of specific that keeps a message from reading as generic. Enrichment data, not a hook on its own.

## Step 3 — Write the sequence

Read `reference/sequence_patterns.md` for structure by scenario. Defaults:

- **Cold outreach** — 4 messages over 3 weeks
- **Warm or referral** — 3 messages over 2 weeks
- **Post-meeting follow-up** — 2 messages over 10 days
- **Re-engagement of a quiet customer** — 3 messages over 4 weeks

Each message in a sequence must add something new. A follow-up whose entire content is "just bumping this" trains people to ignore the sender. Give every touch a fresh reason to exist: a different angle, a relevant result, a genuinely useful piece of information, or a clean close-out.

Length rule: first message under 120 words. Owners in this segment sell to people who read on their phone between jobs.

## Step 4 — Self-check against the slop test

Before showing anything, run every draft against `reference/slop_test.md`. It catches the specific patterns that make copy read as machine-written.

The fastest checks:

- Would the owner say this sentence out loud? If not, rewrite it.
- Could this message be sent to any other company with two words changed? If yes, it is not personalized.
- Does it open with a compliment about the prospect's business? Delete it — everyone does this and everyone recognizes it.
- Is there a phrase here the owner has never used in their life? Cut it.

This step is not optional and it is not a formality. It is the difference between copy that gets sent and copy that gets rewritten by hand, which is the outcome the skill exists to prevent.

## Step 5 — Present for approval

Show the full sequence before anything queues. Follow `reference/output_template.md`.

Present message one in full, then the rest of the sequence with subject lines and the angle each takes. Owners want to read the first one closely and skim the shape of the rest.

**Deliver per the owner's stored output preference — never default to a markdown file.** Check the `## Business context` block's `Output preference` (shared style guide rule, `../../shared/artifact-style.md`):

- **Visual artifact (the default):** an HTML page in the house style — one card per prospect or sequence, each message as a copy block so any single message can be copied and sent by hand.
- **docx / md / notion / canva preference:** deliver the same content in that form — a DOCX or markdown file, a Notion page created via the connector (named destination, never overwriting), or a Canva Doc created via the Canva connector (a new design each run, named with the date; tables become lists); fall back to the visual artifact if Notion or Canva is not connected — and say that is why.
- **Best for skill:** use the visual artifact — the copy blocks are the point.

Chat keeps the recap and the approval question in every case.

Then ask what to change. Expect edits — the first pass is a proposal, not a delivery. Fold every edit back into the voice profile, because a correction made once should not have to be made again.

## Step 6 — Queue sends, with approval, one gate at a time

Sending email under the owner's name is the highest-consequence action in this skill.

- **Never send without an explicit yes** for that specific batch
- **State exactly what will happen** before asking: how many messages, to whom, on what schedule, from which account
- **Never send to a contact marked "inferred"** without flagging it separately. Bounces at volume damage the owner's sending domain for months, and that damage reaches their real customer mail
- **Approval for message one is not approval for the sequence.** Confirm the follow-ups separately, or set them to draft and let the owner release each

**Mailchimp is a drafting destination, not a send route.** When it is connected, an approved
sequence can be saved into Mailchimp as campaign content for the owner to schedule there.
Three things govern that:

- **It cannot send.** Nothing this skill puts into Mailchimp goes out on its own. The owner presses send in Mailchimp.
- **Its planner refuses single campaigns.** Mailchimp's campaign planner only produces multi-channel plans — email plus SMS plus social. A one-off email is written here, in the owner's voice, and saved as content. Do not route a single message through the planner and do not report a refusal as a failure.
- **Do not assume you can read the audience list.** Treat the contact list as unavailable unless a call actually returns it. Build the recipient list from the CRM or the owner's own file, as today.

**Without a mail connector, run draft-only.** Produce the copy formatted to paste anywhere. This is a complete outcome, not a degraded one — plenty of owners prefer to send from their own client anyway.

## Step 7 — Log it

Log every touch to HubSpot when connected: what was sent, when, to whom, and where it sits in the sequence. Without a CRM, keep the record in a file so the next run knows who has already been contacted.

Contacting someone twice with the same opener is a visible, avoidable mistake.

## What not to do

- **Do not write before learning the voice.** Everything downstream depends on it.
- **Do not open with flattery about their business.** It is the single clearest tell.
- **Do not send a follow-up that says only "checking in."** Every touch earns its place.
- **Do not merge a company name into a template and call it personalized.**
- **Do not send anything without an explicit approval for that batch.**
- **Do not claim results the owner has not actually produced.** Invented case studies in outreach are a serious problem, not an exaggeration.

## After the send

The sequence is approved, queued or drafted, and every touch is logged. The natural next step is "update the CRM" — `crm-autopilot` keeps the next-step queue current as replies come in. Also nearby: "leads are going cold" (`speed-to-lead`) to catch the responses fast, and "find me customers" (`lead-finder`) when this list runs dry. Offer at most three, and skip any offer the owner already declined this session.

## Reference files

- [`../../shared/voice-profile.md`](../../shared/voice-profile.md) — the owner's voice, shared by every skill that writes in their name
- `reference/sequence_patterns.md` — structure and cadence by scenario
- `reference/slop_test.md` — the checklist that catches machine-written copy
- `reference/output_template.md` — how sequences are presented for approval
- `reference/gotchas.md` — the failure modes that get owners to stop using this

## Using a tool that isn't listed

The connectors named in this skill are the tested paths, not a wall. If the owner wants this flow to use a tool that isn't connected or listed, offer `build-connector` — it checks the connector directory first and connects through Zapier otherwise, never hand-building against a raw API. Once the connection exists, the tool joins this skill like any other optional connector, under the same approval gates.