{"repo":"NousResearch/hermes-agent","public_id":"28863","display_label":"docker_extra_args config not bridged to terminal env","summary":"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.","subsystem":"environments","counts":{"members":17,"open_issues":1,"open_issues_distinct":1,"open_prs":2,"closed_issues":5,"merged_prs":1,"attempt_prs":10},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":50631},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-06-22T05:41:23+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.11941176470588234},"fix_edges":[{"issue_number":35751,"pr_number":50631,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":45129,"pr_number":50631,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":28863,"title":"terminal.docker_extra_args from config.yaml silently dropped — missing in _terminal_env_map bridge","url":null,"state":"closed"},{"kind":"issue","number":28892,"title":"FR: single-source terminal config→env bridge (eliminate 3-dict drift)","url":null,"state":"open"},{"kind":"issue","number":30415,"title":"[Bug]: terminal.docker_extra_args silently ignored in gateway mode (missing env-var bridge)","url":null,"state":"closed"},{"kind":"issue","number":35751,"title":"terminal.docker_extra_args in config.yaml not being applied to Docker sandbox","url":null,"state":"closed"},{"kind":"issue","number":39615,"title":"[Bug]: The docker-extra_args configuration is invalid in config. yml and cannot be read.","url":null,"state":"closed"},{"kind":"issue","number":45129,"title":"Title:`docker_extra_args` ignored by gateway — missing from `_terminal_env_map` in `gateway/run.py`","url":null,"state":"closed"},{"kind":"pr","number":28888,"title":"fix(terminal): add docker_extra_args to all three config-to-env bridge maps (#28863)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#28891","number":28891},{"kind":"pr","value":"#28891","number":28891}],"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":28891,"title":"fix(gateway): bridge terminal.docker_extra_args and docker_forward_env to env","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#35937","number":35937}],"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":28995,"title":"feat: Config-Runtime Contract Registry (Phase 1) + fix #28046 + fix #28863","url":null,"state":"open","close_reason":{"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":29236,"title":"fix(terminal): pass docker_extra_args through _terminal_env_map (#28863)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#28891","number":28891},{"kind":"pr","value":"#28888","number":28888}],"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":30629,"title":"fix(gateway): bridge terminal.docker_extra_args to env for gateway sessions (#30415)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#28891","number":28891},{"kind":"pr","value":"#28888","number":28888}],"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":30887,"title":"fix(gateway): bridge terminal.docker_extra_args to env for gateway sessions (#30415)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#30629","number":30629},{"kind":"pr","value":"#28891","number":28891}],"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":39683,"title":"fix(terminal): bridge docker_extra_args from config.yaml (#39615)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#35937","number":35937}],"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":45288,"title":"fix(gateway): bridge docker_extra_args config to TERMINAL_DOCKER_EXTRA_ARGS env var","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"de6b3ae3774fb0bb48f288159e7bb326d8f48bc2","number":0},{"kind":"pr","value":"#50631","number":50631}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":50631,"title":"fix(terminal): bridge docker_extra_args to TERMINAL_DOCKER_EXTRA_ARGS in CLI + gateway","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["cli.py","gateway/run.py","tests/tools/test_terminal_config_env_sync.py"],"fix_hunks":[{"file":"cli.py","hunks":["@@ -621,6 +621,7 @@ def load_cli_config() -> Dict[str, Any]:\n         \"container_persistent\": \"TERMINAL_CONTAINER_PERSISTENT\",\n         \"docker_volumes\": \"TERMINAL_DOCKER_VOLUMES\",\n         \"docker_env\": \"TERMINAL_DOCKER_ENV\",\n+        \"docker_extra_args\": \"TERMINAL_DOCKER_EXTRA_ARGS\",\n         \"docker_mount_cwd_to_workspace\": \"TERMINAL_DOCKER_MOUNT_CWD_TO_WORKSPACE\",\n         \"docker_run_as_host_user\": \"TERMINAL_DOCKER_RUN_AS_HOST_USER\",\n         \"docker_persist_across_processes\": \"TERMINAL_DOCKER_PERSIST_ACROSS_PROCESSES\","]},{"file":"gateway/run.py","hunks":["@@ -1464,6 +1464,7 @@ def _profile_runtime_scope(profile_home: \"Path\"):\n                 \"container_persistent\": \"TERMINAL_CONTAINER_PERSISTENT\",\n                 \"docker_volumes\": \"TERMINAL_DOCKER_VOLUMES\",\n                 \"docker_env\": \"TERMINAL_DOCKER_ENV\",\n+                \"docker_extra_args\": \"TERMINAL_DOCKER_EXTRA_ARGS\",\n                 \"docker_mount_cwd_to_workspace\": \"TERMINAL_DOCKER_MOUNT_CWD_TO_WORKSPACE\",\n                 \"docker_run_as_host_user\": \"TERMINAL_DOCKER_RUN_AS_HOST_USER\",\n                 \"docker_persist_across_processes\": \"TERMINAL_DOCKER_PERSIST_ACROSS_PROCESSES\","]},{"file":"tests/tools/test_terminal_config_env_sync.py","hunks":["@@ -233,6 +233,27 @@ def test_docker_env_is_bridged_everywhere():\n     assert \"TERMINAL_DOCKER_ENV\" in _terminal_tool_env_var_names()\n \n \n+def test_docker_extra_args_is_bridged_everywhere():\n+    \"\"\"Regression pin for docker_extra_args config key being silently ignored.\n+\n+    ``terminal.docker_extra_args`` in config.yaml passes extra flags verbatim\n+    to ``docker run`` (e.g. ``--gpus=all``, ``--shm-size=16g``).  The key was\n+    present in DEFAULT_CONFIG, TERMINAL_CONFIG_ENV_MAP (so ``hermes config\n+    set`` bridged it), terminal_tool._get_env_config (reads\n+    TERMINAL_DOCKER_EXTRA_ARGS), and DockerEnvironment (applies extra_args) --\n+    but it was MISSING from cli.py's env_mappings and gateway/run.py's\n+    _terminal_env_map.  So a user who hand-edited config.yaml had their GPU /\n+    shm-size flags silently dropped on the CLI and gateway/desktop paths,\n+    while ``image``/``volumes`` (which were in those maps) bridged fine --\n+    producing the \"Hermes partially reads the Docker config\" symptom.  Guard\n+    all four bridging points so this cannot regress.\n+    \"\"\"\n+    assert \"docker_extra_args\" in _cli_env_map_keys()\n+    assert \"docker_extra_args\" in _gateway_env_map_keys()\n+    assert \"docker_extra_args\" in _save_config_env_sync_keys()\n+    assert \"TERMINAL_DOCKER_EXTRA_ARGS\" in _terminal_tool_env_var_names()\n+\n+\n def test_docker_persist_across_processes_is_bridged_everywhere():\n     \"\"\"Regression pin for the cross-process container reuse toggle.\n \n"]}]},{"kind":"pr","number":63945,"title":"fix(config): bridge terminal.docker_extra_args into runtime env","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#50631","number":50631}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":129844,"title":"fix(config): one terminal env map for every bridge","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"f930a00ff1","number":0}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}