[BUG] claude --continue` Broken by "Warmup" Message Injection

Resolved 💬 6 comments Opened Oct 26, 2025 by y3i12 Closed Dec 10, 2025

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Calling claude --continue makes the cli to boot up with the synthetic user message "> Warmup", overriding --continue. This causes the model to run a quick bootsrap and say something in the lines of "yo man, how can I help on this beautiful day?" instead of picking up from previous session logs. The occurrence is intermittent and sporadic.

Version | Sessions with Warmup | Total Sessions | Percentage
--------|---------------------|----------------|----------
2.0.15 | 0 | 19 | 0.0% ← Bug not present
2.0.17 | 6 | 19 | 31.6%
2.0.19 | 9 | 15 | 60.0%
2.0.20 | 7 | 12 | 58.3%
2.0.21 | 14 | 24 | 58.3%
2.0.22 | 7 | 26 | 26.9%
2.0.23 | 1 | 2 | 50.0%
2.0.24 | 29 | 58 | 50.0%
2.0.25 | 30 | 58 | 51.7%
2.0.26 | 15 | 23 | 65.2% ← Highest impact
2.0.27 | 16 | 29 | 55.2% ← Latest

Mind that in each session multiple claude --continue were invoked. I was unable to detect when a session was successfully continued... it just continued.

claude code did the investigation with some nudging. The remaining fields of the issue report were synthesized by Sonnet 4.5 and properly reviewed.

Actual Behavior (by claude)

Running claude --continue:

  1. Generates a conversation summary (e.g., "Claude Code Ready: Codebase Exploration Tool Warmup")
  2. Injects a synthetic "Warmup" message with "parentUuid": null
  3. Starts a completely new session instead of continuing
  4. All previous conversation context is lost

Scale: Searching the JSONL logs shows this pattern in 190+ occurrences across 100+ session files:

$ grep -l '"content":"Warmup"' ~/.claude/projects/-home-y3i12-project/*.jsonl | wc -l
100+

$ grep -c '"content":"Warmup"' ~/.claude/projects/-home-y3i12-project/*.jsonl
190+

User Impact

  • Breaks iterative workflows: Users cannot build on previous analysis
  • Forces context rebuilding: Every session starts from scratch
  • Wastes tokens: Users must re-explain context each time
  • Confusing UX: "Warmup" displays as if user typed it

Root Cause Analysis

The "Warmup" injection appears to be an optimization attempt:

  1. Use Haiku for cheap "connection handshake" (~550 tokens)
  2. Then switch to Sonnet for real work

However, the implementation breaks continuation by:

  • Setting parentUuid: null (orphans the message)
  • Starting a new conversation chain
  • Discarding previous session context

Suggested Fix Directions

  1. Link to previous session: Set parentUuid to the last message UUID from the previous session
  2. Remove synthetic injection: Skip "Warmup" entirely and directly resume with actual context
  3. Add continuation marker: Include metadata indicating this is a continuation, not a new session
  4. Preserve conversation graph: Ensure the message chain remains connected across --continue invocations

Additional Context

The "Warmup" message is consistently followed by Haiku responding with a generic "I'm ready to help" message (also "isSidechain": true), suggesting this was designed as a cost-optimization handshake. However, this breaks the core continuation functionality.

What Should Happen?

Expected Behavior

Running claude --continue should:

  1. Resume the previous conversation with full context
  2. Maintain conversation history
  3. Allow building on previous work

Error Messages/Logs

## Evidence from JSONL Logs

The "Warmup" message injection breaks the conversation chain:


{
  "type": "summary",
  "summary": "Claude Code Ready: Codebase Exploration Tool Warmup",
  "leafUuid": "7724a014-3cc3-4e68-a406-a692fdbead85"
}
{
  "parentUuid": null,  // ← THIS BREAKS THE CHAIN
  "isSidechain": true,
  "userType": "external",
  "sessionId": "03389f78-c35b-4fb9-bae9-3fc3622687d6",
  "type": "user",
  "message": {
    "role": "user",
    "content": "Warmup"
  },
  "uuid": "a6966d07-e1da-4a13-b0ed-e4d9932fc34b",
  "timestamp": "2025-10-21T14:59:06.316Z"
}


By setting `"parentUuid": null`, the CLI signals a new conversation start rather than continuation.

Steps to Reproduce

Reproduction

# Start a conversation
claude "analyze this codebase"
# ... conversation happens ...
# Exit

# Repeat --continue and exit
claude --continue
# Exit

# Eventually "> Warmup" appears in terminal formatted as user input and context from previous conversation is lost

Claude Model

Sonnet (default)

Is this a regression?

Yes, this worked in a previous version

Last Working Version

2.0.15

Claude Code Version

2.0.27

Platform

Anthropic API

Operating System

Other Linux

Terminal/Shell

VS Code integrated terminal

Additional Information

transcript.txt

View original on GitHub ↗

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