[BUG] Session resume pollutes conversation files with duplicate system messages, hiding conversation history
Bug Description
When using claude --continue or claude --resume to restore a previous conversation, the conversation content appears to be missing/invisible.
After investigation, I found that the conversation JSONL files are being polluted with excessive duplicate mode and permission-mode system messages every time a session is resumed.
Environment
- OS: Windows 11 Home China (10.0.26200)
- Claude Code Version: 2.1.173
- Shell: PowerShell 5.1
Steps to Reproduce
- Start a conversation with
claude - Have a conversation with multiple messages
- Exit the session
- Resume with
claude --continue - Repeat steps 2-4 multiple times
- Notice that previous conversation content becomes invisible
Root Cause
Each time claude --continue is used, new mode and permission-mode system messages are appended to the conversation JSONL file without deduplication.
Example from my conversation file (038b0285-e2f9-4e6f-9b36-12b8bca4af4f.jsonl):
| Metric | Before Cleanup | After Cleanup |
|--------|----------------|---------------|
| Total lines | 147 | 71 |
| System messages | 78 (39 mode + 39 permission-mode) | 2 (1 mode + 1 permission-mode) |
| Actual messages | 13 (6 user + 7 assistant) | 13 |
| Ratio (system:actual) | 6:1 | 0.15:1 |
Impact
- Conversation files grow unnecessarily large
- When loading conversation, system messages consume the context window
- Actual conversation content is pushed out and becomes invisible
- Users think their conversation history has been lost
Suggested Fix
- Deduplicate system messages - Only keep the latest
modeandpermission-modemessage when resuming a session - Or compress system messages - Store only the current state rather than appending duplicate state changes
- Or add cleanup logic - When loading a conversation, automatically remove duplicate system messages
Workaround
I wrote a PowerShell script to clean up the duplicate messages:
- Read each JSONL file
- Keep only the first occurrence of each unique
mode/permission-modevalue - Write the cleaned content back
This reduced my conversation files by ~50% and restored visibility of conversation history.
Additional Context
- 63 conversation files were affected in my
~/.claude/projects/directory - Total of 1287 duplicate system messages removed
- The issue is more severe for shorter conversations that have been resumed many times
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗