openclaw - ✅(Solved) Fix [Bug]: `openclaw configure` does not fully remove fallback models when selecting "Skip for now" [2 pull requests, 2 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#60769Fetched 2026-04-08 02:47:24
View on GitHub
Comments
2
Participants
2
Timeline
9
Reactions
0
Timeline (top)
referenced ×4commented ×2cross-referenced ×2labeled ×1

Error Message

描述当运行“openclaw configure”并为后退模型选择“暂时不要”时,旧的后退后配置(例如,ollama/glm-4.7-flash)不会从“openclaw.json”中删除。当主模型失败时,这会导致级联404错误。## 复制步骤1.带有回退的初始配置:openclaw configure→将回退设置为ollama/glm-4.7-flash2.重新运行配置:openclaw配置→模型→暂时跳过→回退:(留空)→继续3.通过Web UI或CLI发送消息4.主模型(omlx/Qwen3.5-9B-MLX-8bit)失败(例如,配对问题)5.系统回退到ollama/glm-4.7-flash404错误## 预期行为-选择“暂时放弃”或将回退留空,应从配置中完全删除**“models.fallback”字段-没有级联回退到不存在的模型## 实际行为-旧的回退配置持续存在~/.openclaw/openclaw.json-即使重新配置后,Web UI也显示404 {"error":"model 'glm-4.7-flash' not found"}## 解决方法手动编辑~/.openclaw/openclaw.json以删除models.fallback字段,或运行:``"巴什openclaw配置→模型→跳过→回退:(明确)→继续

The old fallback configuration (ollama/glm-4.7-flash) persists in ~/.openclaw/openclaw.json even after re-running openclaw configure and leaving the fallback field empty. When the primary model (omlx/Qwen3.5-9B-MLX-8bit) fails, the system attempts to use the stale fallback model, resulting in: 404 {"error":"model 'glm-4.7-flash' not found"}

  1. Web UI error screenshot (attached): Shows 404 {"error":"model 'glm-4.7-flash' not found"}
  • Severity: Medium (blocks workflow, confusing error messages, but has workaround)

Fix Action

Fix / Workaround

🔹 Impact and severity (影响和严重性)

- **Affected users**: All users who re-run `openclaw configure` to remove/clear fallback models
- **Severity**: Medium (blocks workflow, confusing error messages, but has workaround)
- **Frequency**: Always (100% reproducible when primary model fails + stale fallback exists)
- **Consequence**: 
  - Agents fail to respond even when primary model is correctly configured
  - Misleading 404 errors suggest model doesn't exist, when issue is stale fallback config
  - Users believe they've removed fallback, but config persists silently
  - Requires manual JSON editing or complete config reset to resolve

**Temporary workaround**: 
1. Manually edit `~/.openclaw/openclaw.json` to remove `models.fallback` field
2. Or run `openclaw configure` → Model → explicitly clear fallback → Complete

PR fix notes

PR #1: fix: remove fallback models config when skipped in configure wizard

Description (problem / solution / changelog)

Summary

When running openclaw configure and selecting "Skip for now" or leaving the fallback models field empty, the old fallback configuration now properly gets removed from openclaw.json instead of persisting.

Changes

  • Modified applyModelFallbacksFromSelection in model-picker.ts to explicitly remove the fallbacks field when the selection is empty or has only one item
  • This ensures that configuring "Skip for now" properly clears stale fallback model configuration

Testing

  • Verified that existing tests still pass
  • The fix handles the case where user selects "Skip for now" in model picker

Fixes openclaw/openclaw#60769

Changed files

  • .agents/skills/openclaw-parallels-smoke/SKILL.md (modified, +8/-3)
  • .agents/skills/openclaw-release-maintainer/SKILL.md (modified, +39/-21)
  • .github/workflows/ci-bun.yml (removed, +0/-110)
  • .github/workflows/macos-release.yml (modified, +5/-4)
  • .github/workflows/openclaw-npm-release.yml (modified, +121/-7)
  • .github/workflows/plugin-npm-release.yml (modified, +3/-0)
  • .markdownlint-cli2.jsonc (modified, +3/-0)
  • AGENTS.md (modified, +1/-0)
  • CHANGELOG.md (modified, +424/-195)
  • CONTRIBUTING.md (modified, +4/-1)
  • Dockerfile (modified, +1/-1)
  • Makefile (added, +4/-0)
  • README.md (modified, +44/-3)
  • appcast.xml (modified, +188/-94)
  • apps/android/app/build.gradle.kts (modified, +2/-2)
  • apps/ios/Config/Version.xcconfig (modified, +3/-3)
  • apps/ios/README.md (modified, +3/-3)
  • apps/ios/Sources/Gateway/GatewaySettingsStore.swift (modified, +20/-0)
  • apps/ios/Sources/Model/NodeAppModel.swift (modified, +149/-13)
  • apps/ios/Sources/Settings/SettingsTab.swift (modified, +5/-0)
  • apps/ios/Tests/GatewayConnectionSecurityTests.swift (modified, +19/-2)
  • apps/ios/Tests/NodeAppModelInvokeTests.swift (modified, +58/-0)
  • apps/macos/Sources/OpenClaw/AppState.swift (modified, +13/-0)
  • apps/macos/Sources/OpenClaw/Constants.swift (modified, +1/-0)
  • apps/macos/Sources/OpenClaw/GatewayConnection.swift (modified, +2/-0)
  • apps/macos/Sources/OpenClaw/Resources/Info.plist (modified, +2/-2)
  • apps/macos/Sources/OpenClaw/TalkModeController.swift (modified, +6/-0)
  • apps/macos/Sources/OpenClaw/TalkModeRuntime.swift (modified, +6/-0)
  • apps/macos/Sources/OpenClaw/VoiceWakeRuntime.swift (modified, +18/-1)
  • apps/macos/Sources/OpenClaw/VoiceWakeSettings.swift (modified, +10/-0)
  • apps/macos/Sources/OpenClawProtocol/GatewayModels.swift (modified, +5/-1)
  • apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayTLSPinning.swift (modified, +31/-0)
  • apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift (modified, +5/-1)
  • docs/.generated/config-baseline.json (modified, +1349/-475)
  • docs/.generated/config-baseline.jsonl (modified, +142/-76)
  • docs/.generated/plugin-sdk-api-baseline.json (modified, +398/-371)
  • docs/.generated/plugin-sdk-api-baseline.jsonl (modified, +257/-254)
  • docs/assets/sponsors/blacksmith-light.svg (added, +14/-0)
  • docs/assets/sponsors/convex-light.svg (added, +16/-0)
  • docs/assets/sponsors/nvidia-dark.svg (added, +9/-0)
  • docs/assets/sponsors/nvidia.svg (added, +9/-0)
  • docs/assets/sponsors/openai-light.svg (added, +3/-0)
  • docs/assets/sponsors/vercel-light.svg (added, +5/-0)
  • docs/automation/clawflow.md (modified, +26/-85)
  • docs/automation/cron-jobs.md (modified, +19/-2)
  • docs/automation/hooks.md (modified, +2/-1)
  • docs/automation/index.md (modified, +4/-5)
  • docs/automation/tasks.md (modified, +19/-5)
  • docs/channels/broadcast-groups.md (modified, +2/-2)
  • docs/channels/feishu.md (modified, +32/-0)
  • docs/channels/index.md (modified, +1/-1)
  • docs/channels/matrix.md (modified, +8/-1)
  • docs/channels/msteams.md (modified, +13/-0)
  • docs/channels/nostr.md (modified, +2/-2)
  • docs/channels/qqbot.md (modified, +48/-15)
  • docs/channels/slack.md (modified, +21/-0)
  • docs/channels/telegram.md (modified, +30/-0)
  • docs/channels/troubleshooting.md (modified, +13/-0)
  • docs/channels/whatsapp.md (modified, +27/-1)
  • docs/cli/approvals.md (modified, +13/-0)
  • docs/cli/cron.md (modified, +1/-1)
  • docs/cli/flows.md (modified, +16/-34)
  • docs/cli/index.md (modified, +1/-13)
  • docs/cli/mcp.md (modified, +36/-5)
  • docs/concepts/agent-loop.md (modified, +1/-0)
  • docs/concepts/compaction.md (modified, +20/-0)
  • docs/concepts/model-failover.md (modified, +11/-0)
  • docs/concepts/models.md (modified, +1/-0)
  • docs/docs.json (modified, +1/-0)
  • docs/gateway/configuration-reference.md (modified, +11/-1)
  • docs/gateway/discovery.md (modified, +2/-0)
  • docs/gateway/doctor.md (modified, +8/-0)
  • docs/gateway/pairing.md (modified, +33/-0)
  • docs/gateway/security/index.md (modified, +9/-0)
  • docs/gateway/trusted-proxy-auth.md (modified, +12/-0)
  • docs/help/environment.md (modified, +1/-1)
  • docs/install/development-channels.md (modified, +3/-3)
  • docs/install/oracle.md (modified, +2/-0)
  • docs/install/podman.md (modified, +2/-66)
  • docs/nodes/troubleshooting.md (modified, +6/-2)
  • docs/platforms/android.md (modified, +35/-1)
  • docs/platforms/macos.md (modified, +2/-0)
  • docs/platforms/oracle.md (modified, +2/-0)
  • docs/plugins/architecture.md (modified, +11/-1)
  • docs/plugins/community.md (modified, +7/-6)
  • docs/plugins/sdk-channel-plugins.md (modified, +30/-6)
  • docs/plugins/sdk-migration.md (modified, +1/-1)
  • docs/plugins/sdk-overview.md (modified, +9/-10)
  • docs/plugins/sdk-provider-plugins.md (modified, +3/-0)
  • docs/plugins/sdk-runtime.md (modified, +0/-34)
  • docs/providers/anthropic.md (modified, +4/-2)
  • docs/providers/bedrock.md (modified, +41/-0)
  • docs/providers/glm.md (modified, +1/-1)
  • docs/reference/RELEASING.md (modified, +10/-2)
  • docs/reference/prompt-caching.md (modified, +14/-4)
  • docs/reference/secretref-credential-surface.md (modified, +0/-4)
  • docs/reference/secretref-user-supplied-credentials-matrix.json (modified, +0/-28)
  • docs/tools/diffs.md (modified, +32/-3)
  • docs/tools/exec-approvals.md (modified, +10/-1)
  • docs/tools/exec.md (modified, +2/-0)

PR #60809: fix(models): clear stale fallbacks when configure leaves selection empty

Description (problem / solution / changelog)

Problem

When a user runs openclaw configure → Model → leaves fallback selection empty (or selects "Skip for now"), the previous fallback list persists in openclaw.json. When the primary model then fails, the runtime attempts the stale fallback (e.g. ollama/glm-4.7-flash) and gets a 404 cascade.

Reported in #60769.

Root Cause

Two issues:

  1. scan.ts line 282: when selected.length === 0, it threw "No models selected for fallbacks." instead of treating the empty selection as "clear the fallback list". This blocked any wizard path that tried to write zero fallbacks.

  2. shared.ts mergePrimaryFallbackConfig: when called with fallbacks: [], it wrote fallbacks: [] to the config object instead of deleting the key. An empty array still looks like a configured-but-empty fallback list, which can confuse some runtime paths.

Fix

  1. scan.ts: narrow the empty-selection guard to only apply when --set-default is passed (where a primary model selection is actually required). Empty fallback selection is now treated as "clear fallbacks".

  2. shared.ts: when patch.fallbacks is an empty array, delete next.fallbacks instead of assigning []. This ensures the field is fully removed from openclaw.json when cleared.

Fixes #60769

Changed files

  • src/commands/models/scan.ts (modified, +3/-3)
  • src/commands/models/shared.ts (modified, +5/-1)

Code Example

cat ~/.openclaw/openclaw.json | grep -A 3 "fallback"
# Output: "fallback": ["ollama/glm-4.7-flash"]

### Logs, screenshots, and evidence

---

### Impact and severity


### 🔹 Impact and severity (影响和严重性)
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

描述当运行“openclaw configure”并为后退模型选择“暂时不要”时,旧的后退后配置(例如,ollama/glm-4.7-flash)不会从“openclaw.json”中删除。当主模型失败时,这会导致级联404错误。## 复制步骤1.带有回退的初始配置:openclaw configure→将回退设置为ollama/glm-4.7-flash2.重新运行配置:openclaw配置→模型→暂时跳过→回退:(留空)→继续3.通过Web UI或CLI发送消息4.主模型(omlx/Qwen3.5-9B-MLX-8bit)失败(例如,配对问题)5.系统回退到ollama/glm-4.7-flash404错误## 预期行为-选择“暂时放弃”或将回退留空,应从配置中完全删除**“models.fallback”字段-没有级联回退到不存在的模型## 实际行为-旧的回退配置持续存在~/.openclaw/openclaw.json-即使重新配置后,Web UI也显示404 {"error":"model 'glm-4.7-flash' not found"}## 解决方法手动编辑~/.openclaw/openclaw.json以删除models.fallback字段,或运行:``"巴什openclaw配置→模型→跳过→回退:(明确)→继续

Environment

OpenClaw: 2026.4.2 OS: macOS (Apple Silicon) Model provider: oMLX (local) Suggested Fix

openclaw configure should explicitly delete models.fallback when user leaves it empty Add validation warning if fallback model is not in models.providers catalog

Steps to reproduce

Environment

OpenClaw: 2026.4.2 OS: macOS (Apple Silicon) Model provider: oMLX (local) Suggested Fix

openclaw configure should explicitly delete models.fallback when user leaves it empty Add validation warning if fallback model is not in models.providers catalog

Expected behavior

After running openclaw configure and leaving the fallback models field empty (or selecting "Skip for now"), the models.fallback field should be completely removed from ~/.openclaw/openclaw.json. When the primary model fails, no cascading fallback to non-existent models should occur.

Actual behavior

The old fallback configuration (ollama/glm-4.7-flash) persists in ~/.openclaw/openclaw.json even after re-running openclaw configure and leaving the fallback field empty. When the primary model (omlx/Qwen3.5-9B-MLX-8bit) fails, the system attempts to use the stale fallback model, resulting in: 404 {"error":"model 'glm-4.7-flash' not found"}

OpenClaw version

2026.4.2 (d74a122)

Operating system

macOS 15.x (Apple Silicon, M4 Mac mini)

Install method

pnpm global

Model

omlx/Qwen3.5-9B-MLX-8bit

Provider / routing chain

openclaw (CLI/Web UI) → gateway (ws://127.0.0.1:18789) → omlx provider (http://127.0.0.1:8000/v1) → fallback: ollama/glm-4.7-flash (stale config)

Additional provider/model setup details

  1. Web UI error screenshot (attached): Shows 404 {"error":"model 'glm-4.7-flash' not found"}

  2. Config verification:

cat ~/.openclaw/openclaw.json | grep -A 3 "fallback"
# Output: "fallback": ["ollama/glm-4.7-flash"]

### Logs, screenshots, and evidence

```shell

Impact and severity

🔹 Impact and severity (影响和严重性)

- **Affected users**: All users who re-run `openclaw configure` to remove/clear fallback models
- **Severity**: Medium (blocks workflow, confusing error messages, but has workaround)
- **Frequency**: Always (100% reproducible when primary model fails + stale fallback exists)
- **Consequence**: 
  - Agents fail to respond even when primary model is correctly configured
  - Misleading 404 errors suggest model doesn't exist, when issue is stale fallback config
  - Users believe they've removed fallback, but config persists silently
  - Requires manual JSON editing or complete config reset to resolve

### Additional information

**Last known good scenario**: Initial `openclaw configure` with explicit fallback works correctly

**First known bad scenario**: Re-running `openclaw configure` to remove fallback (selecting "Skip for now" or leaving empty) does not delete the field

**Temporary workaround**: 
1. Manually edit `~/.openclaw/openclaw.json` to remove `models.fallback` field
2. Or run `openclaw configure` → Model → explicitly clear fallback → Complete

**Suggested fix**: 
- Config wizard should explicitly delete `models.fallback` when user leaves it empty
- Add validation warning if fallback model is not in `models.providers` catalog
- Show confirmation: "Fallback list is empty. This will disable automatic fallback. Continue?"

**Related**: This affects migration scenarios and provider switching workflows

extent analysis

TL;DR

The most likely fix is to modify the openclaw configure process to explicitly delete the models.fallback field when the user leaves it empty or selects "Skip for now".

Guidance

  • Verify that the issue is caused by the persistence of the old fallback configuration by checking the ~/.openclaw/openclaw.json file for the models.fallback field.
  • To mitigate the issue, manually edit the ~/.openclaw/openclaw.json file to remove the models.fallback field or run openclaw configure and explicitly clear the fallback field.
  • Consider adding a validation warning if the fallback model is not in the models.providers catalog to prevent similar issues in the future.
  • Test the fix by re-running openclaw configure and verifying that the models.fallback field is removed from the configuration file.

Example

No code snippet is provided as the issue is related to the configuration process and not a specific code snippet.

Notes

The suggested fix assumes that the issue is caused by the openclaw configure process not properly removing the models.fallback field when the user leaves it empty or selects "Skip for now". Additional testing and verification may be necessary to ensure that the fix resolves the issue.

Recommendation

Apply the workaround by manually editing the ~/.openclaw/openclaw.json file or running openclaw configure and explicitly clearing the fallback field, as this provides a temporary solution to the issue. A more permanent fix would require modifying the openclaw configure process to properly handle the removal of the models.fallback field.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

After running openclaw configure and leaving the fallback models field empty (or selecting "Skip for now"), the models.fallback field should be completely removed from ~/.openclaw/openclaw.json. When the primary model fails, no cascading fallback to non-existent models should occur.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - ✅(Solved) Fix [Bug]: `openclaw configure` does not fully remove fallback models when selecting "Skip for now" [2 pull requests, 2 comments, 2 participants]