feat(desktop): YOLO toggle in the status bar (per-session, TUI parity) - #38517
Merged
Conversation
Adds a clickable "YOLO" item to the desktop status bar that flips per-session approval bypass via the existing `config.set yolo` gateway RPC (the same one the TUI uses). It reads as normal gray when off and amber/yellow when on, tracking the dark/light theme. To keep the indicator honest across resume/session-switch, the gateway now reports the live per-session yolo flag in `_session_info`, which the desktop hydrates into a new `$yoloActive` atom on `session.info` events and on session create/resume.
Contributor
🔎 Lint report:
|
Relocates the status-bar YOLO item from the left group to the right group, immediately before the model summary/picker.
The status bar could show YOLO "on" while approvals still ran because _session_info mirrored HERMES_YOLO_MODE (process env), not the per-session flag that config.set yolo actually toggles. - Report only session-scoped yolo in session.info - config.set yolo accepts value=1|0 and emits session.info after change - Desktop uses explicit set (not blind toggle); arms on new-chat draft and applies after session.create - Yellow background when on, normal text (not yellow text)
Use a light amber wash with primary body text and a darker bolt icon instead of yellow-on-yellow. Armed new-chat state gets a subtle inset ring.
Drop the YOLO label; show only the bolt with a bit more horizontal padding. Active state uses background #f4e381.
YOLO is now a desktop preference that survives restart: turning it on keeps every new and resumed session in YOLO until the user turns it off, instead of resetting per session. The gateway clears per-session yolo on resume, so the persisted preference is re-applied on create/resume. Also fixes the status-bar active fill to use the --chrome-action-hover CSS var (correct Tailwind arbitrary-property syntax).
Swap the outline bolt for IconBoltFilled when YOLO is on so the active state reads as a solid lightning glyph.
Instead of showing "not available in the desktop palette", /yolo now flips the same per-session/sticky YOLO state as the status-bar control (arming the preference when there's no active session yet) and is listed in the desktop slash palette.
Reverts the global approvals.mode write — the desktop bolt is now a pure per-session toggle, identical in scope to the TUI's Shift+Tab, so it can never change CLI/TUI/cron behavior. The status bar still reads the *effective* bypass state in session.info (per-session OR approvals.mode=off OR HERMES_YOLO_MODE), so it stops lying when a global policy already auto-approves commands.
OutThisLife
enabled auto-merge (squash)
June 3, 2026 23:28
Yuki-14544869
pushed a commit
to Yuki-14544869/hermes-agent
that referenced
this pull request
Jun 4, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
davidgut1982
pushed a commit
to davidgut1982/hermes-agent
that referenced
this pull request
Jun 5, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
1 task
changman
pushed a commit
to changman/hermes-agent
that referenced
this pull request
Jun 10, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
alt-glitch
pushed a commit
that referenced
this pull request
Jun 14, 2026
…-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
kossteg
pushed a commit
to kossteg/hermes-agent
that referenced
this pull request
Jun 16, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
T02200059
pushed a commit
to T02200059/hermes-agent
that referenced
this pull request
Jun 18, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
waefrebeorn
pushed a commit
to waefrebeorn/slermes
that referenced
this pull request
Jul 2, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
santhreal
pushed a commit
to santhreal/hermes-agent
that referenced
this pull request
Jul 13, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
donbowman
pushed a commit
to donbowman/hermes-agent
that referenced
this pull request
Jul 13, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
Gravezzz
pushed a commit
to Gravezzz/hermes-agent
that referenced
this pull request
Jul 21, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
leewenjie
pushed a commit
to leewenjie/hermes-agent
that referenced
this pull request
Aug 7, 2026
…lo-statusbar-toggle feat(desktop): YOLO toggle in the status bar (per-session, TUI parity)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
#f4e381fill when on.config.set yologateway RPC — the exact same session-scoped flag as the TUI's Shift+Tab //yolo. It does not write the globalapprovals.mode, so it can never change CLI / TUI / cron behavior./yolonow works in the desktop too: it maps to this control (and is listed in the slash palette) instead of returning "not available".Honest status display
The bolt previously only reflected the per-session flag, so it lied when a global policy already auto-approved commands (e.g.
approvals.mode: offinconfig.yaml). Now:_session_inforeports the effective bypass state — the same condition the approval guard ORs together: per-session yolo ORapprovals.mode == "off"ORHERMES_YOLO_MODE.$yoloActiveatom is a plain reflection of that, hydrated fromsession.infoevents andapplyRuntimeInfoon session create/resume. Persistence lives in the backend (config / per-session), not in the client.Files
tui_gateway/server.py—_session_inforeports effective yolo;config.set yolostays per-session-scopedapps/desktop/src/store/session.ts—$yoloActiveatom +setYoloActiveapps/desktop/src/types/hermes.ts,src/lib/chat-messages.ts—yolo?: booleanon runtime-info / event payloadsapps/desktop/src/app/session/hooks/use-message-stream.ts,use-session-actions.ts— hydrate the atom + arm-on-createapps/desktop/src/app/session/hooks/use-prompt-actions.ts—/yolohandlerapps/desktop/src/lib/desktop-slash-commands.ts(+ test) — make/yolodiscoverable and routableapps/desktop/src/app/shell/hooks/use-statusbar-items.tsx— the clickable bolt + toggleapps/desktop/src/app/desktop-controller.tsx— passfreshDraftReady/requestGatewayinto the hookapps/desktop/src/lib/yolo-session.ts—setSessionYolohelperapps/desktop/src/lib/icons.ts—Zap(outline) +ZapFilledTest plan
npm run type-check(apps/desktop) passeseslinton changed files introduces no new errors (one pre-existingperfectionistimport-sort error inuse-session-actions.tsconfirmed present onmain)vitestdesktop slash-command suite passestests/test_tui_gateway_server.pypasses (the lonetest_browser_manage_connect_default_local_reports_launch_hintfailure is environment-dependent — local machine has Chrome installed — and unrelated)approvals.mode: offin config, the bolt correctly shows on./yolotoggles the same state.