Communitygithub.com

VC Finder - 风险投资发现器

输入初创公司产品 URL 或描述,自动检测行业和融资阶段,识别 5 家可比已融资公司,查找这些公司的投资者(A 路线),以及在该领域发表投资主题的风险投资公司(B 路线),最终输出一份有来源、排名的投资者列表,并附上深度分析和跟进切入点。

VC Finder - 风险投资发现器 是什么?

VC Finder 是一款专为初创公司创始人和开发者设计的高级 AI 技能,用于自动识别潜在的风险投资(VC)投资者。用户只需提供产品 URL 或简短描述,该技能即可通过 Tavily 搜索和 Firecrawl 抓取等技术,执行多步骤分析:首先检测产品的行业和融资阶段(如种子轮、A 轮),然后搜索 5 家可比已融资公司,再通过两条独立研究路线(A 路线:追踪这些可比公司的投资者;B 路线:寻找在该领域发表投资主题的 VC)来收集数据。最终,它会生成一份有来源、经过排名的投资者列表,并包含每个投资者的深度分析和定制化的跟进切入点。该技能支持多种平台,通过严格的零幻觉政策确保所有事实均可追溯到 Tavily 搜索结果,避免 AI 知识库中的错误信息。同时,它提供了丰富的 Markdown 文档,详细说明了每一步的操作和常见错误,确保用户能够获得准确、可验证的投资者推荐。

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

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

VC Finder - 风险投资发现器 是做什么的?

输入产品 URL 或描述。自动检测行业和阶段。找到 5 家可比已融资公司。运行两条研究路线:谁投资了这些可比公司(A 路线),以及哪些风险投资公司在此领域发表投资主题(B 路线)。返回有来源、排名的投资者列表,并附上跟进切入点。


零幻觉政策: 输出中的每个事实都必须可追溯到特定的 Tavily 搜索结果或抓取的产品页面。这适用于:

  • 可比公司名称:必须出现在 Tavily 搜索结果中,而非 AI 训练知识
  • 风险投资基金名称:必须原样出现在 Tavily 搜索结果中
  • 支票规模、阶段重点、投资组合公司:必须来自搜索片段,而非 AI 知识
  • 基金概览和主题总结:仅从搜索片段中提取。如果某个细节不在搜索数据中,请写“搜索数据中未找到” —— 不要从训练知识中填充。

常见错误

代理可能会...为什么这是错的
添加 a16z 或 Sequoia,因为它们很有名没有证据的名牌风险投资公司只是噪音。仅包含在 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 来研究风险投资和主题。没有备用方案。在 app.tavily.com 获取——免费层:1000 积分/月(约 125 次完整运行)。将其添加到您的 .env 文件中。”

如果仅缺少 FIRECRAWL_API_KEY: 静默继续。Tavily extract 将用于 URL 抓取。


步骤 2:收集输入

您需要:

  • 产品 URL(必需,除非用户直接粘贴产品描述)
  • 可选:目标阶段提示(pre-seed、seed、series-a、series-b)—— 如果提供,使用它并跳过阶段检测
  • 可选:地域偏好(美国、欧洲、全球)—— 如果未指定,默认为美国

如果用户仅提供粘贴的描述(无 URL): 跳过步骤 3-4。直接进入步骤 5,使用粘贴的文本作为 product_content。将 stage_source 设置为 user_description。

如果既未提供 URL 也未提供描述: 询问:“您的产品或初创公司的 URL 是什么?或粘贴简短描述:它做什么、面向谁、以及您所处的阶段(pre-seed、seed、Series A)。”

从 URL 派生产品 slug 用于输出文件名:

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)

在分析步骤之前,使用正则表达式解析抓取的 markdown。

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('=== PRODUCT PAGE (first 6000 chars) ===')
print(content)
print()
print('=== DETECTED STAGE SIGNALS ===')
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 或文本。如果未知,写“未找到明确信号”。
  • geography_bias:US / Europe / global / unclear
  • comparable_companies:保留为空数组 [] —— 将在步骤 6 中填充
python3 << 'PYEOF'
import json

analysis = {
    # FILL from your analysis above
    "comparable_companies": []
}

json.dump(analysis, open('/tmp/vc-product-analysis.json', 'w'), indent=2)
print('Product analysis written.')
PYEOF

验证:

python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print('Product:', a['product_name'])
print('Industry:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('Stage:', a['detected_stage'], '(' + a['stage_confidence'] + ' confidence)')
"

步骤 5b:针对验证基金数据集的策划预匹配

将产品分类与包含 25 个验证风险投资基金的数据集进行匹配(来源:基金网站)。生成零幻觉基金匹配和 A 路线的种子可比公司 —— 不消耗 Tavily 积分。

打印产品分析以进行标签映射:

python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print('Taxonomy:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('Stage:', a['detected_stage'])
print('Geography:', 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

# FILL based on taxonomy analysis above
context = {
    "extracted_tags": ["TagA", "TagB"],  # 2-4 tags from the list above
    "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('Product context:', 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:
    score = 0
    tag_matches = [t for t in fund["industry_tags"] if t in context["extracted_tags"]]
    score += len(tag_matches) * 20
    if context["stage_hint"] in fund["stage_focus"]:
        score += 15
    if context["geography_hint"] in fund["geography_focus"] or "Global" in fund["geography_focus"]:
        score += 10
    scored.append({"fund_name": fund["fund_name"], "score": score, "tag_matches": tag_matches, "details": fund})

scored.sort(key=lambda x: x["score"], reverse=True)
top_matches = [s for s in scored if s["score"] >= 20][:5]

result = {
    "matched_funds": [{"name": m["details"]["fund_name"], "score": m["score"], "tag_matches": m["tag_matches"], "details": m["details"]} for m in top_matches],
    "score_explanation": "Tag match = +20 per match, Stage match = +15, Geography match = +10. Minimum match score: 20."
}

json.dump(result, open('/tmp/vc-curated-matches.json', 'w'), indent=2, ensure_ascii=False)
print(f"Found {len(top_matches)} curated fund matches (score >= 20)")
for m in top_matches:
    print(f"  {m['details']['fund_name']}: score {m['score']} (tags: {', '.join(m['tag_matches'])})")
PYEOF

步骤 6:查找可比公司(Tavily 搜索)

在 Tavily 中搜索此产品空间中的可比初创公司。搜索查询必须基于行业分类和产品描述。搜索需要返回已融资的初创公司(种子轮或更高)。

export PRODUCT_DESCRIPTION="从产品分析中获取单行描述"
export L1="从分析中获取行业 L1 分类"
export L2="从分析中获取行业 L2 分类"

python3 << 'PYEOF'
import json, os

desc = os.environ.get('PRODUCT_DESCRIPTION', '')
l1 = os.environ.get('L1', '')
l2 = os.environ.get('L2', '')

searches = [
    {"query": f"funded startups similar to {desc}", "reason": "基于产品描述的通用可比搜索"},
    {"query": f"top funded companies in {l1} {l2} 2024 2025", "reason": "基于分类的行业特定搜索"},
    {"query": f"series A funded startups in {l1} {l2}", "reason": "目标阶段可比公司"}
]

json.dump(searches, open('/tmp/vc-comparable-searches.json', 'w'), indent=2)
for s in searches:
    print(f"Search: {s['query']}")
PYEOF
# 对每个搜索运行 Tavily 搜索
for row in $(python3 -c "
import json
searches = json.load(open('/tmp/vc-comparable-searches.json'))
for i, s in enumerate(searches):
    print(f'{i}|{s[\"query\"]}')
"); do
  IFS='|' read -r idx query <<< "$row"
  echo "--- Search $idx: $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}" \
    > /tmp/vc-search-$idx.json
  python3 -c "
import json
data = json.load(open('/tmp/vc-search-$idx.json'))
results = data.get('results', [])
print(f'Results: {len(results)}')
for r in results:
    print(f\"  - {r.get('title', '')}: {r.get('content', '')[:200]}...\")
"
  sleep 0.5
done

AI 指令: 分析上面所有搜索的结果。识别 5 家在此空间中已融资的可比初创公司。对于每家,提供:

  1. 公司名称
  2. 单行描述
  3. 融资阶段(如果提及)
  4. 来源 URL

约束: 每家公司必须显示在至少一个 Tavily 结果中。不要从 AI 训练知识中添加公司。如果搜索返回少于 5 家,请使用更广泛的查询(如“startups in ...”或“YC companies in ...”)重新运行步骤 6。

将可比公司写入临时文件:

python3 << 'PYEOF'
import json

comparables = [
    # FILL with 5 companies from search results
]

json.dump(comparables, open('/tmp/vc-comparables.json', 'w'), indent=2)
print(f"Found {len(comparables)} comparable companies")
PYEOF

步骤 7:A 路线 — 查找可比公司的投资者

对于步骤 6 中的每家可比公司,搜索其投资者。使用 2-3 个查询,包括公司名称、行业和“funding”或“raised”等术语。

python3 << 'PYEOF'
import json

comparables = json.load(open('/tmp/vc-comparables.json'))
searches = []
for i, comp in enumerate(comparables):
    name = comp.get('name', '')
    desc = comp.get('description', '')
    searches.append({"query": f"{name} {desc} funding investors raised", "reason": f"查找 {name} 的投资者"})
    searches.append({"query": f"who invested in {name}", "reason": f"查找 {name} 投资者的备用查询"})

json.dump(searches, open('/tmp/vc-investor-searches.json', 'w'), indent=2)
print(f"Generated {len(searches)} investor searches for {len(comparables)} comparables")
PYEOF
# 对每个投资者搜索运行 Tavily 搜索
for row in $(python3 -c "
import json
searches = json.load(open('/tmp/vc-investor-searches.json'))
for i, s in enumerate(searches):
    print(f'{i}|{s[\"query\"]}')
"); do
  IFS='|' read -r idx query <<< "$row"
  echo "--- Investor Search $idx: $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}" \
    > /tmp/vc-investor-search-$idx.json
  python3 -c "
import json
data = json.load(open('/tmp/vc-investor-search-$idx.json'))
results = data.get('results', [])
print(f'Results: {len(results)}')
for r in results:
    print(f\"  - {r.get('title', '')}: {r.get('content', '')[:200]}...\")
"
  sleep 0.5
done

AI 指令: 提取在搜索片段中出现的特定风险投资基金名称。对于每个基金,记录其来源的可比公司名称以及出现该基金的搜索结果。将所有提取的基金写入临时文件。


步骤 8:B 路线 — 查找在此领域发表投资主题的 VC

搜索专注于此行业并发表投资主题的风险投资公司。

export L1="从分析中获取行业 L1 分类"
export L2="从分析中获取行业 L2 分类"

python3 << 'PYEOF'
import json, os

l1 = os.environ.get('L1', '')
l2 = os.environ.get('L2', '')

searches = [
    {"query": f"VC investment thesis {l1} {l2} 2024 2025", "reason": "查找此空间投资主题的直接查询"},
    {"query": f"venture capital investing in {l1} {l2}", "reason": "查找此领域普通 VC 的查询"},
    {"query": f"top VCs in {l1} {l2} portfolio", "reason": "查找投资组合包含此类型公司的 VC"},
    {"query": f"{l1} {l2} sector map investors", "reason": "查找行业分析和活跃投资者的备用查询"}
]

json.dump(searches, open('/tmp/vc-thesis-searches.json', 'w'), indent=2)
for s in searches:
    print(f"Search: {s['query']}")
PYEOF
# 对每个主题搜索运行 Tavily 搜索
for row in $(python3 -c "
import json
searches = json.load(open('/tmp/vc-thesis-searches.json'))
for i, s in enumerate(searches):
    print(f'{i}|{s[\"query\"]}')
"); do
  IFS='|' read -r idx query <<< "$row"
  echo "--- Thesis Search $idx: $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}" \
    > /tmp/vc-thesis-search-$idx.json
  python3 -c "
import json
data = json.load(open('/tmp/vc-thesis-search-$idx.json'))
results = data.get('results', [])
print(f'Results: {len(results)}')
for r in results:
    print(f\"  - {r.get('title', '')}: {r.get('content', '')[:200]}...\")
"
  sleep 0.5
done

AI 指令: 从结果中提取风险投资公司,这些公司(a)明确在此行业投资,并且(b)公开写了投资主题或投资论文的帖子。对于每个匹配的 VC,记录:基金名称、主题来源 URL、主题片段(1-2 句)。将所有提取的 VC 写入临时文件。


步骤 9:合并、去重和评分

合并来自 A 路线、B 路线和策划匹配(步骤 5b)的所有风险投资公司。去除重复项。使用以下标准对它们进行评分:

优先级:

  1. 直接投资相关性(+3):基金投资了可比公司(A 路线)
  2. 主题匹配(+2):基金写了此空间的投资主题(B 路线)
  3. 策划匹配(+1):基金出现在策划数据集中(步骤 5b)
  4. 阶段一致性(+2):基金的阶段重点与产品的检测阶段匹配

使用分数对投资者进行排名,分数越高表示相关性越高。如果有平局,通过引用来源数量打破平局。

将合并的排名列表写入 /tmp/vc-ranked-investors.json。

python3 << 'PYEOF'
import json

# AI: Merge here using data from:
# - /tmp/vc-investor-searches.json outputs (Track A)
# - /tmp/vc-thesis-searches.json outputs (Track B)
# - /tmp/vc-curated-matches.json (Step 5b)
# - /tmp/vc-product-analysis.json (for stage)

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

investors = [
    {
        "name": "Fund Name",
        "source": "Track A / Track B / Curated",
        "source_url": "https://example.com/article",
        "rationale": "Why this fund is relevant",
        "score": 0,
        "score_breakdown": {"direct_investment": 0, "thesis_match": 0, "curated_match": 0, "stage_alignment": 0}
    }
]

json.dump(investors, open('/tmp/vc-ranked-investors.json', 'w'), indent=2)
print(f"Ranked {len(investors)} investors")
PYEOF

步骤 10:深度挖掘(可选但强烈推荐)

对于排名前 3-5 的投资者,执行额外搜索以收集:

  1. 基金概览:从 Tavily 片段中提取
  2. 投资组合公司:在此空间中的其他投资
  3. 投资主题:关于此空间的投资论文的扩展引用

约束: 所有信息必须来自 Tavily 搜索结果。不要从 AI 知识库填充。如果片段中找不到,请写入“搜索数据中未找到”。

for investor in $(python3 -c "
import json
investors = json.load(open('/tmp/vc-ranked-investors.json'))
for i in investors[:5]:
    print(i['name'].replace(' ', '_'))
"); do
  echo "--- Deep Dive: $investor ---"
  curl -s -X POST https://api.tavily.com/search \
    -H "Content-Type: application/json" \
    -d "{\"api_key\": \"$TAVILY_API_KEY\", \"query\": \"$investor venture capital fund overview portfolio\", \"search_depth\": \"advanced\", \"max_results\": 10}" \
    > /tmp/vc-deepdive-$(echo $investor | tr '[:upper:]' '[:lower:]').json
  python3 -c "
import json
data = json.load(open('/tmp/vc-deepdive-$(echo $investor | tr '[:upper:]' '[:lower:]').json'))
results = data.get('results', [])
print(f'Results: {len(results)}')
for r in results[:5]:
    print(f\"  - {r.get('title', '')}\")
"
  sleep 0.5
done

步骤 11:生成输出

写入带有投资者排名列表和深度分析的最终 JSON 输出文件:

python3 << 'PYEOF'
import json

analysis = json.load(open('/tmp/vc-product-analysis.json'))
investors = json.load(open('/tmp/vc-ranked-investors.json'))
stage = json.load(open('/tmp/vc-stage-signals.json'))

output = {
    "product": analysis,
    "stage_signals": stage,
    "ranked_investors": investors,
    "metadata": {
        "tavily_searches_used": 12,
        "disclaimer": "This report was generated using Tavily search results. All investor names, check sizes, stage focuses, and portfolio companies are sourced from search snippets. Any field marked 'not found in search data' indicates the information was not available in the search results."
    }
}

json.dump(output, open('/tmp/vc-final-output.json', 'w'), indent=2, ensure_ascii=False)
print(f"Output written: {len(investors)} ranked investors")
PYEOF

输出文件名

export PRODUCT_SLUG=$(python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print(a.get('product_name', 'unknown').lower().replace(' ', '-')[:30])
")
export OUTPUT_FILE="vc-investors-${PRODUCT_SLUG}.json"
cp /tmp/vc-final-output.json "$OUTPUT_FILE"
echo "Output saved to: $OUTPUT_FILE"

常见失败模式

没有 Tavily 结果

  • 检查 URL。 有时产品描述太模糊。要求用户提供更具体的描述。
  • 尝试更广的分类。 如果“AI Sales Assistant”没有结果,尝试“sales technology startups”或“conversational AI for sales”。
  • 失败时,回退到 YC 批次搜索。 使用“YC W24 list”或“YC S24 batch companies in...”等查询。

产品页面不可读

  • 页面可能是 JavaScript 单页应用。要求用户粘贴描述。

所有 A 路线搜索结果为空

  • 可比公司可能是错误的。重新运行步骤 6 使用更广的查询。
  • 检查步骤 6 中的公司是否确实已融资。用“funding”或“series X”搜索它们。

最终质量检查

零幻觉检查: 对于输出中的每个事实,您必须回答:"这个事实是否出现在 Tavily 搜索结果或抓取的产品页面中?" 如果否,则将其删除。

来源检查: 每个:

  • 基金名称 → 必须出现在至少一个 Tavily 结果中
  • 可比公司 → 必须出现在至少一个 Tavily 结果中
  • 主题引用 → 必须附有 Tavily 结果 URL
  • 投资组合公司 → 必须出现在与基金相关的 Tavily 结果中

完整性检查:

  • 至少有 5 个投资者
  • 每个投资者有来源 URL
  • 每个投资者有跟进切入点
  • 输出包括可比公司的完整列表

引用每个来源: 输出中的每条信息都需要一个来源(URL + 片段)。使用引用,以便创始人可以验证每个事实。

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.

相关技能