[FEATURE] Expose Thinking Mode Status in StatusLine JSON Input
Resolved 💬 21 comments Opened Oct 13, 2025 by huangyingw Closed Apr 24, 2026
💡 Likely answer: A maintainer (claude[bot], contributor)
responded on this thread — see the highlighted reply below.
Feature Request: Expose Thinking Mode Status in StatusLine JSON Input
Problem
Currently, the statusLine JSON input does not include the current thinking mode state. The JSON provides useful information like model, workspace, and cost, but lacks the thinking mode status (alwaysThinkingEnabled or current session state).
This creates an issue for statusLine scripts that want to display thinking mode status:
- Settings vs Runtime State Confusion: Scripts can only read
~/.claude/settings.jsonforalwaysThinkingEnabled, which shows the configured value, not the actual runtime state.
- Tab Toggle Not Reflected: When users press Tab to toggle thinking mode during a session, this is a session-level change that doesn't update
settings.json. The statusLine continues to show the old configured value, creating misleading information.
- No Way to Access Current State: There's currently no reliable way for statusLine scripts to determine if thinking mode is actually active in the current session.
Proposed Solution
Add a thinking_mode field to the JSON input passed to statusLine scripts:
{
"session_id": "...",
"model": {...},
"workspace": {...},
"thinking_mode": {
"enabled": true, // Current runtime state (after Tab toggles)
"configured": true, // Value from settings.json
"toggleable": true // Whether Tab toggle is available
},
...
}
Use Cases
With this information, users could create statusLine displays that:
- Show Accurate Runtime State: Display whether thinking mode is currently ON or OFF, reflecting Tab key toggles
- Indicate Configuration Mismatch: Show when session state differs from configured state
- Visual Feedback: Provide immediate visual feedback when toggling thinking mode with Tab
- Status Monitoring: Track thinking mode usage across different projects/sessions
Example StatusLine Display
💭 ON (configured) | 💭 OFF (session) # Shows mismatch
💭 ON | ⚡ Sonnet 4 | ~/project | git:(main)
Alternative Approaches Considered
- Environment Variables: Could expose via
CLAUDE_THINKING_MODE=on/off, but less flexible than JSON - Separate Command: Could provide
claude status --json, but redundant with existing statusLine JSON - File-based: Could write state to
/tmp/.claude_thinking_state, but less elegant and has race conditions
Related Issues
- #7668 (Thinking Mode Configuration) - About configuration, not statusLine
- #8780 (Doc Missing for alwaysThinkingEnabled) - Documentation issue
- #5621 (API usage/quota in statusLine) - Similar request for other runtime state
Benefits
- Improved UX: Users get accurate visual feedback of thinking mode state
- Consistency: Aligns with existing pattern of exposing runtime state (model, cost, etc.) via JSON
- Simple Implementation: Just add one field to existing JSON structure
- No Breaking Changes: Backward compatible - old scripts ignore the new field
Thank you for considering this feature request!
21 Comments
yes, I support this request. I hope thinking state can be added to status line.
yes, i keep toggling it off by mistake and not knowing
i've got massive sausage fingers
This issue has been inactive for 30 days. If the issue is still occurring, please comment to let us know. Otherwise, this issue will be automatically closed in 30 days for housekeeping purposes.
bump to prevent auto-close
bump to delay auto close again
Please implement this 🙏
The effort level for Opus 4.6 should also be added. We really need to be able to see the current state of thinking and effort clearly.
👍 Adding support from #23929 (closed as duplicate).
Use Case: I've implemented a custom statusline showing context usage, model info, and git status. The missing piece is thinking mode status - I have no way to know if extended thinking is active without it.
Current Problem:
~/.claude/settings.jsononly shows configured value, not runtime stateImpact: This affects anyone using custom statuslines (which is becoming more common as statusline configuration improved in recent releases).
Implementation: Should be straightforward - just add one field to existing statusline JSON structure. Backward compatible since old scripts ignore unknown fields.
Would be happy to help test or even contribute a PR if there's guidance on where the statusline JSON is constructed.
bump to delay auto close again, pls implement 🙏
+1 this would be a good feature.
however I made my status bar script work and it updates the bar after changing thinking effort
/model<img width="699" height="72" alt="Image" src="https://github.com/user-attachments/assets/03143b31-3dee-4c6c-a273-cbc6e03d0ed7" />
+1, this would be super helpful
+1 we needs effort infomation, high, medium, low.
+1 waiting for this feature
Seeing the effort would be great!
+1 for this feature, and specifically requesting that reasoning effort level be included alongside thinking mode.
What I need:
reasoning_effort.configured— what the user set (low/medium/high/max/auto)reasoning_effort.resolved— what level is actually being used right now (especially important when set toauto, so users can see what the system chose)Current pain points:
autoeffort, there's no visibility into what level was actually selectedProposed addition to statusLine JSON:
The workaround of reading
CLAUDE_CODE_EFFORT_LEVELenv var orsettings.jsononly shows the configured value, not whatautoresolves to. Having both in the JSON would make custom status lines much more useful.Follow-up to my previous comment — after more research, I want to refine the request:
The built-in right-side effort indicator (○ ◐ ●) was changed in v2.1.72 from persistent to transient/brief. This means:
Ideal solution would be both:
"persistEffortIndicator": trueto keep the built-in right-side indicator visiblereasoning_effort(configured + resolved) to the statusLine JSON for custom scriptsThe resolved level when using
autois especially valuable — v2.1.73 notes that/effortshows what auto resolves to "matching the status bar indicator", so the resolved value is already computed.The latest comments here align with #37764 and #37701 — all requesting effort/thinking state in stdin. I shared a
--slurpfileworkaround in #37764 that readseffortLevelfromsettings.jsonin the samejqcall that processes stdin — no extra file I/O. Works for the persisted default, but Tab toggles and mid-session/effortchanges aren't reflected.Native stdin support is the real fix. I use the workaround in claude-lens and it covers ~90% of use cases, but the remaining 10% (mid-session changes) needs this issue resolved.
+1 we needs effort information:
high, medium, low, max, autoThis issue was fixed as of version 2.1.119.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.