most people who contribute to open source have free llm api access they never use: groq, openrouter :free, nvidia nim, google ai studio, vercel ai gateway, nous portal, and often a cerebras trial. each lane alone is small. we put all of them in parallel and gave each model the work its speed suits. on november 2, 2026, that did 149 small tasks in 1.44 s and 40 ~250-word answers in 2.26 s. one at a time, the same 149 calls take 54.6 s.
the models are fast enough now. what slows agent work down is orchestration. this post is the evidence, the recipe, and the gap we are asking coding-agent tools to close (pingdotgg/t3code#29886).
get every key in ten minutes
every provider below has a web sign-up, most with github or google sign-in. creating each key is a few clicks and a paste. one script opens every key page, takes the pasted keys without echoing them, checks each one, and saves them to ~/.config/free-stack/keys.env (mode 600):
curl -fsSLO https://raw.githubusercontent.com/kvnloo/z0evals/main/studies/free-stack-v0/scripts/onboard.py
python3 onboard.py --open-all # opens every key page; paste each key when asked
python3 onboard.py --check # which keys work, how many models each can see
python3 onboard.py --export opencode > free-providers.json # opencode provider entries for nim, vercel, nous
| provider | key page | what is free |
|---|---|---|
| groq | console.groq.com/keys | free tier, limits per model (e.g. 30 rpm / 8k tpm) |
| openrouter | openrouter.ai/settings/keys | :free models; the daily cap rises after a one-time $10 credit purchase |
| nvidia nim | build.nvidia.com | developer program, ~40 rpm, prototyping only |
| google ai studio | aistudio.google.com/apikey | free tier; prompts may be used to improve products |
| vercel ai gateway | vercel ai keys | monthly credit for unpaid teams, free-eligible models |
| nous portal | portal.nousresearch.com | free plan: free models only, 50 rpm / 500k tpm |
| cerebras | cloud.cerebras.ai | trial credit, not a permanent free tier (optional) |
| opencode zen | opencode.ai/auth | rotating -free models, also keyless inside the opencode cli |
the script cannot click through sign-up for you, and it should not: email confirmation, captchas and terms belong to the person who owns the account. one account per provider; multiplying free tiers breaks most providers' terms.
the menu
each free route, called directly with streaming (data). ttft is the time to the first token on a one-word prompt; tok/s is output speed on a ~400-word answer, first to last token.
| provider | model | ttft | tok/s | billing |
|---|---|---|---|---|
| cerebras | qwen-3.8-27b | 0.17 s | 2,015 | trial credit |
| cerebras | gpt-oss-120b | 0.21 s | 1,669 | trial credit |
| groq | gpt-oss-20b | 0.34 s | 895 | free |
| groq | qwen3.8-27b | 0.20 s | 502 | free |
| groq | gpt-oss-120b | 0.20 s | 486 | free |
| vercel | nemotron-3.5-lightning-free | 0.51 s | 313 | free credit |
| gemini-3.5-flash-lite | 0.57 s | 310 | free (may train) | |
| openrouter | nemotron-3.5-super-vl:free | 0.47 s | 147 | free |
| nim | nemotron-3.5-lightning-30b-a3b | 0.30 s | 117 | free (dev program) |
| nim | nemotron-3.5-super-vl-120b-a12b | 0.42 s | 115 | free (dev program) |
| vercel | ling-3.1-flash-1019 | 0.99 s | 108 | free credit |
| openrouter | dots-3-note-preview:free | 0.62 s | 98 | free |
| openrouter | nemotron-3.5-lightning:free | 0.38 s | 96 | free |
| openrouter | north-mini-code:free | 0.28 s | 77 | free |
| openrouter | nemotron-3-ultra-550b-a55b:free | 0.51 s | 59 | free |
| nim | nemotron-3-ultra-550b-a55b | 0.72 s | 34 | free (dev program) |
| openrouter | xing4.0-29b-a4b:free | 0.29 s | 32 | free |
every lane starts in under a second. what separates them is output speed, from 2,000 tok/s down to 32.
six more routes did not answer that night: opencode zen free (free usage limit), openrouter gemma-4 (429), inkling-small (403, harness-only), vercel beam-free (403, paid only) and nim step-5-preview (timeout). we could not test nous portal or opencode go because our own logins had expired. free routes come and go, so anything built on them has to probe first.
match the job to the lane
| role | lanes | job | why |
|---|---|---|---|
| sprinters | ttft < 0.6 s, ≥ 300 tok/s | fan-out of small tasks, drafts, bulk text | fast start and fast output. spread load by each model's rate limit. |
| checkers | ttft < 1 s, 60–300 tok/s | pass/fail verdicts, racing | a short answer costs ttft, not tok/s. a lane from another provider gives an independent check. |
| racing | two checkers on different providers | keep the first good answer | free lanes are noisy: one nim model took 2.8 s to 12.6 s across five races. |
| long thinkers | < 60 tok/s | background jobs nobody waits on | free quality, as long as nobody is waiting on it. |
everything at once
one burst, 15 lanes, 6 providers (summary, calls):
| pattern | ok | wall time | result |
|---|---|---|---|
| fan-out: 150 one-word classifications | 149 / 150 | 1.44 s (0.25 s median per call) | 5,387 tok/s; 54.6 s if run one at a time |
| bulk: 40 ~250-word explanations | 38 / 40 | 2.26 s | 36,141 tokens, about 16,000 tok/s |
| draft → check | 7 drafts, 6 checks | drafts 0.3–2.5 s, checks 6–32 s | 2 drafts failed on substance, 2 passed, 1 check caught an empty draft, 1 checker spent its whole budget reasoning |
| racing (data) | 12 / 12 | first good answer: ~0.7 s median | waiting for both: ~5 s median, 12.6 s worst |
| background (nemotron ultra 550b) | 2 / 3 | 81 s and 150 s | long answers while everything else finished |
across the fan-out, bulk and draft calls, 194 calls returned about 49,000 tokens in 3.6 s.
about 97% of the bulk tokens came from cerebras, which is trial credit. groq is truly free but allows 8k tokens per minute per model, so its share of long answers stays small. each lane's limits have to drive the plan.
one endpoint for all of it
we run the lanes behind one openai-compatible endpoint, vllm semantic router, on a small k3s cluster. it falls back on 413/429/5xx and exposes one virtual model per goal: turbo, free-quality, free-reasoning, free-verify, free-longctx, free-public. through it, 60 small calls went from 13–18 s one at a time to 1.2 s at 20 in flight, and 200 calls at 50 in flight all succeeded, 39 of them rescued by fallback after groq 429s (router runs). a re-run on the evening of november 2 took 7.7 s instead of 1.2 s, because groq's free buckets throttled the burst. that is why the next step is placement by remaining capacity rather than random choice.
our downstream work, all public:
- z0intelligence#289: the router deploy, profiles, fan-out bench and rate-limit inventory. roadmap epic #296, phases #290 to #295.
- z0intelligence#176 and rfc #175: the turbo runtime, a planner with fast workers and an independent verifier.
- kerdoios#69 and #64: the placement objective and live free-tier inventory that will pick the lane.
- kvnloo/semantic-router: our fork, for upstream fixes such as tolerating cerebras' extra response fields.
why open source can use all of it
some free tiers may train on your prompts. for most work in a public repository that does not matter: the code, the issues and the diffs are already public. a turbo mode for open-source work can use every free lane without a privacy trade-off, as long as it keeps secrets out. .env files, tokens and private repositories stay on paid routes.
that is the case for the study: every contributor gets a large pool of free, fast capacity for the small, checkable calls agents make all day.
what an orchestrator is missing
we tried this in t3 code, which already lets a coordinator delegate to an opencode provider with groq or cerebras keys. a delegated task on cerebras gpt-oss-120b finished end to end in 4.0 s. three things stop it from going further:
- agent-sized prompts don't fit free tiers. the same delegation to groq free failed with
tpm: limit 8000, requested 16772. the child agent's own prompt is twice the budget. free lanes suit small calls without tools; a delegation starts a full agent. - nothing fans out. in a matched a/b, a coordinator with fast helpers saved 4–5% of wall time, because the helpers never ran at the same time (z0intelligence#176).
- the coordinator cannot see limits. spreading load by remaining capacity is what stops 429 cascades.
other tools are working on the same idea: claude-code-router sends background and subagent calls to cheap providers, claude-code-multirouter keeps opus for the main session and sends subagents to cerebras, and cognition runs its parallel code-search subagent on cerebras (case study).
what this does not prove
- single runs on one evening. free capacity is shared and changes by the hour.
- cerebras is trial credit and carried most of the bulk tokens.
- token counts include reasoning tokens.
- the tasks are easy and checkable: classification, explanations, verdicts. this is not a quality ranking and shows nothing about code edits.
- nous portal and opencode go were not measured.
study files, scripts and pinned sources: studies/free-stack-v0.
receipts
this post is rendered from posts/free-stack-v0.md. the frozen study, its manifest and its pinned sources live under studies/free-stack-v0 when it has been imported, or on its study pull request when it has not. the research log lists the study's status and links.