Free OpenRouter models for Kilo Code: selection and tool checks
Pick a candidate, then verify the tool loop
For a first free-model check in Kilo Code, cohere/north-mini-code:free is a concrete candidate. Its public endpoint advertises zero input and output prices, tools, and tool_choice. That makes it eligible for a small tool test. It does not establish a best model for your repository.
We checked official documentation and fetched the public OpenRouter catalog on October 23, 2026. We verified the metadata commands below. We did not send inference requests, test Kilo's tool loop, measure latency, or compare coding quality. Use the dated snapshot to start your check, then choose a model that passes the same task in your installed Kilo version.
Choose the provider before choosing the model
Kilo's built-in provider and a direct OpenRouter connection have different accounts, routing, and quotas. Confirm the provider label in the active configuration before diagnosing a free-model failure.
| Connection | Account and controls | Meaning of free |
|---|---|---|
| Kilo provider through Kilo Gateway | Kilo account and Kilo-managed routing | A Kilo free offering such as kilo-auto/free, subject to Kilo's current conditions. |
| OpenRouter provider with your OpenRouter key | OpenRouter account, activity, routing, and limits | An exact free catalog entry or openrouter/free. |
Bringing an OpenRouter key to Kilo is sometimes called BYOK. It is distinct from OpenRouter's provider BYOK feature, which routes through an upstream provider key and has its own billing rules. Neither the Kilo free allowance nor an upstream provider's allowance transfers to a direct OpenRouter connection. See the official connection comparison and Kilo provider documentation.
Reproduce the free-model candidate filter
Run the following command in Bash or Zsh with curl and jq installed. It reads the public model catalog, sends no credentials or repository contents, and makes no inference request. The 30-second timeout bounds this metadata fetch. It does not set the timeout for Kilo tasks.
set -o pipefail
curl -fsS --max-time 30 https://openrouter.ai/api/v1/models |
jq -er '
.data
| if type == "array" then . else error("missing data array") end
| map(select(.id | endswith(":free")))
| map(select((.pricing.prompt | tonumber?) == 0
and (.pricing.completion | tonumber?) == 0))
| map(select((.supported_parameters // []) | index("tools")))
| if length > 0 then . else error("no matching candidates") end
| sort_by(.id)[]
| [.id, .pricing.prompt, .pricing.completion,
.context_length, .top_provider.max_completion_tokens] | @tsv'
Each row contains the exact ID, prompt price, completion price, context length, and catalog top-provider output limit. Missing or nonnumeric token prices do not pass. An HTTP failure, malformed JSON, or empty candidate set exits unsuccessfully. Investigate that failure instead of using an old screenshot as a current model list.
Our snapshot contained 468 catalog entries. Seventeen IDs ended in :free, all had zero prompt and completion prices, and 16 also listed tools. We excluded nvidia/nemotron-3.5-content-safety:free because it did not list tools. We excluded paid IDs and router IDs from this exact-variant filter. openrouter/free is a separate routing option below.
Two examples from the 16 candidates show why you should also inspect output limits. These are metadata examples, not a performance ranking.
| Exact model ID | Context tokens | Top-provider maximum output tokens | Kilo tool test |
|---|---|---|---|
cohere/north-mini-code:free |
256000 | 64000 | Not run |
nvidia/nemotron-3-super-120b-a12b:free |
262144 | 235929 | Not run |
These ceilings are not a recommended prompt size or a promise that a long request will succeed. System instructions, tool definitions, file contents, and prior tool results consume context. The free variant can have different limits from the paid model. Rerun the command when resuming a project.
Check the endpoint behind the catalog entry
A model-level tools field does not guarantee that every provider route supports your request. Read the candidate's endpoint metadata before pinning a provider. This second public GET prints the current endpoint records for the first example.
set -o pipefail
curl -fsS --max-time 30 \
'https://openrouter.ai/api/v1/models/cohere/north-mini-code:free/endpoints' |
jq '.data.endpoints[] | {provider_name, pricing, context_length,
max_completion_tokens, supported_parameters, supports_tool_choice}'
Our check returned a Cohere endpoint with zero token prices and both tool parameters. This remains an advertised capability. It does not prove that Kilo sent valid arguments or consumed a tool result.
OpenRouter's provider routing documentation describes tools as a routing preference by default. Supporting providers are preferred when available. If none supports the parameter, the parameter can be ignored. require_parameters: true requires support for every supplied parameter and can therefore leave no eligible provider.
For Kilo versions documented on the OpenRouter provider page, merge the following model configuration into kilo.json. Keep your existing connection configuration. Kilo forwards model options without validating them.
{
"provider": {
"openrouter": {
"models": {
"cohere/north-mini-code:free": {
"options": {
"provider": { "require_parameters": true }
}
}
}
}
}
}
Review data policies separately. The Nemotron free endpoint notice says usage is logged and prohibits confidential or personal data. A privacy restriction that removes the only compatible endpoint is a reason to stop using that route.
Run one manual file-reading acceptance test
In Kilo settings, open Providers, connect OpenRouter with a key from OpenRouter's keys page, and select the exact checked ID. Use a new task in a folder containing only a harmless probe.txt with one distinctive line. Do not put that line in your prompt or attach the file contents as context.
Use this prompt.
Read probe.txt with a file-reading tool and return its exact line.
Do not edit files, run commands, browse the web, or use external tools.
Stop after returning the line.
- Approve only the expected file read. Look for an actual tool event with the correct path.
- Check that the returned line matches the file and that the task ends. A guessed answer or instructions to read the file do not pass.
- Cancel after five model requests or two minutes, whichever comes first. These are our suggested test bounds, not provider limits.
- Inspect OpenRouter activity for the actual model, provider, request count, and charged amount. Stop if the model or cost differs from the intended free route.
- Record the result below. After a pass, test one small edit in a separate disposable task and review its diff before using a real repository.
Date and Kilo version:
Selected provider / requested ID / actual model and provider:
Catalog prices and routing options:
Observed read-tool event / matching line / task ended:
Requests / charged amount / error body:
Verdict: not run, pass, or fail
Our acceptance record is not run. Only catalog and endpoint metadata passed inspection. Actual Kilo compatibility, request cost, editing quality, and latency remain unmeasured. A successful read validates that connection's tool round trip, not a coding benchmark. Other maintained clients, such as Cline, need their own tests even with the same OpenRouter ID. Roo Code configurations are historical references: its extension, Cloud, and Router shut down on May 15, 2026.
Keep free selection and spending controls separate
An exact :free ID must exist. Adding the suffix to a paid ID does not create it. openrouter/free selects a free model randomly after capability filtering and stays within free models on its own. Record the returned model if you use it. Choose an exact ID for repeatable comparisons.
The free-variant rules warn that a models fallback list can continue to a paid model. Each fallback uses its own price. Keep the whole list free, and check any paid plugins or services separately. Promotional credits pay a bill. They do not change a model's price. A spending cap limits allowed charges but does not turn a paid route into a free route.
The published baseline is 20 requests per minute and 50 per day for free models, rising to 1000 per day after qualifying credit purchases advertised as $10. Buying credits is optional payment. Check free_model_daily_requests through authenticated GET /api/v1/key for your actual daily counter and tier, and limit_remaining and effective_budget for applicable spend controls. The limits reference describes exceptions and threshold adjustments. Do not infer your quota from is_free_tier alone. Failed attempts can consume daily requests, and one agent task can make several requests.
Diagnose the error and stop at the right boundary
Keep the error body, request ID, selected model, and provider. Check OpenRouter's error guide, including errors inside a stream that began with HTTP 200.
| Symptom | Distinguish the cause | Stop condition |
|---|---|---|
429 |
Check X-RateLimit-*, Retry-After, provider metadata, and the account's daily counter. OpenRouter quota and upstream overload need different responses. |
Stop at a daily cap. For a transient limit, honor the wait and allow at most one manual retry. Stop if it repeats. Switching models does not reset account quota. |
404 mentioning the model or no endpoints |
Compare the exact ID with the live catalog, then inspect endpoint and routing restrictions. An existing ID can still have no eligible route. | Stop until the ID or allowed route changes. Retrying cannot create an endpoint. Never drop a privacy rule just to make a request pass. |
402 or budget-related 403 |
Read error.metadata.limit_source and the account's usage page before changing limits. Check paid fallbacks, balance, key caps, and workspace budgets. |
Stop the free-only test on an unexpected billing route. Do not top up before identifying the enforcing layer. |
| Context error or text instead of a tool call | Check the exact endpoint, arguments, approval settings, and context budget. Reduce to the one-file test. | Allow one corrected test. Stop if tool execution still fails or the request bound is reached. |
A regional restriction can also produce a 404, as the official in-region routing explanation documents. A status code alone is not a diagnosis.
See our Kilo Code page for the agent and Kilo Code vs Cline for client differences.