Repository navigation
Fixed
- Free models can call tools again. The free-tier gate authenticates the client
through headers alone (User-Agent,x-opencode-client,
x-opencode-session+x-opencode-session-id); once the duplicate session
header from 1.2.10 is present it accepts a normal pi request. The body-shaping
layer (title-generator marker, flattened history, strippedtools) and the
text-tool protocol that replaced native tools are therefore unnecessary, and
they were what broke tool calls:big-pickle(zero-cost but without a-free
suffix) was never converted back into a tool call,mimo-v2.6-flash-free
emitted several calls inside one fenced block and lost all of them, and
weaker models invented their own fences. Both are removed; free models now
send and receive native tools, verified end-to-end (read + bash + follow-up
turn) onbig-pickle,muse-spark-1.3-contributor-free,
mimo-v2.6-flash-free,nemotron-3-ultra-freeand
nemotron-3.5-lightning-free. GATE_UAtracks opencode 2.0.32. The gate also re-checked its content rules:
free requests now needstream: trueand at least one tool definition, and
the versionlessopencode/cliuser agent is rejected; pi's own request
satisfies all of it, so the body still passes through untouched.- Cached catalogs cannot pin a stale protocol any more:
healZenRoute
re-derives the free-tier route from the model id on every read, in
getModels()/getAllModels()— the accessors every request path uses.
Amodels-store.jsonwritten by an older version (which survives upgrades
because pi's post-login refresh is offline) no longer causes
400 ModelProtocolUnsupported.
Highlights
- Free models call native tools again — read, bash, multi-turn — with the
request body passing through untouched. - A stale
models-store.jsoncan no longer pin a model to a dead protocol;
routing is re-derived from code on every read (no more
400 ModelProtocolUnsupportedafter upgrades). - Gate header
User-Agenttracks opencode 2.0.32; probed against the live
gateway (free requests needstream: true+ at least one tool definition,
both of which pi sends anyway). - Verified end-to-end on
big-pickle,mimo-v2.6-flash-free,
nemotron-3-ultra-free,nemotron-3.5-lightning-free,
muse-spark-1.3-contributor-free, and the newbeam-free,
glm-5.3-flash-free,nemotron-3.5-super-vl-free,space-bunny-free,
deepseek-v4.1-flash-free.
Upgrade: pi install npm:opencode-zen-oauth then restart pi.