diff --git a/hermes_cli/config.py b/hermes_cli/config.py index 758118492..f2b5d42c1 100644 --- a/hermes_cli/config.py +++ b/hermes_cli/config.py @@ -17,6 +17,7 @@ import stat import subprocess import sys +import tempfile from pathlib import Path from typing import Dict, Any, Optional, List, Tuple @@ -958,8 +959,19 @@ def save_env_value(key: str, value: str): lines[-1] += "\n" lines.append(f"{key}={value}\n") - with open(env_path, 'w', **write_kw) as f: - f.writelines(lines) + fd, tmp_path = tempfile.mkstemp(dir=str(env_path.parent), suffix='.tmp', prefix='.env_') + try: + with os.fdopen(fd, 'w', **write_kw) as f: + f.writelines(lines) + f.flush() + os.fsync(f.fileno()) + os.replace(tmp_path, env_path) + except BaseException: + try: + os.unlink(tmp_path) + except OSError: + pass + raise _secure_file(env_path) # Restrict .env permissions to owner-only (contains API keys)