Repository navigation
Description
Feature hasn't been suggested before.
- I have verified this feature I'm about to request hasn't been suggested before.
Describe the enhancement you want to request
The picker's default view filters out most user-configured models in favor of a curated "latest per family within 6 months" subset (packages/app/src/context/models.tsx, visible()). The filter is sensible for opencode's bundled provider catalog but invisible to users — there's no on-screen hint that hidden models exist or how to reveal them. A short label or toggle would close the gap with very little surface change.
Note: this is the inverse of #22593. That issue asks for more filtering controls in the picker; this one asks for visibility of the filter that already runs silently. Both can land independently.
What I observed
Configured opencode.json with 17 models across 5 providers (Ollama + four *-via-gateway providers pointed at Cloudflare AI Gateway):
ollama: granite4:7b-a1b-h, qwen3-coder:30b, qwen2.5-coder:7b-instruct-q4_K_M
anthropic-via-gateway: claude-sonnet-4-6, claude-sonnet-4-5, claude-opus-4-6, claude-opus-4-5, claude-haiku-4-5
openai-via-gateway: gpt-5, gpt-5-mini, gpt-4.1-mini, gpt-4o-mini
google-via-gateway: gemini-2.5-pro, gemini-2.5-flash
workers-ai-via-gateway: @cf/qwen/qwen2.5-coder-32b-instruct, @cf/meta/llama-3.3-70b-instruct-fp8-fast, @cf/deepseek-ai/deepseek-r1-distill-qwen-32b
opencode modelslists all 17 ✓- Picker default view shows 6 models from 2 providers
- Typing any substring of a "hidden" model in the picker's search box reveals it
- Selecting a found-via-search model permanently promotes it into the default view (because
model.set(item, { recent: true })flipsvisibility: "show")
Across launches the visible subset changes — likely because the underlying models.dev release_date / family metadata moves as new releases ship, shifting which models qualify as "latest in family."
How the filter works (for context)
packages/app/src/context/models.tsx:
const visible = (model: ModelKey) => {
const key = modelKey(model)
const state = visibility().get(key)
if (state === "hide") return false
if (state === "show") return true // set when user selects this model
if (latestSet().has(key)) return true // "latest in family within 6 months"
const date = release().get(key)
if (!date?.isValid) return true // fallback for models without release_date
return false
}And latest() returns "for each provider, for each family within that provider, only the newest model released within the last 6 months." Sensible curation for opencode's bundled providers; aggressive for user-curated multi-provider configs.
Why this matters
For users building a custom multi-provider config — exactly the scenario opencode is well-suited for — the picker silently removes most of their work. The mental model "I configured these models, the picker should let me pick them" is broken without any UI affordance explaining the curation.
The workaround (type into search, select to permanently un-hide) is real but invisible. New users have no reason to know it exists, and "models keep disappearing" is the impression they leave with.
Proposed enhancements (ranked by effort)
-
Cheapest, biggest immediate win — add an affordance hint. When
models.list().length > visibleSubset.length, render a small line at the bottom of the picker:+ 11 more · type to searchEven without changing the filter logic, this restores user agency and explains the workaround.
-
Better — add a "show all" toggle. Currently the picker shows
Connect provider (ctrl+a)andFavorite (ctrl+f)in its footer. AddShow all (ctrl+l)(or similar) that flips between the curated default view and the full configured set. Default stays curated; expert users get full access without typing into search. -
Most aligned with user intent — don't filter user-configured models. Apply the
visible()curation only to opencode-bundled built-in providers (the four "Free" entries at the top of the picker). Models the user explicitly listed inopencode.jsonwould default to visible without needing to be selected once first. Curation for bundled catalogs is genuinely useful UX; for hand-rolled configs it's hostile. The two cases have opposite needs.
I'm not asking to remove the filter — option 3 is the largest change and I'd understand if it's a non-starter. Option 1 alone would resolve the discoverability problem.
Workarounds (for users who hit this)
Documenting these here for anyone who finds this issue:
# Type any substring of the hidden model into the picker's search box.
# Selecting promotes it permanently into the default view.
# Or address by full key on the CLI:
opencode run --model <provider>/<model> "..."
opencode --model <provider>/<model> # boot TUI pre-selected
# Or via slash command inside the TUI:
/model <provider>/<model>Environment
- OpenCode version: 1.15.5 (latest at time of report)
- OS: Windows 11, PowerShell 7. The filter is platform-independent — same behavior would appear on macOS/Linux.
- Config: 17 models across 5 providers, each using a different
@ai-sdk/*adapter
Activity
github-actions commentedon May 20, 2026
This issue might be a duplicate of or closely related to existing issues. Please check:
visible()inmodels.tsxsilently filtering out user-configured models from the picker)You already referenced #22593 in your report, which is also related.
github-actions commentedon Jul 20, 2026
To stay organized issues are automatically closed after 60 days of no activity. If the issue is still relevant please open a new one.