NousResearch/hermes-agent

docker_extra_args config not bridged to terminal env

Cluster 28863 · environments. Data as of

3 open items. Fix merged in #50631. Check it covers your case.

The short answer

1open issue
2open PRs
17items grouped
Known?
Yes. 17 related items grouped here, 5 issues already closed.
Fix event
A fix was merged to main in PR #50631. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this unresolved. That is separate from the fix event.
Still open
1 issue and 2 PRs.

A bug where terminal.docker_extra_args set in config.yaml is silently dropped because it is missing from the config-to-environment-variable bridge maps, particularly in gateway mode. Members include bug reports, multiple fix attempts, and a feature request to unify the bridging logic.

Open issues1

  • Issue#28892FR: single-source terminal config→env bridge (eliminate 3-dict drift)

Open PRs2

  • PR#28995feat: Config-Runtime Contract Registry (Phase 1) + fix #28046 + fix #28863
  • PR#129844fix(config): one terminal env map for every bridge

Fixes on record

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

  • #50631 fix(terminal): bridge docker_extra_args to TERMINAL_DOCKER_EXTRA_ARGS in CLI + gateway

    merged to main

    files: cli.py, gateway/run.py, tests/tools/test_terminal_config_env_sync.py

    Show the diff
    • cli.py
      @@ -621,6 +621,7 @@ def load_cli_config() -> Dict[str, Any]:
               "container_persistent": "TERMINAL_CONTAINER_PERSISTENT",
               "docker_volumes": "TERMINAL_DOCKER_VOLUMES",
               "docker_env": "TERMINAL_DOCKER_ENV",
      +        "docker_extra_args": "TERMINAL_DOCKER_EXTRA_ARGS",
               "docker_mount_cwd_to_workspace": "TERMINAL_DOCKER_MOUNT_CWD_TO_WORKSPACE",
               "docker_run_as_host_user": "TERMINAL_DOCKER_RUN_AS_HOST_USER",
               "docker_persist_across_processes": "TERMINAL_DOCKER_PERSIST_ACROSS_PROCESSES",
    • gateway/run.py
      @@ -1464,6 +1464,7 @@ def _profile_runtime_scope(profile_home: "Path"):
                       "container_persistent": "TERMINAL_CONTAINER_PERSISTENT",
                       "docker_volumes": "TERMINAL_DOCKER_VOLUMES",
                       "docker_env": "TERMINAL_DOCKER_ENV",
      +                "docker_extra_args": "TERMINAL_DOCKER_EXTRA_ARGS",
                       "docker_mount_cwd_to_workspace": "TERMINAL_DOCKER_MOUNT_CWD_TO_WORKSPACE",
                       "docker_run_as_host_user": "TERMINAL_DOCKER_RUN_AS_HOST_USER",
                       "docker_persist_across_processes": "TERMINAL_DOCKER_PERSIST_ACROSS_PROCESSES",
    • tests/tools/test_terminal_config_env_sync.py
      @@ -233,6 +233,27 @@ def test_docker_env_is_bridged_everywhere():
           assert "TERMINAL_DOCKER_ENV" in _terminal_tool_env_var_names()
       
       
      +def test_docker_extra_args_is_bridged_everywhere():
      +    """Regression pin for docker_extra_args config key being silently ignored.
      +
      +    ``terminal.docker_extra_args`` in config.yaml passes extra flags verbatim
      +    to ``docker run`` (e.g. ``--gpus=all``, ``--shm-size=16g``).  The key was
      +    present in DEFAULT_CONFIG, TERMINAL_CONFIG_ENV_MAP (so ``hermes config
      +    set`` bridged it), terminal_tool._get_env_config (reads
      +    TERMINAL_DOCKER_EXTRA_ARGS), and DockerEnvironment (applies extra_args) --
      +    but it was MISSING from cli.py's env_mappings and gateway/run.py's
      +    _terminal_env_map.  So a user who hand-edited config.yaml had their GPU /
      +    shm-size flags silently dropped on the CLI and gateway/desktop paths,
      +    while ``image``/``volumes`` (which were in those maps) bridged fine --
      +    producing the "Hermes partially reads the Docker config" symptom.  Guard
      +    all four bridging points so this cannot regress.
      +    """
      +    assert "docker_extra_args" in _cli_env_map_keys()
      +    assert "docker_extra_args" in _gateway_env_map_keys()
      +    assert "docker_extra_args" in _save_config_env_sync_keys()
      +    assert "TERMINAL_DOCKER_EXTRA_ARGS" in _terminal_tool_env_var_names()
      +
      +
       def test_docker_persist_across_processes_is_bridged_everywhere():
           """Regression pin for the cross-process container reuse toggle.
       

8 PRs closed without merging

From the close comments: superseded by another PR 4 · done elsewhere 2 · other 2

  • #28888 fix(terminal): add docker_extra_args to all three config-to-env bridge maps (#28863) · superseded by another PR → #28891
  • #28891 fix(gateway): bridge terminal.docker_extra_args and docker_forward_env to env · other → #35937
  • #29236 fix(terminal): pass docker_extra_args through _terminal_env_map (#28863) · superseded by another PR → #28891, #28888
  • #30629 fix(gateway): bridge terminal.docker_extra_args to env for gateway sessions (#30415) · superseded by another PR → #28891, #28888
  • #30887 fix(gateway): bridge terminal.docker_extra_args to env for gateway sessions (#30415) · superseded by another PR → #30629, #28891
Show 3 more
  • #39683 fix(terminal): bridge docker_extra_args from config.yaml (#39615) · other → #35937
  • #45288 fix(gateway): bridge docker_extra_args config to TERMINAL_DOCKER_EXTRA_ARGS env var · done elsewhere → de6b3ae, #50631
  • #63945 fix(config): bridge terminal.docker_extra_args into runtime env · done elsewhere → #50631
Closed issues · 5
  • Closed#28863terminal.docker_extra_args from config.yaml silently dropped — missing in _terminal_env_map bridge
  • Closed#30415[Bug]: terminal.docker_extra_args silently ignored in gateway mode (missing env-var bridge)
  • Closed#35751terminal.docker_extra_args in config.yaml not being applied to Docker sandbox
  • Closed#39615[Bug]: The docker-extra_args configuration is invalid in config. yml and cannot be read.
  • Closed#45129Title:`docker_extra_args` ignored by gateway — missing from `_terminal_env_map` in `gateway/run.py`
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.12: 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
#50631
Closed issues
5
Attempts
8 PRs closed without merging
Fix link checked
22 Jun 2026

For your agent

The same facts, typed.