Claude Desktop (macOS): opening Settings hangs the whole app after a model is retired
Summary
On Claude Desktop for macOS, opening Settings freezes the renderer indefinitely — the
window becomes unresponsive and has to be force-quit. While wedged, the app shows
"Remote credentials fetch failed" and the account profile reads as undefined. It looks
like corrupted settings or a broken login, but it is neither: OAuth and config files are fine.
This is the second occurrence in ~5 days on the same machine, both lining up with a model
lifecycle rollover (claude-opus-4-7 → claude-opus-4-8). It appears to recur on every model
retirement.
Environment
- App: Claude Desktop (macOS, Electron)
- OS: macOS (Darwin 25.5.0)
- Plan: Claude Max
- First seen 2026-05-29, recurred 2026-06-03
Steps to reproduce
- Have a now-retired model id persisted as the selected/last-used model
(e.g. claude-opus-4-7[1m] after the current default became claude-opus-4-8).
- Open the app and open Settings (Cmd+,).
Expected
Settings opens and renders. If the persisted model id no longer exists, the app falls back to
the current default model.
Actual
- Settings never finishes loading; the renderer hangs and the app becomes unusable.
- "Remote credentials fetch failed" is shown; account profile is undefined.
- No native crash report is generated (Crashpad
completed/ is empty) — confirming this is a
renderer hang, not a process crash. The user force-quits.
Root cause (as diagnosed locally)
On Settings open, the app resolves the selected/available model via React Query, fetching
GET /api/organizations/<org>/model_configs/<model>. When <model> is a retired id
(claude-opus-4-7[1m]), the request returns 404 Not Found, and that query never
settles — so the Settings tree that depends on it hangs forever. The "Remote credentials
fetch failed" banner and undefined account profile are downstream of the same dead query;
the OAuth token (stored in config.json oauth:tokenCache + Keychain "Claude Safe Storage")
is valid the whole time.
The offending id is persisted client-side:
- Selected model →
Local Storage/leveldb
- Available-models list (cache) →
IndexedDB (https_claude.ai_*)
Notably: clearing Local Storage alone fixed it on 2026-05-29, but the retired id survived in
the IndexedDB model-list cache and the failure recurred on 2026-06-03 — so both stores need
to be considered.
Workaround (no re-login required)
- Fully quit the app (live leveldb edits corrupt the store).
- Move both stores aside (reversible):
~/Library/Application Support/Claude/Local Storage and .../IndexedDB.
- Relaunch. The app recreates both, re-fetches a fresh model list, and selects the current
default. OAuth survives in config.json + Keychain — no sign-in needed.
Suggested fixes (in priority order)
- Don't let a single model fetch wedge Settings. Wrap the
model_configs/<id> query in an
error boundary + timeout so a 404 surfaces an error/empty state instead of hanging the panel.
- Self-heal a stale selection. If the persisted model id 404s (or isn't in the freshly
fetched list), fall back to the org default and overwrite the persisted id.
- Invalidate on refresh. When the available-models list is refreshed, reconcile/evict any
persisted selected-model id that is no longer present (covers both Local Storage and the
IndexedDB cache).
- Decouple the credentials banner from the model query so an unrelated 404 doesn't read as
an auth failure.
Impact
App-wide unusability (Settings is unreachable; users perceive it as "Claude is broken
everywhere") on a predictable schedule — every time a previously-selected model is retired.
Claude Desktop (macOS): opening Settings hangs the whole app after a model is retired
Summary
On Claude Desktop for macOS, opening Settings freezes the renderer indefinitely — the
window becomes unresponsive and has to be force-quit. While wedged, the app shows
"Remote credentials fetch failed" and the account profile reads as undefined. It looks
like corrupted settings or a broken login, but it is neither: OAuth and config files are fine.
This is the second occurrence in ~5 days on the same machine, both lining up with a model
lifecycle rollover (
claude-opus-4-7→claude-opus-4-8). It appears to recur on every modelretirement.
Environment
Steps to reproduce
(e.g.
claude-opus-4-7[1m]after the current default becameclaude-opus-4-8).Expected
Settings opens and renders. If the persisted model id no longer exists, the app falls back to
the current default model.
Actual
completed/is empty) — confirming this is arenderer hang, not a process crash. The user force-quits.
Root cause (as diagnosed locally)
On Settings open, the app resolves the selected/available model via React Query, fetching
GET /api/organizations/<org>/model_configs/<model>. When<model>is a retired id(
claude-opus-4-7[1m]), the request returns 404 Not Found, and that query neversettles — so the Settings tree that depends on it hangs forever. The "Remote credentials
fetch failed" banner and undefined account profile are downstream of the same dead query;
the OAuth token (stored in
config.jsonoauth:tokenCache+ Keychain "Claude Safe Storage")is valid the whole time.
The offending id is persisted client-side:
Local Storage/leveldbIndexedDB(https_claude.ai_*)Notably: clearing Local Storage alone fixed it on 2026-05-29, but the retired id survived in
the IndexedDB model-list cache and the failure recurred on 2026-06-03 — so both stores need
to be considered.
Workaround (no re-login required)
~/Library/Application Support/Claude/Local Storageand.../IndexedDB.default. OAuth survives in
config.json+ Keychain — no sign-in needed.Suggested fixes (in priority order)
model_configs/<id>query in anerror boundary + timeout so a 404 surfaces an error/empty state instead of hanging the panel.
fetched list), fall back to the org default and overwrite the persisted id.
persisted selected-model id that is no longer present (covers both Local Storage and the
IndexedDB cache).
an auth failure.
Impact
App-wide unusability (Settings is unreachable; users perceive it as "Claude is broken
everywhere") on a predictable schedule — every time a previously-selected model is retired.