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

3open issues
4open PRs
28items grouped
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.

These 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

  • Issue#13582Non-secret gateway settings in .env silently override config.yaml
  • Issue#13685[Bug]: config.yaml settings override .env settings, despite doc says the opposite
  • Issue#25402terminal.backend=local can still use Docker when stale Docker config keys remain

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

Merged to main. A stamp counts the issues a fix is linked to.

  • #18764 fix(gateway): config.yaml wins over .env for agent/display/timezone settings

    merged to mainSuggested link · files and diff not shown

  • #21240 fix(gateway): preserve max_turns after env reload (salvage #19183)

    merged to main

    files: gateway/run.py, tests/gateway/test_runtime_env_reload_config_authority.py

  • #42733 fix(terminal): lazy-parse Docker env config

    merged to main

    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)

    merged to main

    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.00 means 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

At a glance

Subsystem
environments
Merged PRs
#18764, #21240, #42733, #77180
Closed issues
5
Attempts
12 PRs closed without merging
Fix link checked
3 Aug 2026

For your agent

The same facts, typed.