[BUG] Thinking block content empty (thinking_len=0) since v2.1.69 — only encrypted signature returned
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?
Since v2.1.69, the thinking field in thinking blocks is returned as an empty string (""), while the signature field still contains encrypted data. This means thinking content is completely invisible even with verbose mode enabled — not because of a display bug, but because the API response no longer contains plaintext thinking summaries.
Verified with two Mac machines, same account (Max plan), same model (Opus 4.6 with 1M context):
| Version | thinking_len | sig_len | Thinking visible? |
|---------|-------------|---------|-------------------|
| v2.1.68 | 1312 | 2876 | ✅ Yes (plaintext summary present) |
| v2.1.69 | 0 | 436 | ❌ No (empty string) |
| v2.1.70 | 0 | 1064 | ❌ No (empty string) |
Raw data from JSONL session transcripts:
v2.1.68 (working):
thinking_len=1312 sig_len=2876
thinking content: "The user is asking about the strategy for managing their forked repository of 'superpowers'. Let me understand the situation..."
v2.1.69 (broken):
thinking_len=0 sig_len=436
thinking content: ""
v2.1.70 (broken):
thinking_len=0 sig_len=1064
thinking content: ""
This was verified by extracting thinking blocks from ~/.claude/projects/{project}/{session-id}.jsonl files using:
ls -t ~/.claude/projects/*//*.jsonl | head -1 | xargs grep '"type":"thinking"' | head -1 | python3 -c "
import sys, json
line = sys.stdin.readline()
idx = line.find('{')
data = json.loads(line[idx:])
for block in data['message']['content']:
if block.get('type') == 'thinking':
print('thinking length:', len(block.get('thinking', '')))
print('has signature:', 'signature' in block)
print('signature length:', len(block.get('signature', '')))
"
What Should Happen?
The thinking field in thinking blocks should contain a plaintext summary of Claude's reasoning process (as it did in v2.1.68), so that verbose mode can display it. The signature field confirms thinking IS happening — the summarized content is just no longer being returned.
Error Messages/Logs
No errors — the thinking field is silently empty.
Steps to Reproduce
- Install Claude Code v2.1.69 or v2.1.70
- Use Opus 4.6 (1M context) with thinking enabled
- Start a new session, send any message
- Check the session JSONL file for
"type":"thinking"entries - Observe:
thinkingfield is"",signaturefield has content - Compare: Downgrade to v2.1.68, repeat —
thinkingfield has plaintext content
Claude Model
Opus 4.6 (1M context)
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.68
Claude Code Version
2.1.70
Platform
Anthropic API (Max plan)
Operating System
macOS (tested on two separate Mac machines with identical results)
Terminal/Shell
Warp
Additional Information
- This is not the same as #25980 or #22977 (verbose mode display bug). Those issues report thinking blocks existing but not rendering in the terminal. This issue is that the thinking block content itself is empty at the data level.
- Same Anthropic account used on both machines, ruling out account-level differences.
- The
signaturefield is present and populated, confirming the model IS thinking — the plaintext summary is simply not being returned. alwaysThinkingEnabled: truein settings has no effect on this issue.- Downgrading to v2.1.68 immediately restores thinking content visibility.
This issue has 13 comments on GitHub. Read the full discussion on GitHub ↗