diff --git a/apps/server/src/provider/Drivers/ClaudeHome.test.ts b/apps/server/src/provider/Drivers/ClaudeHome.test.ts index ae2dacd0f2311..c772b79efe184 100644 --- a/apps/server/src/provider/Drivers/ClaudeHome.test.ts +++ b/apps/server/src/provider/Drivers/ClaudeHome.test.ts @@ -60,7 +60,7 @@ it.layer(NodeServices.layer)("ClaudeHome", (it) => { }); it.effect( - "drops the launching Claude session and labels processes t3-code unless overridden", + "drops the launching Claude session and Electron's run-as-Node flag, and labels processes t3-code unless overridden", () => Effect.gen(function* () { const fileSystem = yield* FileSystem.FileSystem; @@ -72,6 +72,7 @@ it.layer(NodeServices.layer)("ClaudeHome", (it) => { CLAUDE_CODE_SESSION_ID: "host-session", CLAUDE_CODE_MESSAGING_SOCKET: "/tmp/host-claude.sock", CLAUDE_EFFORT: "high", + ELECTRON_RUN_AS_NODE: "1", KEEP: "1", }; const instance = [ diff --git a/apps/server/src/provider/Drivers/ClaudeHome.ts b/apps/server/src/provider/Drivers/ClaudeHome.ts index ed5d8fca2ad7c..8042a7f16e491 100644 --- a/apps/server/src/provider/Drivers/ClaudeHome.ts +++ b/apps/server/src/provider/Drivers/ClaudeHome.ts @@ -76,6 +76,9 @@ export const mergeClaudeProcessEnvironment = Effect.fn("mergeClaudeProcessEnviro CLAUDE_CODE_ENTRYPOINT: "t3-code", }; for (const name of CLAUDE_HOST_SESSION_VARIABLES) delete baseEnvironment[name]; + // The desktop runs the server as Node through Electron. Commands Claude runs inherit its env, so + // an Electron app they start (T3 Code itself, VS Code) would run as Node and exit. + delete baseEnvironment.ELECTRON_RUN_AS_NODE; const environment = yield* mergeProviderInstanceEnvironment(instanceEnvironment, baseEnvironment); const settingsEntrypoint = (yield* readClaudeSettingsEnv(config, undefined, environment)) .CLAUDE_CODE_ENTRYPOINT;