OpenCode 2 v2.0.30: diff side panel on by default, Claude Code toggles#
Published by Alex Sorokoletov
Part of the OpenCode 2 Version Tracker series. | OpenCode on GitHub | OpenCode 2 docs
OpenCode 2 v2.0.30 follows v2.0.29. The terminal's diff side panel now opens by default rather than sitting behind an experiment (#55780), two new environment variables switch off OpenCode's Claude Code compatibility, and a cluster of core fixes changes how it negotiates with MCP servers.
New environment variables#
v2.0.30 adds two environment variables over v2.0.29, both switches for OpenCode's Claude Code compatibility. That compatibility reads Claude Code's CLAUDE.md project and global rules when no AGENTS.md exists, and loads skills from ~/.claude/skills/.[1]
| Variable | What It Does |
|---|---|
OPENCODE_DISABLE_CLAUDE_CODE | Set to 1 to turn off all .claude support, so OpenCode stops reading the CLAUDE.md rule fallbacks and the ~/.claude/skills/ skills.[1] |
OPENCODE_DISABLE_CLAUDE_CODE_SKILLS | Set to 1 to turn off only the .claude/skills loading, leaving the CLAUDE.md rule fallbacks in place.[1] |
Diffs in the terminal#
The diff side panel, which #55456 had moved behind an experiment within this same range, opens by default (#55780). The viewer reflows between layouts as the terminal width changes (#55574), its docked spacing is tightened (#55467), and plugin panel slots can render diffs (#47152).
The terminal's dialogs move onto a single shared layout (#55519, #55523). The user-visible results: each dialog mounts once so /fork renders its pending view (#55751), and dialog hints read label-first (#55745). Option-arrow session tab navigation is restored (#54277).
MCP server handling#
Several core fixes change how OpenCode talks to MCP servers. It advertises the spec-shaped elicitation capability (#53196), skips list calls for capabilities a server never advertised (#55474), and skips the codemode query against servers that reject it (#55618). MCP OAuth token endpoints on *.localhost are treated as loopback (#55627), a connecting tool call passes its input as permission metadata (#51062), and the TinyFish web search path initializes its MCP session (#54730).
Two more core changes sit alongside: context compaction fits its output limit to the request actually sent (#55613), and database query errors redact their parameters (#55621).
Config and migration#
The published config schema now validates both V1 and V2 shapes (#55524). That matters because V2 reads existing V1 config from the same file locations without rewriting it.[2] Next to it: configured instruction files load (#55539), a missing config file reference resolves to empty rather than failing (#55388), and an empty configured provider or model name is treated as omitted (#55465).
Session, app, and platform#
The session view summarizes each turn's changed files (#55064) and shows a webfetch URL while the fetch runs (#55590). Project settings stay open when the project folder is missing (#55553), and voice delegations from the iOS app show as Voice messages (#54426). On Windows, the service defaults to port 45278 (#55547) and PowerShell opens in the project directory (#55710). The session sharing backend is retired (#55716).
The terminal gets the features, the core gets the fixes#
The feature commits in v2.0.30 land in the terminal and app clients. The diff side panel moves from an experiment to the default view (#55780), gains responsive layouts (#55574), and renders inside plugin panel slots (#47152). The dialogs move onto one shared layout (#55519), which is where the visible dialog fixes come from.
The core's changes are fixes rather than features. The MCP path gets most of them, advertising the elicitation capability (#53196), dropping list calls for unadvertised capabilities (#55474), and treating *.localhost OAuth endpoints as loopback (#55627). Query-parameter redaction (#55621) and the retirement of the session sharing backend (#55716) round out the core work.
The config surface keeps absorbing V1. A schema that validates both shapes (#55524) and empty-or-missing references that resolve to empty (#55388, #55465) let a V1 config run under V2 without edits. The two Claude Code toggles belong to the same area: they turn off OpenCode's reading of .claude rules and skills.
All trademarks and software referenced belong to their respective owners.
Sources#
- Claude Code compatibility and the disable variables: OpenCode docs, Rules
- V1 config reading under V2: OpenCode 2 docs, Migrate from v1
Previous OpenCode 2 analysis: v2.0.29 (October 14, 2026)
All 13 OpenCode 2 analyses: OpenCode 2 Version Tracker · Official OpenCode 2 changelog