From 6a751df13b18641aa65a3fa737cbf3bbc895b9cc Mon Sep 17 00:00:00 2001 From: octo-patch Date: Sat, 18 Apr 2026 12:40:25 +0800 Subject: [PATCH] fix: --config flag now fully overrides ~/.strix/cli-config.json (fixes #377) Previously, env vars applied from the default config at module import time were not cleared when --config was later processed, causing settings from ~/.strix/cli-config.json to leak into runs that specified a custom config. Track which vars were applied by the initial default-config load in Config._applied_from_default. In apply_config_override, clear those vars before applying the custom config so only the custom file's settings take effect. --- strix/config/config.py | 11 ++++++++++- strix/interface/main.py | 7 +++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/strix/config/config.py b/strix/config/config.py index 782101dd..255df7c6 100644 --- a/strix/config/config.py +++ b/strix/config/config.py @@ -2,7 +2,7 @@ import contextlib import json import os from pathlib import Path -from typing import Any +from typing import Any, ClassVar STRIX_API_BASE = "https://models.strix.ai/api/v1" @@ -56,6 +56,10 @@ class Config: # Config file override (set via --config CLI arg) _config_file_override: Path | None = None + # Tracks env vars set by the initial default-config load so they can be + # cleared when a --config override is later applied (avoids leakage). + _applied_from_default: ClassVar[dict[str, str]] = {} + @classmethod def _tracked_names(cls) -> list[str]: return [ @@ -151,6 +155,11 @@ class Config: os.environ[var_name] = var_value applied[var_name] = var_value + # Record what was applied from the default config so it can be cleared + # if a --config override is later provided (prevents leakage). + if cls._config_file_override is None and not force: + cls._applied_from_default = applied + return applied @classmethod diff --git a/strix/interface/main.py b/strix/interface/main.py index 7ac6f135..bc88da67 100644 --- a/strix/interface/main.py +++ b/strix/interface/main.py @@ -6,6 +6,7 @@ Strix Agent Interface import argparse import asyncio import logging +import os import shutil import sys from pathlib import Path @@ -528,6 +529,12 @@ def pull_docker_image() -> None: def apply_config_override(config_path: str) -> None: + # Clear env vars that were automatically applied from the default config file + # so they don't leak into the custom config context. + for var_name in Config._applied_from_default: + os.environ.pop(var_name, None) + Config._applied_from_default = {} + Config._config_file_override = validate_config_file(config_path) apply_saved_config(force=True)