Free OpenCode model: current pick, fallback order and checks
| Names and providers change | |
| Current free model | |
| Fallback order | |
| Check an id before pinning it | |
| Automatic check before start | |
| Privacy and limits | |
| History: Muse Spark 1.3 Free | |
| Troubleshooting |
Names and providers change
A free model in OpenCode Console is a moving target. The id, the provider behind it and the terms of use change without notice: a free variant can be renamed, moved to another provider, turned into a paid model or removed. Check an id before you pin it, check it again before a long run, and never copy a free id from an older article without checking it first.
That is why the other guides in this section say free OpenCode model and link here instead of naming one. This page is the single place that names the current free id, its fallbacks and the date they were checked. Config examples on the other pages use the id from this page.
Current free model
Checked against the models endpoint on 2026-10-22:
| Role | Console id | Price / 1M in+out |
|---|---|---|
| Free OpenCode model | opencode/deepseek-v4.1-flash-free | Free |
| Its paid twin | opencode/deepseek-v4.1-flash | $0.30 / $1.20 |
| Cheapest paid step-up | opencode/gpt-6-luna | $0.10 / $0.50 |
DeepSeek V4.1 Flash Free is the free variant of DeepSeek V4.1 Flash. Its paid twin sits in the same catalog, so when the free variant disappears the same model stays available for money. For routine paid work GPT 6 Luna is still cheaper than that twin. Prices move: verify them in the Console models docs before budgeting.
Pin it as the project default in opencode.jsonc at the project root: create the file if it is missing, otherwise change only the model line. For every project at once use ~/.config/opencode/opencode.jsonc instead.
vi opencode.jsonc
{ "$schema": "https://opencode.ai/config.json", "model": "opencode/deepseek-v4.1-flash-free" }
Fallback order
When the current free id leaves the catalog, take the next live one from this list. The rule behind the order: a free model whose paid twin is in the same catalog comes first, then free models without one. Models that do not write code are left out.
| # | Free id | Paid model of the same family |
|---|---|---|
| 1 | deepseek-v4.1-flash-free | deepseek-v4.1-flash |
| 2 | glm-5.3-flash-free | glm-5.3-flash |
| 3 | minimax-m3.1-flash-free | minimax-m3 |
| 4 | mimo-v2.6-flash-free | none |
| 5 | nemotron-3.5-lightning-free | none |
Left out on purpose: jev-1.13-free answers structured yes-no and choice questions and does not write code, nemotron-3.5-super-vl-free is a vision-language variant, beam-free and flint-40b-free belong to no model family the catalog explains.
Check an id before pinning it
The models endpoint returns the ids that exist right now, without prices. List every free id:
curl -s https://opencode.ai/inference/v1/models | grep -o '"[a-z0-9.-]*-free"' | sort
Output on 2026-10-22:
"beam-free" "deepseek-v4.1-flash-free" "flint-40b-free" "glm-5.3-flash-free" "jev-1.13-free" "mimo-v2.6-flash-free" "minimax-m3.1-flash-free" "nemotron-3.5-lightning-free" "nemotron-3.5-super-vl-free"
Inside the TUI the same check is /models; from the shell it is:
opencode models
An id that is missing from the list resolves nowhere: an agent pinned to it falls back to the session model or refuses to start, as described in Make the agents run.
Automatic check before start
The aredel repo starts OpenCode through a launcher that checks every pinned id first, so a retired free id is caught before the first prompt:
container/tools/ai/opencode.sh
The launcher runs check_opencode_models.py, which reads the ids pinned in opencode.jsonc and .opencode/agents/ and compares them with the endpoint:
- a free id that left the catalog is replaced in every file by the first live id from container/tools/ai/free-models.txt, the fallback order above; the change shows in git status;
- when no listed id is live, or the endpoint cannot be reached, it asks before starting;
- a missing paid id is reported, never switched: a different paid model means a different bill.
The report-only mode never writes or asks, so it also works in scripts:
python3 container/tools/ai/check_opencode_models.py --check
ok: opencode/claude-opus-5-5 (.opencode/agents/reviewer.md) ok: opencode/deepseek-v4.1-flash-free (opencode.jsonc, .opencode/agents/triage.md) ok: opencode/gpt-6-luna (.opencode/agents/builder.md)
The whole setup this check belongs to is described in Agent setup audit: the aredel case.
Privacy and limits
Free tiers pay for themselves with your data or your patience. A contributor tier trades the price for permission to use prompts and completions to train future models. Other free models claim zero retention during the free period, but terms differ per provider and change with the provider. Read the Console privacy notes for the exact id, and keep secrets, customer data and private code on a paid zero-retention model or a local model such as Ollama.
Free ids are also rate-limited, and some are time-limited for feedback collection. For overnight runs and CI use GPT 6 Luna. The access rules that keep a free-model agent away from secrets are in AI security.
History: Muse Spark 1.3 Free
Until October 2026 the free model in these guides was Muse Spark 1.3 Free, id opencode/muse-spark-1.3-contributor-free: the free contributor-tier variant of Muse Spark 1.3 from Meta, served through OpenCode Console. It was recommended as the daily default, strong enough for explaining code, writing tests, small features, renames across files and docs, while costing nothing.
Its terms were those of a contributor tier: heavily discounted pricing in exchange for permission to use prompts and completions to train future models, rate limits, and a time limit for feedback collection. Secrets, customer data and private code were never to be sent to it.
| Id | Status on 2026-10-22 |
|---|---|
| opencode/muse-spark-1.3-contributor-free | not in the models endpoint list |
| opencode/muse-spark-1.3 | listed, paid, see Muse Spark 1.3 |
Configs that still pinned the free id did not fail loudly: the agent fell back to the session model or refused to start. The aredel repo pinned it for its default model and its triage agent; how that was found and fixed is in Agent setup audit.
Troubleshooting
- Model error on start: the pinned free id left the catalog. Run the check, pick the next live id from the fallback order, or start through the launcher.
- Rate-limited mid-session: keep the context and switch model with F2 to GPT 6 Luna.
- Weak answers: add file context with @, shorten the skill to one screen, or escalate to Claude Opus 5.5 for the hard step.
Official sources:
- opencode.ai/docs/console/models (ids, pricing, privacy)
- opencode.ai/inference/v1/models (live ids)
Article author: Arthur Isaev