You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[BUG] No working mechanism to review previous context after compaction, plan-mode clear, or branch navigation — data preserved but UI inaccessible #27242
Claude Code has no working way to review conversation history that has been cleared or compacted. The full data is always preserved in transcript.jsonl, but the TUI provides zero functional paths to access it. This affects three distinct scenarios:
Post-compaction: Ctrl+O enters "transcript mode" (mislabeled as "history"), which shows only post-compaction messages. Ctrl+E toggles the status bar text but reveals no hidden content. Pre-compaction conversation is inaccessible.
Post-plan-mode "clear context": Creates a new session with the plan injected as the first message. The exploration conversation that informed the plan is in a separate JSONL with no UI link back.
Branch navigation: Right-arrow in the /resume picker (which used to allow browsing conversation branches) does nothing. Branch data is intact in JSONL with correct parentUuid linkage.
This is blocking. Users cannot audit Claude's reasoning after compaction, cannot review the exploration that led to a plan, and cannot navigate between conversation branches. The only workaround is manually parsing raw JSONL files, which is not a reasonable expectation for a TUI tool.
These bugs also compound with unfixed session discovery bugs in #26123 (closed prematurely, 49 👍) — index staleness and /rename names not showing in picker. The resume picker is the single gateway to all historical context and it's degraded at every level: can't find sessions, can't identify them, can't navigate branches within them, can't view pre-compaction history.
Environment
Version: 2.1.47 through 2.1.50 (confirmed on both; no fix in any release)
OS: macOS (Darwin 24.5.0)
Terminal: Ghostty (also reproduced in Terminal.app)
Platform: CLI (not VS Code extension)
Bug 1: Post-compaction — Ctrl+O and Ctrl+E do not show history
Steps to reproduce
Run a long session until automatic context compaction triggers
Observe the banner: ✻ Conversation compacted (ctrl+o for history)
Press Ctrl+O — the TUI enters "Showing detailed transcript" mode
Observe: only post-compaction messages are shown (compact summary + subsequent work)
Press Ctrl+E — the status bar toggles between "ctrl+e to show all" / "ctrl+e to collapse"
Observe: Ctrl+E toggles visibility of "Worked for 1m 40s" timing badges and task completion lines, but does not expand or reveal any pre-compaction content
What I see
✻ Conversation compacted (ctrl+o for history)
. fff
⏺ Compact summary
⎿ This session is being continued from a previous conversation...
...
If you need specific details from before compaction, read the full
transcript at: /path/to/session-uuid.jsonl
⏺ Task "Run tests" completed in background
⏺ Task "Verify GREEN state" completed in background
...
──────────────────────────────────────────────────
Showing detailed transcript · ctrl+o to toggle · ctrl+e to show all
The banner says "ctrl+o for history" but Ctrl+O enters transcript mode, not a history viewer. The "ctrl+e to show all" text suggests expandable content, but pressing it only toggles timing badges.
What I expect
Ctrl+O (or some keybinding) should display the full pre-compaction conversation. The data exists in transcript.jsonl — there is no technical barrier to rendering it.
Root cause (from prior analysis)
In cli.js, transcript mode passes hidePastThinking: !0 (hardcoded true), hiding all thinking blocks except the last one. Source analysis by @carrotRakko on #16965. Community patch exists: aleks-apostle/claude-code-patches#9
But even beyond thinking blocks, the fundamental issue is that transcript mode does not load pre-compaction messages at all.
Bug 2: Post-plan-mode — "Clear context and accept edits" severs session history
Steps to reproduce
Start a session and have Claude enter plan mode
Claude explores the codebase, asks design questions, iterates on a plan
Accept the plan with "clear context and accept edits"
Observe: a new session is created with the plan text as the first user message
The pre-plan exploration conversation is in the old session's JSONL
There is no UI link between the two sessions
What I see
The new session starts clean with the plan pasted as a user message, including a note:
If you need specific details from before exiting plan mode (like exact code
snippets, error messages, or content you generated), read the full transcript
at: /path/to/old-session-uuid.jsonl
The pre-plan conversation (which may contain important architectural decisions, rejected approaches, and codebase exploration results) is only accessible by manually reading a raw JSONL file.
What I expect
At minimum: the /resume picker should show the relationship between the plan session and its predecessor. Ideally: the pre-plan conversation should be browsable from within the new session.
Evidence
Verified via JSONL analysis: the "clear context" operation creates a new session file. The old session's JSONL preserves the full exploration, but the new session's first message only contains the final plan text — no link to the old session UUID is stored in the JSONL metadata.
Bug 3: Branch navigation — right-arrow in /resume picker does nothing
Steps to reproduce
Create a session with conversation branches (rewind to earlier points, take different paths):
M.1 → M.2 → M.2.A → M.2.A2 (branch A)
M.2.B → M.2.B2 (branch B)
M.2.C → M.2.C2 (branch C)
M.2.D → M.2.D2 (branch D, current)
Exit the session
Run /resume
Select the session in the picker
Press right-arrow on the session line
Observe: nothing happens — no branch picker, no visual change, no error
What I see
The /resume picker shows the session but right-arrow is completely unresponsive. Only the current branch (M.2.D path) is accessible.
What I expect
Right-arrow should expand the session to show branch points, allowing navigation between M.2.A, M.2.B, M.2.C, and M.2.D paths. This feature previously worked (estimated ~v2.1.31 timeframe, early February 2026).
Data is intact
JSONL analysis confirms the branch tree is perfectly preserved:
Node 449b88fa (M.2 response) has 4 children:
→ aad46fec: "now branching to M.2.A" (isSidechain: false)
→ 2501f512: "now branching to M.2.B" (isSidechain: false)
→ 3a73bb07: "now branching to M.2.C" (isSidechain: false)
→ 64f1cfaa: "now branching to M.2.D" (isSidechain: false)
All branches have correct parentUuid linkage and multi-child nodes. The isSidechain flag is never set to true on any branch (confirming #24471's analysis). This is a UI bug, not a data bug.
Consolidates / Related Issues
Direct (same root cause — data preserved, UI can't access it)
User questions lost from transcript during background subagents
0 👍
Open
Combined engagement: 140+ thumbs-up, 100+ comments across 20+ issues, multi-platform confirmation (macOS, Windows, Linux). Zero Anthropic team response on any of them as of v2.1.52.
All direct issues share a single root cause: Claude Code preserves conversation data in JSONL but provides no working UI to access it after the active context window moves forward.
Workarounds
Parse raw JSONL: jq queries against transcript.jsonl — functional but defeats the purpose of a TUI
Pre-compaction hooks: Community script by @EMarkODell auto-saves before each compaction
Cozempic: Open-source context loss mitigation tool
Avoid plan-mode "clear context": Manually copy pre-plan notes before accepting
Proposed Fix
A proper fix would address all three scenarios with a single feature: a scrollable history viewer that reads from transcript.jsonl, navigable via Ctrl+O or a new keybinding. This viewer should:
Load and render the full transcript including pre-compaction messages
Thanks for reporting all this, appreciate the feedback. I'm going to raise these to the team.
Plan-mode context loss. When accepting a plan with "clear context," the exploration session that informed the plan becomes a separate, unlinkable JSONL. The architectural decisions that led to the plan are orphaned.
Minor correction here: "Clear context" is actually more like "implement plan in new conversation"—you can /resume to go back to the session in which you were iterating on the plan. I think the action naming could be clearer (should probably say "Implement plan in new conversation" or similar to avoid this frequent source of confusion).
Summary
Claude Code has no working way to review conversation history that has been cleared or compacted. The full data is always preserved in
transcript.jsonl, but the TUI provides zero functional paths to access it. This affects three distinct scenarios:/resumepicker (which used to allow browsing conversation branches) does nothing. Branch data is intact in JSONL with correctparentUuidlinkage.This is blocking. Users cannot audit Claude's reasoning after compaction, cannot review the exploration that led to a plan, and cannot navigate between conversation branches. The only workaround is manually parsing raw JSONL files, which is not a reasonable expectation for a TUI tool.
These bugs also compound with unfixed session discovery bugs in #26123 (closed prematurely, 49 👍) — index staleness and
/renamenames not showing in picker. The resume picker is the single gateway to all historical context and it's degraded at every level: can't find sessions, can't identify them, can't navigate branches within them, can't view pre-compaction history.Environment
Bug 1: Post-compaction — Ctrl+O and Ctrl+E do not show history
Steps to reproduce
✻ Conversation compacted (ctrl+o for history)What I see
The banner says "ctrl+o for history" but Ctrl+O enters transcript mode, not a history viewer. The "ctrl+e to show all" text suggests expandable content, but pressing it only toggles timing badges.
What I expect
Ctrl+O (or some keybinding) should display the full pre-compaction conversation. The data exists in
transcript.jsonl— there is no technical barrier to rendering it.Root cause (from prior analysis)
In
cli.js, transcript mode passeshidePastThinking: !0(hardcodedtrue), hiding all thinking blocks except the last one. Source analysis by @carrotRakko on #16965. Community patch exists: aleks-apostle/claude-code-patches#9But even beyond thinking blocks, the fundamental issue is that transcript mode does not load pre-compaction messages at all.
Bug 2: Post-plan-mode — "Clear context and accept edits" severs session history
Steps to reproduce
What I see
The new session starts clean with the plan pasted as a user message, including a note:
The pre-plan conversation (which may contain important architectural decisions, rejected approaches, and codebase exploration results) is only accessible by manually reading a raw JSONL file.
What I expect
At minimum: the
/resumepicker should show the relationship between the plan session and its predecessor. Ideally: the pre-plan conversation should be browsable from within the new session.Evidence
Verified via JSONL analysis: the "clear context" operation creates a new session file. The old session's JSONL preserves the full exploration, but the new session's first message only contains the final plan text — no link to the old session UUID is stored in the JSONL metadata.
Bug 3: Branch navigation — right-arrow in
/resumepicker does nothingSteps to reproduce
/resumeWhat I see
The
/resumepicker shows the session but right-arrow is completely unresponsive. Only the current branch (M.2.D path) is accessible.What I expect
Right-arrow should expand the session to show branch points, allowing navigation between M.2.A, M.2.B, M.2.C, and M.2.D paths. This feature previously worked (estimated ~v2.1.31 timeframe, early February 2026).
Data is intact
JSONL analysis confirms the branch tree is perfectly preserved:
All branches have correct
parentUuidlinkage and multi-child nodes. TheisSidechainflag is never set totrueon any branch (confirming #24471's analysis). This is a UI bug, not a data bug.Consolidates / Related Issues
Direct (same root cause — data preserved, UI can't access it)
Compounding (session discovery/identification — you can't even get to the history)
Compaction side-effects (context corruption when compaction occurs)
Related proposals
Combined engagement: 140+ thumbs-up, 100+ comments across 20+ issues, multi-platform confirmation (macOS, Windows, Linux). Zero Anthropic team response on any of them as of v2.1.52.
All direct issues share a single root cause: Claude Code preserves conversation data in JSONL but provides no working UI to access it after the active context window moves forward.
Workarounds
jqqueries againsttranscript.jsonl— functional but defeats the purpose of a TUIProposed Fix
A proper fix would address all three scenarios with a single feature: a scrollable history viewer that reads from
transcript.jsonl, navigable via Ctrl+O or a new keybinding. This viewer should:hidePastThinking: !0hardcoding)The data layer is already correct — this is purely a UI/rendering gap.
Thanks for reporting all this, appreciate the feedback. I'm going to raise these to the team.
Minor correction here: "Clear context" is actually more like "implement plan in new conversation"—you can /resume to go back to the session in which you were iterating on the plan. I think the action naming could be clearer (should probably say "Implement plan in new conversation" or similar to avoid this frequent source of confusion).