# Funding Fit - an agent that tells a solo, non-English-speaking founder which startup programs they can actually apply to

> Source: <https://dev.to/junyoung_arche/funding-fit-an-agent-that-tells-a-solo-non-english-speaking-founder-which-startup-programs-they-n6h>
> Published: 2026-10-03 03:52:10+00:00

*This is a submission for the [Sanity Challenge](https://dev.to/challenges/sanity) (Path One: an agent on Sanity Context).*

**Disclosure:** this project and this post were built and written by my AI coworker (Arche), working on my behalf. I'm Junyoung Park, a solo founder in Seoul; I don't speak English and I'm not a developer. Everything below was actually run on my PC on Oct 3, 2026 - the numbers are copied from the real outputs.

## 
  
  
  What I Built

This week I tried to apply to investors and accelerators. Most of my time went to one boring question that every program page answers in a different place:

**"Can I even apply?"** - Do I need an incorporated company? Do I have to move to San Francisco or sit in an office in Seoul for 11 weeks? Is the interview an English video call? Is there a fee?

**Funding Fit** answers that question from the programs' *official pages only*, and it shows the exact sentence it relied on for every fact. It is built for one very specific person (me): solo, no company yet, stays in Korea, can't do English video interviews.

## 
  
  
  How I Used Sanity

- 
**Knowledge Base (Sanity Context):** 14 official sources - a website crawl of Y Combinator's apply/FAQ pages plus 13 Markdown files I made from official pages (Hustle Fund, Betaworks Camp, TheVentures, Founder University, Afore, D.CAMP, FuturePlay, SparkLabs, Antler Korea, Mashup Ventures, Zoom-In Partners, Kakao Ventures). Context organised them into 9 entries:`eligibility` ,`korea_programs` ,`global_programs` ,`interviews` ,`program_logistics` ,`program_structure` ,`application_process` ,`investment_terms` ,`comparison` .
- 
**The purpose field did a lot of work.** I wrote:*"Lead with eligibility rules: whether a company is required, remote or in-person (and where), interview format and language, check size, how to apply and deadlines. Out of scope: marketing copy, portfolio news."* The generated entries came back as clean per-program bullet lists (`- **Incorporation:** ...` ,`- **Residency:** ...` ), which made grounding easy.
- 
**Context MCP endpoint** (`funding-fit` ) with a read-only*Context Viewer* org token. The agent uses all three tools:`initial_context` ->`knowledge_base_search` ->`knowledge_base_read` .
- Sanity project ID: **r0ts6lj0** (organization`omt0cu3cw` , knowledge base`kbbjiFEOCdVH` ).

## 
  
  
  How the agent works

All model calls run **locally** with a small open model (`gemma3:4b` via Ollama) - free, offline, nothing about me leaves the PC except the search query to Sanity.

1. 
`initial_context` -> list of valid entry paths
2. the local model picks entries + English search keywords (JSON)
3. 
`knowledge_base_search` for extra recall, then`knowledge_base_read` per entry
4. split entries into `## Program` sections and group them per program (program names come only from the profile entries)
5. per section, the local model extracts 8 fields **with a verbatim quote for each**
6. 
**grounding check in code:** a value counts only if its quote really appears in the retrieved text*and* the quote's line is about that topic (e.g. a "company required" value needs`incorporat|company|entity` on the line)
7. the fit verdict (*apply / conditional / excluded* ) and the final summary are**computed by code** from verified facts only

## 
  
  
  Demo (real runs)

| Question (asked in Korean) | facts extracted | quote verified | time | 
| Where can I apply alone, without a company, with no overseas on-site participation and no English video interview? | 47 | 39 | 100 s | 
| Which Korean investors can I apply to in Korean, and how / by when? | 53 | 45 | 196 s | 
| Where can I apply right now (rolling) and get a fast answer? | 53 | 44 | 185 s | 

Output of the first question (Korean, as I read it):

In English: Hustle Fund, TheVentures, FuturePlay and Mashup Ventures have no blocking rule *in the sources*; Antler Korea is conditional (full-time in-person residency in Seoul); YC (on-site SF + video interview), Founder University (English video sessions + tuition), SparkLabs (company required) and Betaworks Camp (on-site New York) are excluded. Every line above is backed by a quote that the code found in the knowledge base.

  Full output of question 1 (every fact with its quote)
  

## 
  
  
  What went wrong (and what I changed)

I'm sharing the bugs because they are the interesting part:

1. 
**Headings became "programs".** The first run listed "Eligibility Matrix", "Sources" and "Check-Size Comparison" as if they were investors. Fix: program names come only from the profile entries; other sections are merged into a program by name prefix.
2. 
**Real quotes, wrong topic.** The model said Hustle Fund has an English video interview and quoted*"pitching is the fastest path to getting questions answered"* - the sentence exists, but it says nothing about interviews. Fix: the quote's line must contain words for that field. The same rule first broke good answers (`Not required...` lost its`Incorporation:` label), so the check looks at the whole source line, not just the quote.
3. 
**The small model invented facts in the final answer.** Asked to "summarise only the verified facts", it wrote that FuturePlay requires on-site participation - nothing says that. Fix: the summary is now written by code. The model only reads and quotes; it never decides eligibility.
4. 
**Long sources -> empty JSON.** Antler Korea came back with zero facts because the 4B model's JSON got cut off. Fix: one small extraction per section, then merge (a verified value beats an unverified one). Antler now comes out right: no company needed,*full-time in-person in Seoul* , no fees, rolling.

## 
  
  
  Limitations (honest)

- The question only steers *which entries are read* ; the verdict always uses my fixed criteria. Question 2 asked for**Korean-language, domestic** investors, but the agent has no "application language" or "country" filter, so US-based Hustle Fund still shows up. Question 3 asked for**fast answers** , but speed isn't ranked (TheVentures decides within one business day - it's in the sources, the agent just doesn't sort by it yet).
- "Not in sources" is common. It's the honest answer, but it means you still have to read some pages yourself.
- Sources are a snapshot of official pages from Oct 3, 2026. This is not legal or investment advice - check the program page before applying.
- A 4B local model is slow (100-200 s per question on my laptop) and sometimes misses a fact one run and finds it the next.

## 
  
  
  Code

Two files, Python 3.10, `pip install mcp`, plus Ollama with `gemma3:4b`. Set `SANITY_CONTEXT_MCP_URL` and `SANITY_API_TOKEN` (a Context Viewer token).

  kb_client.py - MCP client for the Sanity Context endpoint
  

  funding_fit.py - the agent
  

Thanks for reading. If you run a program that accepts solo, non-incorporated founders from Korea and it's missing here, tell me in the comments and I'll add your official page to the knowledge base.
