[BUG] /resume is broken — session history inaccessible since v2.1.31 (3 root causes identified)
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+
.jsonlfiles 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.jsonis never read — the string doesn't appear in the source/resumeusesreaddirSyncto scan.jsonlfiles, sorts by mtime- Initial batch is hardcoded to 10 (
K=10parameter) - 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) C7zfilter discards "lite" sessions (nofirstPromptAND nocustomTitle), 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 listreturnsC:/...but project directory storesc--...- 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.jsonlfiles on diskclaude --resume <session-id>— direct resume by UUIDclaude 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.
17 Comments
Related: #26125 (Ctrl+O/Ctrl+E broken — no way to view pre-compaction history)
These two issues compound: a user who can't find their session (#26123) AND can't view pre-compaction history within it (#26125) has no path to recover past work.
They may also share a root cause — both involve broken summary/metadata generation that correlates with the ~Feb 4 token-reduction changes. Bug 1 here (session summaries stopped being written, all new entries have
"summary": "") and the poor-quality compaction summaries in #26125 may trace back to the same upstream change.Great investigation on the 3 root causes. We've been dealing with resume issues too — built cozempic which has its own session detection that doesn't rely on sessions-index.json. It finds sessions by scanning the project directory directly and matching by CWD slug, process tree, or most-recent modification time. Also has a
cozempic listcommand that shows all sessions regardless of the index state.Won't fix the /resume picker itself, but can help you find and identify sessions while the index is broken. Let us know if it helps.
Can confirm, sessions are completely broken,
/rename,/fork.. nothing works properly, sessions disappear, strange nesting...2.1.44 (Claude Code)MacOS 15.5Please spread the word! we need 50 thumbs up on this issue in order to have a hope of getting it fixed. Issues below that threshold never get prioritized by anthropic team. Post on reddit, post on discord, tell your friends, etc! This issue is driving me crazy and this breakage -- which has been the case for weeks now -- it really doesnt have to be this way!
Confirming on v2.1.41, macOS (Apple Silicon). In-session
/resumeshows only 5 sessions;claude --resumefrom CLI shows 255. 314 valid.jsonlfiles on disk (211 on main branch),sessions-index.jsonstale since Feb 3.Also experiencing a likely related regression: resuming a session in a second terminal now writes into the same session stream instead of creating an independent conversation. Both terminals end up sharing the same history (becomes visible if you fork again, or resume fresh). This used to work as two separate conversations.
I could even describe more of what feels now very "buggy" around session history and resuming — and a true hit on my workflows unfortunately — but I guess it's all related, so just waiting it out.
Adding a specific reproduction path: plan mode implementation sessions.
When you approve a plan in plan mode and select "Yes, clear context and auto-accept edits" (the default), Claude creates a new session to implement the plan. This session:
.jsonlfile (367 lines in my case)userType: "external"and a validslugsessions-index.json--resumepickerThis is particularly painful because plan mode implementation sessions often contain extensive file modifications. If interrupted, users cannot easily find or resume them.
Stats from my project directory: 156
.jsonlfiles, only 63 indexed (40% — consistent with your findings).Closed my duplicate #26297 in favor of this issue.
Facing the same issue. When I create worktrees, the sessions made within a tree branch is not visible on /resume
Manual workaround: i created a bash script (temporarily) to find conversations and resume via
/resume <hash-id>. I trigger this within the worktree folder that I am working on to resume.Number of replies does not count towards human intervention?
Per claude:
does number of replies not count toward human intervention??
⏺ Yes they do! The oncall triage threshold is 50+ combined comments AND reactions, not just thumbs-up.
Thank you for pointing that out.
Sorry, how many?
This should be reopened. The fix in v2.1.47 addressed Bugs 2 and 3 (picker limit 10->50, Windows case sensitivity), but Bug 1 -
sessions-index.jsonnot being updated for new sessions - is still unfixed as of v2.1.50.On my machine: 68
.jsonlfiles on disk, only 25 were indexed. The 43 missing sessions span from early February onward - exactly matching the timeline described in the original report. I had to rebuild the index manually with a script.The picker scanning
.jsonlfiles directly (up to 50) is a good workaround, but the underlying index staleness is still there and will cause problems for users with more than 50 sessions per project.Related open issue tracking the index staleness specifically: #25032
Still Broken — Custom Names Don't Show in Picker (Feb 23, 2026)
Bugs 2 and 3 may be fixed, but Bug 1 (index staleness) is NOT, and there's a 4th bug that was never addressed:
Custom session names (via /rename) display in terminal tab titles but NOT in the Ctrl+E/Ctrl+O resume picker. The picker shows auto-generated summaries instead.
Right now I have 6 open sessions with custom names (
[bug manager],[1-min models],[shock features], etc.). Every single tab title shows the correct name. The resume picker shows none of them. I have to guess which session I'm opening every time.This is day 5 of reporting this. Combined with the Bun crash epidemic on Windows (#21576 — 17 reproductions, 2 full computer lockups from orphaned processes), session management is completely non-functional:
This issue should be reopened. The partial fix in v2.1.47 didn't address the most user-facing problem.
Version: Claude Code latest, Bun v1.3.10, Windows 11
v2.1.50: Rename Bug Still Present
The v2.1.47 fixes addressed Bugs 2 and 3, but custom session names via
/renamestill don't appear in the resume picker. Tab titles show the correct names. Picker shows auto-generated summaries.6 concurrent sessions affected on v2.1.50. This should be reopened — the partial fix did not address the most user-visible symptom.
Version: Claude Code v2.1.50, Bun v1.3.10, Windows 11
@ThatDragonOverThere You're right that this should be reopened — the v2.1.47 fix only addressed Bugs 2 and 3 while Bug 1 (index staleness) and your Bug 4 (
/renamenames invisible in picker) remain broken on v2.1.50. Unfortunately as the original author I can't reopen it — the repo restricts that to maintainers.In lieu of reopening, I've filed a consolidated issue at #27242 that captures the full scope of session history inaccessibility. Your report compounds directly with what's tracked there:
| Layer | Problem | Where |
|-------|---------|-------|
| Find sessions | Index staleness — 68 files, 25 indexed | This issue, Bug 1 |
| Identify sessions |
/renamenames missing from picker | This issue, Bug 4 || Navigate branches | Right-arrow does nothing in picker | #27242 Bug 3 |
| View history | Pre-compaction content inaccessible | #27242 Bug 1 |
| Link plan sessions | No connection to predecessor session | #27242 Bug 2 |
The resume picker is the single gateway to all historical context and it's degraded at every level. If you're affected, please direct engagement (👍 + comments) to #27242 — that's where we're consolidating to hit the triage threshold.
+1 — Confirming on macOS, Claude Code v2.1.33
My
sessions-index.jsonwas created today for the first time (birth time = Feb 26 11:08). Before this, the resume picker showed all my sessions. Now it only shows ~10.Stats:
.jsonlsession files on diskWorkaround I used: Rebuilt the index manually with a Python script that scans all
.jsonlfiles and re-indexes them. Sessions are all still intact on disk — just not in the index.Version history:
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.