Changelog
New updates and improvements to OpenCode
Core
- Support pull diagnostics from LSP servers that use them, including C# and Kotlin.
- Fix project detection and caching for bare Git repos and worktrees.(@StevenTCramer)
- Improve session compaction so long threads keep more useful context when older history is summarized.
- Preserve UTF-8 BOMs when files are edited, patched, or rewritten through tools.
- Use Roslyn Language Server for C# support instead of `csharp-ls`.(@jmbryan4)
- Add the high reasoning variant for supported Mistral Small models.(@rubdos)
- Hide unsupported variants for Kimi models that do not expose them.
TUI
- Fail fast when opening an invalid or missing session instead of starting the TUI in a broken state.
- Skip upgrade checks when auto-update is disabled.(@rahuliyer95)
Desktop
- Keep project avatar previews consistent between the sidebar and edit dialog.
- Improve project icon overrides so uploaded icons and color fallbacks behave correctly in the edit dialog.
- Improve Linux desktop metadata for app listings and categorization.(@NN708)
Core
- Fixed a system theme regression in the TUI.
- Added `GET /config` to the experimental HTTP API.
- Fixed local dynamic imports on Windows when running under Node, improving plugin and tool loading.
TUI
- Fixed permission replies using remote workspaces so they are sent to the correct workspace.
Desktop
- Stopped prompt controls from replaying their fade-in animation on every render.
- Added a setting to hide the session progress bar while the agent is working.
- Fixed the Select Server dialog layout so the server list and actions size correctly.(@OpeOginni)
- Fixed synced project updates so desktop project state changes apply reliably.
- Fixed sidebar project avatars to fall back to `icon.url` when no override is set.(@ysm-dev)
SDK
- Fixed the `WorkspaceAdaptor.create` type to include the `env` parameter.(@jamesmurdza)
Core
- Prevented compiled binaries from failing on startup because of a circular session schema dependency.
- Renamed the compaction setting to `preserve_recent_tokens` for the budget that keeps recent turns verbatim.
- Preserved concurrent edits to the same file instead of letting parallel edits overwrite each other.
- Fixed managed installs on Windows and added bundled ripgrep support for Windows ARM64.
- Added NVIDIA as a built-in provider option, including connection docs and required attribution headers.(@anniesurla)
- Kept recent conversation turns verbatim during session compaction so follow-up work keeps more local context.
- Fell back to summarizing the full conversation when preserved recent turns include too much media to fit safely.
Desktop
- Reduced loading flicker when opening projects and bringing prompt controls online.
- Added a separate terminal font setting and bundled JetBrainsMono Nerd Font Mono.
Core
- Restore the native ripgrep backend so file search and file listing work reliably again.
Core
- Preserve executable permissions before Docker builds when artifacts lose their exec bits.
- Fix plugins reinstalling more often than needed.
- Use `display: summarized` by default for Anthropic Bedrock Opus 4.7 requests.
- Detect attachment types from file contents so images and PDFs still work with incorrect or missing extensions.
- Support `OTEL_RESOURCE_ATTRIBUTES` for custom telemetry resource tags.
- Fix package installs when `node_modules` is missing.
- Fix GitHub Copilot Anthropic Haiku requests by disabling unsupported tool streaming.
TUI
- Add a full-session option when forking from the session dialog.
- Show the session ID in the sidebar on non-production channels.
Core
- Fixed workspace routing so requests reach the correct workspace instance.
- Stopped share sync attempts for sessions that were never shared.
Core
- Restored workspace history on connect so existing sessions catch up before live sync resumes
- Passed OTEL exporter settings into managed workspaces so telemetry works there too
- Normalized provider metadata defaults so models still load when catalog data is incomplete
- Passed `EXA_API_KEY` to the `websearch` tool to reduce rate limits(@rasdani)
TUI
- Added a restore flow for sessions whose workspace is unavailable, with clearer workspace status indicators
- Fixed agent cycling when no agent is selected and improved prompt key handling
Core
- Added LLM Gateway as a provider, including config support and model usage reporting.(@smakosh)
- Limited GitHub Copilot Opus 4.7 models to medium reasoning effort to avoid unsupported variants.(@OpeOginni)
- Improved remote workspace reconnection with exponential backoff and clearer failure handling.
TUI
- Fixed `--session-id` so it opens the requested session after app startup.
- Fixed light mode detection in Ghostty.
Desktop
- Fixed the beta desktop app so the file tree still appears when enabled in settings.
Core
- Fixed a crash when experimental mode was enabled.
- Let plugin tools return metadata in execute results.(@jquense)
- Show real filenames instead of `/dev/null` in revert diffs.
- Improved workspace session handling when a workspace no longer exists.
- Fixed Windows `ctrl+z` terminal suspend and input undo behavior.
- Enabled Azure prompt caching with a default per-session cache key.
TUI
- Preserve prompt input when views unmount and remount.
- Keep session list dialogs ordered more consistently within each day.
Desktop
- Fixed desktop workspace loading so ready state persists correctly.
- Fixed desktop session syncing when loading project data from query cache.
- Added beta desktop settings to hide title bar tools like navigation, search, terminal, status, and file tree.
- Improved desktop session change loading in the review panel.
Core
- GitHub Copilot `gpt-5-mini` now uses low reasoning effort for better request compatibility.(@thakrarsagar)
- Workspaces now receive your auth context, so provider sign-in carries across workspace sessions.
- Cloudflare AI Gateway now drops `max_tokens` for OpenAI reasoning models so GPT-5 and o-series requests stop failing.(@kobicovaldev)
- Azure models now default `store=true`, fixing requests that require stored responses.
- Claude Opus 4.7 now supports `xhigh` adaptive reasoning.(@GrahamCampbell)
- Claude Opus 4.7 now shows summarized thinking by default.
- TUI plugins now load against the correct project when multiple directories are open.
- The bash tool uses less memory on large command output.
- Experimental workspaces now wait for sync to finish before returning writes, reducing stale reads and missed updates.
- Session restore can now replay a session into another workspace in batches.
- Sessions now retry provider 5xx errors even when the provider SDK does not mark them retryable.
TUI
- Pasting files or large text no longer inserts content twice.
- `--agent` on the command line is no longer overwritten by the session's saved agent.(@CarloWood)
- Empty LSP, MCP, formatter, and session status responses no longer break TUI sync state.
Desktop
- Desktop builds now show a Beta or Dev badge in the title bar when applicable.
Core
- Fixed snapshot staging for very long file lists and improved staging performance.
- Fixed OTEL header parsing when a header value contains `=`.
Desktop
- Fixed prompt submission state updates to avoid failed or inconsistent sends.
- Improved session title input spacing while editing.
Core
- Export AI SDK telemetry spans to OTLP trace backends.
- Expose the experimental question API schema and OpenAPI spec from `@opencode-ai/server`.
- Expose a reusable question handler factory for custom question API hosts.
Desktop
- Start desktop shell commands from the home directory.
- Avoid bootstrap error popups while global sync initializes.
Core
- Restored instance and logger context during prompt runs so prompt-time tools and logging behave correctly.
- Kept GitHub Copilot compaction requests valid.
- Restored the flat reply shape for question API responses.
- Persisted MCP OAuth connections that finish immediately, so authenticated servers stay connected.
- Prevented duplicate user messages in ACP clients.
- Stopped emitting `user_message_chunk` events during session and prompt turns in ACP clients.(@RAIT-09)
- Fixed reasoning summary injection for `@ai-sdk/openai-compatible` providers.(@nazarhnatyshen)
- Added the experimental `compaction.autocontinue` hook to stop auto-continuing after compaction.
- Added Alibaba provider support with cache support.
- Snapshots now fully respect `.gitignore`, including previously tracked files.
- Reading images no longer counts against quota.
- Sessions can now update project permissions mid-run.(@remorses)
- Enabled thinking for `zhipuai-coding-plan` and fixed Korean IME truncation.(@claudianus)
TUI
- Added `opencode export --sanitize` to redact PII and confidential transcript data.
- Fixed diff line number contrast in built-in themes.
- Plugin auth login now asks for an API key when a plugin needs authorization.(@goniz)
- Plugin auth no longer asks for an API key when the plugin has no `authorize` method.(@goniz)
Desktop
- Fixed the Windows desktop backend hanging before shutdown.
SDK
- The JavaScript SDK now throws a clear error when an older server responds with HTML instead of the API.
Extensions
- Plugins can now register custom workspace adaptors that appear in workspace creation.
Core
- Fixed `agent create` for OpenAI accounts authenticated with OAuth.
- Interrupted Bash commands now keep their final output and truncation details instead of ending as aborted.
- Added fast mode variants for supported Claude and GPT models.
TUI
- Restored the hidden session scrollbar as the default.
Extensions
- Added configurable OAuth redirect URIs for remote MCP servers.(@egze)
TUI
- Fix subagents not being clickable until finished
Desktop
- Removed the forced loading delay while the app connects
Core
- Fix `clangd` choosing `CMakeLists.txt` or `Makefile` as the project root in C and C++ workspaces.(@nonbanana)
- Add permission prompts for GitLab Duo Workflow tool calls instead of auto-running them.(@vglafirov)
- Hide unsupported variants for Big Pickle models.
TUI
- Show an OpenCode Go subscribe prompt when free usage limits are reached.
- Simplify provider labels in the model and provider pickers.
Desktop
- Fix terminal connections in same-origin desktop and web app setups.(@OpeOginni)
- Fix session review and change lists when diff data arrives in inconsistent shapes.
SDK
- Fix the generated SDK and OpenAPI types for `/providers` and session shell responses.
Core
- Added OTLP observability export support.
- Fixed failed web fetches leaving stale timeouts behind.
- Improved `opencode login` transport error messages.
- Retried Alibaba provider rate-limit errors instead of failing immediately.
- Kept model variants scoped to the selected model.
- Added full HTTP proxy support.
- Fixed OpenRouter provider issues.
- Aligned GitHub Copilot Anthropic reasoning levels and removed incorrect Qwen variants.
- Reduced TypeScript LSP memory use by using the native project config.(@derekbar90)
TUI
- Added a keybinding option for "Switch model variant".(@ariane-emory)
- Added PDF drag and drop for attachments.(@gitpush-gitpaid)
- Added `opencode run --dangerously-skip-permissions` to auto-approve non-denied permission prompts.
Desktop
- Improved subagent sessions with clearer titles, navigation, and progress states.
- Moved auto-accept permissions into Settings.
- Showed full file names on attachment chips.
Core
- Cloudflare Workers AI and AI Gateway now prompt for missing account details and show clear setup errors when required Cloudflare variables are missing(@mchenco)
TUI
- Restored the default kitty keyboard handling on Windows terminals to avoid input issues from the workaround rollback
Core
- Support Azure model options on both chat and responses paths(@meruiden)
- Expose session model and mode config options through ACP(@georgeharker)
- Add a separating blank line before read tool file contents for clearer output
- Fix output token totals when reasoning tokens are reported separately
TUI
- Default `Ctrl+Z` to undo on Windows instead of terminal suspend
- Let you disable TUI mouse capture in config or with `OPENCODE_DISABLE_MOUSE`(@blackheaven)
- Hide org switching when there is only one org to choose from
- Label Console-managed providers and let you switch orgs from the provider UI
Extensions
- Fix plugin installs from npm aliases and git URLs, including Windows cache path issues
Core
- Prevent npm installs from failing when Arborist hits the compiled binary's `node-gyp` path