outreach-sequence-builder について
outreach-sequence-builderは、購買シグナルに基づくB2B営業アプローチを作成するスキルです。複数チャネルの計画とメール、LinkedIn、電話の文面を作り、Composio経由でGmailの下書きも作成できます。
主な機能
- 017種類の購買シグナルを分類
- 024~6回のマルチチャネル計画
- 03メール、LinkedIn、電話文面の作成
- 04文字数と未入力箇所の確認
- 05各接点に異議への対応を配置
- 06Composio経由のGmail下書き作成
活用シーン
- 01見込み顧客の資金調達ニュースへのフォロー
- 02イベントでの面会後の営業計画
- 03採用動向に基づく企業への連絡
- 04個別化した営業シーケンスの準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ varnan-tech/ opendirectory --skill outreach-sequence-builderインストール後、Claude Code で/outreach-sequence-builderを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.env.exampleREADME.mdevals/evals.jsonreferences/output-template.mdsequence-format.mdsignal-playbook.md詳細
アウトリーチシーケンスビルダー
購買シグナルを受け取り、パーソナライズされたマルチチャネルのアウトリーチシーケンスを作成します。メール、LinkedIn、電話で使える、すぐに送信できるメッセージを出力します。
重要なルール: すべてのメッセージは、読み込んだコンテキストに基づいて完全に記入する必要があります。変数として使用できるのは {{first_name}} のみです。[Company Name] のような括弧付きの記載や、[INSERT PAIN POINT] のようなプレースホルダーは使用できません。記入に必要な情報がない場合は、作成前に質問してください。プレースホルダーが未記入のままメッセージを送信してはいけません。
ステップ 1:セットアップの確認
必須の環境変数を確認します。
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "COMPOSIO_API_KEY: ${COMPOSIO_API_KEY:-not set, Gmail drafting will be skipped}"
GEMINI_API_KEY が設定されていない場合: 処理を停止します。ユーザーに「GEMINI_API_KEY が必要です。aistudio.google.com で取得し、.env ファイルに追加してください。」と伝えます。
COMPOSIO_API_KEY が設定されていない場合: 続行します。シーケンスはコピーして貼り付けられる書式付きテキストとして出力します。Gmail の下書き作成はスキップします。
ステップ 2:コンテキストの読み込み
既存の ICP ファイルとアカウントファイルを確認します。
ls docs/icp.md 2>/dev/null && echo "icp found" || echo "icp missing"
ls docs/accounts/ 2>/dev/null && echo "accounts found" || echo "accounts missing"
docs/icp.md が存在する場合: 読み込み、以下を抽出します。
- ターゲットペルソナ(役職、職位、部門)
- 企業プロフィール(規模、業種、資金調達段階)
- 主な課題(買い手が実際に使う表現を使用)
- 主な差別化要因(代替手段と比べた自社製品の優位性)
docs/accounts/{company}.md が存在する場合: 該当するファイルを読み込み、以下を抽出します。
- 会社名、規模、最近の状況
- 判明している技術スタックや課題
- 既存の関係や過去の連絡の有無
どちらも存在しない場合: 次の 4 つの質問をユーザーにします。4 つすべてに回答があるまで先へ進みません。
- あなたの製品は何をしますか?(1〜2 文)
- 誰をターゲットにしていますか?(役職、企業規模、業種)
- あなたが解決する主な問題は何ですか?(あなたの視点ではなく、買い手の視点から)
- 主な差別化要因は何ですか?(買い手が現在利用している代替手段と比べた優位性)
ステップ 3:シグナルの特定
該当する 7 種類のシグナルを特定します。それぞれのシグナルタイプの Insight、Bridge、Opener、Ask 全体については、references/signal-playbook.md を読みます。
7 種類のシグナル:
| シグナル | 定義 |
|---|---|
| 資金調達後 | 会社が過去 30 日以内に資金調達ラウンドを実施した |
| 採用シグナル | 対象とする職種で 5 件以上の求人を掲載した |
| 競合からの乗り換え | 担当者が競合製品を使用しており、不満を示している |
| 製品ローンチ | 会社が新製品または大規模な機能をリリースした |
| コンテンツへのエンゲージメント | 担当者があなたのコンテンツに「いいね」、コメント、またはシェアをした |
| イベント後のフォローアップ | カンファレンスやウェビナーで会った、または同じセッションに参加した |
| 転職 | 担当者が過去 60 日以内に新しい会社へ移った |
ユーザーがプロンプトでシグナルを提示している場合: タイプを確認し、具体的な詳細(調達額、役職名、製品名、イベント名など)を抽出します。
明確なシグナルがない場合: 次のように尋ねます。「このアウトリーチのきっかけは何ですか?(例:資金調達をした、エンジニアを採用している、イベントで会った)」
続行する前に、検出したシグナルのタイプと具体的な詳細を示します。
ステップ 4:切り口の作成
ステップ 2〜3 で読み込んだシグナルタイプとコンテキストを使って、切り口を構成する 4 つの要素を定義します。このシグナルタイプの形式については、references/signal-playbook.md を読みます。
メッセージを作成する前に、次の形式で明示します。
Signal: [specific signal + concrete detail]
Insight: [what this signal reveals about their situation]
Bridge: [how your product connects to what the signal reveals]
Opener: [one sentence referencing the specific signal detail]
Ask: [minimum viable CTA, under 10 words]
冒頭文には具体的なきっかけを記載する必要があります。曖昧な冒頭文は受け付けられません。
良い例:「シリーズ B で 1,800 万ドルを調達されたとのこと、おめでとうございます。営業チームを急速に拡大すると、通常はオンボーディングに隙間が生じます。」 悪い例:「最近、貴社が資金調達をされたのを拝見しました。」
ステップ 5:チャネルの順序を計画する
メール、LinkedIn、電話を組み合わせて、4~6回のタッチポイントを設計します。ルール:
- 期間の合計:10~14日
- いずれのタッチポイント間にも、最低2日間の間隔を空ける
- 同じチャネルを連続して使用しない
- フォローアップのたびに、新しい価値(新しいリソース、新しい切り口、新しい証拠)を加える。「その後いかがですか」と尋ねるだけの連絡はしない
- 最後のタッチポイントは、短い区切りのメッセージにする
ほとんどのシグナルに対するデフォルトの頻度:
Day 1: Email (first touch, signal-led opener)
Day 3: LinkedIn (connection note or short DM)
Day 7: Email (new angle or case study)
Day 9: Phone (talk track + voicemail script)
Day 12: Email (different framing or objection addressed)
Day 14: Email (short breakup message)
シグナルの種類に応じて調整します:
- 資金調達後:より早く進める(1日目、2日目、4日目、7日目、10日目)。発表から48時間以内に行動する
- イベント後のフォローアップ:メールではなく、LinkedInから始める(より親しみのあるチャネルを優先)
- コンテンツへのエンゲージメント:メールの前に、LinkedInでの返信またはコメントから始める
メッセージを書く前に、各タッチポイントの予定日とチャネルを記載します。
ステップ 6:シーケンスを生成する
references/sequence-format.md を最後まで読みます。references/output-template.md を読み、このシグナルの種類に合ったテンプレートを選択します。
Geminiへのリクエストを一時ファイルに書き込みます:
cat > /tmp/outreach-sequence-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "You are a B2B sales copywriter who writes cold outreach that gets replies. Rules: The first sentence of every message is about THEM, not your company. Reference the specific buying signal by name and detail in the opening message. Use contractions naturally. Short sentences. No corporate jargon. No banned words: synergy, leverage, touch base, circle back, ping, loop in, alignment, innovative, cutting-edge, best-in-class, world-class, game-changing, disruptive, bandwidth, deep dive, low-hanging fruit, move the needle. No pleasantries: no 'I hope this email finds you well', no 'Happy Monday', no 'Just wanted to'. Each follow-up adds new value — never 'just following up'. Hard limits: email body under 100 words, LinkedIn note under 300 characters, phone opener under 20 words. Only {{first_name}} is allowed as a variable — fill in all other details from the context provided. The breakup message is short (3-4 sentences), friendly, and leaves the door open."
}]
},
"contents": [{
"parts": [{
"text": "CONTEXT_AND_INSTRUCTIONS_HERE"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 4096
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/outreach-sequence-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
CONTEXT_AND_INSTRUCTIONS_HERE を以下の内容に置き換えます:
- ステップ 2 の製品説明、ターゲットペルソナ、課題、差別化要素
- ステップ 4 のシグナルの種類、具体的な詳細、4つの切り口の要素
- ステップ 5 のチャネル計画
- 各タッチポイントに、件名(メール)、文字数(LinkedIn)、トークトラック(電話)を付けて書く指示
各メールのタッチポイントについて、件名の候補を2つ(A/Bテスト用)作成するよう指定します。
ステップ 7:反論を整理する
シーケンスを生成した後、このシグナルの種類で最も可能性の高い反論を2~4個特定します。既存のタッチポイントの中で、それぞれの反論に自然に先回りして対処します。反論対応だけのメッセージは追加せず、シーケンスに織り込みます。
references/sequence-format.md の反論対応ガイドを読みます。各反論に対応するタッチポイントを割り当てます。
先回りして対処すべき標準的な反論4つ:
| 反論 | 先回りして対処する方法 |
|---|---|
| "すでにソリューションを導入しています" | 相手が現在使っているツールを認め、自社の製品を補完的なもの、または次のステップとして位置付ける |
| "今は適切なタイミングではありません" | シグナルと、今が適切なタイミングである理由を直接結び付ける |
| "費用が高すぎます" | ROIを示し、相手が重視する数値を基準にする |
| "他の人にも相談する必要があります" | 共有できるリソース(1ページ資料、録画したウォークスルー)を提供する |
最終的なシーケンスを提示する前に、どのタッチポイントで各反論に対処するかを記載します。
ステップ 8:自己QA
すべての項目を確認し、違反を修正してから提示します:
- すべてのメッセージが、相手についての一文から始まっている
- 具体的なシグナルの詳細が、少なくとも最初のタッチポイントに記載されている
-
{{first_name}}以外に未入力のプレースホルダーがない - メール本文は100語未満(それぞれの語数を数えて記載する)
- LinkedInのメッセージは300文字未満(それぞれの文字数を数えて記載する)
- 電話の冒頭部分は20語未満
- いずれのメッセージにも禁止語が含まれていない
- どのフォローアップにも「その後いかがですか」だけの表現がない
- フォローアップのたびに、新しい切り口や価値が加わっている
- 同じチャネルを連続して使用していない
- シーケンス全体で、少なくとも2つの反論に先回りして対処している
- 区切りのメッセージは3~4文で、親しみやすく、相手に罪悪感を抱かせない
提示する前に、違反をすべて修正します。
ステップ 9:出力して保存する
シーケンス全体をコードブロックで提示します。
ファイルに保存:
mkdir -p docs/sequences
cat > docs/sequences/SIGNAL-TYPE.md << 'EOF'
SEQUENCE_CONTENT_HERE
EOF
echo "Sequence saved to docs/sequences/SIGNAL-TYPE.md"
COMPOSIO_API_KEY が設定されている場合:「Composio経由で、メールのタッチポイントをGmailに下書きとして保存しますか?」と尋ねます。
確認を得たら、各メールのタッチポイントについて:
# The agent calls the GMAIL_CREATE_EMAIL_DRAFT Composio action
# with subject = [subject line], body = [email body], recipient = [contact email if known]
下書きの作成後:「メールの下書きをGmailに作成しました。下書きフォルダを確認してください。」
**LinkedInのメッセージ:**タッチポイントごとに分かりやすいラベルを付け、コピーして貼り付けられる形式で個別に提示します。LinkedInはプログラムによるメッセージ送信に対応していません。
**電話のスクリプト:**固定的な台本ではなく、箇条書きのトークトラックとして整形して提示します。