{"slug": "funding-fit-an-agent-that-tells-a-solo-non-english-speaking-founder-which-they", "title": "Funding Fit - an agent that tells a solo, non-English-speaking founder which startup programs they can actually apply to", "summary": "Solo founder Junyoung Park built Funding Fit, an agent that reads only the official pages of 14 startup accelerator and investor programs and tells a non-English-speaking, unincorporated applicant which ones they can actually apply to. The agent runs a local gemma3:4b model via Ollama over a Sanity Context knowledge base, extracting eight fields per program with a verbatim supporting quote for each, and verifies every quote in code before computing an apply/conditional/excluded verdict. In real runs, three Korean-language queries extracted 47-53 facts each with 39-45 quotes verified, taking 100-196 seconds per query.", "body_md": "*This is a submission for the [Sanity Challenge](https://dev.to/challenges/sanity) (Path One: an agent on Sanity Context).*\n\n**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.\n\n## \n  \n  \n  What I Built\n\nThis 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:\n\n**\"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?\n\n**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.\n\n## \n  \n  \n  How I Used Sanity\n\n- \n**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` .\n- \n**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.\n- \n**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` .\n- Sanity project ID: **r0ts6lj0** (organization`omt0cu3cw` , knowledge base`kbbjiFEOCdVH` ).\n\n## \n  \n  \n  How the agent works\n\nAll 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.\n\n1. \n`initial_context` -> list of valid entry paths\n2. the local model picks entries + English search keywords (JSON)\n3. \n`knowledge_base_search` for extra recall, then`knowledge_base_read` per entry\n4. split entries into `## Program` sections and group them per program (program names come only from the profile entries)\n5. per section, the local model extracts 8 fields **with a verbatim quote for each**\n6. \n**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)\n7. the fit verdict (*apply / conditional / excluded* ) and the final summary are**computed by code** from verified facts only\n\n## \n  \n  \n  Demo (real runs)\n\n| Question (asked in Korean) | facts extracted | quote verified | time | \n| Where can I apply alone, without a company, with no overseas on-site participation and no English video interview? | 47 | 39 | 100 s | \n| Which Korean investors can I apply to in Korean, and how / by when? | 53 | 45 | 196 s | \n| Where can I apply right now (rolling) and get a fast answer? | 53 | 44 | 185 s | \n\nOutput of the first question (Korean, as I read it):\n\nIn 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.\n\n  Full output of question 1 (every fact with its quote)\n  \n\n## \n  \n  \n  What went wrong (and what I changed)\n\nI'm sharing the bugs because they are the interesting part:\n\n1. \n**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.\n2. \n**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.\n3. \n**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.\n4. \n**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.\n\n## \n  \n  \n  Limitations (honest)\n\n- 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).\n- \"Not in sources\" is common. It's the honest answer, but it means you still have to read some pages yourself.\n- Sources are a snapshot of official pages from Oct 3, 2026. This is not legal or investment advice - check the program page before applying.\n- 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.\n\n## \n  \n  \n  Code\n\nTwo 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).\n\n  kb_client.py - MCP client for the Sanity Context endpoint\n  \n\n  funding_fit.py - the agent\n  \n\nThanks 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.", "url": "https://wpnews.pro/news/funding-fit-an-agent-that-tells-a-solo-non-english-speaking-founder-which-they", "canonical_source": "https://dev.to/junyoung_arche/funding-fit-an-agent-that-tells-a-solo-non-english-speaking-founder-which-startup-programs-they-n6h", "published_at": "2026-10-03 03:52:10+00:00", "updated_at": "2026-10-03 04:08:10.002512+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "large-language-models", "developer-tools"], "entities": ["Junyoung Park", "Funding Fit", "Sanity", "Ollama", "gemma3:4b", "Y Combinator", "Hustle Fund", "Antler Korea"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/funding-fit-an-agent-that-tells-a-solo-non-english-speaking-founder-which-they", "markdown": "https://wpnews.pro/news/funding-fit-an-agent-that-tells-a-solo-non-english-speaking-founder-which-they.md", "text": "https://wpnews.pro/news/funding-fit-an-agent-that-tells-a-solo-non-english-speaking-founder-which-they.txt", "jsonld": "https://wpnews.pro/news/funding-fit-an-agent-that-tells-a-solo-non-english-speaking-founder-which-they.jsonld"}}