Communitygithub.com

VC Finder - 投資家発見スキル

スタートアップの製品URLまたは説明文から業界と資金調達ステージを特定し、5社の比較可能な資金調達済み企業を発見、それらの企業への投資家を調査(トラックA)と、その分野に関して投資テーゼを公開しているVCを調査(トラックB)し、深掘り情報とアウトリーチフックを備えたランク付けされた投資家リストを返します。

VC Finder - 投資家発見スキル とは?

このスキルは、スタートアップの投資家を特定するためのエンドツーエンドのワークフローを提供します。ユーザーが製品URLまたは説明文を入力すると、まず業界と資金調達ステージを自動検出し、次にTavily検索を利用して比較可能な資金調達済み企業を5社特定します。その後、2つの調査トラックを実行します。トラックAではその比較企業に投資したVCを調査し、トラックBではその分野に関して投資テーゼを公開しているVCを調査します。最終的に、各ファクトがTavilyの検索結果からトレース可能であることを保証する「ゼロ幻覚ポリシー」に基づき、出典付きでランク付けされた投資家リストと、製品の差別化要因と特定のVCポートフォリオシグナルを活用したカスタマイズされたアウトリーチフックを生成します。Claude CodeなどのAIエージェント上で動作し、FirecrawlまたはTavilyを使用して製品ページを取得します。

対応✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/vc-finder

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

VC Finder (投資家発見ツール)

製品URLまたは説明文を入力。業界とステージを検出。5社の比較可能な資金調達済み企業を発見。2つの調査トラックを実行:それらの比較企業に投資したVC(トラックA)、およびこの分野に関して投資テーゼを公開しているVC(トラックB)。出典付きでランク付けされた投資家リストとアウトリーチフックを返します。


ゼロ幻覚ポリシー: 出力内のすべての事実は、特定のTavily検索結果または取得した製品ページにトレース可能でなければなりません。これは以下に適用されます:

  • 比較企業名:Tavilyの検索結果に存在しなければならず、AIの学習知識に基づいてはいけません
  • VCファンド名:Tavilyの検索結果にそのままの形で存在しなければなりません
  • 小切手サイズ、ステージフォーカス、ポートフォリオ企業:検索スニペットから取得し、AI知識からは取得しません
  • ファンド概要と投資テーゼの要約:検索スニペットからのみ抽出。詳細が検索データにない場合は「検索データに見つかりませんでした」と記載し、学習知識から補完しないでください。

よくある間違い

エージェントがやりがちなこと...なぜそれが間違いか
a16zやSequoiaのような有名VCを追加する証拠のない有名VCはノイズです。この特定の製品についてTavily検索結果に現れたVCのみを含めてください。名前を挙げるだけでは創業者の時間の無駄です。
学習知識から比較企業を生成する比較企業はTavily検索結果(ステップ6)から取得しなければなりません。AIの知識による企業は証拠ではありません。記憶から提案された企業は、資金調達状況が間違っていたり、真の比較対象でない可能性があります。
5件のトラックA検索すべてが0件を返した場合に続行するトラックAの結果がゼロということは、比較企業が間違っているか、ニッチすぎることを意味します。中止し、より広い検索クエリでステップ6を再実行し、再試行してください。
記事や投稿を引用せずにトラックBのVCを含める出典のないテーゼは幻覚と区別がつきません。創業者はそれを検証できず、リストの信頼性はすべて失われます。
学習知識からファンド概要を補完するファンド概要はTavilyスニペットテキストからのみ取得しなければなりません。スニペットがファンドを説明していない場合は、「検索データに見つかりませんでした」と書いてください。
ウェブサイトの見た目からステージを検出するステージはステップ4で検出された特定のCTAシグナルから取得しなければなりません。
一般的なアウトリーチフックを書くすべてのアウトリーチフックは、この特定の製品の差別化要因と、検索データからの特定のVCポートフォリオシグナルまたはテーゼの引用を記載しなければなりません。
ユーザーが説明も提供した場合にURL取得をスキップする常にURLを取得してください。ライブページは、ユーザーの説明が省略しているステージシグナルを明らかにすることがよくあります。

ステップ1: セットアップ確認

echo "TAVILY_API_KEY:    ${TAVILY_API_KEY:+set}"
echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:-not set, Tavily extract will be used as fallback}"

TAVILY_API_KEYがない場合: 停止。ユーザーに伝えてください:「TAVILY_API_KEYはVC投資とテーゼを調査するために必要です。これに対するフォールバックはありません。app.tavily.comで取得してください。無料枠:月1000クレジット(約125回のフル実行)。.envファイルに追加してください。」

FIRECRAWL_API_KEYのみがない場合: サイレントに続行。Tavily extractがURL取得に使用されます。


ステップ2: 入力の収集

必要なもの:

  • 製品URL(必須、ユーザーが直接製品説明を貼り付ける場合を除く)
  • オプション:ターゲットステージのヒント(pre-seed、seed、series-a、series-b)——指定された場合はそれを使用し、ステージ検出をスキップ
  • オプション:地理的嗜好(US、Europe、global)——指定がない場合はデフォルトでUS

ユーザーが貼り付けた説明のみ(URLなし)を提供した場合: ステップ3〜4をスキップ。貼り付けられたテキストを product_content としてステップ5に直接進みます。stage_source を user_description に設定します。

URLも説明も提供されていない場合: 尋ねてください:「あなたの製品またはスタートアップのURLは何ですか?または、簡単な説明を貼り付けてください:何をするものか、誰のためか、どのステージにいるか(pre-seed、seed、Series A)。」

出力ファイル名のためにURLから製品スラッグを導出:

PRODUCT_SLUG=$(python3 -c "
from urllib.parse import urlparse
url = 'URL_HERE'
host = urlparse(url).netloc.replace('www.', '')
print(host.split('.')[0])
")

ステップ3: 製品ページの取得

プライマリ: Firecrawl(FIRECRAWL_API_KEYが設定されている場合)

curl -s -X POST https://api.firecrawl.dev/v1/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "URL_HERE", "formats": ["markdown"], "onlyMainContent": true}' \
  | python3 -c "
import sys, json
d = json.load(sys.stdin)
content = d.get('data', {}).get('markdown', '') or d.get('markdown', '')
print(f'Fetched: {len(content)} characters')
open('/tmp/vc-product-raw.md', 'w').write(content)
"

フォールバック: Tavily extract(FIRECRAWL_API_KEYが設定されていない場合)

curl -s -X POST https://api.tavily.com/extract \
  -H "Content-Type: application/json" \
  -d "{\"api_key\": \"$TAVILY_API_KEY\", \"urls\": [\"URL_HERE\"]}" \
  | python3 -c "
import sys, json
d = json.load(sys.stdin)
content = d.get('results', [{}])[0].get('raw_content', '')
print(f'Fetched via Tavily extract: {len(content)} characters')
open('/tmp/vc-product-raw.md', 'w').write(content)
"

ステップレベルのチェックポイント:

python3 -c "
content = open('/tmp/vc-product-raw.md').read()
if len(content) < 200:
    print('ERROR: Page returned fewer than 200 characters.')
else:
    print(f'Content OK: {len(content)} characters')
"

コンテンツが200文字未満の場合: 取得を停止。ユーザーに伝えてください:「製品ページから読み取り可能なコンテンツが返されませんでした。これは通常、サイトがJavaScriptでレンダリングされており、ブラウザが必要であることを意味します。製品の説明を直接貼り付けてください:何をするものか、誰のためか、どのステージにいるか。」

product_content として貼り付けられた説明を使用してステップ5に進みます。


ステップ4: ステージシグナルのローカル検出(API不要)

分析ステップの前に、取得したマークダウンを正規表現で解析します。

python3 << 'PYEOF'
import re, json

content = open('/tmp/vc-product-raw.md').read().lower()
stage_signals = []

if re.search(r'join\s+(the\s+)?waitlist|sign\s+up\s+for\s+beta|early\s+access|request\s+(an?\s+)?invite|get\s+notified', content):
    stage_signals.append({'signal': 'waitlist or beta CTA', 'stage_hint': 'pre-seed'})

if re.search(r'start\s+(your\s+)?free\s+trial|try\s+(it\s+)?for\s+free|request\s+a?\s+demo|book\s+a?\s+demo|schedule\s+a?\s+demo', content):
    stage_signals.append({'signal': 'free trial or demo CTA', 'stage_hint': 'seed'})

if re.search(r'contact\s+sales|talk\s+to\s+(our\s+)?sales|see\s+pricing|view\s+pricing|plans\s+and\s+pricing', content):
    stage_signals.append({'signal': 'pricing or sales CTA', 'stage_hint': 'series-a'})
if re.search(r'case\s+stud(y|ies)|customer\s+stor(y|ies)|trusted\s+by\s+[\d,]+|used\s+by\s+[\d,]+', content):
    stage_signals.append({'signal': 'case studies or customer count', 'stage_hint': 'series-a'})

if re.search(r'enterprise\s+(plan|pricing|tier)|we.?re\s+hiring|join\s+our\s+team|open\s+positions', content):
    stage_signals.append({'signal': 'enterprise tier or job openings', 'stage_hint': 'series-a-or-b'})

funding_match = re.search(
    r'raised\s+\$[\d,.]+\s*[mk]?|series\s+[abc]\s+round|seed\s+round|(\$[\d,.]+\s*[mk]?\s+(?:seed|series\s+[abc]))',
    content
)
if funding_match:
    stage_signals.append({'signal': f'funding text: {funding_match.group(0).strip()}', 'stage_hint': 'announced'})

if not stage_signals:
    dominant = 'unknown'
elif any(s['stage_hint'] == 'announced' for s in stage_signals):
    dominant = 'announced'
elif any(s['stage_hint'] == 'series-a-or-b' for s in stage_signals):
    dominant = 'series-a'
elif any(s['stage_hint'] == 'series-a' for s in stage_signals):
    dominant = 'series-a'
elif any(s['stage_hint'] == 'seed' for s in stage_signals):
    dominant = 'seed'
else:
    dominant = 'pre-seed'

confidence = 'high' if len(stage_signals) >= 2 else ('medium' if len(stage_signals) == 1 else 'low')

result = {'signals': stage_signals, 'dominant_stage': dominant, 'confidence': confidence}
json.dump(result, open('/tmp/vc-stage-signals.json', 'w'), indent=2)
print(f'Stage: {dominant} ({confidence} confidence) from {len(stage_signals)} signal(s)')
for s in stage_signals:
    print(f'  - {s["signal"]} -> {s["stage_hint"]}')
PYEOF

ステップ5: 製品分析(分類法、ステージ、ICP)

製品コンテンツとステージシグナルを表示:

python3 -c "
import json
content = open('/tmp/vc-product-raw.md').read()[:6000]
signals = json.load(open('/tmp/vc-stage-signals.json'))
print('=== 製品ページ(最初の6000文字)===')
print(content)
print()
print('=== 検出されたステージシグナル ===')
print(json.dumps(signals, indent=2))
"

AIへの指示: 上記の製品ページコンテンツを分析。分類法、ICP、ステージ分類のみを生成してください。まだ比較企業は生成しないでください(それはステップ6のライブ検索で行います)。

/tmp/vc-product-analysis.json に書き込み:

  • product_name: ページから
  • one_line_description: 何をするものか、誰のためか、コアバリュープロポジション。20語未満。マーケティング用語は避ける。
  • industry_taxonomy: l1(トップレベル:fintech / healthtech / developer tools / consumer / など)、l2(セクター:sales technology / logistics software / など)、l3(特定のニッチ:outbound prospecting / last-mile routing / など)。「technology」や「software」だけのような曖昧なラベルは許可されません。
  • icp: buyer_persona(職種)、company_type、company_size
  • detected_stage: pre-seed / seed / series-a / series-b / unknown
  • stage_confidence: high / medium / low
  • stage_evidence: ページ上のどのCTAまたはテキストがこれを導いたかを引用した一文。「明確なシグナルは見つかりませんでした」とunknownの場合は記述。
  • geography_bias: US / Europe / global / unclear
  • comparable_companies: 空の配列 [] のままにする——ステップ6で埋められます
python3 << 'PYEOF'
import json

analysis = {
    # 上記の分析から記入
    "comparable_companies": []
}

json.dump(analysis, open('/tmp/vc-product-analysis.json', 'w'), indent=2)
print('製品分析を書き込みました。')
PYEOF

確認:

python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print('製品:', a['product_name'])
print('業界:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('ステージ:', a['detected_stage'], '(' + a['stage_confidence'] + ' confidence)')
"

ステップ5b: 検証済みファンドデータセットに対する事前マッチング

製品分類法を、25の検証済みVCファンド(ファンドウェブサイトから収集)の厳選データセットに対して実行します。ゼロ幻覚のファンドマッチとトラックA用のシード比較企業を生成します。Tavilyクレジットは消費しません。

タグマッピングのために製品分析を表示:

python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print('分類法:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('ステージ:', a['detected_stage'])
print('地理:', a['geography_bias'])
"

AIへの指示: 製品分類法をファンドデータセットで使用される標準タグにマッピングします。利用可能なタグ: DevTools、Infrastructure、Open Source、B2B SaaS、AI、Data、FinTech、HealthTech、Enterprise、Consumer、Marketplaces、E-commerce、Crypto、DeepTech、Cybersecurity、Generalist

この製品を説明する2〜4つのタグを選択。detected_stage を Pre-seed、Seed、Series A、または Growth にマッピング。geography_bias を US、Europe、India、または Global にマッピング。

製品コンテキストを書き込み:

python3 << 'PYEOF'
import json

# 上記の分類法分析に基づいて記入
context = {
    "extracted_tags": ["TagA", "TagB"],  # 上記のリストから2〜4つのタグ
    "stage_hint": "Seed",               # Pre-seed / Seed / Series A / Growth
    "geography_hint": "US"              # US / Europe / India / Global
}
json.dump(context, open('/tmp/vc-product-context.json', 'w'), indent=2)
print('製品コンテキスト:', context)
PYEOF

埋め込まれた厳選データセットに対してスコアリングを実行:

python3 << 'PYEOF'
import json

context = json.load(open('/tmp/vc-product-context.json'))

VC_FUNDS = [
  {"fund_name":"Y Combinator","thesis":"We provide seed funding for startups. We invest in deeply technical teams building massive companies across all domains.","check_size":"$500k","stage_focus":["Pre-seed","Seed"],"industry_tags":["Generalist","B2B SaaS","DevTools","AI"],"geography_focus":["Global"],"notable_portfolio":["Stripe","Airbnb","GitLab"],"website":"https://www.ycombinator.com"},
  {"fund_name":"boldstart ventures","thesis":"Day one partner for developer first, crypto, and SaaS founders. We love deeply technical founders solving hard infrastructure problems.","check_size":"$1M - $3M","stage_focus":["Pre-seed","Seed"],"industry_tags":["DevTools","Infrastructure","Crypto"],"geography_focus":["Global","US"],"notable_portfolio":["Snyk","Blockdaemon","Superhuman"],"website":"https://boldstart.vc"},
  {"fund_name":"Heavybit","thesis":"The leading investor in developer-first startups. We help technical founders launch, gain traction, and build enterprise-ready companies.","check_size":"$1M - $5M","stage_focus":["Seed","Series A"],"industry_tags":["DevTools","Infrastructure","Open Source"],"geography_focus":["Global","US"],"notable_portfolio":["PagerDuty","Sanity","Netlify"],"website":"https://www.heavybit.com"},
  {"fund_name":"Amplify Partners","thesis":"We invest in technical founders building the next generation of IT infrastructure, developer tools, and data platforms.","check_size":"$2M - $8M","stage_focus":["Seed","Series A"],"industry_tags":["DevTools","Infrastructure","AI","Data"],"geography_focus":["US"],"notable_portfolio":["Datadog","OCTO","dbt Labs"],"website":"https://www.amplifypartners.com"},
  {"fund_name":"OSS Capital","thesis":"We exclusively back early-stage founders building Commercial Open Source Software (COSS) companies.","check_size":"$500k - $2M","stage_focus":["Pre-seed","Seed","Series A"],"industry_tags":["Open Source","DevTools"],"geography_focus":["Global"],"notable_portfolio":["Cal.com","Appsmith","Hoppscotch"],"website":"https://oss.capital"}
  // ... このリストは翻訳で切り捨てられています。完全なリストは原文スキルマークダウンにあります。
]

scored = []
for fund in VC_FUNDS:
    # タグの一致に基づいてスコアリング
    matching_tags = set(fund["industry_tags"]) & set(context["extracted_tags"])
    tag_score = len(matching_tags) * 10

    # ステージの一致に基づいてスコアリング
    stage_score = 5 if context["stage_hint"] in fund["stage_focus"] else 0

    # 地理の一致に基づいてスコアリング
    geo_score = 5 if context["geography_hint"] in fund["geography_focus"] else (2 if "Global" in fund["geography_focus"] else 0)

    total_score = tag_score + stage_score + geo_score
    if total_score > 0:
        scored.append({
            "fund": fund["fund_name"],
            "score": total_score,
            "matching_tags": list(matching_tags),
            "check_size": fund["check_size"],
            "stage_focus": fund["stage_focus"],
            "geography_focus": fund["geography_focus"],
            "notable_portfolio": fund["notable_portfolio"],
            "website": fund["website"]
        })

scored.sort(key=lambda x: x["score"], reverse=True)

# スコアが最も高い上位5件を選択(またはそれ以下)
top_funds = scored[:5]

result = {
    "product_context": context,
    "matched_funds": top_funds
}

json.dump(result, open('/tmp/vc-curated-matches.json', 'w'), indent=2)
print(f'厳選データセットマッチング完了:{len(top_funds)}件のファンドがマッチ')
for f in top_funds:
    print(f'  - {f["fund"]}(スコア:{f["score"]}、一致タグ:{f["matching_tags"]})')
PYEOF

ステップレベルのチェックポイント:

python3 -c "
import json
data = json.load(open('/tmp/vc-curated-matches.json'))
print(f'厳選マッチ:{len(data["matched_funds"])}件のファンド')
for f in data['matched_funds']:
    print(f'  - {f["fund"]}(スコア:{f["score"]})')
"

厳選マッチが0件の場合: エラーではありません。製品が非常にニッチであるか、新しいカテゴリである可能性があります。ステップ6でTavily検索を使用して続行します。


ステップ6: スタートアップ検出(Tavily検索)

製品分析を使用して検索クエリを構築:

python3 << 'PYEOF'
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print('業界:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('ステージ:', a['detected_stage'])
PYEOF

AIへの指示: 製品の詳細と上記の分類法を使用して、資金調達済みの競合他社を検出するための3つの固有のTavily検索クエリを作成してください。各クエリは、すでに資金調達を発表した企業を発見することに焦点を当てる必要があります。クエリは、製品のl3ニッチ、ターゲットユーザー、またはコア機能を指定すべきであり、「AIスタートアップ」のような曖昧なものではありません。

実行:

for QUERY in "QUERY_1_HERE" "QUERY_2_HERE" "QUERY_3_HERE"; do
  echo "=== 検索クエリ: $QUERY ==="
  curl -s -X POST https://api.tavily.com/search \
    -H "Content-Type: application/json" \
    -d "{
      \"api_key\": \"$TAVILY_API_KEY\",
      \"query\": \"$QUERY\",
      \"search_depth\": \"advanced\",
      \"max_results\": 10,
      \"include_answer\": false,
      \"include_images\": false
    }" | python3 -c "
import sys, json
d = json.load(sys.stdin)
results = d.get('results', [])
for r in results:
    title = r.get('title', '')
    url = r.get('url', '')
    content = r.get('content', '')[:400]
    print(f'タイトル: {title}')
    print(f'URL: {url}')
    print(f'コンテンツ: {content}')
    print()
"
done

AIへの指示: 上記の検索結果をレビュー。製品のニッチおよびステージに真に合致する、資金調達済みの企業を最大5社特定します。企業名と詳細を次に書き込みます:

python3 << 'PYEOF'
import json

# 上記の検索結果に基づいて記入
comparables = [
    {
        "company_name": "CompanyName",
        "source_url": "URL_from_search_results",
        "funding_info": "資金調達の詳細(スニペットから)",
        "one_liner": "一行説明",
        "relevance_reason": "この企業がなぜ比較対象として適切か"
    }
]

analysis = json.load(open('/tmp/vc-product-analysis.json'))
analysis['comparable_companies'] = comparables
json.dump(analysis, open('/tmp/vc-product-analysis.json', 'w'), indent=2)
print(f'{len(comparables)}件の比較企業を追加')
PYEOF

検証:

python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
c = a['comparable_companies']
print(f'比較企業: {len(c)}件')
for comp in c:
    print(f'  - {comp["company_name"]}')
"

比較企業が0件の場合: これは重要です。トラックA(比較企業への投資家調査)は実行できません。より広い検索クエリで再試行するか、ユーザーに通知して続行方法を尋ねてください。


ステップ7: トラックA — 比較企業への投資家調査

各比較企業について、投資家を検索:

python3 << 'PYEOF'
import json, subprocess, sys

analysis = json.load(open('/tmp/vc-product-analysis.json'))
comparables = analysis['comparable_companies']

investor_map = {}

for comp in comparables:
    name = comp['company_name']
    print(f'\n=== 調査: {name}の投資家 ===')
    
    query = f"investors who funded {name} startup venture capital"
    result = subprocess.run([
        'curl', '-s', '-X', 'POST', 'https://api.tavily.com/search',
        '-H', 'Content-Type: application/json',
        '-d', json.dumps({
            'api_key': '$TAVILY_API_KEY',
            'query': query,
            'search_depth': 'advanced',
            'max_results': 5,
            'include_answer': False,
            'include_images': False
        })
    ], capture_output=True, text=True)
    
    try:
        data = json.loads(result.stdout)
        results = data.get('results', [])
        for r in results:
            title = r.get('title', '')
            url = r.get('url', '')
            content = r.get('content', '')[:600]
            print(f'  - ソース: {title}')
            print(f'    URL: {url}')
            print(f'    コンテンツ: {content}')
            print()
        investor_map[name] = results
    except Exception as e:
        print(f'  検索エラー: {e}')
        investor_map[name] = []

# 後で使用するために保存
json.dump(investor_map, open('/tmp/vc-track-a-results.json', 'w'), indent=2)
print('\nトラックA調査が完了しました。')
PYEOF

ステップ8: トラックB — 分野に関する投資テーゼの調査

python3 << 'PYEOF'
import json, subprocess

analysis = json.load(open('/tmp/vc-product-analysis.json'))

# 製品のニッチに焦点を当てたクエリを構築
queries = [
    f"venture capital thesis about {analysis['industry_taxonomy']['l3']} investing 2024",
    f"VC firms investing in {analysis['industry_taxonomy']['l2']} sector",
    f"investors interested in {analysis['industry_taxonomy']['l1']} startups thesis"
]

thesis_map = {}

for i, query in enumerate(queries):
    print(f'\n=== テーゼ検索 {i+1}: {query} ===')
    result = subprocess.run([
        'curl', '-s', '-X', 'POST', 'https://api.tavily.com/search',
        '-H', 'Content-Type: application/json',
        '-d', json.dumps({
            'api_key': '$TAVILY_API_KEY',
            'query': query,
            'search_depth': 'advanced',
            'max_results': 5,
            'include_answer': False,
            'include_images': False
        })
    ], capture_output=True, text=True)
    
    try:
        data = json.loads(result.stdout)
        results = data.get('results', [])
        for r in results:
            title = r.get('title', '')
            url = r.get('url', '')
            content = r.get('content', '')[:600]
            print(f'  - ソース: {title}')
            print(f'    URL: {url}')
            print(f'    コンテンツ: {content}')
            print()
        thesis_map[query] = results
    except Exception as e:
        print(f'  検索エラー: {e}')
        thesis_map[query] = []

json.dump(thesis_map, open('/tmp/vc-track-b-results.json', 'w'), indent=2)
print('\nトラックB調査が完了しました。')
PYEOF

ステップ9: すべてのデータを結合して投資家リストを作成

python3 << 'PYEOF'
import json

analysis = json.load(open('/tmp/vc-product-analysis.json'))
curated = json.load(open('/tmp/vc-curated-matches.json'))
track_a = json.load(open('/tmp/vc-track-a-results.json'))
track_b = json.load(open('/tmp/vc-track-b-results.json'))

# 出力構造の構築
output = {
    "product": {
        "name": analysis.get('product_name', '不明'),
        "description": analysis.get('one_line_description', ''),
        "industry": analysis['industry_taxonomy'],
        "stage": analysis['detected_stage'],
        "stage_confidence": analysis['stage_confidence'],
        "stage_evidence": analysis['stage_evidence'],
        "geography_bias": analysis['geography_bias'],
        "icp": analysis['icp']
    },
    "comparable_companies": analysis['comparable_companies'],
    "investor_recommendations": {
        "curated_matches": [],
        "track_a_investors": [],
        "track_b_vcs": []
    }
}

# 厳選マッチを追加
for fund in curated.get('matched_funds', []):
    output["investor_recommendations"]["curated_matches"].append({
        "fund_name": fund['fund'],
        "match_score": fund['score'],
        "matching_tags": fund['matching_tags'],
        "check_size": fund['check_size'],
        "stage_focus": fund['stage_focus'],
        "notable_portfolio": fund['notable_portfolio'],
        "website": fund['website'],
        "source": "curated dataset"
    })

# トラックAの結果を処理(AIが検索結果を解釈)
print("=== トラックA結果の処理 ===")
print(json.dumps(track_a, indent=2)[:2000])
print("...")

# AIへの指示: 上記のトラックAの生検索結果を使用して、
# 各比較企業に投資したVCファンドを抽出します。
# ファンド名は検索結果から抽出し、知識ベースからは抽出しません。
# 各ファンドについて以下を含めます:
# - fund_name(検索結果からの文字通り)
# - source_url(検索結果のURL)
# - extracted_snippet(ファンドが言及されている具体的なテキスト)

# トラックBの結果を処理(AIが検索結果を解釈)
print("\n=== トラックB結果の処理 ===")
print(json.dumps(track_b, indent=2)[:2000])
print("...")

# AIへの指示: 上記のトラックBの生検索結果を使用して、
# この分野に関する投資テーゼを公開しているVCファームを抽出します。
# 各ファンドについて以下を含めます:
# - fund_name(検索結果からの文字通り)
# - source_url(テーゼが発見された記事/投稿のURL)
# - thesis_excerpt(検索結果からの具体的なテーゼ引用)

json.dump(output, open('/tmp/vc-investor-list.json', 'w'), indent=2)
print('\n投資家リストのドラフトが完了しました。')
PYEOF

ステップ10: レポートの作成

python3 << 'PYEOF'
import json

output = json.load(open('/tmp/vc-investor-list.json'))
product = output['product']

report = f"""# 投資家調査レポート: {product['name']}

## 製品概要

{product['description']}

**業界:** {product['industry']['l1']} > {product['industry']['l2']} > {product['industry']['l3']}

**検出ステージ:** {product['stage']}(確信度:{product['stage_confidence']})

**ステージの根拠:** {product['stage_evidence']}

**ICP:** {product['icp']['buyer_persona']} @ {product['icp']['company_type']}({product['icp']['company_size']})

**地理的バイアス:** {product['geography_bias']}

---

## 比較企業

| 企業名 | 説明 | 資金調達情報 | 関連性 |
|---|---|---|---|
"""

for comp in output['comparable_companies']:
    report += f"| {comp['company_name']} | {comp['one_liner']} | {comp['funding_info']} | {comp['relevance_reason']} |\n"

report += """

---

## 推奨投資家

### 厳選データセットマッチ

| ファンド名 | 一致スコア | 小切手サイズ | ステージ | ポートフォリオ | ウェブサイト |
|---|---|---|---|---|---|
"""

for fund in output['investor_recommendations']['curated_matches']:
    portfolio = ', '.join(fund['notable_portfolio'][:3])
    report += f"| {fund['fund_name']} | {fund['match_score']} | {fund['check_size']} | {', '.join(fund['stage_focus'])} | {portfolio} | {fund['website']} |\n"

report += """

### トラックA結果(比較企業の投資家)
"""

for comp in output['comparable_companies']:
    report += f"\n**{comp['company_name']}の投資家:**\n"
    # AIがここに関連投資家を記入
    report += "*[AIがトラックAの検索結果から投資家情報を記入]*\n"

report += """

### トラックB結果(分野投資テーゼVC)
"""

# AIがここにテーゼ情報を記入
report += "*[AIがトラックBの検索結果から投資家とテーゼ情報を記入]*\n"

report += """

---

## アウトリーチフック

### 厳選ファンド向け
"""

for fund in output['investor_recommendations']['curated_matches'][:3]:
    report += f"\n**{fund['fund_name']}:** [製品の差別化要因と{fund['fund_name']}のポートフォリオシグナル/テーゼを結びつけるカスタムフック]\n"

report += """

### トラックA投資家向け

*[比較企業の投資家向けのカスタムフック、この製品が何をユニークにしているかを参照]*

### トラックB VC向け

*[この製品とVCの公開テーゼとの整合性を参照するカスタムフック]*

---

## データソース

**製品ページ:** [URL_HERE]

**比較企業のソース:** Tavily検索結果(詳細は各企業のsource_urlを参照)

**投資家データ:** Tavily検索結果 + 検証済みファンドデータセット

**テーゼソース:** Tavily検索結果(詳細は各エントリのsource_urlを参照)
"""

# レポートをファイルに保存
with open('/tmp/vc-investor-report.md', 'w') as f:
    f.write(report)

print('レポートが /tmp/vc-investor-report.md に保存されました。')
print(f'レポート長: {len(report)}文字')
PYEOF

ステップ11: 最終出力

レポートを表示:

cat /tmp/vc-investor-report.md

ユーザーに伝えてください:

「投資家調査が完了しました。以下を生成しました:

  • /tmp/vc-investor-report.md:完全なレポート(比較企業、厳選ファンドマッチ、トラックA/B結果、アウトリーチフックを含む)

レポート内の各エントリは、Tavily検索結果または製品ページからの出典が明記されています。

次のステップの提案:

  1. 各VCのポートフォリオを確認し、具体的な関連性を特定する
  2. アウトリーチフックを詳細化し、製品の差別化要因を強調する
  3. これらの投資家のパートナーとのコネクションを探す」

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

関連スキル