fix(desktop): read HERMES_HOME from the Windows registry when env is stale (salvage #45628) - #46772
Merged
Merged
Conversation
…stale A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
Contributor
🔎 Lint report:
|
| Rule | Count |
|---|---|
unresolved-attribute |
2 |
First entries
tests/run_agent/test_credits_notices_toggle.py:76: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_credits_session_start_micros` on type `AIAgent`
run_agent.py:2920: [unresolved-attribute] unresolved-attribute: Object of type `Self@get_credits_spent_micros` has no attribute `_credits_session_start_micros`
✅ Fixed issues (1):
| Rule | Count |
|---|---|
invalid-assignment |
1 |
First entries
tests/run_agent/test_credits_notices_toggle.py:76: [invalid-assignment] invalid-assignment: Object of type `None` is not assignable to attribute `_credits_session_start_micros` of type `int`
Unchanged: 5758 pre-existing issues carried over.
Diagnostics are surfaced as warnings — this check never fails the build.
Collaborator
|
Related: #45628 (original by @jeffrobodie-glitch, salvaged here) and #45471 (the bug this fixes). This salvage is the active rebased-onto-main version of the Windows registry HERMES_HOME read. |
austinpickett
enabled auto-merge (squash)
June 15, 2026 20:02
OutThisLife
approved these changes
Jun 15, 2026
rdnot
added a commit
to rdnot/hermes-agent-medical-research
that referenced
this pull request
Jun 15, 2026
…kfile-fix.yml) Upstream advanced from 5bfed0f (Jun 15) to 3e7e9b2 (Jun 16). Major upstream changes since last merge: - feat(skills): add optional payments skills (Stripe Link, MPP, Projects) NousResearch#31343 - feat(delegation): async background subagents via delegate_task(background=true) NousResearch#40946 - fix(desktop): read HERMES_HOME from Windows registry when env is stale NousResearch#46772 - fix(desktop): let explicit model switches escape broken config providers NousResearch#46796 - fix(dump): report effective terminal backend in hermes debug - fix(inventory): deduplicate models between user-defined and aggregator providers - fix(doctor): recognize nvidia as vendor-slug-accepting provider - fix(discord): cap slash commands at Discord's 100-command limit - fix(teams): package Microsoft Teams SDK as an installable extra NousResearch#46764 - fix(dashboard): scope chat sidebar model card to selected profile NousResearch#46665 - fix(deps): declare websockets as core dep + relax dev setuptools pin NousResearch#46744 - fix(desktop): pin @assistant-ui/store so the cluster shares one tap - fix(install): make npm install -g packages reachable on PATH - feat(honcho-setup): replace deployment-shape prompt with gateway-gated identity tree - refactor(honcho): canonicalize identity-mapping on pinUserPeer, migrate legacy key - mattermost: preserve thread-local delivery hygiene - ci: rip out nix ci for now - ...plus desktop Electron changes, web UI updates, website docs, honcho docs Fork customizations preserved (all 22 verified intact): - run_agent.py: max_iterations: int = 200 - agent/conversation_loop.py: _force_final_threshold, _build_tools_summary, _current_turn_tool_calls, _pending_tool_summary, tool_summary flow - agent/turn_finalizer.py: 'tool_summary' key in result dict - tools/web_tools.py: tiered fetcher (curl_cffi→scrapling→httpx), MAX_OUTPUT_SIZE=10000, _get_extract_backend, max_result_size_chars=500_000, LLM-summarization disabled, NCBI/PubMed/PMC hardening - tools/budget_config.py: 400_000 / 500_000 - gateway/run.py: HERMES_MAX_ITERATIONS, "200" - hermes_cli/config.py: max_turns: 200 - cli.py: result.get('tool_summary') display - gateway/config.py: Platform.LINE = "line" - gateway/authz_mixin.py: Platform.LINE: "LINE_ALLOWED_GROUPS" - plugins/platforms/line/adapter.py: reply_only_mention, build_source Conflict resolution: - .github/workflows/nix-lockfile-fix.yml: removed by upstream. Was fork-only (disabled with if:false, requires APP_ID/APP_PRIVATE_KEY secrets the fork does not have). Upstream deletion is correct. Backup branch: backup-main-pre-merge-20260616-063126
19 tasks
alanbratu
pushed a commit
to alanbratu/hermes-agent
that referenced
this pull request
Jun 17, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
zmlgit
pushed a commit
to zmlgit/hermes-agent
that referenced
this pull request
Jun 17, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
al3xar
pushed a commit
to al3xar/hermes-agent
that referenced
this pull request
Jun 17, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
T02200059
pushed a commit
to T02200059/hermes-agent
that referenced
this pull request
Jun 18, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
waefrebeorn
pushed a commit
to waefrebeorn/slermes
that referenced
this pull request
Jul 2, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
Methodician
added a commit
to Methodician/hermes-agent
that referenced
this pull request
Jul 4, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
habarmc1223-sudo
pushed a commit
to habarmc1223-sudo/hermes-agent-fluxmem
that referenced
this pull request
Jul 8, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
santhreal
pushed a commit
to santhreal/hermes-agent
that referenced
this pull request
Jul 13, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
Gravezzz
pushed a commit
to Gravezzz/hermes-agent
that referenced
this pull request
Jul 21, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
leewenjie
pushed a commit
to leewenjie/hermes-agent
that referenced
this pull request
Aug 7, 2026
…stale (NousResearch#46772) A GUI app launched from Explorer inherits the environment block captured at login, so a HERMES_HOME set via 'setx' AFTER login is invisible in process.env even though the CLI (a fresh shell) sees it. The desktop then silently fell back to %LOCALAPPDATA%\hermes and reported 'No inference provider configured' despite a valid configured home (NousResearch#45471). resolveHermesHome() now consults the live HKCU\Environment registry value on Windows before the LOCALAPPDATA default. New windows-user-env.cjs helper parses 'reg query' output, expands %VAR% refs, and fails safe (returns null off-Windows, on spawn error, or empty value). The registry value is normalized through the same normalizeHermesHomeRoot() path as the env var for consistency. Co-authored-by: jeffrobodie-glitch <jeffrobodie@gmail.com>
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
Salvage of #45628 (@jeffrobodie-glitch) onto current
main. Fixes #45471.On Windows, a GUI app launched from Explorer inherits the environment block captured at login. If a user sets
HERMES_HOMEviasetxafter logging in, it's invisible inprocess.envfor the desktop app — even though the CLI (a fresh shell) picks it up immediately. The desktop then silently falls back to%LOCALAPPDATA%\hermesand reports "No inference provider configured" despite a valid configured home.Confirmed still present on
main:resolveHermesHome()inapps/desktop/electron/main.cjsconsults onlyprocess.env.HERMES_HOMEthen jumps straight to the%LOCALAPPDATA%default — no registry read.What changed
windows-user-env.cjs— reads a User-scoped var fromHKCU\Environmentviareg query, parses the output, expands%VAR%refs, and fails safe (returnsnulloff-Windows without spawning, on spawn error, whenregexits non-zero, or on empty value)resolveHermesHome()consults the live registry value on Windows before the%LOCALAPPDATA%defaultwindows-user-env.test.cjs, 10 cases) wired intotest:desktop:platformsDeviations from the original PR
mainnow imports/usesnormalizeHermesHomeRootinresolveHermesHome(the env-var path goes through it). Kept that.path.resolve(fromRegistry); I route the registry value through the samenormalizeHermesHomeRoot()the env var uses, so a registry value pointing at a.../profiles/<name>dir collapses to the home root identically.Test plan
node --test windows-user-env.test.cjs→ 10/10 passnode --checkon bothwindows-user-env.cjsandmain.cjs→ OKreadWindowsUserEnvVar('HERMES_HOME')returned the actual registry value (C:\Users\…\AppData\Local\hermes);Pathread correctly; a non-existent var returnednull.Credit