[BUG] Cowork — Global user instructions edits don't persist across sessions; per-session CLAUDE.md caches retain stale content

Resolved 💬 1 comment Opened Jun 11, 2026 by pwalton66 Closed Jun 12, 2026

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?

Edits made to the global user instructions in Cowork Settings don't reliably persist to new sessions. After updating the global instructions text in the Settings UI and saving, every newly-spawned Cowork session continues to receive the OLD (pre-edit) instruction text.

Investigation on disk confirms the canonical store is not local: 110 per-session CLAUDE.md cache files exist under %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\local-agent-mode-sessions\<session-id>\<workspace-id>\local_<workspace>\.claude\CLAUDE.md, and all 110 contain the same stale text. No canonical CLAUDE.md exists at the Cowork app root. No file under LocalCache (excluding session caches) contains the updated instruction text — full-text search returns zero matches.

This implies one of two failure modes:
(a) The Settings UI Save action isn't reaching the server-side canonical store (silent write failure).
(b) The Save reaches the server, but session-spawn reads a stale cached value instead of re-fetching the current one.

Either way the user-visible symptom is the same: edits don't take effect.

What Should Happen?

After saving an edit to global user instructions in Cowork Settings:

  1. The Save call should successfully update the canonical (server-side or local) store.
  2. Any newly-spawned Cowork session should see the updated instruction text. Specifically, the per-session CLAUDE.md cache that Cowork writes at session spawn should contain the updated content, not the old content.
  3. The Settings UI should provide some visible confirmation that the save landed (e.g., a "Last saved at HH:MM" timestamp) so the user can verify without diving into the AppData filesystem.

Error Messages/Logs

No surfaced error. The Settings UI gives no indication that the save failed; the bug only manifests when a new session is started and observed to have stale instructions.

If application logs are kept, the relevant directory is:
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\logs\
(Contains vm-info.json, supported-features-info.json, gpu-info.json, mcp-info.json — no obvious settings/save log file.)

Steps to Reproduce

Reproduction not yet attempted by reporter — based on observed staleness of all 110 existing per-session caches

  1. Open Cowork desktop on Windows (Microsoft Store / MSIX install).
  2. Open Settings → Profile / Personal preferences (the screen where global user instructions can be edited).
  3. Edit the global instructions to a new distinctive string. For example, add this line at the top:

MARKER-<today's date>-A

  1. Save / apply through the UI. Wait for whatever save indication the UI provides.
  2. Close Cowork completely (quit from the system tray icon — don't just close the window).
  3. Reopen Cowork. Start a new Cowork session in any workspace.
  4. Inspect the new session's per-session CLAUDE.md at:

%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\local-agent-mode-sessions\<session-id>\<workspace-id>\local_<workspace>\.claude\CLAUDE.md

Expected: file contains the new text including MARKER-<date>-A.
Actual: file contains the old (pre-edit) text. MARKER-<date>-A is not present.

Verification command (PowerShell) to confirm the marker is absent everywhere on disk except per-session caches:

$root = "$env:LOCALAPPDATA\Packages\Claude_pzs8sxrjxfjjc\LocalCache"
Get-ChildItem $root -Recurse -File -ErrorAction SilentlyContinue |
Where-Object {
$_.FullName -notmatch 'local-agent-mode-sessions' -and
$_.Extension -in '.json','.db','.sqlite','.sqlite3','.txt','.md','.cfg','.conf','.ini','.toml','.yaml','.yml','.dat','.log'
} |
Where-Object {
try { Select-String -Path $_.FullName -Pattern 'MARKER-<date>-A' -Quiet -ErrorAction SilentlyContinue }
catch { $false }
}

Expected: this should return at least one match (the canonical file containing the new text).
Actual: returns zero matches, indicating the new text isn't anywhere on disk and either wasn't sent to the server or the server returned the old value on session spawn.

Claude Model

None

Is this a regression?

No, this never worked

Last Working Version

_No response_

Claude Code Version

Cowork desktop app only — Claude Code CLI not installed. Cowork install package family: Claude_pzs8sxrjxfjjc. App version visible under Settings → About.

Platform

Other

Operating System

Windows

Terminal/Shell

Other

Additional Information

Diagnostic context from on-disk investigation 2026-06-11:

  • 110 per-session CLAUDE.md cache files exist under the package's LocalCache. All contain stale instruction text. 88 of the 110 are older than 7 days. These accumulate unboundedly — there's no automatic cleanup. A periodic prune of session caches older than N days would be useful UX.
  • No canonical CLAUDE.md exists at expected root locations:

%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\CLAUDE.md (does not exist)
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\.claude\CLAUDE.md (does not exist)

  • The config.json at the Claude root contains only app state (locale, theme, OAuth token cache, sandbox flags, migration markers) — no user-instructions field.
  • Full-text search across LocalCache (excluding session caches) for a distinctive phrase from the user's CURRENT intended instructions returns zero matches. Test command in the Steps to Reproduce field above.

Suggested investigation paths:

  1. Verify the Settings UI Save handler actually posts to the server and gets a 2xx response. Add client-side telemetry if not already present.
  2. Verify the session-spawn path reads the freshest server-side value rather than a cached one. If a cache is in play, surface a cache-invalidation event on Save.
  3. Add a "Last saved at" timestamp to the Settings UI for the global instructions field so users can confirm the edit landed.
  4. Optional: add a local mirror file at LocalCache\Roaming\Claude\.claude\CLAUDE.md that the app writes on every successful Save. This would make the failure mode externally diagnosable and give users a manual override target.

User-side workaround currently in use: project-level CLAUDE.md files at workspace roots (e.g., D:\<project>\CLAUDE.md) explicitly override the global file on conflict and are read first on session start. This is documented behavior and works correctly. Does not fix the underlying global-edit issue but does keep the user productive for structured-project work. Casual / non-project usage is still affected.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗