OpenCode 2 v2.0.31: model reasoning in config, new theme#

Published by

Part of the OpenCode 2 Version Tracker series. | OpenCode on GitHub | OpenCode 2 docs

OpenCode 2 v2.0.31 follows v2.0.30. Model reasoning can now be read from config (#55853), the terminal adds a "new designs" experiment with an "opencode2" theme (#55818, #55798), and a run of core fixes covers config parsing, free-model selection, and Bedrock provider handling.

Model reasoning and selection#

v2.0.31 reads a model's reasoning setting from config (#55853). Reasoning loads for every native provider package (#55789), and configured limits are seeded before model transforms run (#55778).

Model selection also changes on free models. When only free OpenCode models are available, OpenCode defaults to the big-pickle model (#55852), and when signed out it prioritizes preferred free OpenCode models (#55972).

A new designs experiment in the terminal#

A "new designs" experiment gates a set of new dialog designs (#55818, #55810), and DialogSelect is rebuilt on the shared dialog layout (#55799). The release adds an "opencode2" theme and a text.faint token (#55798).

The rest of the terminal work is polish. Repeated review no longer reopens the last diff file (#55845), the review pane stays steady when the side terminal toggles (#55879), long file names fade at the edge of the file tree (#55889), and the embedded terminal panel gets a transparent background (#55396). The tool group count slides when it changes (#55617), the compact number form rolls over to M at the rounding boundary (#55871), and /editor says why it did nothing when no editor is set (#55872). On Windows, plugin Git console windows are hidden (#55475).

Config parsing and provider fixes#

ChangePR
Env config values that break parsing are escaped#55915
Unreadable config file references are treated as empty#55959
Variants respelled when config changes a catalog model's package#55962
Anthropic cache format honored on Bedrock Converse#55942
Newer Bedrock bare IDs that need inference profiles are hidden#54486
Numeric MCP timeouts accepted#55851
Sanitized exports omit compaction replay context#55592
Managed services load the saved environment at start#50907
Update caches rollout fallback reads#55205

Two documentation changes sit next to these. The external_directory permission is documented as defaulting to allow, so paths outside the project are read or edited without a prompt unless you add a rule (#55885)[1], and MCP CIMD client registration is documented (#55796).

The config path does more, the terminal previews a redesign#

The new terminal work is the "new designs" experiment and the opencode2 theme, both opt-in, and DialogSelect is rebuilt on the shared dialog layout (#55799).

The core reads config more capably and fails more softly. Reasoning joins the settings read from config (#55853), configured limits seed before transforms (#55778), and three fixes keep a bad config from breaking a run: env values that break parsing are escaped (#55915), unreadable references resolve to empty (#55959), and variants are respelled when config moves a catalog model to a different package (#55962).

Provider handling gets Bedrock attention: the Anthropic cache format is honored on Bedrock Converse (#55942) and newer bare IDs that require inference profiles are hidden (#54486). Free-model selection is tuned for signed-out use, defaulting to big-pickle (#55852) and prioritizing preferred free models (#55972).

All trademarks and software referenced belong to their respective owners.


Sources#

  1. external_directory default: OpenCode 2 docs, Permissions

Previous OpenCode 2 analysis: v2.0.30 (October 15, 2026)

Next OpenCode 2 analysis: v2.0.32 (October 17, 2026)

All 15 OpenCode 2 analyses: OpenCode 2 Version Tracker · Official OpenCode 2 changelog