Quick Answer
Multica v0.6.5 includes a fix for discovering OpenCode 2.x thinking variants. The change replaces the newer CLI’s incompatible verbose-model discovery path with a request to the model API, while preserving the earlier CLI path. PR #9365 merged on October 21, 2026, as commit 4152fed, and the v0.6.5 release changelog includes it.
The important qualification is that this restores access to advertised variant metadata. It does not give every model a Thinking selector. Models that advertise no variants still receive no thinking metadata, and the change does not establish a default reasoning level.
In Plain English
A model catalog needs to answer two different questions: which models exist, and which controls each model offers. Multica could obtain an answer to the first question without receiving the information needed for the second.
According to the Multica PR, OpenCode 2.0.32 rejects models --verbose. The plain models command returns model IDs, but those IDs lack the variant metadata needed to populate thinking.supported_levels. The PR says that missing metadata caused Multica to hide the Thinking selector. It also says saved variants could be dropped during catalog validation.
The editorial interpretation is a metadata mismatch at the integration boundary: listing a model successfully did not mean Multica knew its available reasoning choices. The patch changes how Multica discovers those choices. It does not change OpenCode’s API or demonstrate a change in a model’s reasoning behavior.
Code Evidence
The old discovery input
In server/pkg/agent/models.go, the earlier discoverOpenCodeModels implementation depended on verbose CLI output. This shortened excerpt from the commit diff shows the relevant call and parser:
cmd := runtimeCmd.exec(runCtx, "models", "--verbose")
out, _ := outputOwned(cmd, runtimeCmd.logger)
models := parseOpenCodeModels(string(out))
That input mattered because the parser needed more than model names. When the command no longer supplied the expected detailed output, a plain list of IDs could not substitute for the missing variant information.
The version-gated API path
The patch detects the installed CLI version and routes a successfully parsed major version of 2 or later through the API. The following excerpt is shortened; the comment marks omitted setup and request execution, so it is not a complete runnable function:
version, _ := detectCLIVersion(runCtx, runtimeCmd)
parsed, versionErr := parseSemver(version)
if versionErr == nil && parsed.Major >= 2 {
args := []string{"api", "GET", "/api/model?" + query.Encode()}
// Directory-query setup and request execution omitted.
models = parseOpenCodeV2Models(out)
}
The observed code change sends the current directory with the API request, retains the verbose-model path for earlier versions, and keeps a plain-ID fallback if discovery returns no models. That fallback can recover model identities; plain IDs still do not establish available thinking levels.

What the parser receives
The API contract is grounded in the official source revision associated with OpenCode v2.0.32, whose tag is dated October 16, 2026. The model route defines GET /api/model with a success type of Location.response(Schema.Array(Model.Info)).
Two schema details explain the new parser. Location.response supplies an envelope with location and data fields. The Model.Info schema supplies a variants array whose Variant objects each have an id.
Multica’s new parser reads that envelope, constructs provider/model identifiers from provider and model IDs, and maps advertised variant IDs into supported thinking levels. It does not invent a default variant. This is the concrete connection between the structured catalog response and the metadata the selector needs.
Why It Matters
For developers troubleshooting a missing Thinking selector, the distinction between model discovery and variant discovery narrows the problem. A visible model entry proves that an identity reached the catalog. It does not prove that the catalog contains the controls associated with that model.
The PR’s report about saved variants also makes this more than a display issue: catalog validation could drop a saved variant when the necessary metadata was absent. The fix addresses the discovery input used to describe those choices.
Our reading is that this patch is an adapter at a version boundary. It preserves the legacy source of metadata while teaching the newer path to consume a structured response. That is a useful explanation of the change’s purpose, not evidence that every provider accepts every discovered variant.
An Open Question
As CLI model catalogs evolve, which compatibility boundaries should integrations test so that model IDs and their available controls stay in sync?
This case suggests a useful distinction for those tests: successfully discovering an ID and successfully discovering its advertised variants are separate outcomes. A further boundary is whether a discovered variant works when used with a provider. The supplied evidence addresses discovery more directly than that final behavior.
Scope and Limitations
Release availability is established: the merged fix appears in Multica v0.6.5. That does not establish which version a particular installation is running. The code routes detected major versions 2 and later through the API, but the PR’s described real-CLI verification targets OpenCode 2.0.32. It is not evidence that every future version has been verified.
The official model route group is experimental, and its description says the model snapshot may precede initial plugin settlement. The Multica PR also mentions a remaining early-2.x initialization limitation. The supplied summary does not detail its affected versions or behavior, so those should not be guessed.
The PR reports real OpenCode 2.0.32 discovery checks, focused tests and vet, and green CI; GitHub shows 17 checks passed. These are maintainer-reported results, not tests independently rerun for this article. The author also reports that cloud-provider reasoning behavior remained unverified. The supported conclusion is therefore about discovery and UI metadata, without a benchmark, performance claim, or guarantee of provider execution.
