[BUG] Thinking block content empty (thinking_len=0) since v2.1.69 — only encrypted signature returned

Resolved 💬 13 comments Opened Mar 6, 2026 by qishaoyumu Closed Apr 13, 2026

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

  1. Install Claude Code v2.1.69 or v2.1.70
  2. Use Opus 4.6 (1M context) with thinking enabled
  3. Start a new session, send any message
  4. Check the session JSONL file for "type":"thinking" entries
  5. Observe: thinking field is "", signature field has content
  6. Compare: Downgrade to v2.1.68, repeat — thinking field 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 signature field is present and populated, confirming the model IS thinking — the plaintext summary is simply not being returned.
  • alwaysThinkingEnabled: true in settings has no effect on this issue.
  • Downgrading to v2.1.68 immediately restores thinking content visibility.

View original on GitHub ↗

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