From 4303ee48c9849f6ba1cdfb420eddca4d9ae2d541 Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Fri, 20 Feb 2026 22:22:11 +0700 Subject: [PATCH] fix(delegation): strip CLAUDECODE env var to bypass nested session guard Claude Code v2.1.39+ sets CLAUDECODE env var and refuses to launch if detected, breaking CCS auto-delegation which spawns child Claude processes. Strip the var from both interactive (execClaude) and headless (HeadlessExecutor) spawn paths. Closes #588 --- src/delegation/headless-executor.ts | 5 +++++ src/utils/shell-executor.ts | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/delegation/headless-executor.ts b/src/delegation/headless-executor.ts index 3cf1b45f..9e2ad2c3 100644 --- a/src/delegation/headless-executor.ts +++ b/src/delegation/headless-executor.ts @@ -207,10 +207,15 @@ export class HeadlessExecutor { console.error(ui.info(`Delegating to ${modelName}...`)); } + // Strip Claude Code nested session guard env var to allow CCS delegation + // (Claude Code v2.1.39+ sets CLAUDECODE to detect nested sessions) + const { CLAUDECODE: _nested, ...cleanEnv } = process.env; + const proc = spawn(claudeCli, args, { cwd, stdio: ['ignore', 'pipe', 'pipe'], timeout, + env: cleanEnv, }); let stdout = ''; diff --git a/src/utils/shell-executor.ts b/src/utils/shell-executor.ts index 017cd709..e8a8b93f 100644 --- a/src/utils/shell-executor.ts +++ b/src/utils/shell-executor.ts @@ -84,6 +84,10 @@ export function execClaude( ? { ...baseEnv, ...envVars, ...webSearchEnv } : { ...baseEnv, ...webSearchEnv }; + // Strip Claude Code nested session guard env var to allow CCS delegation + // (Claude Code v2.1.39+ sets CLAUDECODE to detect nested sessions) + delete env.CLAUDECODE; + // propagate key env vars to tmux session so agent team teammates // (spawned via tmux split-window) inherit the correct config dir if (process.env.TMUX && envVars) {