diff --git a/src/cli.ts b/src/cli.ts index bc1ec352e..6a7fba97a 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -630,8 +630,9 @@ if (!process.stdin.isTTY) { process.exit(1) } -// Welcome screen — shown on every fresh interactive session before TUI takes over -{ +// Welcome screen — shown on every fresh interactive session before TUI takes over. +// Skip when the first-run banner was already printed in loader.ts (prevents double banner). +if (!process.env.GSD_FIRST_RUN_BANNER) { const { printWelcomeScreen } = await import('./welcome-screen.js') printWelcomeScreen({ version: process.env.GSD_VERSION || '0.0.0', diff --git a/src/loader.ts b/src/loader.ts index f40e2e0c5..237f5bab7 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -49,7 +49,8 @@ process.env.PI_PACKAGE_DIR = pkgDir process.env.PI_SKIP_VERSION_CHECK = '1' // GSD runs its own update check in cli.ts — suppress pi's process.title = 'gsd' -// Print branded banner on first launch (before ~/.gsd/ exists) +// Print branded banner on first launch (before ~/.gsd/ exists). +// Set GSD_FIRST_RUN_BANNER so cli.ts skips the duplicate welcome screen. if (!existsSync(appRoot)) { const cyan = '\x1b[36m' const green = '\x1b[32m' @@ -62,6 +63,7 @@ if (!existsSync(appRoot)) { ` Get Shit Done ${dim}v${gsdVersion}${reset}\n` + ` ${green}Welcome.${reset} Setting up your environment...\n\n` ) + process.env.GSD_FIRST_RUN_BANNER = '1' } // GSD_CODING_AGENT_DIR — tells pi's getAgentDir() to return ~/.gsd/agent/ instead of ~/.gsd/agent/