[Bug]: Model list and capabilities are hardcoded/stale - new models require manual opencode.jsonc edits; add a 'Refresh models' action
Author: krixx646Created Sep 10, 2026Updated Sep 17, 2026
Summary
OpenWork's model list and per-model capabilities are effectively hardcoded / cached as a snapshot. When a provider releases a new model — or changes an existing model's capabilities (e.g. adds vision/multimodal input) — the app does not pick it up automatically. Even when the user supplies their own API key via a custom provider, the new model does not become usable (or usable with its real capabilities) until the user manually edits opencode.jsonc. There is no "refresh / fetch latest models" action.
Environment
- OpenWork Desktop:
0.18.42 - opencode sidecar:
1.18.18 - OS: Windows 11 Pro (10.0.26200)
- Provider: custom DeepSeek (user-supplied API key)
- Example model:
deepseek/deepseek-v4-flash
Steps to reproduce
- Configure a provider using your own API key (e.g. DeepSeek).
- A new model is released upstream. Concrete example: DeepSeek V4.1-Flash (released 2026-09-10), a natively multimodal model. Per DeepSeek's own docs,
deepseek-v4-flashis now a legacy alias whose requests are served by V4.1-Flash. - Open the model picker / provider model list.
- The new model is missing, and/or its changed capabilities (image input) are not reflected.
Expected
- The app fetches the live model list and capabilities for each configured provider (models.dev and/or the provider's
/modelsendpoint) and the picker reflects new models and capability changes without editing config files. - There is a visible "Refresh models" action, plus automatic refresh on provider connect and app start.
Actual
- The model list / capability map is effectively static. To use a newly released model, or to correct its capabilities, the user must hand-write
provider.<id>.models.<model>overrides inopencode.jsonc.
Evidence
~/.config/opencode/opencode.jsonccontains hand-written overrides added solely to work around this, including the comment:// Models-only override (no npm/baseURL) so Disconnect stays auth-based. // OpenCode's models.dev cache still marks Flash as text-only; V4.1 Flash is multimodal. "deepseek": { "models": { "deepseek-flash": { "name": "DeepSeek V4.1 Flash", "attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "deepseek-v4-flash": { "attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] } } } }- The catalog is stored as a cached snapshot with a fixed name (
~/.cache/opencode/models-<hash>.json), refreshed on an unclear trigger rather than on demand.
Impact
- Users cannot use a newly released model through their own API key without manual config surgery.
- Every upstream release creates manual integration work; non-technical users are stuck until the app is updated.
- Capability changes (e.g. a model gaining vision) are not surfaced, so functionality silently appears unavailable.
Proposed fix
- Fetch model lists and capabilities dynamically per provider (models.dev + provider
/modelsendpoints), with a "Refresh models" button and automatic refresh on connect/startup. - Do not hardcode model IDs or capability flags in the backend; treat cached data as a fallback only.
- Keep user overrides available but make them optional, never required.
Related issues
- #4035 [Bug]: Opencode go models are outdated (do not update automatically)
- #3553 [Bug]: Provider Cortecs.ai does not update the table of available models
- #4166 [Bug]: Vision model not available in model picker even when provider exposes one
- #2346 Cloud provider re-import doesn't update model list (closed)
- #2345 Add manual 'Reload OpenCode config' action to command palette (closed)
Source: different-ai/openwork