Skip to content

bug/ux: reasoning chip stays hidden on page load — only appears after explicitly setting a level #1103

@nesquena-hermes

Description

@nesquena-hermes

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingsprint-candidateStrong candidate for next sprint

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions