OpenCode 2 v2.0.32: experimental voice session endpoint, /copy copies the last message#
Published by Alex Sorokoletov
Part of the OpenCode 2 Version Tracker series. | OpenCode on GitHub | OpenCode 2 docs
OpenCode 2 v2.0.32 follows v2.0.31. The server gains an experimental voice session endpoint (#55951), the terminal's /copy now copies the last assistant message (#56053), and a set of fixes covers auth login without a browser opener (#56082), Windows Git snapshots (#56190), and Gemini responses (#56232).
An experimental voice session endpoint#
A new experimental route, POST /api/experimental/voice/session, starts a voice call with the provider API key stored on the machine running OpenCode (#55951). The server starts the call and returns the connection details; the client carries the audio to the provider directly, so the server stays out of the media path. Depending on the transport, the server returns an SDP answer or a short-lived client secret for the client to connect with. A generated client method, client.voice.session({ model, session, transport }), calls the route, and experimental.voice.session is the matching operation in the generated API surface.
The request carries three fields:
| Field | What the client sends |
|---|---|
model | Realtime model ID that selects the engine, for example gpt-live-1. |
session | Provider-native session settings, such as instructions and the output voice. |
transport | Connection transport; the example uses WebRTC with an SDP offer. |
/copy copies the last message#
The terminal's /copy command copies the last assistant message to the clipboard (#56053). When that last message is a compaction summary, /copy copies the summary (#56055).
Fixes across providers and platforms#
opencode auth login no longer crashes when no browser opener is available (#56082).[1] On Windows, snapshot capture retries when concurrent Git writes collide (#56190), and the Windows test flakes in the standalone CLI, Storybook, and snapshot suites are fixed (#56181). The Gemini provider retries a finish that returns MALFORMED_RESPONSE (#56232). The WinGet locale manifests now include PrivacyUrl (#56123).
On the release side, the separate opencode-beta release repository is dropped (#56083), and the updater accepts publish tokens only from the dev and beta channels (#56085).
The server grows a route while the clients get hardened#
The voice work lands in the server and the generated clients rather than the terminal UI. The route runs the provider call with the key already on the machine running OpenCode, and the generated SDK method calls it. That fits OpenCode 2's shape across a terminal UI, desktop builds, a web interface, and a server with generated clients.[2]
The rest of v2.0.32 is hardening spread across providers and platforms. Auth login survives a missing browser opener, Windows snapshot capture retries on Git write collisions, and the Gemini provider retries malformed finishes. The Windows test and packaging fixes sit alongside the Git-collision retry, keeping the Windows path exercised in this release.
This analysis is based on publicly available open-source code and release metadata, conducted for educational and research purposes. All trademarks and software referenced belong to their respective owners.
Sources#
- The
auth logincommand: OpenCode 2 docs, CLI commands. - Interfaces across terminal, desktop, web, and server: OpenCode 2 docs.
Previous OpenCode 2 analysis: v2.0.31 (October 17, 2026)
All 15 OpenCode 2 analyses: OpenCode 2 Version Tracker · Official OpenCode 2 changelog