From 9dac85b069cb44cf74601f7ae867cf1fa1bc17a1 Mon Sep 17 00:00:00 2001 From: teknium1 Date: Fri, 6 Mar 2026 21:55:33 -0800 Subject: [PATCH] fix: uv pip install fails outside venv in setup wizard uv pip install requires a virtual environment by default. When hermes is installed system-wide or via pipx, the setup wizard's SDK installs (daytona, swe-rex[modal], tinker-atropos) fail with 'No virtual environment found'. Fix by passing --python sys.executable to uv, which targets the correct Python regardless of venv state. Also show the actual error message on install failure so users can debug. --- hermes_cli/setup.py | 6 ++++-- hermes_cli/tools_config.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hermes_cli/setup.py b/hermes_cli/setup.py index da45c3c67e..3343e3fac2 100644 --- a/hermes_cli/setup.py +++ b/hermes_cli/setup.py @@ -1080,7 +1080,7 @@ def setup_terminal_backend(config: dict): uv_bin = shutil.which("uv") if uv_bin: result = subprocess.run( - [uv_bin, "pip", "install", "swe-rex[modal]"], + [uv_bin, "pip", "install", "--python", sys.executable, "swe-rex[modal]"], capture_output=True, text=True ) else: @@ -1132,7 +1132,7 @@ def setup_terminal_backend(config: dict): uv_bin = shutil.which("uv") if uv_bin: result = subprocess.run( - [uv_bin, "pip", "install", "daytona"], + [uv_bin, "pip", "install", "--python", sys.executable, "daytona"], capture_output=True, text=True ) else: @@ -1144,6 +1144,8 @@ def setup_terminal_backend(config: dict): print_success("daytona SDK installed") else: print_warning("Install failed — run manually: pip install daytona") + if result.stderr: + print_info(f" Error: {result.stderr.strip().splitlines()[-1]}") # Daytona API key print() diff --git a/hermes_cli/tools_config.py b/hermes_cli/tools_config.py index fd054e1eda..c53bc42b4e 100644 --- a/hermes_cli/tools_config.py +++ b/hermes_cli/tools_config.py @@ -260,7 +260,7 @@ def _run_post_setup(post_setup_key: str): uv_bin = shutil.which("uv") if uv_bin: result = subprocess.run( - [uv_bin, "pip", "install", "-e", str(tinker_dir)], + [uv_bin, "pip", "install", "--python", sys.executable, "-e", str(tinker_dir)], capture_output=True, text=True ) else: