[FEATURE] Desktop app: setting to choose the integrated Terminal pane shell (e.g. Git Bash on Windows)
Feature request
On Windows, the desktop app's integrated Terminal pane (Views -> Terminal / Ctrl+backtick) always spawns bare powershell.exe as a child of claude.exe. There is currently no supported way to choose a different shell for it:
settings.json"defaultShell"is documented as applying only to input-box!commands (and per #72389 the desktop app ignores it even there).CLAUDE_CODE_GIT_BASH_PATHonly affects the agent's Bash tool, not the user-facing terminal.- The desktop docs (
desktop.md, section "Run commands in the terminal") do not document shell selection at all.
Request: a setting to pick the shell (and args) used for new integrated-terminal tabs - e.g. a terminal.shell key, or extending defaultShell semantics to cover the pane - similar to VS Code's terminal.integrated.profiles. On Windows, Git Bash is the natural first option since Claude Code already locates and uses it for the Bash tool, so a bash-preferring user ends up with Claude running Git Bash while their own terminal is stuck on PowerShell 5.1.
This would also resolve #78596, where the hardcoded powershell.exe spawn breaks entirely on machines where PowerShell 5.1 is blocked by policy.
Environment
- Claude Code desktop app on Windows 11 Pro (build 26200),
CLAUDE_CODE_ENTRYPOINT=claude-desktop - Git for Windows installed (
C:\Program Files\Git\bin\bash.exe)
Additional detail for maintainers
The pane's powershell.exe is spawned bare (no flags) by the app's Node utility process (--utility-sub-type=node.mojom.NodeService). Reading the live pane process's environment block shows it carries CLAUDE_AGENT_SDK_VERSION and TERM=xterm-256color but not CLAUDECODE - so the docs' statement that the terminal "shares the same environment as Claude" is only partially accurate (the agent's own tool shells get CLAUDECODE=1; the pane does not).
Current workaround
Because the pane loads the user's PowerShell profile, this profile snippet swaps it to Git Bash (keyed off CLAUDE_AGENT_SDK_VERSION, since CLAUDECODE is absent in the pane) - but it is clearly a hack:
if (($env:CLAUDE_AGENT_SDK_VERSION -or $env:CLAUDECODE -eq '1') -and
-not [Console]::IsInputRedirected -and
-not ([Environment]::GetCommandLineArgs() -like '-NonI*')) {
$gitBash = 'C:\Program Files\Git\bin\bash.exe'
if (Test-Path $gitBash) { & $gitBash -i -l; exit $LASTEXITCODE }
}
Related: #78596, #72389