release: v2.3.0 (#63719)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
github-actions[bot]
2026-11-13 09:04:03 +00:00
committed by GitHub
Unverified
parent f2687cc30a
commit a554d70499
35 changed files with 175 additions and 64 deletions
+111
View File
@@ -2,6 +2,117 @@
Release notes for OpenCode V2, newest first.
## v2.3.0 — 2026-11-13
### Highlights
- **Background Subagents by Default**: Subagents now return immediately, continue in the background, and report back whenever they become idle. You can keep working in the parent session while multiple subagents run concurrently. ([#63382](https://github.com/anomalyco/opencode/pull/63382))
- **Quieter Transcripts by Default**: The TUI now summarizes each run of tool calls and thoughts into one collapsible activity row, so the answer is easier to follow. To see every step again, set **Verbosity** to `medium` or `high` in settings, or set `session.verbosity` in your TUI config; an existing setting is kept. ([#63207](https://github.com/anomalyco/opencode/pull/63207))
- **Jump to an Earlier Prompt**: In the desktop app, open **Jump to message** from the command palette or press `Cmd+Alt+G` (`Ctrl+Alt+G` on Windows and Linux) to search prompts across the current session and jump directly to one. ([#63585](https://github.com/anomalyco/opencode/pull/63585))
### Core
#### Improvements
- Subagents now always run in the background, return their session ID immediately, and report results to their parent whenever they become idle. ([#63382](https://github.com/anomalyco/opencode/pull/63382))
- Added experimental support for MCP events, behind the `mcp_events` flag. ([#63254](https://github.com/anomalyco/opencode/pull/63254), [#63261](https://github.com/anomalyco/opencode/pull/63261), [#63269](https://github.com/anomalyco/opencode/pull/63269))
- Shell commands now survive server handoffs and keep their output when interrupted.
- Added experimental support for moving a shell command to the background when its timeout expires, behind the `shell_timeout_background` flag. With the flag on, an explicit timeout on a background command stops it. ([#63024](https://github.com/anomalyco/opencode/pull/63024), [#63703](https://github.com/anomalyco/opencode/pull/63703))
- Local Windows shell commands now run through the process daemon.
- Added support for freeform tool input on compatible models.
- Added LM Studio decision-model support.
- Agents are now told when their session is a fork. Thanks @hasta84. ([#63235](https://github.com/anomalyco/opencode/pull/63235))
- Tool output truncation now keeps the beginning of the output and preserves a usable preview if the full output cannot be saved.
- Tail reads no longer load the entire file into memory.
- Providers can present a client certificate for gateways that require mutual TLS. Set `settings.tls` with `cert`, `key` and an optional `passphrase` on the provider; values accept `{file:}` and `{env:}` like `apiKey`. ([#61832](https://github.com/anomalyco/opencode/pull/61832))
- When a subagent goes idle while its own background work is still running, its report to the parent now says it is still running, so the parent waits for the final report instead of treating the partial answer as done. ([#63675](https://github.com/anomalyco/opencode/pull/63675))
- Code Mode gets simpler structured results from file and skill tools: `write` and `edit` return their confirmation as a string, `patch` returns an empty result, and `skill` returns the skill's directory and content. ([#63616](https://github.com/anomalyco/opencode/pull/63616), [#63635](https://github.com/anomalyco/opencode/pull/63635), [#63618](https://github.com/anomalyco/opencode/pull/63618), [#63623](https://github.com/anomalyco/opencode/pull/63623))
#### Bug fixes
- Fixed case-only file renames in patches on case-insensitive filesystems.
- Fixed stale thinking being retained after Claude Agent prompts or tools change.
- Fixed directly driven child sessions not resuming after a restart.
- Fixed plugin replacement stopping when cleanup of an earlier plugin fails.
- Fixed MCP OAuth refreshes and localhost redirects when a server rewrites `127.0.0.1`.
- Fixed saved API keys being omitted from local-model discovery.
- Local model discovery (Ollama, LM Studio, vLLM) waits up to 15 seconds per request instead of 1, so remote or tunnelled endpoints list their models, and a slow endpoint no longer delays other endpoints or config reloads. ([#63700](https://github.com/anomalyco/opencode/pull/63700))
- In Code Mode, calling a namespace as if it were a tool now suggests up to three real tools under it. ([#63697](https://github.com/anomalyco/opencode/pull/63697))
- Fixed retryable provider streams losing completed work when interrupted.
- Fixed GitHub Copilot requests using the wrong endpoint before models finish loading.
- Fixed exhausted request rate limits being treated as terminal. Thanks @Kyle-j-bush. ([#59816](https://github.com/anomalyco/opencode/pull/59816))
- Fixed LM Studio models with a null context length and accepted decision-type models. Thanks @tomzhu1024. ([#56214](https://github.com/anomalyco/opencode/pull/56214))
### TUI
#### Improvements
- Transcript verbosity now defaults to `low`, which summarizes each run of tools and thoughts into one activity row. A `session.verbosity` you already set is kept. ([#63207](https://github.com/anomalyco/opencode/pull/63207))
- Session IDs found in messages can now be opened directly.
- Activity tabs are clickable and open the correct view.
- Shell mode has its own prompt color under the new designs.
#### Bug fixes
- Restored pasted text when undo brings back its placeholder.
- Restored the live draft after browsing prompt history.
- Fixed copying a paste from within the prompt selection.
- Preserved the Mini composer caret when closing the command palette.
- Prevented image bytes from being retained in transcript storage when image previews are disabled.
- Fixed paste-chip contrast across light and dark themes.
- Fixed plugin-provided themes updating live.
- Session lists now open at the top rather than at the current session.
- Mini scrollback now shows the subagent card instead of obsolete launch instructions.
### Desktop
#### Improvements
- Added **Jump to message** to the command palette with `Cmd+Alt+G` / `Ctrl+Alt+G`, including prompts not yet loaded in the timeline. Thanks @usrnk1. ([#63585](https://github.com/anomalyco/opencode/pull/63585))
- Added the experimental **Recent** sessions sidebar, with cross-server recency, local pins, reordering, and standard session-row actions.
- Recent sessions are limited to the last seven days and 30 rows, and can be hidden or muted.
- Added an experimental customizable sessions sidebar.
- Mermaid diagrams can now be maximized for zooming and panning. ([#59250](https://github.com/anomalyco/opencode/pull/59250))
- Added `Alt+Enter` to place a follow-up first in the queue and `Mod+Enter` to steer the next queued prompt.
- Holding the modifier key now shows tab shortcut numbers.
- Each server’s terminal shell can be selected from its menu.
- Added a free-limit panel in place of the composer when applicable.
- Session IDs are easier to find and copy.
#### Bug fixes
- Recent sessions now keep stable recency ordering through list reloads, renames, and completed runs.
- Fixed browser panes not retrying after server plugins finish loading.
- Fixed mention suggestions being recreated while typing.
- Fixed SSH prompts failing to advance or close after connection.
- Fixed pasted provider-auth redirect URLs being rejected.
- Restored message footers in the New timeline.
- Fixed links whose labels contain inline code.
- Fixed the desktop main process freezing while probing the login-shell environment.
- Fixed the drag region after changing layout direction.
- Fixed vertical-tab previews snapping to the wrong tab.
- Fixed the file-tree sidebar opening animation.
- Fixed pairing QR-code contrast in light themes. Thanks @ssskay. ([#63220](https://github.com/anomalyco/opencode/pull/63220))
- Fixed activity-tab navigation and click handling. Thanks @OpeOginni. ([#60168](https://github.com/anomalyco/opencode/pull/60168))
### SDK
#### Improvements
- Event subscriptions can now receive `experimental.mcp.event` events from MCP event subscriptions.
- Model capability schemas now advertise supported freeform tool-input formats.
- Session throughput is now measured from the first streamed token.
- Session creation documentation now clarifies the `parentID` field.
### Extensions
#### Improvements
- Promise-based tools can cooperatively stop through `ToolContext.signal`.
- Added the experimental `session.fork` hook.
- Promise plugin cleanup failures no longer prevent subsequent plugin replacements.
- `@opencode/plugin/effect` now exports `Tool`, so an `execute.before` hook can reject a call with `Tool.Error` without importing `@opencode/schema/tool`. ([#63698](https://github.com/anomalyco/opencode/pull/63698))
## v2.2.7 — 2026-11-10
### Highlights
+31 -31
View File
@@ -29,7 +29,7 @@
},
"packages/ai": {
"name": "@opencode/ai",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@aws-sdk/credential-providers": "3.1057.0",
"@opencode/schema": "workspace:*",
@@ -51,7 +51,7 @@
},
"packages/app": {
"name": "@opencode/app",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@corvu/drawer": "catalog:",
"@dnd-kit/abstract": "0.5.0",
@@ -106,7 +106,7 @@
},
"packages/cli": {
"name": "@opencode/cli",
"version": "2.2.7",
"version": "2.3.0",
"bin": {
"opencode": "./bin/opencode.cjs",
"opencode2": "./bin/opencode2.cjs",
@@ -171,7 +171,7 @@
},
"packages/client": {
"name": "@opencode/client",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/protocol": "workspace:*",
"@opencode/schema": "workspace:*",
@@ -197,7 +197,7 @@
},
"packages/codemode": {
"name": "@opencode/codemode",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"acorn": "8.15.0",
"effect": "catalog:",
@@ -210,7 +210,7 @@
},
"packages/core": {
"name": "@opencode/core",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@ai-sdk/provider": "3.0.19",
"@effect/platform-node": "catalog:",
@@ -280,7 +280,7 @@
},
"packages/data/app": {
"name": "@opencode/data-app",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@kobalte/core": "catalog:",
"@opencode/data-core": "workspace:*",
@@ -308,7 +308,7 @@
},
"packages/data/core": {
"name": "@opencode/data-core",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@planetscale/database": "1.19.0",
"drizzle-orm": "catalog:",
@@ -325,7 +325,7 @@
},
"packages/data/server": {
"name": "@opencode/data-server",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/data-core": "workspace:*",
"effect": "catalog:",
@@ -341,7 +341,7 @@
},
"packages/desktop": {
"name": "@opencode/desktop",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@zip.js/zip.js": "2.7.62",
"electron-context-menu": "5.0.0",
@@ -388,7 +388,7 @@
},
"packages/gui-plugins": {
"name": "@opencode/gui-plugins",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@betteroffice/docx": "0.4.3",
"@betteroffice/fonts": "0.4.0",
@@ -433,7 +433,7 @@
},
"packages/http-recorder": {
"name": "@opencode/http-recorder",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@effect/platform-node-shared": "catalog:",
},
@@ -452,7 +452,7 @@
},
"packages/httpapi-codegen": {
"name": "@opencode/httpapi-codegen",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"effect": "catalog:",
"prettier": "3.6.2",
@@ -465,7 +465,7 @@
},
"packages/latex": {
"name": "@opencode/latex",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/plugin": "workspace:*",
"@opentui/core": "catalog:",
@@ -479,7 +479,7 @@
},
"packages/merman": {
"name": "@opencode/merman",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/plugin": "workspace:*",
"@opentui/core": "catalog:",
@@ -494,7 +494,7 @@
},
"packages/nav-menus": {
"name": "@opencode/nav-menus",
"version": "2.2.7",
"version": "2.3.0",
"devDependencies": {
"@happy-dom/global-registrator": "20.0.11",
"@types/bun": "catalog:",
@@ -505,7 +505,7 @@
},
"packages/patchmark": {
"name": "@opencode/patchmark",
"version": "2.2.7",
"version": "2.3.0",
"devDependencies": {
"@tsconfig/bun": "catalog:",
"@types/bun": "catalog:",
@@ -518,7 +518,7 @@
},
"packages/plugin": {
"name": "@opencode/plugin",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@ai-sdk/provider": "3.0.8",
"@opencode/ai": "workspace:*",
@@ -563,7 +563,7 @@
},
"packages/plugin-browser": {
"name": "@opencode/plugin-browser",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/plugin": "workspace:*",
"@opencode/schema": "workspace:*",
@@ -578,7 +578,7 @@
},
"packages/plugins/figma": {
"name": "@opencode/plugin-figma",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"gray-matter": "4.0.3",
},
@@ -593,7 +593,7 @@
},
"packages/protocol": {
"name": "@opencode/protocol",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/schema": "workspace:*",
"effect": "catalog:",
@@ -608,7 +608,7 @@
},
"packages/schema": {
"name": "@opencode/schema",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@standard-schema/spec": "catalog:",
"effect": "catalog:",
@@ -632,7 +632,7 @@
},
"packages/sdk": {
"name": "@opencode/sdk",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/client": "workspace:*",
"@opencode/core": "workspace:*",
@@ -653,7 +653,7 @@
},
"packages/server": {
"name": "@opencode/server",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@effect/platform-node": "catalog:",
"@effect/platform-node-shared": "catalog:",
@@ -676,7 +676,7 @@
},
"packages/session-ui": {
"name": "@opencode/session-ui",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@kitlangton/solid-motion": "0.2.2",
"@kobalte/core": "catalog:",
@@ -708,7 +708,7 @@
},
"packages/simulation": {
"name": "@opencode/simulation",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/ai": "workspace:*",
"@opencode/core": "workspace:*",
@@ -746,7 +746,7 @@
},
"packages/theme": {
"name": "@opencode/theme",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opentui/core": "catalog:",
"effect": "catalog:",
@@ -760,7 +760,7 @@
},
"packages/tui": {
"name": "@opencode/tui",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@opencode/client": "workspace:*",
"@opencode/core": "workspace:*",
@@ -792,7 +792,7 @@
},
"packages/ui": {
"name": "@opencode/ui",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@kitlangton/solid-motion": "0.2.2",
"@kobalte/core": "catalog:",
@@ -828,7 +828,7 @@
},
"packages/util": {
"name": "@opencode/util",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"@effect/opentelemetry": "catalog:",
"@effect/platform-node": "catalog:",
@@ -967,7 +967,7 @@
},
"services/update": {
"name": "@opencode/update",
"version": "2.2.7",
"version": "2.3.0",
"dependencies": {
"jose": "6.0.11",
"semver": "catalog:",
+1 -1
View File
@@ -2,7 +2,7 @@
"$schema": "https://json.schemastore.org/package.json",
"name": "opencode",
"description": "AI-powered development tool",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"packageManager": "bun@1.4.4",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "2.2.7",
"version": "2.3.0",
"name": "@opencode/ai",
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@opencode/app",
"version": "2.2.7",
"version": "2.3.0",
"description": "",
"type": "module",
"exports": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/cli",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"bin": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/client",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/codemode",
"version": "2.2.7",
"version": "2.3.0",
"description": "Effect-native confined code execution over schema-described tools",
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "2.2.7",
"version": "2.3.0",
"name": "@opencode/core",
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/data-app",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/data-core",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/data-server",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@opencode/desktop",
"private": true,
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"homepage": "https://opencode.ai",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/gui-plugins",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "2.2.7",
"version": "2.3.0",
"name": "@opencode/http-recorder",
"description": "Record and replay Effect HTTP and WebSocket traffic with deterministic cassettes",
"type": "module",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/httpapi-codegen",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"exports": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/latex",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"exports": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/merman",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"exports": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/nav-menus",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/patchmark",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/plugin-browser",
"version": "2.2.7",
"version": "2.3.0",
"description": "OpenCode's desktop browser plugin",
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/plugin",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"scripts": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/plugin-figma",
"version": "2.2.7",
"version": "2.3.0",
"description": "Figma MCP integration and official Figma skills for OpenCode",
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/protocol",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/schema",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "2.2.7",
"version": "2.3.0",
"name": "@opencode/sdk",
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/server",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@opencode/session-ui",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/simulation",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/theme",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/tui",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@opencode/ui",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/util",
"version": "2.2.7",
"version": "2.3.0",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "opencode",
"displayName": "opencode",
"description": "opencode for VS Code",
"version": "2.2.7",
"version": "2.3.0",
"publisher": "sst-dev",
"repository": {
"type": "git",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode/update",
"version": "2.2.7",
"version": "2.3.0",
"private": true,
"type": "module",
"scripts": {