: << 'CMDBLOCK' @echo off REM Cross-platform polyglot wrapper for hook scripts. REM On Windows: cmd.exe runs the batch portion, which finds and calls bash. REM On Unix: the shell interprets this as a script (: is a no-op in bash). REM REM Hook scripts use extensionless filenames (e.g. "session-start" not REM "session-start.sh") so Claude Code's Windows auto-detection -- which REM prepends "bash" to any command containing .sh -- doesn't interfere. REM REM Usage: run-hook.cmd [args...] if "%~1"=="" ( echo run-hook.cmd: missing script name >&2 exit /b 1 ) set "HOOK_DIR=%~dp0" REM Try Git for Windows bash in standard locations if exist "C:\Program Files\Git\bin\bash.exe" ( "C:\Program Files\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9 exit /b %ERRORLEVEL% ) if exist "C:\Program Files (x86)\Git\bin\bash.exe" ( "C:\Program Files (x86)\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9 exit /b %ERRORLEVEL% ) REM Per-user Git for Windows installer ("Only for me" / winget user scope) if exist "%LOCALAPPDATA%\Programs\Git\bin\bash.exe" ( "%LOCALAPPDATA%\Programs\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9 exit /b %ERRORLEVEL% ) REM Scoop user install (`scoop install git`) if exist "%USERPROFILE%\scoop\apps\git\current\usr\bin\bash.exe" ( "%USERPROFILE%\scoop\apps\git\current\usr\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9 exit /b %ERRORLEVEL% ) REM Try bash on PATH (e.g. user-installed Git Bash, MSYS2, Cygwin). Note that REM on stock Windows 10/11 `where bash` resolves to C:\Windows\System32\bash.exe REM (the WSL launcher), which fails on Windows-style script paths. The explicit REM probes above must therefore be exhausted first. where bash >nul 2>nul if %ERRORLEVEL% equ 0 ( bash "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9 exit /b %ERRORLEVEL% ) REM No bash found - exit silently rather than error REM (plugin still works, just without SessionStart context injection) exit /b 0 CMDBLOCK # Unix: run the named script directly SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SCRIPT_NAME="$1" shift exec bash "${SCRIPT_DIR}/${SCRIPT_NAME}" "$@"