OpenCode 2 v2.0.23: native Cohere provider, ACP editor hardening, skill invocation control#
Published by Alex Sorokoletov
Part of the OpenCode 2 Version Tracker series. | OpenCode on GitHub | OpenCode 2 docs
OpenCode 2 v2.0.23 follows v2.0.22 with a native Cohere chat provider, a round of Agent Client Protocol fixes for running OpenCode inside editors like Zed, JetBrains, and Neovim, and a skill frontmatter field that hides a skill from the model's auto-invocation list while keeping it loadable by its explicit ID.
Providers#
The ai layer gains a native Cohere chat provider (#52633), a dedicated implementation rather than a generic catalog entry. Alongside it, request shaping was corrected for three providers so system-role text survives into the outgoing request: Gemini system text parts (#52888), and Mistral and Cohere system parts (#52890).
| Change | What It Does |
|---|---|
| Native Cohere provider | Adds a dedicated Cohere chat provider in the ai package (#52633). |
| Gemini system parts | Preserves Gemini system text parts when building a request (#52888). |
| Mistral and Cohere system parts | Preserves Mistral and Cohere system parts the same way (#52890). |
| Transient MCP retry | Retries transient MCP connect failures instead of failing on the first error (#52614). |
Agent Client Protocol#
The Agent Client Protocol (ACP) is the standard, introduced by Zed Industries, that lets a coding agent run as a subprocess inside an editor over JSON-RPC. OpenCode exposes its agent loop through ACP, so it attaches to editors like Zed, JetBrains, and Neovim. This release concentrates work on the Agent Client Protocol, with the protocol extensions now documented in the v2 docs (#52745).
| ACP change | What It Does |
|---|---|
| Compaction updates | Reports a session compaction through standard ACP session-update messages (#52737). |
| Unshowable questions | Lets the model continue when the client cannot display a question (#52740). |
| Permission spec alignment | Aligns permission requests with the tool-call spec (#52565). |
| Out-of-band permissions | Settles permission requests answered through another channel and types request failures (#52774). |
| Setup-failure detach | Detaches new and resumed sessions when setup fails (#52558). |
| Remote images | Sends remote image links as references (#52557). |
Skills#
Skill frontmatter accepts disable-model-invocation (#52747). Setting it to true omits the skill from the list the model sees at each step, while the skill stays loadable by its explicit ID through the skill tool. It sits next to the existing metadata.opencode/autoinvoke field, which has the same effect and wins when both are set.[4]
Reliability and interface#
- Git initialization is restored for projects that are not Git repositories (#51455).
- The status stays "Working" during reasoning-only turns (#51090).
- The CLI upgrade path supports Homebrew Core (#52753).
- A persistent PTY handoff no longer breaks a server restart (#52573), and terminals are gated on server persistent-PTY support (#52760).
- Transcript rows stay in place when history is prepended (#52824).
- Formatter config merges across files (#52739).
- The server returns 404 when a location folder is missing (#52668).
- Unchanged messages are kept during request shaping rather than rebuilt (#52784).
What this tells us#
This release adds no new environment variables and no new experimental flags. The work went into provider breadth and correctness, a dense pass over the Agent Client Protocol, and reliability fixes across the server, CLI, and TUI, plus a large internal type-safety cleanup that is engineering signal rather than user surface.
ACP is the axis that separates OpenCode 2 from the other terminal harnesses. Claude Code, Codex CLI, and Gemini CLI each run as their own front end; OpenCode exposes its agent loop over ACP so the same loop runs inside Zed, JetBrains, and Neovim. The fixes here (compaction reporting, out-of-band permission settling, remote image references) are the kind of protocol detail that only matters once people are driving the agent from an editor rather than the terminal.
The provider changes are the catalog-breadth maintenance the 1.x line also carries, now against the v2 provider plugins. A native Cohere provider plus the system-part fixes for Gemini, Mistral, and Cohere narrow the gap between the aggregated model list and the behavior each provider actually needs. The skill disable-model-invocation field gives skill authors the same auto-invocation control that already exists through metadata.opencode/autoinvoke, now as a top-level frontmatter key.
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#
- Native Cohere provider and system parts: #52633, #52888, #52890
- Agent Client Protocol: #52737, #52740, #52565, #52774, #52558, #52557, #52745
- Reliability: #51455, #51090, #52753, #52573, #52760, #52824, #52614
- Skill frontmatter: #52747, OpenCode 2 skills docs
Previous OpenCode 2 analysis: v2.0.22 (October 2, 2026)
All 6 OpenCode 2 analyses: OpenCode 2 Version Tracker · Official OpenCode 2 changelog