IssueRaiser

Resuming an extended-thinking session fails permanently with 400 "thinking blocks cannot be modified" (transcript stores thinking text as empty but keeps signat

## Environment - Claude Code: **2.1.153** - OS: macOS (Darwin 25.3.0) - Auth: subscription, extended thinking enabled ## Summary Resuming/continuing a session that used extended thinking together with tool calls can put the session into a **permanently broken** state. Every subsequent turn returns the same error: ``` API Error: 400 messages.1.content.5: `thinking` or `redacted_thinking` blocks in the latest assistant message cannot be modified. These blocks must remain as they were in the original response. ``` Once it starts, the session can never be continued again — `continue`, any new prompt, even a no-op, all return the identical 400. ## Root cause Claude Code persists extended-thinking blocks to the session transcript (`projects/<slug>/<id>.jsonl`) with the **`thinking` text emptied to `""` but the `signature` field retained**. A thinking content block on disk looks like: ```json { "type": "thinking", "thinking": "", "signature": "<base64 signature, ~600–4000 chars>" } ``` When the session is rebuilt from this transcript (on resume/continue, and apparently on other history-reconstruction paths), Claude Code sends these blocks back to the API as `{ "type": "thinking", "thinking": "", "signature": "<original>" }`. The API validates the signature against the thinking text; since the text is now empty but the signature was computed over the original non-empty text, validation fails → the 400 above. Because the original thinking text is gone from disk, the request can

Posted by jdrolls on May 28, 2026, 2:24 PM

Tags

Related issues

Raise real-world problems, find people facing the same issue, and discuss solutions.2,000 issues0 comments

reliability (SaaS)

Resuming an extended-thinking session fails permanently with 400 "thinking blocks cannot be modified" (transcript stores thinking text as empty but keeps signat

jdrollsMay 28, 2026, 2:24 PM

## Environment - Claude Code: **2.1.153** - OS: macOS (Darwin 25.3.0) - Auth: subscription, extended thinking enabled ## Summary Resuming/continuing a session that used extended thinking together with tool calls can put the session into a **permanently broken** state. Every subsequent turn returns the same error: ``` API Error: 400 messages.1.content.5: `thinking` or `redacted_thinking` blocks in the latest assistant message cannot be modified. These blocks must remain as they were in the original response. ``` Once it starts, the session can never be continued again — `continue`, any new prompt, even a no-op, all return the identical 400. ## Root cause Claude Code persists extended-thinking blocks to the session transcript (`projects/<slug>/<id>.jsonl`) with the **`thinking` text emptied to `""` but the `signature` field retained**. A thinking content block on disk looks like: ```json { "type": "thinking", "thinking": "", "signature": "<base64 signature, ~600–4000 chars>" } ``` When the session is rebuilt from this transcript (on resume/continue, and apparently on other history-reconstruction paths), Claude Code sends these blocks back to the API as `{ "type": "thinking", "thinking": "", "signature": "<original>" }`. The API validates the signature against the thinking text; since the text is now empty but the signature was computed over the original non-empty text, validation fails → the 400 above. Because the original thinking text is gone from disk, the request can

Comments (0)

No comments yet. Start the discussion.

Comment on this issue