From a3d993322120b4e939762c46c7a1629e19bc73db Mon Sep 17 00:00:00 2001 From: Hibryda Date: Sat, 7 Mar 2026 01:15:01 +0100 Subject: [PATCH] fix(v2): strip CLAUDE* env vars at Rust level in SidecarManager Add env_clear() + envs(clean_env) to Command in SidecarManager to filter all CLAUDE-prefixed environment variables before spawning the sidecar process. This provides primary defense against SDK nesting detection when BTerminal is launched from a Claude Code terminal. The JS-side stripping via SDK env option is retained as defense-in-depth. --- v2/bterminal-core/src/sidecar.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/v2/bterminal-core/src/sidecar.rs b/v2/bterminal-core/src/sidecar.rs index 3f05b13..5d28ec7 100644 --- a/v2/bterminal-core/src/sidecar.rs +++ b/v2/bterminal-core/src/sidecar.rs @@ -61,8 +61,16 @@ impl SidecarManager { log::info!("Starting sidecar: {} {}", cmd.program, cmd.args.join(" ")); + // Build a clean environment stripping all CLAUDE* vars to prevent + // the SDK from detecting nesting when BTerminal is launched from a Claude Code terminal + let clean_env: Vec<(String, String)> = std::env::vars() + .filter(|(k, _)| !k.starts_with("CLAUDE")) + .collect(); + let mut child = Command::new(&cmd.program) .args(&cmd.args) + .env_clear() + .envs(clean_env) .stdin(Stdio::piped()) .stdout(Stdio::piped()) .stderr(Stdio::piped())