ZooCode's model-selection field validates input against a fixed list of known model
slugs fetched from OpenRouter's /api/v1/models endpoint. This is correct for normal
model selection, but it also rejects valid OpenRouter routing-suffix syntax, since a
string like z-ai/glm-5.2:floor doesn't match any literal entry in that model list.
This is not a hypothetical request - the identical limitation was independently
reported against Cline (a closely related fork/inspiration for ZooCode) in
cline/cline#1820, where a user states verbatim: "Your tool does not allow adding
these arbitrary suffixes when picking the model."
OpenRouter officially documents these suffixes as first-class routing modifiers, not
separate models:
:floor → equivalent to setting provider.sort to "price" (cheapest provider)
:nitro → equivalent to setting provider.sort to "throughput" (fastest provider)
:online → adds web search capability to any model
:free → routes to the $0 variant where available
Why this matters
Users who want to guarantee lowest-cost routing on every request currently have no
way to do so within ZooCode's UI, since:
- The model dropdown only accepts exact canonical slugs, blocking
:floor.
- There is no separate "Provider Routing" / "Sort by price" field mapping to
OpenRouter's provider.sort parameter as an independent config option.
This forces cost-conscious users to rely entirely on OpenRouter's account-level
default provider-sorting setting as a workaround, which is a global setting rather
than something configurable per-profile inside ZooCode.
Suggested Fix (two options, either resolves the issue)
Option A - Allow suffix passthrough:
Relax model-slug input validation to permit a whitelist of trailing suffixes
(:floor, :nitro, :online, :free) appended to any otherwise-valid model slug,
and pass the full string through unmodified to the OpenRouter API call.
Option B - Dedicated Provider Routing field (preferred, more robust):
Add an explicit "Provider Routing" dropdown/field in Advanced Settings for OpenRouter
profiles, with options: Default (Balanced), Price (cheapest), Throughput (fastest).
This field would set provider: { sort: "price" } (etc.) in the outgoing request
body independently of the model slug, avoiding fragile string-parsing entirely and
matching OpenRouter's own documented API shape.
Option B is preferable since it avoids any ambiguity about slug parsing and gives
users a discoverable, validated UI control rather than requiring them to know
OpenRouter's suffix syntax.
References
- OpenRouter model :suffixes cline/cline#1820 - identical complaint filed against Cline, confirms this is a
cross-tool pattern, not a ZooCode-specific bug
- OpenRouter FAQ / docs - documents
:floor, :nitro, :online, :free as
official routing suffixes, and provider.sort as the equivalent API parameter
- Cline OpenRouter setup docs (docs.cline.bot/provider-config/openrouter) - confirms
Cline's model selection is dropdown-only, no free-text/suffix override
Environment
- ZooCode version: 3.66.0
- Provider: OpenRouter
- OS: Windows
ZooCode's model-selection field validates input against a fixed list of known model
slugs fetched from OpenRouter's
/api/v1/modelsendpoint. This is correct for normalmodel selection, but it also rejects valid OpenRouter routing-suffix syntax, since a
string like
z-ai/glm-5.2:floordoesn't match any literal entry in that model list.This is not a hypothetical request - the identical limitation was independently
reported against Cline (a closely related fork/inspiration for ZooCode) in
cline/cline#1820, where a user states verbatim: "Your tool does not allow adding
these arbitrary suffixes when picking the model."
OpenRouter officially documents these suffixes as first-class routing modifiers, not
separate models:
:floor→ equivalent to settingprovider.sortto"price"(cheapest provider):nitro→ equivalent to settingprovider.sortto"throughput"(fastest provider):online→ adds web search capability to any model:free→ routes to the $0 variant where availableWhy this matters
Users who want to guarantee lowest-cost routing on every request currently have no
way to do so within ZooCode's UI, since:
:floor.OpenRouter's
provider.sortparameter as an independent config option.This forces cost-conscious users to rely entirely on OpenRouter's account-level
default provider-sorting setting as a workaround, which is a global setting rather
than something configurable per-profile inside ZooCode.
Suggested Fix (two options, either resolves the issue)
Option A - Allow suffix passthrough:
Relax model-slug input validation to permit a whitelist of trailing suffixes
(
:floor,:nitro,:online,:free) appended to any otherwise-valid model slug,and pass the full string through unmodified to the OpenRouter API call.
Option B - Dedicated Provider Routing field (preferred, more robust):
Add an explicit "Provider Routing" dropdown/field in Advanced Settings for OpenRouter
profiles, with options: Default (Balanced), Price (cheapest), Throughput (fastest).
This field would set
provider: { sort: "price" }(etc.) in the outgoing requestbody independently of the model slug, avoiding fragile string-parsing entirely and
matching OpenRouter's own documented API shape.
Option B is preferable since it avoids any ambiguity about slug parsing and gives
users a discoverable, validated UI control rather than requiring them to know
OpenRouter's suffix syntax.
References
cross-tool pattern, not a ZooCode-specific bug
:floor,:nitro,:online,:freeasofficial routing suffixes, and
provider.sortas the equivalent API parameterCline's model selection is dropdown-only, no free-text/suffix override
Environment