diff --git a/cron/scheduler.py b/cron/scheduler.py index e76f67064cf9..9c669e2d7f77 100644 --- a/cron/scheduler.py +++ b/cron/scheduler.py @@ -1486,6 +1486,10 @@ def _run_job_impl(job: dict) -> tuple[bool, str, str, Optional[str]]: } if job.get("base_url"): runtime_kwargs["explicit_base_url"] = job.get("base_url") + if job.get("api_key"): + runtime_kwargs["explicit_api_key"] = os.path.expandvars( + job.get("api_key", "") + ) runtime = resolve_runtime_provider(**runtime_kwargs) except AuthError as auth_exc: # Primary provider auth failed — try fallback chain before giving up. diff --git a/hermes_cli/providers.py b/hermes_cli/providers.py index 0017004ee089..6790f3bdfb3a 100644 --- a/hermes_cli/providers.py +++ b/hermes_cli/providers.py @@ -145,11 +145,13 @@ class HermesOverlay: "opencode": HermesOverlay( transport="openai_chat", is_aggregator=True, + extra_env_vars=("OPENCODE_ZEN_API_KEY",), base_url_env_var="OPENCODE_ZEN_BASE_URL", ), "opencode-go": HermesOverlay( transport="openai_chat", is_aggregator=True, + extra_env_vars=("OPENCODE_GO_API_KEY",), base_url_env_var="OPENCODE_GO_BASE_URL", ), "kilo": HermesOverlay( @@ -162,6 +164,11 @@ class HermesOverlay: is_aggregator=True, base_url_env_var="HF_BASE_URL", ), + "gemini": HermesOverlay( + transport="openai_chat", + extra_env_vars=("GOOGLE_API_KEY", "GEMINI_API_KEY"), + base_url_env_var="GEMINI_BASE_URL", + ), "novita": HermesOverlay( transport="openai_chat", is_aggregator=True,