Update the version range in your plugins entry to ^0.7.0: on 0.x, ^0.6.0 does not pick up 0.7.
0.7.0 adds a savings ledger. The sidebar gains saved and return rows by default, and pings shows the cost of the current stretch when every ping in the session was priced. Turn them off with the savings option, the picker's Savings row, or /cache-manager savings off; the ledger keeps counting while hidden. See Savings.
modelsDevPrices is opt-in (default false). Leave it off and the plugin makes no network calls of its own; sessions on models the OpenCode catalog doesn't price show the unit-free form.
0.6.0 classifies requests on the Anthropic Messages wire (POST …/messages) by model, the way the OpenAI wires already were. The anthropic and omniroute-anthropic providers behave as before and are always Claude. Any other provider ID is resolved from, in order, your cacheProfiles patterns, a Claude model name (it contains claude or starts with anthropic/, on the OpenCode model ID or the request's model), and the model the latest response reported, applied from the next request. A router alias that switches models therefore runs one turn behind, and a request such an alias rejects (status 400 or 422) drops the learned entry. Anything else is implicit: observed, never rewritten or pinged. See SUPPORTED_PROVIDERS.md.
Behaviour you may notice:
- Non-Claude models on an Anthropic-compatible endpoint under another provider ID (DeepSeek, Kimi, MiniMax, GLM, a router) are no longer pinged, and a
-1hvariant only has itsx-cache-ttlheader stripped. In 0.5 they were pinged on Claude's schedule, and the pings missed the cache and were billed at full input price. - Claude by name on an Anthropic-compatible endpoint under another provider ID now gets the session's TTL mode and the
anthropic-betaheader. In 0.5 the session's mode was ignored there. - A Claude alias without "claude" in its name under another provider ID is
implicituntil a response names a Claude model or acacheProfilesentry maps it ("my-alias": "anthropic"). In 0.5 it was kept warm, and rewritten if it had a-1hvariant.
Update the version range in your plugins entry to ^0.5.0: on 0.x, ^0.4.0 does not pick up 0.5.
0.5.0 adds OpenAI GPT-5.6 and later as a managed provider, on Chat Completions and on the Responses API (OpenCode's native openai provider). The session's TTL mode now applies to them: 5m leaves OpenAI's automatic 30-minute cache alone, 1h and hybrid add a 12-hour breakpoint, one-off calls (titles and other one-off generate calls) stop writing to the cache, and keepalive pings every 25 minutes (5m, hybrid) or 10 hours (1h). See SUPPORTED_PROVIDERS.md.
explicitCacheModels is replaced by cacheProfiles. The old option is ignored. It was a list of patterns where a leading ! meant "never manage"; the new one maps each pattern to a profile ("anthropic", "openai" or "implicit"):
"!pattern" becomes "pattern": "implicit", and a plain pattern becomes "pattern": "anthropic". Use "openai" to manage a model as GPT-5.6+ when its ID doesn't show the version. Learned classifications saved by 0.4 (stored as explicit) are read as anthropic.
Behaviour you may notice:
- Sidebar. OpenAI sessions show
ttl 30m (requested)orttl 12h (requested): OpenAI's usage doesn't report the lifetime it granted. - A
-1hvariant on animplicitmodel (for example a"gpt": "implicit"mapping, or a model the plugin doesn't manage) has itsx-cache-ttlheader stripped and nothing else changed. In 0.4 the header still rewrote anycache_controlblocks already in the request, which affected a Claude router alias whose ID doesn't name Claude. Map such an alias incacheProfiles("my-alias": "anthropic") so its-1hvariant applies from the first request; otherwise it applies once a response has taught the plugin the alias is Claude. - Claude through a
…/responsesendpoint is only observed: no TTL rewrite and no pings, since the Anthropic rewrite has nothing to act on in a Responses body. With theopenaiCompatibleoption off, a…/responsesrequest only has thex-cache-ttlheader stripped; before, it went through the Anthropic rewrite. - A non-Claude model behind an Anthropic-ID provider on an OpenAI wire now follows its own profile instead of being rewritten as Claude.
- OmniRoute drops
prompt_cache_breakpoint, so GPT's 12-hour cache is not expected to reach OpenAI through it yet (fixed upstream in OmniRoute PR #18255 for issue #18254, merged 2026-10-27, but not yet in a release; the latest is v3.8.52; expected, not measured). Caching turned off for one-off calls does work. Pings on the 12-hour schedule are then expected to miss, so use5mfor GPT sessions there until a release includes the fix. - Older GPT models (before 5.6) are never sent the new fields, since they answer 400.
Nothing to migrate. Update the version range in your plugins entry to ^0.5.0: on 0.x, ^0.3.0 does not pick up 0.4 or 0.5.
Support for OpenAI-compatible endpoints (OpenRouter, proxies) is on by default. Claude models on …/chat/completions now get the TTL rewrite, cache breakpoints and keepalive pings; other models there are only observed. To turn it off, set the openaiCompatible plugin option to false. See SUPPORTED_PROVIDERS.md.
Two changes break existing habits:
/cache-ttlis now/cache-manager. The palette entry is "Cache Manager" and the old command name is gone, with no alias.- Typed commands change only the current session.
/cache-ttl 1hused to set the global mode;/cache-manager 1hsets the mode for the session you are in. To change the global default, use the picker's Global section.
A global mode stored by 0.1.x is kept and takes precedence over defaultMode, so editing defaultMode alone will not change it; set it from the picker's Global section instead. There is nothing else to migrate.