@opendirectory.dev/skills 0.1.40 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/registry.json +8 -0
- package/skills/vc-curated-match/README.md +42 -0
- package/skills/vc-curated-match/SKILL.md +59 -0
- package/skills/vc-curated-match/data/vc_funds.json +277 -0
- package/skills/vc-curated-match/evals/ai-b2b-saas-seed.md +141 -0
- package/skills/vc-curated-match/evals/devtool-oss-seed.md +141 -0
- package/skills/vc-curated-match/evals/evals.json +43 -0
- package/skills/vc-curated-match/evals/fintech-india-preseed.md +142 -0
- package/skills/vc-curated-match/evals/varnan-seed.md +141 -0
- package/skills/vc-curated-match/scripts/fetch_product_context.py +80 -0
- package/skills/vc-curated-match/scripts/generate_report.py +111 -0
- package/skills/vc-curated-match/scripts/match_vcs.py +127 -0
- package/skills/vc-curated-match/scripts/run.py +82 -0
- package/skills/vc-finder/.env.example +1 -5
- package/skills/vc-finder/README.md +16 -9
- package/skills/vc-finder/SKILL.md +446 -193
- package/skills/vc-finder/data/vc_funds.json +277 -0
- package/skills/vc-finder/evals/evals.json +43 -25
- package/skills/vc-finder/scripts/match_funds.py +144 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"fund_name": "Y Combinator",
|
|
4
|
+
"thesis": "We provide seed funding for startups. We invest in deeply technical teams building massive companies across all domains.",
|
|
5
|
+
"check_size": "$500k",
|
|
6
|
+
"stage_focus": ["Pre-seed", "Seed"],
|
|
7
|
+
"industry_tags": ["Generalist", "B2B SaaS", "DevTools", "AI"],
|
|
8
|
+
"geography_focus": ["Global"],
|
|
9
|
+
"notable_portfolio": ["Stripe", "Airbnb", "GitLab"],
|
|
10
|
+
"website": "https://www.ycombinator.com",
|
|
11
|
+
"source": "fund website"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"fund_name": "boldstart ventures",
|
|
15
|
+
"thesis": "Day one partner for developer first, crypto, and SaaS founders. We love deeply technical founders solving hard infrastructure problems.",
|
|
16
|
+
"check_size": "$1M - $3M",
|
|
17
|
+
"stage_focus": ["Pre-seed", "Seed"],
|
|
18
|
+
"industry_tags": ["DevTools", "Infrastructure", "Crypto"],
|
|
19
|
+
"geography_focus": ["Global", "US"],
|
|
20
|
+
"notable_portfolio": ["Snyk", "Blockdaemon", "Superhuman"],
|
|
21
|
+
"website": "https://boldstart.vc",
|
|
22
|
+
"source": "fund website"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"fund_name": "Heavybit",
|
|
26
|
+
"thesis": "The leading investor in developer-first startups. We help technical founders launch, gain traction, and build enterprise-ready companies.",
|
|
27
|
+
"check_size": "$1M - $5M",
|
|
28
|
+
"stage_focus": ["Seed", "Series A"],
|
|
29
|
+
"industry_tags": ["DevTools", "Infrastructure", "Open Source"],
|
|
30
|
+
"geography_focus": ["Global", "US"],
|
|
31
|
+
"notable_portfolio": ["PagerDuty", "Sanity", "Netlify"],
|
|
32
|
+
"website": "https://www.heavybit.com",
|
|
33
|
+
"source": "fund website"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"fund_name": "Amplify Partners",
|
|
37
|
+
"thesis": "We invest in technical founders building the next generation of IT infrastructure, developer tools, and data platforms.",
|
|
38
|
+
"check_size": "$2M - $8M",
|
|
39
|
+
"stage_focus": ["Seed", "Series A"],
|
|
40
|
+
"industry_tags": ["DevTools", "Infrastructure", "AI", "Data"],
|
|
41
|
+
"geography_focus": ["US"],
|
|
42
|
+
"notable_portfolio": ["Datadog", "OCTO", "dbt Labs"],
|
|
43
|
+
"website": "https://www.amplifypartners.com",
|
|
44
|
+
"source": "fund website"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"fund_name": "OSS Capital",
|
|
48
|
+
"thesis": "We exclusively back early-stage founders building Commercial Open Source Software (COSS) companies.",
|
|
49
|
+
"check_size": "$500k - $2M",
|
|
50
|
+
"stage_focus": ["Pre-seed", "Seed", "Series A"],
|
|
51
|
+
"industry_tags": ["Open Source", "DevTools"],
|
|
52
|
+
"geography_focus": ["Global"],
|
|
53
|
+
"notable_portfolio": ["Cal.com", "Appsmith", "Hoppscotch"],
|
|
54
|
+
"website": "https://oss.capital",
|
|
55
|
+
"source": "fund website"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"fund_name": "Sequoia Capital",
|
|
59
|
+
"thesis": "We help the daring build legendary companies, from idea to IPO and beyond. Sequoia is an early-stage and growth-stage investor.",
|
|
60
|
+
"check_size": "$1M - $10M+",
|
|
61
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
62
|
+
"industry_tags": ["Generalist", "Enterprise", "Consumer", "AI"],
|
|
63
|
+
"geography_focus": ["Global"],
|
|
64
|
+
"notable_portfolio": ["Apple", "Google", "WhatsApp"],
|
|
65
|
+
"website": "https://www.sequoiacap.com",
|
|
66
|
+
"source": "fund website"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"fund_name": "Andreessen Horowitz (a16z)",
|
|
70
|
+
"thesis": "We invest in software eating the world. We back bold entrepreneurs building the future through technology.",
|
|
71
|
+
"check_size": "$1M - $50M+",
|
|
72
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
73
|
+
"industry_tags": ["Generalist", "Crypto", "Enterprise", "Consumer", "AI"],
|
|
74
|
+
"geography_focus": ["Global", "US"],
|
|
75
|
+
"notable_portfolio": ["Facebook", "Coinbase", "Figma"],
|
|
76
|
+
"website": "https://a16z.com",
|
|
77
|
+
"source": "fund website"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"fund_name": "Point Nine Capital",
|
|
81
|
+
"thesis": "We are a seed-stage venture capital firm focused on B2B SaaS and B2B marketplaces globally.",
|
|
82
|
+
"check_size": "$1M - $3M",
|
|
83
|
+
"stage_focus": ["Seed"],
|
|
84
|
+
"industry_tags": ["B2B SaaS", "Marketplaces"],
|
|
85
|
+
"geography_focus": ["Europe", "Global"],
|
|
86
|
+
"notable_portfolio": ["Zendesk", "Typeform", "Docplanner"],
|
|
87
|
+
"website": "https://www.pointnine.com",
|
|
88
|
+
"source": "fund website"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"fund_name": "Cherry Ventures",
|
|
92
|
+
"thesis": "We champion founders in Europe from their earliest days. We are generalist seed investors.",
|
|
93
|
+
"check_size": "$1M - $4M",
|
|
94
|
+
"stage_focus": ["Pre-seed", "Seed"],
|
|
95
|
+
"industry_tags": ["Generalist", "Consumer", "B2B SaaS"],
|
|
96
|
+
"geography_focus": ["Europe"],
|
|
97
|
+
"notable_portfolio": ["FlixBus", "Auto1 Group", "Forto"],
|
|
98
|
+
"website": "https://www.cherry.vc",
|
|
99
|
+
"source": "fund website"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"fund_name": "First Round Capital",
|
|
103
|
+
"thesis": "We are the seed-stage firm that builds the most supportive community for founders.",
|
|
104
|
+
"check_size": "$1M - $4M",
|
|
105
|
+
"stage_focus": ["Pre-seed", "Seed"],
|
|
106
|
+
"industry_tags": ["Generalist", "B2B SaaS", "Consumer"],
|
|
107
|
+
"geography_focus": ["US"],
|
|
108
|
+
"notable_portfolio": ["Uber", "Notion", "Roblox"],
|
|
109
|
+
"website": "https://firstround.com",
|
|
110
|
+
"source": "fund website"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"fund_name": "Bessemer Venture Partners",
|
|
114
|
+
"thesis": "BVP helps entrepreneurs lay strong foundations to build and forge long-standing companies.",
|
|
115
|
+
"check_size": "$1M - $20M+",
|
|
116
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
117
|
+
"industry_tags": ["Generalist", "Enterprise", "Consumer", "FinTech"],
|
|
118
|
+
"geography_focus": ["Global"],
|
|
119
|
+
"notable_portfolio": ["LinkedIn", "Twilio", "Shopify"],
|
|
120
|
+
"website": "https://www.bvp.com",
|
|
121
|
+
"source": "fund website"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"fund_name": "Index Ventures",
|
|
125
|
+
"thesis": "We back the best and most ambitious entrepreneurs across all stages to build category-defining businesses.",
|
|
126
|
+
"check_size": "$1M - $20M+",
|
|
127
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
128
|
+
"industry_tags": ["Generalist", "FinTech", "Consumer", "B2B SaaS"],
|
|
129
|
+
"geography_focus": ["Europe", "US", "Global"],
|
|
130
|
+
"notable_portfolio": ["Dropbox", "Slack", "Figma"],
|
|
131
|
+
"website": "https://www.indexventures.com",
|
|
132
|
+
"source": "fund website"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"fund_name": "Lightspeed Venture Partners",
|
|
136
|
+
"thesis": "We invest globally in enterprise, consumer, and health founders who are shaping the future.",
|
|
137
|
+
"check_size": "$1M - $25M+",
|
|
138
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
139
|
+
"industry_tags": ["Generalist", "Enterprise", "Consumer", "FinTech"],
|
|
140
|
+
"geography_focus": ["Global"],
|
|
141
|
+
"notable_portfolio": ["Snap", "Rippling", "MuleSoft"],
|
|
142
|
+
"website": "https://lsvp.com",
|
|
143
|
+
"source": "fund website"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"fund_name": "Accel",
|
|
147
|
+
"thesis": "We partner with exceptional founders from inception through all phases of private company growth.",
|
|
148
|
+
"check_size": "$1M - $20M+",
|
|
149
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
150
|
+
"industry_tags": ["Generalist", "B2B SaaS", "Consumer", "DevTools"],
|
|
151
|
+
"geography_focus": ["Global"],
|
|
152
|
+
"notable_portfolio": ["Facebook", "Atlassian", "Spotify"],
|
|
153
|
+
"website": "https://www.accel.com",
|
|
154
|
+
"source": "fund website"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"fund_name": "Bain Capital Ventures",
|
|
158
|
+
"thesis": "From seed to growth, we back founders building legendary infrastructure, fintech, application, and commerce companies.",
|
|
159
|
+
"check_size": "$1M - $50M+",
|
|
160
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
161
|
+
"industry_tags": ["Generalist", "Infrastructure", "FinTech", "B2B SaaS"],
|
|
162
|
+
"geography_focus": ["US", "Global"],
|
|
163
|
+
"notable_portfolio": ["DocuSign", "SendGrid", "Redis"],
|
|
164
|
+
"website": "https://www.baincapitalventures.com",
|
|
165
|
+
"source": "fund website"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"fund_name": "Greylock Partners",
|
|
169
|
+
"thesis": "We partner with early-stage founders to build enterprise and consumer software companies that define new categories.",
|
|
170
|
+
"check_size": "$1M - $10M",
|
|
171
|
+
"stage_focus": ["Seed", "Series A"],
|
|
172
|
+
"industry_tags": ["Enterprise", "Consumer", "Cybersecurity", "AI"],
|
|
173
|
+
"geography_focus": ["US"],
|
|
174
|
+
"notable_portfolio": ["Workday", "Palo Alto Networks", "LinkedIn"],
|
|
175
|
+
"website": "https://greylock.com",
|
|
176
|
+
"source": "fund website"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"fund_name": "Unusual Ventures",
|
|
180
|
+
"thesis": "We provide a breakthrough level of support for early-stage founders building enterprise tech.",
|
|
181
|
+
"check_size": "$1M - $5M",
|
|
182
|
+
"stage_focus": ["Pre-seed", "Seed"],
|
|
183
|
+
"industry_tags": ["Enterprise", "DevTools", "B2B SaaS"],
|
|
184
|
+
"geography_focus": ["US"],
|
|
185
|
+
"notable_portfolio": ["Arctic Wolf", "Harness", "Vivun"],
|
|
186
|
+
"website": "https://www.unusual.vc",
|
|
187
|
+
"source": "fund website"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"fund_name": "Crane Venture Partners",
|
|
191
|
+
"thesis": "We back deep tech and enterprise founders in Europe solving hard problems with data and code.",
|
|
192
|
+
"check_size": "$1M - $4M",
|
|
193
|
+
"stage_focus": ["Seed"],
|
|
194
|
+
"industry_tags": ["Enterprise", "DeepTech", "Data", "AI"],
|
|
195
|
+
"geography_focus": ["Europe"],
|
|
196
|
+
"notable_portfolio": ["Onfido", "Tessian", "Forto"],
|
|
197
|
+
"website": "https://crane.vc",
|
|
198
|
+
"source": "fund website"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"fund_name": "Founder Collective",
|
|
202
|
+
"thesis": "We are a seed-stage venture capital fund, built by founders, for founders. We back weird, wonderful, and wild startups.",
|
|
203
|
+
"check_size": "$500k - $2M",
|
|
204
|
+
"stage_focus": ["Seed"],
|
|
205
|
+
"industry_tags": ["Generalist", "Consumer", "B2B SaaS"],
|
|
206
|
+
"geography_focus": ["US", "Global"],
|
|
207
|
+
"notable_portfolio": ["Uber", "Airtable", "BuzzFeed"],
|
|
208
|
+
"website": "https://www.foundercollective.com",
|
|
209
|
+
"source": "fund website"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"fund_name": "Benchmark",
|
|
213
|
+
"thesis": "We are a partnership of equal partners. We back mission-driven founders at the earliest stages and walk beside them for the long haul.",
|
|
214
|
+
"check_size": "$1M - $10M",
|
|
215
|
+
"stage_focus": ["Seed", "Series A"],
|
|
216
|
+
"industry_tags": ["Generalist", "Marketplaces", "Enterprise", "Consumer"],
|
|
217
|
+
"geography_focus": ["US", "Global"],
|
|
218
|
+
"notable_portfolio": ["Uber", "Twitter", "eBay", "Snapchat"],
|
|
219
|
+
"website": "https://www.benchmark.com",
|
|
220
|
+
"source": "fund website"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"fund_name": "Accel India",
|
|
224
|
+
"thesis": "We partner with exceptional founders from inception through all phases of private company growth in the Indian ecosystem.",
|
|
225
|
+
"check_size": "$1M - $15M",
|
|
226
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
227
|
+
"industry_tags": ["Generalist", "B2B SaaS", "Consumer", "FinTech", "E-commerce"],
|
|
228
|
+
"geography_focus": ["India"],
|
|
229
|
+
"notable_portfolio": ["Flipkart", "Swiggy", "Freshworks"],
|
|
230
|
+
"website": "https://www.accel.com/india",
|
|
231
|
+
"source": "fund website"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"fund_name": "Blume Ventures",
|
|
235
|
+
"thesis": "We are a seed and pre-seed venture fund that backs startups with both funding and active mentoring.",
|
|
236
|
+
"check_size": "$500k - $3M",
|
|
237
|
+
"stage_focus": ["Pre-seed", "Seed"],
|
|
238
|
+
"industry_tags": ["Generalist", "B2B SaaS", "Consumer", "DeepTech", "HealthTech"],
|
|
239
|
+
"geography_focus": ["India"],
|
|
240
|
+
"notable_portfolio": ["Unacademy", "Purplle", "GreyOrange"],
|
|
241
|
+
"website": "https://blume.vc",
|
|
242
|
+
"source": "fund website"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"fund_name": "Elevation Capital",
|
|
246
|
+
"thesis": "We partner with visionary founders in India across early stages to help them build category-defining businesses.",
|
|
247
|
+
"check_size": "$1M - $10M",
|
|
248
|
+
"stage_focus": ["Seed", "Series A"],
|
|
249
|
+
"industry_tags": ["Generalist", "Consumer", "FinTech", "B2B SaaS", "HealthTech"],
|
|
250
|
+
"geography_focus": ["India"],
|
|
251
|
+
"notable_portfolio": ["Paytm", "Swiggy", "Meesho"],
|
|
252
|
+
"website": "https://elevationcapital.com",
|
|
253
|
+
"source": "fund website"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"fund_name": "Peak XV Partners",
|
|
257
|
+
"thesis": "Formerly Sequoia India & SEA, we partner with founders across early, growth, and public stages to build enduring companies.",
|
|
258
|
+
"check_size": "$1M - $20M+",
|
|
259
|
+
"stage_focus": ["Seed", "Series A", "Growth"],
|
|
260
|
+
"industry_tags": ["Generalist", "Consumer", "FinTech", "B2B SaaS", "DevTools", "AI"],
|
|
261
|
+
"geography_focus": ["India", "South Asia"],
|
|
262
|
+
"notable_portfolio": ["Zomato", "Pine Labs", "Cred"],
|
|
263
|
+
"website": "https://www.peakxv.com",
|
|
264
|
+
"source": "fund website"
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"fund_name": "Nexus Venture Partners",
|
|
268
|
+
"thesis": "We are a US-India venture capital firm backing extraordinary founders building product-first companies.",
|
|
269
|
+
"check_size": "$1M - $10M",
|
|
270
|
+
"stage_focus": ["Seed", "Series A"],
|
|
271
|
+
"industry_tags": ["B2B SaaS", "Enterprise", "DevTools", "Consumer"],
|
|
272
|
+
"geography_focus": ["India", "US"],
|
|
273
|
+
"notable_portfolio": ["Postman", "Hasura", "Zepto"],
|
|
274
|
+
"website": "https://nexusvp.com",
|
|
275
|
+
"source": "fund website"
|
|
276
|
+
}
|
|
277
|
+
]
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
"input": {
|
|
7
7
|
"prompt": "Find VCs for my startup: https://linear.app",
|
|
8
8
|
"env": {
|
|
9
|
-
"GEMINI_API_KEY": "set",
|
|
10
9
|
"TAVILY_API_KEY": "set",
|
|
11
10
|
"FIRECRAWL_API_KEY": "set"
|
|
12
11
|
}
|
|
@@ -34,7 +33,6 @@
|
|
|
34
33
|
"input": {
|
|
35
34
|
"prompt": "Find investors for this consumer app: https://www.bereal.com",
|
|
36
35
|
"env": {
|
|
37
|
-
"GEMINI_API_KEY": "set",
|
|
38
36
|
"TAVILY_API_KEY": "set",
|
|
39
37
|
"FIRECRAWL_API_KEY": "set"
|
|
40
38
|
}
|
|
@@ -53,12 +51,11 @@
|
|
|
53
51
|
},
|
|
54
52
|
{
|
|
55
53
|
"id": "eval_003",
|
|
56
|
-
"name": "Description-only input: skips fetch, goes direct to
|
|
57
|
-
"description": "User pastes a product description with no URL. Validates that Steps 3 and 4 are skipped and the skill proceeds directly to
|
|
54
|
+
"name": "Description-only input: skips fetch, goes direct to AI analysis",
|
|
55
|
+
"description": "User pastes a product description with no URL. Validates that Steps 3 and 4 are skipped and the skill proceeds directly to AI analysis.",
|
|
58
56
|
"input": {
|
|
59
57
|
"prompt": "Find VCs for my startup. Here's what we do: We build an AI-powered legal contract review tool for in-house legal teams at mid-market companies. Our tool flags risky clauses and suggests standard language. We're pre-seed, 3 months post-launch, no pricing page yet. US-focused.",
|
|
60
58
|
"env": {
|
|
61
|
-
"GEMINI_API_KEY": "set",
|
|
62
59
|
"TAVILY_API_KEY": "set",
|
|
63
60
|
"FIRECRAWL_API_KEY": "not set"
|
|
64
61
|
}
|
|
@@ -67,7 +64,7 @@
|
|
|
67
64
|
"Detects no URL in the input",
|
|
68
65
|
"Skips Step 3: no fetch attempt is made",
|
|
69
66
|
"Skips Step 4: no regex stage detection from page",
|
|
70
|
-
"Passes the pasted description directly to
|
|
67
|
+
"Passes the pasted description directly to the AI in Step 5",
|
|
71
68
|
"Stage set to 'pre-seed' with high confidence (user stated it explicitly)",
|
|
72
69
|
"Industry taxonomy: software > legaltech > contract review automation",
|
|
73
70
|
"Generates 5 comparable legaltech companies",
|
|
@@ -79,47 +76,68 @@
|
|
|
79
76
|
},
|
|
80
77
|
{
|
|
81
78
|
"id": "eval_004",
|
|
82
|
-
"name": "
|
|
83
|
-
"description": "Validates that the skill stops at Step 1 with exact setup instructions when
|
|
79
|
+
"name": "TAVILY_API_KEY missing: immediate stop at Step 1",
|
|
80
|
+
"description": "Validates that the skill stops at Step 1 with exact setup instructions when Tavily key is absent.",
|
|
84
81
|
"input": {
|
|
85
82
|
"prompt": "Find VCs for https://stripe.com",
|
|
86
83
|
"env": {
|
|
87
|
-
"
|
|
88
|
-
"TAVILY_API_KEY": "set",
|
|
84
|
+
"TAVILY_API_KEY": "not set",
|
|
89
85
|
"FIRECRAWL_API_KEY": "set"
|
|
90
86
|
}
|
|
91
87
|
},
|
|
92
88
|
"expected_behavior": [
|
|
93
|
-
"Step 1 detects
|
|
89
|
+
"Step 1 detects TAVILY_API_KEY is missing",
|
|
94
90
|
"Stops immediately at Step 1",
|
|
95
|
-
"Tells the user: '
|
|
91
|
+
"Tells the user: 'TAVILY_API_KEY is required to research VC investments and theses. There is no fallback for this. Get it at app.tavily.com. Free tier: 1000 credits/month (about 125 full runs). Add it to your .env file.'",
|
|
96
92
|
"Does NOT fetch the URL",
|
|
97
93
|
"Does NOT run any Tavily searches",
|
|
98
94
|
"Does NOT attempt any analysis"
|
|
99
95
|
],
|
|
100
96
|
"expected_output": "Immediate stop at Step 1 with exact error message including the URL to get the key. No partial output generated."
|
|
101
97
|
},
|
|
98
|
+
{
|
|
99
|
+
"id": "eval_006",
|
|
100
|
+
"name": "Curated pre-match: DevTools seed product gets High confidence matches from vc_funds.json",
|
|
101
|
+
"description": "Validates Step 5b -- that the curated scoring algorithm correctly identifies DevTools-focused seed funds (Heavybit, boldstart, Amplify) as High confidence matches for a developer tool at seed stage, and their portfolio companies appear as seed comparables.",
|
|
102
|
+
"input": {
|
|
103
|
+
"prompt": "Find VCs for my startup: https://buildkite.com",
|
|
104
|
+
"env": {
|
|
105
|
+
"TAVILY_API_KEY": "set",
|
|
106
|
+
"FIRECRAWL_API_KEY": "set"
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"expected_behavior": [
|
|
110
|
+
"Step 5b runs after Step 5",
|
|
111
|
+
"AI maps taxonomy to extracted_tags including 'DevTools' or 'Infrastructure'",
|
|
112
|
+
"Scoring produces at least 3 High confidence matches",
|
|
113
|
+
"Heavybit, boldstart, or Amplify Partners appear in high_medium_matches",
|
|
114
|
+
"curated_comparables includes portfolio companies like PagerDuty, Snyk, Datadog, or Netlify",
|
|
115
|
+
"Step 6 uses curated portfolio companies as primary comparables (source_type: curated_portfolio)",
|
|
116
|
+
"Final output includes a 'Curated Matches (Verified)' section",
|
|
117
|
+
"Curated VCs in output have source 'verified (fund website)' not a Tavily URL",
|
|
118
|
+
"No curated VC has fund_overview drawn from AI training knowledge -- thesis field used verbatim"
|
|
119
|
+
],
|
|
120
|
+
"expected_output": "Curated Matches section with 3+ High/Medium DevTools funds, portfolio companies used as Track A comparables, merged output with verified and Tavily-sourced funds."
|
|
121
|
+
},
|
|
102
122
|
{
|
|
103
123
|
"id": "eval_005",
|
|
104
|
-
"name": "
|
|
105
|
-
"description": "Validates that the skill
|
|
124
|
+
"name": "Firecrawl missing, Tavily extract fallback works",
|
|
125
|
+
"description": "Validates that the skill falls through to Tavily extract when Firecrawl is not set, and completes the full run successfully.",
|
|
106
126
|
"input": {
|
|
107
127
|
"prompt": "Who invests in CI/CD automation startups? https://buildkite.com",
|
|
108
128
|
"env": {
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"FIRECRAWL_API_KEY": "set"
|
|
129
|
+
"TAVILY_API_KEY": "set",
|
|
130
|
+
"FIRECRAWL_API_KEY": "not set"
|
|
112
131
|
}
|
|
113
132
|
},
|
|
114
133
|
"expected_behavior": [
|
|
115
|
-
"Step 1
|
|
116
|
-
"Step
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"Does NOT suggest any workaround"
|
|
134
|
+
"Step 1 logs FIRECRAWL_API_KEY as not set and continues silently",
|
|
135
|
+
"Step 3 uses Tavily extract endpoint instead of Firecrawl",
|
|
136
|
+
"Content is fetched successfully (at least 200 chars)",
|
|
137
|
+
"Stage detection and AI analysis run normally",
|
|
138
|
+
"Full two-track VC output produced",
|
|
139
|
+
"No error about missing Firecrawl key in the final output"
|
|
122
140
|
],
|
|
123
|
-
"expected_output": "
|
|
141
|
+
"expected_output": "Full VC list produced using Tavily extract fallback. No degraded output quality relative to Firecrawl path."
|
|
124
142
|
}
|
|
125
143
|
]
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"""
|
|
2
|
+
match_funds.py -- standalone scoring script for vc-finder curated pre-match.
|
|
3
|
+
Scores data/vc_funds.json against a product context and outputs ranked matches.
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
python3 scripts/match_funds.py \
|
|
7
|
+
--tags "DevTools,B2B SaaS" \
|
|
8
|
+
--stage Seed \
|
|
9
|
+
--geo US \
|
|
10
|
+
--output /tmp/vc-curated-matches.json
|
|
11
|
+
|
|
12
|
+
Available tags:
|
|
13
|
+
DevTools, Infrastructure, Open Source, B2B SaaS, AI, Data, FinTech, HealthTech,
|
|
14
|
+
Enterprise, Consumer, Marketplaces, E-commerce, Crypto, DeepTech, Cybersecurity, Generalist
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import argparse
|
|
18
|
+
import json
|
|
19
|
+
import os
|
|
20
|
+
import sys
|
|
21
|
+
|
|
22
|
+
STAGE_ORDER = {"Pre-seed": 0, "Seed": 1, "Series A": 2, "Growth": 3}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def score_fund(fund, context):
|
|
26
|
+
score = 0
|
|
27
|
+
fund_tags = fund.get("industry_tags", [])
|
|
28
|
+
extracted_tags = context.get("extracted_tags", ["Generalist"])
|
|
29
|
+
|
|
30
|
+
tag_points = 0
|
|
31
|
+
matched_tags = []
|
|
32
|
+
for tag in extracted_tags:
|
|
33
|
+
if tag in fund_tags:
|
|
34
|
+
tag_points += 5 if tag == "Generalist" else 20
|
|
35
|
+
matched_tags.append(tag)
|
|
36
|
+
tag_points = min(tag_points, 60)
|
|
37
|
+
score += tag_points
|
|
38
|
+
|
|
39
|
+
stage_hint = context.get("stage_hint")
|
|
40
|
+
fund_stages = fund.get("stage_focus", [])
|
|
41
|
+
if not stage_hint:
|
|
42
|
+
score += 10
|
|
43
|
+
elif fund_stages:
|
|
44
|
+
if stage_hint in fund_stages:
|
|
45
|
+
score += 20
|
|
46
|
+
elif stage_hint in STAGE_ORDER:
|
|
47
|
+
hint_idx = STAGE_ORDER[stage_hint]
|
|
48
|
+
if any(f in STAGE_ORDER and abs(STAGE_ORDER[f] - hint_idx) == 1 for f in fund_stages):
|
|
49
|
+
score += 10
|
|
50
|
+
|
|
51
|
+
geo_hint = context.get("geography_hint")
|
|
52
|
+
fund_geo = fund.get("geography_focus", ["Global"])
|
|
53
|
+
if not geo_hint or geo_hint == "Global":
|
|
54
|
+
score += 10
|
|
55
|
+
elif fund_geo == ["India"] and geo_hint == "US":
|
|
56
|
+
pass
|
|
57
|
+
elif geo_hint in fund_geo:
|
|
58
|
+
score += 20
|
|
59
|
+
elif "Global" in fund_geo:
|
|
60
|
+
score += 15
|
|
61
|
+
|
|
62
|
+
if geo_hint == "US" and "India" in fund_geo and "US" not in fund_geo and "Global" not in fund_geo:
|
|
63
|
+
score = max(0, score - 30)
|
|
64
|
+
if fund_tags and extracted_tags and fund_tags[0] not in extracted_tags and tag_points <= 20:
|
|
65
|
+
score = max(0, score - 15)
|
|
66
|
+
|
|
67
|
+
return score, matched_tags
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def get_confidence_tier(score):
|
|
71
|
+
if score >= 70:
|
|
72
|
+
return "High"
|
|
73
|
+
if score >= 40:
|
|
74
|
+
return "Medium"
|
|
75
|
+
return "Low"
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def main():
|
|
79
|
+
parser = argparse.ArgumentParser()
|
|
80
|
+
parser.add_argument("--tags", required=True, help="Comma-separated industry tags")
|
|
81
|
+
parser.add_argument("--stage", default="", help="Pre-seed / Seed / Series A / Growth")
|
|
82
|
+
parser.add_argument("--geo", default="", help="US / Europe / India / Global")
|
|
83
|
+
parser.add_argument("--funds", default="data/vc_funds.json")
|
|
84
|
+
parser.add_argument("--output", default="/tmp/vc-curated-matches.json")
|
|
85
|
+
args = parser.parse_args()
|
|
86
|
+
|
|
87
|
+
context = {
|
|
88
|
+
"extracted_tags": [t.strip() for t in args.tags.split(",") if t.strip()],
|
|
89
|
+
"stage_hint": args.stage or None,
|
|
90
|
+
"geography_hint": args.geo or None,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
funds_path = args.funds
|
|
94
|
+
if not os.path.exists(funds_path):
|
|
95
|
+
print(f"ERROR: {funds_path} not found", file=sys.stderr)
|
|
96
|
+
sys.exit(1)
|
|
97
|
+
|
|
98
|
+
with open(funds_path) as f:
|
|
99
|
+
funds = json.load(f)
|
|
100
|
+
|
|
101
|
+
scored = []
|
|
102
|
+
for fund in funds:
|
|
103
|
+
score, matched_tags = score_fund(fund, context)
|
|
104
|
+
tier = get_confidence_tier(score)
|
|
105
|
+
scored.append({
|
|
106
|
+
"fund_name": fund["fund_name"],
|
|
107
|
+
"thesis": fund["thesis"],
|
|
108
|
+
"check_size": fund["check_size"],
|
|
109
|
+
"stage_focus": fund["stage_focus"],
|
|
110
|
+
"industry_tags": fund["industry_tags"],
|
|
111
|
+
"geography_focus": fund["geography_focus"],
|
|
112
|
+
"notable_portfolio": fund["notable_portfolio"],
|
|
113
|
+
"website": fund["website"],
|
|
114
|
+
"source": "verified (fund website)",
|
|
115
|
+
"score": score,
|
|
116
|
+
"confidence": tier,
|
|
117
|
+
"matched_tags": matched_tags,
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
scored.sort(key=lambda x: (-x["score"], x["fund_name"]))
|
|
121
|
+
relevant = [m for m in scored if m["confidence"] in ("High", "Medium")]
|
|
122
|
+
|
|
123
|
+
curated_comparables = []
|
|
124
|
+
for m in relevant:
|
|
125
|
+
for company in m.get("notable_portfolio", []):
|
|
126
|
+
if company not in curated_comparables:
|
|
127
|
+
curated_comparables.append(company)
|
|
128
|
+
|
|
129
|
+
output = {
|
|
130
|
+
"high_medium_matches": relevant,
|
|
131
|
+
"curated_comparables": curated_comparables[:6],
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
with open(args.output, "w") as f:
|
|
135
|
+
json.dump(output, f, indent=2)
|
|
136
|
+
|
|
137
|
+
print(f"Curated matches: {len(relevant)} High/Medium confidence funds")
|
|
138
|
+
for m in relevant[:8]:
|
|
139
|
+
print(f" {m['confidence']:6} ({m['score']:3}) {m['fund_name']} | {m['matched_tags']}")
|
|
140
|
+
print(f"Portfolio seed comparables: {curated_comparables[:6]}")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
if __name__ == "__main__":
|
|
144
|
+
main()
|