[BUG] Claude Desktop wipes session groupings on preference write
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Desktop app version: 1.7196.0 (2dbd78)
OS: Windows 11
This is the same root cause as #34359 and #32345 — Claude Desktop rewrites claude_desktop_config.json from incomplete in-memory state on quit or on a preference change after restart, silently destroying whatever keys weren't yet rehydrated. Those reports documented mcpServers being wiped. This report documents the same mechanism wiping a different key: session groupings (preferences.epitaxyPrefs.dframe-local-slice).
Both prior reports were closed as "invalid" and are now locked. Filing a new report because (a) the affected key is different, (b) this confirms the bug is broader than MCP configs, and (c) the reproduction and diagnosis are materially more detailed.
File-size signature: claude_desktop_config.json dropped from 9,543 bytes to 1,710 bytes at the moment of wipe. The resulting file is a valid preferences stub with empty groupings. We waited one hour — no server-side rehydration occurred.
Architecture
claude_desktop_config.json is the single source of truth for session groupings:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
The affected section:
{
"preferences": {
"epitaxyPrefs": {
"dframe-local-slice": {
"pinnedOrder": [],
"customGroupAssignments": {
"code:local_<sessionId>": "cg-<groupId>"
},
"customGroupOrder": {
"cg-<groupId>": ["code:local_<sessionId>", ...]
}
}
}
}
}
This data exists in no other file on disk — not LevelDB, not IndexedDB, not LocalStorage, not Session Storage. One file, no replication, no backup.
What Should Happen?
A preference write should not emit empty customGroupAssignments / customGroupOrder when those values were non-empty on disk. Options in increasing order of effort:
- Read-then-merge — preserve on-disk grouping data if in-memory grouping state is empty at write time.
- Delay write — wait until server-side grouping state is confirmed loaded before serialising.
- Versioned backups — keep the previous N versions on every rewrite (Chromium's Preferences file does this).
- Split the file — move grouping state to
epitaxy-groupings.jsonwith append-mostly semantics so a botched preference write cannot destroy it.mcpServersdeserves the same separation.
Error Messages/Logs
No error logged. The wipe is completely silent.
Diagnosis (Windows):
dir "%APPDATA%\Claude\claude_desktop_config.json"
A healthy file with groupings is 5–20 KB depending on session count.
A wiped file is ~1–2 KB.
Confirm the wipe by reading the file — if these are both {} and you had groupings:
preferences.epitaxyPrefs.dframe-local-slice.customGroupAssignments → {}
preferences.epitaxyPrefs.dframe-local-slice.customGroupOrder → {}
Steps to Reproduce
Trigger 1 — preference toggle in a restart-adjacent window (reproduced):
- Toggle any Desktop preference (e.g. "remote control by default") ON.
- Quit Claude Desktop fully — tray icon → Quit, not window close.
- Reopen Claude Desktop.
- Toggle the same preference OFF.
The write at step 4 serialises the entire file from current in-memory state. If groupings weren't rehydrated from the server between steps 3 and 4, customGroupAssignments and customGroupOrder are written as {}.
Trigger 2 — plain quit-and-reopen (observed once, not yet confirmed deterministic):
File dropped from 9,543 to 1,710 bytes on a quit-reopen cycle with no preference change in between.
Claude Model
None (configuration-layer bug)
Is this a regression?
Unknown — cannot determine which Desktop version introduced epitaxyPrefs / dframe-local-slice grouping storage.
Last Working Version
_No response_
Claude Code Version
Claude Desktop 1.7196.0 (2dbd78), Windows 11
Platform
Anthropic API
Operating System
Windows (confirmed). Mechanism is platform-agnostic — same file, same write path on macOS and Linux.
Terminal/Shell
PowerShell
Additional Information
Recovery: Only possible from a pre-wipe backup. Restore it only after quitting Desktop fully (tray icon → Quit + verify with tasklist /FI "IMAGENAME eq claude.exe"). Any preference toggle before fully quitting will re-trigger the wipe.
What is NOT affected: Session transcripts (.jsonl files under ~\.claude\projects\) and per-session metadata (claude-code-sessions\*\local_*.json) are untouched. Sessions created during the wiped window survive — they just appear ungrouped in the sidebar.
Prevention until fixed: Back up claude_desktop_config.json before toggling any Desktop preference, before quitting Desktop, and before installing or updating any MCP server entry. The same file holds mcpServers — this aggressive-rewrite behaviour has also been observed wiping that key in #34359 and #32345.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗