[FEATURE] Desktop Recents to enumerate ~/.claude/projects/ directly.
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
Problem
The Claude Desktop app's "Recents" panel (Code tab) only lists sessions stored in %APPDATA%\Claude\claude-code-sessions\, which is populated exclusively by sessions created through the desktop app itself. Sessions stored on disk at ~/.claude/projects/<encoded-cwd>/*.jsonl — the canonical session location used by the standalone CLI — are never enumerated or imported. As a result, users who installed the desktop app after using the CLI see an empty Recents list despite having a full history of valid sessions on disk.
Reproduction (Windows 11, desktop app v2.1.121)
Use the standalone CLI (@anthropic-ai/claude-code) for several weeks. Sessions accumulate in C:\Users\<user>\.claude\projects\<encoded-cwd>\*.jsonl.
Install the Claude Desktop app for the first time.
Open the Code tab and select the same working directory used by the CLI.
Expected: Recents lists prior sessions (the data is on disk and readable).
Actual: Recents is empty. The Stats panel correctly shows the historical session/message counts because it does read ~/.claude/projects/, which makes the inconsistency more confusing.
Evidence on my machine
~/.claude/projects/G--workspace/ contains 35 valid JSONL session files (~200 MB).
Stats panel shows 34 sessions, 19,684 messages, 30M tokens.
%APPDATA%\Claude\claude-code-sessions\ contains exactly one UUID, created at desktop-app first-run timestamp.
claude --resume (standalone CLI) lists all 35 sessions correctly from the same working directory.
Impact
Proposed Solution
Proposed Solution
Make ~/.claude/projects/ the single source of truth for the Recents list. The desktop app should enumerate it directly instead of maintaining a parallel store.
Specifics
On directory selection (when the user picks a working directory in the Code tab), the app should:
Compute the encoded path (G:\workspace > G--workspace).
Read ~/.claude/projects/<encoded-cwd>/*.jsonl.
Parse each file's first event for the timestamp and the first user message for a preview/title.
Render the list, sorted by most-recent activity, in Recents.
On new session creation, write the session JSONL to ~/.claude/projects/<encoded-cwd>/<uuid>.jsonl directly — same location and format the CLI uses. Drop the separate %APPDATA%\Claude\claude-code-sessions\ store entirely (or keep it only as a UI-state cache like "last opened tabs", not as the session list).
On session resume, read the JSONL from ~/.claude/projects/ rather than from the parallel store. This makes desktop and CLI fully interchangeable: a session started in either surface can be resumed in the other.
Why this approach over a one-time import
Permanently fixes the divergence . There is no "two stores that need to stay in sync" problem to maintain.
Sessions started via the CLI after desktop install also appear in Recents automatically (one-time import would miss those).
The Stats panel already reads ~/.claude/projects/ correctly, so the data path is proven and trusted.
Eliminates an entire class of future bugs (index out of sync, missing imports, encoding mismatches between the two stores).
Migration
No migration needed for users. On the next desktop launch after the fix ships, Recents populates from existing JSONL files automatically. The orphaned %APPDATA%\Claude\claude-code-sessions\ folder can be cleaned up by the app on first run post-update, or simply ignored.
Backward compatibility
The CLI already uses ~/.claude/projects/ exclusively. Aligning the desktop app on the same store is the compatibility story — it removes the only point of divergence.
Alternative Solutions
_No response_
Priority
Critical - Blocking my work
Feature Category
Configuration and settings
Use Case Example
Users perceive the desktop app as "losing" their history, even though no data is lost.
Forces users to keep the CLI installed alongside the desktop app to access prior conversations.
Stats panel and Recents disagree on what exists, eroding trust in the UI.
On first run / on directory change, enumerate ~/.claude/projects/<encoded-cwd>/*.jsonl and surface those sessions in Recents directly. Make ~/.claude/projects/ the single source of truth (preferred — matches the CLI).
Or, on first run, perform a one-time import that registers existing JSONL sessions into claude-code-sessions\.
At minimum, show an explanatory empty-state ("N sessions exist on disk but were not created in this app — open in CLI with claude --resume") so the gap is discoverable.
Additional Context
_No response_
This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗