Summary
The reasoning chip in the composer bar only becomes visible after the user explicitly sets a reasoning level (e.g. /reasoning high). On page load and on a fresh session where reasoning has never been configured, _applyReasoningChip is only called from syncReasoningChip() which runs when a session loads — but the HTML initialises the wrap with style="display:none" and _currentReasoningEffort starts as null.
When no reasoning effort is set, the chip remains invisible. The user has no visual indication that reasoning mode exists or how to access it.
Reported in community Discord by @vishnukool: "reasoning still only shows up when set" (confirmed by Nathan as a known remaining gap post-v0.50.210).
Root cause
static/index.html line 377:
<div class="composer-reasoning-wrap" id="composerReasoningWrap" style="display:none">
static/ui.js _applyReasoningChip() sets wrap.style.display='' (visible) on every call, but it is only called when:
- A session loads (
syncReasoningChip at line 1846 in loadSession)
- The user runs
/reasoning command
On a fresh page load with no session, or before a session is selected, the chip stays hidden. Even after #1074 which added inactive chip styling for none/unset effort, the chip is still never shown initially.
Expected behaviour
The reasoning chip is always visible in the composer bar, showing Default or None state (as #1074 intended) — even before a session is loaded and without requiring the user to set a level first. The fetchReasoningChip() call should happen at app init, not only inside loadSession.
Fix direction
Call fetchReasoningChip() during app initialisation (in boot.js or the initial app-ready sequence), not only inside loadSession. This ensures the chip renders immediately on page load with whatever the current server-side default is.
Summary
The reasoning chip in the composer bar only becomes visible after the user explicitly sets a reasoning level (e.g.
/reasoning high). On page load and on a fresh session where reasoning has never been configured,_applyReasoningChipis only called fromsyncReasoningChip()which runs when a session loads — but the HTML initialises the wrap withstyle="display:none"and_currentReasoningEffortstarts asnull.When no reasoning effort is set, the chip remains invisible. The user has no visual indication that reasoning mode exists or how to access it.
Reported in community Discord by @vishnukool: "reasoning still only shows up when set" (confirmed by Nathan as a known remaining gap post-v0.50.210).
Root cause
static/index.htmlline 377:static/ui.js_applyReasoningChip()setswrap.style.display=''(visible) on every call, but it is only called when:syncReasoningChipat line 1846 inloadSession)/reasoningcommandOn a fresh page load with no session, or before a session is selected, the chip stays hidden. Even after #1074 which added
inactivechip styling fornone/unset effort, the chip is still never shown initially.Expected behaviour
The reasoning chip is always visible in the composer bar, showing
DefaultorNonestate (as #1074 intended) — even before a session is loaded and without requiring the user to set a level first. ThefetchReasoningChip()call should happen at app init, not only insideloadSession.Fix direction
Call
fetchReasoningChip()during app initialisation (inboot.jsor the initial app-ready sequence), not only insideloadSession. This ensures the chip renders immediately on page load with whatever the current server-side default is.