Summary
Since ~v2.1.31 (Feb 4, 2026), users cannot access their session history. /resume shows only ~5-10 recent sessions despite hundreds existing on disk. claude -c fails to find previous sessions. This affects all platforms (macOS, Windows, Linux) and all versions from 2.1.31 through 2.1.42+.
Session data is NOT lost — .jsonl files are intact on disk — but there is no working UI to access them.
Three Distinct Root Causes
Community reverse-engineering of cli.js (v2.1.39) has identified three separate bugs causing this:
Bug 1: sessions-index.json stopped being written (~Feb 4, 00:33 UTC)
New sessions are no longer added to the index. Across multiple reporters:
- 3,080+
.jsonl files on disk, only 740 indexed (24%), 0% indexed after Feb 4
~/.claude/usage-data/ also stopped updating on the same date
- Summary generation degraded earlier (late January) — all new entries have
"summary": ""
- Affects every project directory, not project-specific
Timeline correlation: This coincides with Anthropic's token usage reduction rollout (ref #16157). Session summary generation costs 100K+ input tokens per session — disabling it would reduce platform-wide token consumption.
Bug 2: /resume picker hardcoded to 10-session initial batch
Source analysis of minified cli.js (v2.1.39) by @tracymelody:
sessions-index.json is never read — the string doesn't appear in the source
/resume uses readdirSync to scan .jsonl files, sorts by mtime
- Initial batch is hardcoded to 10 (
K=10 parameter)
- Load-more trigger depends on terminal height:
page_size = Math.floor((terminal_rows - ~10) / 3)
- With a 24-row terminal,
page_size=4, the load-more trigger doesn't fire (Ink SelectInput wraps at list boundary instead of scrolling)
C7z filter discards "lite" sessions (no firstPrompt AND no customTitle), further reducing the visible list
One-line fix (from @tracymelody on #24435):
sed -i 's/async function _c1(A,q,K=10)/async function _c1(A,q,K=500)/' cli.js
Bug 3: Case-sensitive worktree path comparison (Windows)
From @agatho on #24729:
- Multi-worktree code path does
dir.name === s (case-sensitive)
git worktree list returns C:/... but project directory stores c--...
- Comparison fails silently, sessions not found
- Only triggers with >1 git worktree
Steps to Reproduce
# Check how many sessions exist on disk vs. what /resume shows
find ~/.claude/projects -name "*.jsonl" | wc -l
# Compare to /resume picker count (typically shows 5-10)
claude --resume
# Check index staleness
for idx in ~/.claude/projects/*/sessions-index.json; do
echo "$idx: $(stat -f '%Sm' "$idx" 2>/dev/null || stat -c '%y' "$idx" 2>/dev/null)"
done
# All will show dates on or before Feb 4, 2026
Expected Behavior
/resume and claude -c should list ALL previous sessions, not just the 5-10 most recent.
Workarounds
claude --resume <keyword> — bypasses the picker entirely, searches all .jsonl files on disk
claude --resume <session-id> — direct resume by UUID
claude install 2.1.29 — last working version
- Community repair scripts: bosmadev/claude, tirufege/gist
Environment
- Versions affected: 2.1.31 through 2.1.42 (all current)
- Last working version: 2.1.29
- Platforms: macOS, Windows 11, Linux (Ubuntu), WSL2
- Terminals: Ghostty, iTerm2, Terminal.app, Windows Terminal, VS Code integrated
Consolidates These Issues
This issue consolidates 12+ reports of the same bug cluster:
| Issue |
Title |
👍 |
| #22878 |
/resume not listing sessions in v2.1.30 |
13 |
| #23614 |
sessions-index.json stops being updated after v2.1.31 |
7 |
| #25032 |
sessions-index.json not updated, /resume shows stale sessions |
3 |
| #24435 |
Resume picker only shows ~8 most recent sessions |
2 |
| #22462 |
sessions-index.json not updated, claude -c fails |
1 |
| #23421 |
sessions-index.json stops updating (Linux/WSL2) |
1 |
| #22205 |
Sessions not added to sessions-index.json |
1 |
| #25729 |
/resume only shows ~5-10 most recent sessions |
0 |
| #25552 |
/resume missing sessions: index out of sync |
0 |
| #25685 |
Session resume picker shows no sessions |
0 |
| #24729 |
sessions-index.json not updated (Windows worktree bug) |
1 |
| #25130 |
[FEATURE] Allow /resume to display full session history |
0 |
Combined engagement: 29+ thumbs-up, 50+ comments, 12+ independent reports across 3 platforms.
Please close the above as duplicates pointing here if this is adopted as the canonical tracking issue.
Summary
Since ~v2.1.31 (Feb 4, 2026), users cannot access their session history.
/resumeshows only ~5-10 recent sessions despite hundreds existing on disk.claude -cfails to find previous sessions. This affects all platforms (macOS, Windows, Linux) and all versions from 2.1.31 through 2.1.42+.Session data is NOT lost —
.jsonlfiles are intact on disk — but there is no working UI to access them.Three Distinct Root Causes
Community reverse-engineering of
cli.js(v2.1.39) has identified three separate bugs causing this:Bug 1:
sessions-index.jsonstopped being written (~Feb 4, 00:33 UTC)New sessions are no longer added to the index. Across multiple reporters:
.jsonlfiles on disk, only 740 indexed (24%), 0% indexed after Feb 4~/.claude/usage-data/also stopped updating on the same date"summary": ""Timeline correlation: This coincides with Anthropic's token usage reduction rollout (ref #16157). Session summary generation costs 100K+ input tokens per session — disabling it would reduce platform-wide token consumption.
Bug 2:
/resumepicker hardcoded to 10-session initial batchSource analysis of minified
cli.js(v2.1.39) by @tracymelody:sessions-index.jsonis never read — the string doesn't appear in the source/resumeusesreaddirSyncto scan.jsonlfiles, sorts by mtimeK=10parameter)page_size = Math.floor((terminal_rows - ~10) / 3)page_size=4, the load-more trigger doesn't fire (Ink SelectInput wraps at list boundary instead of scrolling)C7zfilter discards "lite" sessions (nofirstPromptAND nocustomTitle), further reducing the visible listOne-line fix (from @tracymelody on #24435):
sed -i 's/async function _c1(A,q,K=10)/async function _c1(A,q,K=500)/' cli.jsBug 3: Case-sensitive worktree path comparison (Windows)
From @agatho on #24729:
dir.name === s(case-sensitive)git worktree listreturnsC:/...but project directory storesc--...Steps to Reproduce
Expected Behavior
/resumeandclaude -cshould list ALL previous sessions, not just the 5-10 most recent.Workarounds
claude --resume <keyword>— bypasses the picker entirely, searches all.jsonlfiles on diskclaude --resume <session-id>— direct resume by UUIDclaude install 2.1.29— last working versionEnvironment
Consolidates These Issues
This issue consolidates 12+ reports of the same bug cluster:
Combined engagement: 29+ thumbs-up, 50+ comments, 12+ independent reports across 3 platforms.
Please close the above as duplicates pointing here if this is adopted as the canonical tracking issue.