Claude Code on Windows: It's Not Always Permission Issues
I'm a full time windows dev these days and I've been heavily using Claude Code both at work, and on personal projects. This is an issue that hit me both on my work machine and my personal machine so I figured it was worth writing up.
The Problem
Claude kept saying things like "I'm running into permission issues" when trying to delete or manipulate files. Commands would fail with Permission denied errors.

rm: cannot remove 'index.html': Permission denied
The Real Issue
It's not permissions - it's paths.
Claude Code on Windows defaults to using bash.exe from System32, not Git Bash. This causes path translation issues that manifest as permission errors. Windows paths like C:\mike\code\alvo\ don't always translate correctly through the bash.exe layer.
Here's the key difference:
C:\Windows\System32\bash.exe --version
GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
"C:\Program Files\Git\bin\bash.exe" --version
GNU bash, version 5.2.37(1)-release (x86_64-pc-msys)
System32's bash's target triplet is x86_64-pc-linux-gnu - this is part of WSL v1. While the target triplet for Git bash is x86_64-pc-msys (MSYS2, designed for Windows).
WSL v1's bash expects Linux-style paths and doesn't handle Windows paths well, leading to these "permission" errors that are really path translation failures. It's a compatibility layer that translates Linux system calls to Windows, but it struggles with native Windows paths.
The Solution
The proper fix is to ensure Git bash.exe is in your PATH before System32's bash.exe.
Check which bash is being used:
(Get-Command bash).Source
I've used a simple batch script whereis.bat since forever which does exactly the same thing:
whereis bash
whereis.bat looks like this - just one line:
@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i
This iterates through all possible extensions (.exe, .bat, .cmd, etc.) and searches the PATH for the first match. Save it to a directory that's in your PATH (like C:\Users\YourName\bin) and you've got a Unix-style whereis for Windows.
If it returns C:\Windows\System32\bash.exe, that's your problem. You need to add C:\Program Files\Git\bin to your PATH (or C:\Program Files\Git\usr\bin depending on your Git installation) before System32.
This is only an issue on native Windows. If you're running Claude Code inside WSL, you won't encounter this problem - WSL's bash works great within its own environment.