fix(agent): expose HERMES_REAL_HOME in subprocess envs for profile isolation

When profile isolation activates ({HERMES_HOME}/home/ exists), child
processes receive HOME={HERMES_HOME}/home/ for tool config isolation
(git, ssh, gh). However, scripts using Path.home() to locate
~/.hermes/ would incorrectly resolve to the isolated profile home,
breaking helpers that rely on the real user home directory.

New get_real_home() helper in hermes_constants resolves the actual
user home independently of profile isolation. All four subprocess
spawners now inject HERMES_REAL_HOME alongside the profile HOME:

- tools/code_execution_tool.py (execute_code)
- tools/environments/local.py (terminal background, run_env)
- agent/copilot_acp_client.py (Copilot ACP)

Child scripts can now use:
  Path(os.environ.get("HERMES_REAL_HOME", os.environ.get("HOME", "")))

to reliably find the real user home regardless of profile isolation.

Closes #25114
This commit is contained in:
zccyman
2026-06-14 03:20:21 -07:00
committed by Teknium
parent 0428945b5b
commit b00060ce54
5 changed files with 191 additions and 1 deletions
+8 -1
View File
@@ -105,7 +105,14 @@ def _resolve_home_dir() -> str:
def _build_subprocess_env() -> dict[str, str]:
env = os.environ.copy()
env["HOME"] = _resolve_home_dir()
home = _resolve_home_dir()
env["HOME"] = home
# Always expose the real user home so child scripts can find
# ~/.hermes/ even when HOME is overridden for profile isolation.
from hermes_constants import get_real_home
real = get_real_home()
if real and real != home:
env["HERMES_REAL_HOME"] = real
return env