[BUG] Session resume pollutes conversation files with duplicate system messages, hiding conversation history

Open 💬 3 comments Opened Jun 17, 2026 by zzf1127

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

  1. Start a conversation with claude
  2. Have a conversation with multiple messages
  3. Exit the session
  4. Resume with claude --continue
  5. Repeat steps 2-4 multiple times
  6. 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

  1. Deduplicate system messages - Only keep the latest mode and permission-mode message when resuming a session
  2. Or compress system messages - Store only the current state rather than appending duplicate state changes
  3. 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:

  1. Read each JSONL file
  2. Keep only the first occurrence of each unique mode/permission-mode value
  3. 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

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗