Summary
On the anthropic (api_key) provider, no Claude Haiku 4.5 model id resolves. Both the rolling alias anthropic/claude-haiku-4-5 and the dated anthropic/claude-haiku-4-5-20251001 fail at model resolution with Unknown model ... (model_not_found). Opus 4.6/4.7/4.8 and Sonnet 4.6 resolve fine on the same provider/auth.
Environment
- openclaw 2026.6.1 (also reproduced on 2026.5.28)
- macOS, Node 25.x
- Auth: single profile
anthropic:default, mode api_key
Repro
openclaw agent --agent main --model anthropic/claude-haiku-4-5 --message "hi"
# GatewayClientRequestError: FailoverError: Unknown model: anthropic/claude-haiku-4-5 (model_not_found)
openclaw agent --agent main --model anthropic/claude-haiku-4-5-20251001 --message "hi"
# FailoverError: Unknown model: anthropic/claude-haiku-4-5-20251001 (model_not_found)
Same failure when a cron job's payload.model is set to either id (openclaw cron run <id> → lastErrorReason: model_not_found). A job with a fallback chain shows: All models failed (2): anthropic/claude-haiku-4-5-20251001: Unknown model ... | anthropic/claude-haiku-4-5: Unknown model ....
Root cause
dist/extensions/anthropic/openclaw.plugin.json → modelCatalog.providers.anthropic.models lists only claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-sonnet-4-6. There is no Haiku entry. And modelCatalog.discovery.anthropic = "static", so there's no runtime discovery to fill the gap.
DEFAULT_CLAUDE_MODEL_BY_FAMILY.haiku = "claude-haiku-4-5" exists in claude-model-refs, and #78000 added claude-haiku-4-5 to the api_key allowlist defaults — but neither makes the model resolvable, because the resolver requires the id to be present in the provider's static catalog.
Expected
anthropic/claude-haiku-4-5 (and/or the dated claude-haiku-4-5-20251001) resolves on the api_key provider, the same way Sonnet/Opus do.
Suggested fix
Add a Haiku 4.5 entry to modelCatalog.providers.anthropic.models, mirroring the claude-sonnet-4-6 entry:
{
"id": "claude-haiku-4-5-20251001",
"name": "Claude Haiku 4.5",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 200000,
"maxTokens": 64000
}
(The dated Anthropic model id is claude-haiku-4-5-20251001; claude-haiku-4-5 is the rolling alias.)
Impact
Anyone wanting Haiku 4.5 on the api_key provider — e.g. as a cheaper tier for cron/heartbeat jobs — can't select it; those jobs fail with model_not_found until switched to Sonnet (~3x the per-token cost).
Non-working workaround
Declaring a custom Haiku entry under providers.anthropic.models in agents/<id>/agent/models.json is stripped on gateway restart, so that isn't a viable workaround. Current workaround is to use anthropic/claude-sonnet-4-6.
Summary
On the
anthropic(api_key) provider, no Claude Haiku 4.5 model id resolves. Both the rolling aliasanthropic/claude-haiku-4-5and the datedanthropic/claude-haiku-4-5-20251001fail at model resolution withUnknown model ... (model_not_found). Opus 4.6/4.7/4.8 and Sonnet 4.6 resolve fine on the same provider/auth.Environment
anthropic:default, modeapi_keyRepro
Same failure when a cron job's
payload.modelis set to either id (openclaw cron run <id>→lastErrorReason: model_not_found). A job with a fallback chain shows:All models failed (2): anthropic/claude-haiku-4-5-20251001: Unknown model ... | anthropic/claude-haiku-4-5: Unknown model ....Root cause
dist/extensions/anthropic/openclaw.plugin.json→modelCatalog.providers.anthropic.modelslists onlyclaude-opus-4-8,claude-opus-4-7,claude-opus-4-6,claude-sonnet-4-6. There is no Haiku entry. AndmodelCatalog.discovery.anthropic = "static", so there's no runtime discovery to fill the gap.DEFAULT_CLAUDE_MODEL_BY_FAMILY.haiku = "claude-haiku-4-5"exists inclaude-model-refs, and #78000 addedclaude-haiku-4-5to the api_key allowlist defaults — but neither makes the model resolvable, because the resolver requires the id to be present in the provider's static catalog.Expected
anthropic/claude-haiku-4-5(and/or the datedclaude-haiku-4-5-20251001) resolves on the api_key provider, the same way Sonnet/Opus do.Suggested fix
Add a Haiku 4.5 entry to
modelCatalog.providers.anthropic.models, mirroring theclaude-sonnet-4-6entry:{ "id": "claude-haiku-4-5-20251001", "name": "Claude Haiku 4.5", "reasoning": true, "input": ["text", "image"], "contextWindow": 200000, "maxTokens": 64000 }(The dated Anthropic model id is
claude-haiku-4-5-20251001;claude-haiku-4-5is the rolling alias.)Impact
Anyone wanting Haiku 4.5 on the api_key provider — e.g. as a cheaper tier for cron/heartbeat jobs — can't select it; those jobs fail with
model_not_founduntil switched to Sonnet (~3x the per-token cost).Non-working workaround
Declaring a custom Haiku entry under
providers.anthropic.modelsinagents/<id>/agent/models.jsonis stripped on gateway restart, so that isn't a viable workaround. Current workaround is to useanthropic/claude-sonnet-4-6.