[FEATURE] Add hook event for extended thinking / LLM reasoning blocks
Feature Request: Thinking Hook Event
Summary
Add a hook event (e.g. LLMResponse or ThinkingBlock) that fires when Claude produces extended thinking content, delivering the reasoning text to hook consumers.
Problem
Currently, the only way to capture LLM reasoning is by reading the session JSONL file and extracting "type": "thinking" blocks. This approach has two fragility points:
- Redaction via beta header: When the
tengu_quiet_hollowserver-side flag is active, the client sends theredact-thinking-2026-02-12beta header and the API returns emptythinkingfields — only the signature remains (see #32810). - Post-hoc extraction: Tools that want reasoning context must poll/tail the JSONL file after the fact rather than receiving it in real time.
Proposed Solution
Expose a ThinkingBlock (or similar) hook event that fires whenever Claude generates a thinking block, with a payload like:
{
"hook_event_name": "ThinkingBlock",
"session_id": "...",
"thinking": "Let me analyze this step by step...",
"signature": "EoAC..."
}
Alternatively, include thinking content in the existing Stop or SessionEnd hook payloads as an array of reasoning blocks.
Motivation
Third-party tooling (security governance, session replay, audit logging, context recovery) depends on capturing Claude's reasoning. A dedicated hook event would:
- Eliminate the JSONL-polling workaround
- Be resilient to redaction changes (tool receives content directly from the hook system, not via the stored transcript)
- Enable real-time reasoning visibility for monitoring tools
Related
- #32810 — thinking block content empty in JSONL since server-side flag change
- #25980 — verbose mode not displaying thinking blocks
- #33414 — firehose monitoring request
Workaround (until this is implemented)
Set "showThinkingSummaries": true in ~/.claude/settings.json to bypass the redaction condition and restore thinking content in JSONL files.
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗