[BUG] Working directory does not persist between Bash commands on Windows (Git Bash/Powershell)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
When using Claude Code on Windows with either Git Bash or PowerShell, the working directory does not persist between separate Bash tool invocations, even when CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=0 is set.
Also tested with the opposite CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1 with no change in behavior.
Tested both using ! {command} and asking Claude to run the command with Bash tool with no success either
What Should Happen?
According to the documentation, when CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=0 (or unset), the working directory should persist between Bash commands.
Error Messages/Logs
No error messages
Steps to Reproduce
- set enviroment variable to 0 or unset it:
-
$env:CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR = 0in PowerShell -
export CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=0in Git Bash2. echo the variable to the value is set
-
- Open Claude Code
- Run using Bash mode:
- Run
! echo $CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR, to see the variable is loaded correctly - Run
! cd some-directory && pwd→ outputs "some-directory" path, in my case D:/src/some-directory ✓ - Run
! pwd→ outputsthe original working directory, in my case /d/src ✗ (should be /d/src/some-directory)
- Run
- Alternatively run asking Claude to use the Bash tool
- Ask CC "Print the environment variable
CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIRusing you Bash tool" to see the variable value is in effect - Ask CC "Run
cd some-directory && pwdusing you Bash tool" → outputs "some-directory" path, in my case D:/src/some-directory ✓ - Ask CC "Run
pwdusing you Bash tool" → outputsthe original working directory, in my case /d/src ✗ (should be /d/src/some-directory)
- Ask CC "Print the environment variable
Claude Model
Multiple models
Is this a regression?
I don't know, it always behaved like this for me.
Last Working Version
No response
Claude Code Version
2.0.76 (Claude Code)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell, Git Bash
Additional Information
I don't know if there was a regression, but it always behaved like this for me.
Found 3 possible duplicate issues:
- https://github.com/anthropics/claude-code/issues/2001
- https://github.com/anthropics/claude-code/issues/11067
- https://github.com/anthropics/claude-code/issues/4100
This issue will be automatically closed as a duplicate in 3 days.
- If your issue is a duplicate, please close it and 👍 the existing issue instead
- To prevent auto-closure, add a comment or 👎 this comment
🤖 Generated with Claude Code
It is kind of the opposite of issue #2001
I'm also running into this issue on Mac OS.
Confirming this issue on macOS (Darwin 24.6.0)
Claude Code version: 2.1.1 Platform: macOS (darwin)
Testing Results
I tested both values of CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR in .claude/settings.json:
{
"env": {
"CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR": "1"
}
}
| Setting | Reset Message | Actual Directory Behavior |
|---|---|---|
="1" |
Hidden | Directory still resets to project root |
="0" |
Shown ("Shell cwd was reset to...") | Directory still resets to project root |
Key Finding
The env var only controls whether the "Shell cwd was reset to /path/to/project" message is displayed - it does NOT actually prevent the working directory from resetting.
Reproduction
# With CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1
cd /tmp && pwd
# Output: /tmp (no message)
pwd
# Output: /Users/.../Projects/depscan (reset to project root!)
Workaround
For now, prefix all bash commands with cd <target-dir> &&:
cd /tmp/my-worktree && git status
cd /tmp/my-worktree && pnpm install
This is particularly painful for git worktree workflows where you want to work in a different directory than the project root.
Confirming this issue on macOS (Darwin 24.6.0)
Claude Code version: 2.1.1 Platform: macOS (darwin)
Testing Results
I tested both values of
CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIRin.claude/settings.json:{ "env": { "CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR": "1" } } Setting Reset Message Actual Directory Behavior
="1"Hidden Directory still resets to project root="0"Shown ("Shell cwd was reset to...") Directory still resets to project rootKey Finding
The env var only controls whether the "Shell cwd was reset to /path/to/project" message is displayed - it does NOT actually prevent the working directory from resetting.
Reproduction
With CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1
cd /tmp && pwd
Output: /tmp (no message)
pwd
Output: /Users/.../Projects/depscan (reset to project root!)
Workaround
For now, prefix all bash commands with
cd <target-dir> &&:cd /tmp/my-worktree && git status cd /tmp/my-worktree && pnpm install This is particularly painful for git worktree workflows where you want to work in a different directory than the project root.
Exactly this with the git worktree workflows. Behavior is exactly the same for me.