Config precedence and stale env override bugs
NousResearch/hermes-agent · cluster 9240 · environments
Data as of
7 open items. Fix merged in #21240. Check it covers your case.
The short answer
- Known?
- Yes. 28 related items grouped here, 5 issues already closed.
- Fix event
- A fix was merged to main in PR #21240. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
partially resolved, deciding PRs #21240, #42733, #77180. That is separate from the fix event. - Still open
- 3 issues and 4 PRs.
Next step: read #21240, then check whether your report is one of the 3 still open.
Read #21240Pick up a Lab taskThese issues and fixes address conflicts between config.yaml settings and .env values, where stale environment variables incorrectly override intended configuration. A related cluster covers Docker-specific JSON being parsed regardless of the active terminal backend, causing crashes on non-Docker setups.
Open issues3
Open PRs4
- PR#29239fix(env): make config.yaml authoritative for terminal.backend (#29186)
- PR#29246docs(skills): require duplicate search before filing GitHub issues
- PR#39641fix(config): warn when env shadows gateway config (#13582)
- PR#89451fix(discord): explicit DISCORD_FREE_RESPONSE_CHANNELS beats config.yaml
Fixes on record
-
#18764 fix(gateway): config.yaml wins over .env for agent/display/timezone settings
-
#21240 fix(gateway): preserve max_turns after env reload (salvage #19183)
files:
gateway/run.py,tests/gateway/test_runtime_env_reload_config_authority.py -
#42733 fix(terminal): lazy-parse Docker env config
files:
tests/tools/test_terminal_tool.py,tools/terminal_tool.py -
#77180 fix(env): config.yaml terminal.* keys win over stale .env on every reload (#29186)
files:
hermes_cli/env_loader.py,tests/gateway/test_runtime_env_reload_config_authority.py,tests/hermes_cli/test_dump_terminal_backend.py,tests/hermes_cli/test_env_loader.py
12 PRs closed without merging
From the close comments: superseded by another PR 4 · duplicate 2 · done elsewhere 1 · stale or abandoned 1 · won't fix / by design 1 · other 3
- #13629 fix(gateway-config): warn when non-secret settings conflict between config.yaml and .env (#13582) · stale or abandoned
- #13732 fix(discord): honor documented env-wins-over-config precedence for require_mention/free_response_channels · other
-
#17554 fix(setup): keep max turns in config · other →
#17672,#17534 -
#17672 fix(cli): drop max_turns env-var dual-write in setup wizard (#17534) · done elsewhere →
#18413 -
#19183 fix(gateway): preserve max turns after env reload · duplicate →
#18230,#17306
Show 7 more
-
#25881 fix(terminal): clear container config when backend is local · won't fix / by design →
#25402,#25412,#23321 -
#26546 fix(gateway): ignore stale docker config for local terminal · other →
2903615,#25402 -
#29372 fix: always export TERMINAL_ENV from config.yaml to prevent stale .env override · superseded by another PR →
#29239 -
#42736 fix(terminal): ignore malformed docker JSON outside docker backend · superseded by another PR →
#42733,#42725 -
#42791 fix(terminal): use safe JSON parser for docker env vars (#42725) · superseded by another PR →
#42733,#42725 -
#42910 fix(terminal): ignore docker config JSON on local backend · superseded by another PR →
#42733 -
#42911 fix(terminal): guard Docker env var parsing against non-Docker backends · duplicate →
#42733
Closed issues · 5
- Closed#9240Bug: Discord free_response_channels from config.yaml can become operationally unreliable after restart; explicit .env fixes it
- Closed#17534[Bug]: setup wizard double-writes max_turns to both .env (HERMES_MAX_ITERATIONS) and config.yaml (agent.max_turns), causing silent state drift
- Closed#19158Gateway max_turns can be overridden by stale HERMES_MAX_ITERATIONS from .env
- Closed#29186TERMINAL_ENV in ~/.hermes/.env overrides terminal.backend in config.yaml
- Closed#42725[Bug]: TERMINAL_DOCKER_VOLUMES parsed eagerly with json.loads regardless of terminal.backend, crashes all subprocess tools
How this cluster was grouped
-
Link evidence (
partly structural links): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text. - Members outside that structural core may belong to a different underlying problem.
-
Pairwise link density
0.06: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the Lab