1. 为什么 claude -v 正常,一启动就报 path 异常
如果你在 Windows 上折腾过 Claude Code,大概率见过这个画面:claude -v能打印版本号,node -v、npm -v也都正常,可只要敲下claude回车,终端立刻甩出一句Claude Code on Windows requires git-bash,还提示你去设置CLAUDE_CODE_GIT_BASH_PATH。你按提示配了环境变量,重开终端,还是同样的报错。反复配、反复错,最后开始怀疑是不是 PATH 彻底坏了。
这里要先纠正一个高频误判:这个报错里的 “path” 指的不是claude.exe有没有进 PATH,而是 Claude Code 在 Windows 上启动交互模式时,找不到一个可用的 Git Bash。claude -v能跑,只证明claude.exe被系统找到了;它完全不证明bash.exe被 Claude Code 正确识别。这两件事在 Windows 上是分开的。
所以排查的核心不是 npm prefix,也不是把 PATH 越堆越长,而是三件事:bash.exe的真实路径在哪、CLAUDE_CODE_GIT_BASH_PATH有没有被当前进程真正读到、以及你启动 Claude 的那个终端到底继承了哪一份环境变量。本文就围绕这三件事,给出可复制的settings.json骨架、TaoToken 统一 Key 通道的接入示例,以及一套逐步验证动作,帮你把“配了还是报错”这个死循环拆开。
2. 先把 TaoToken 通道和 Key 准备好
在动环境变量之前,建议先把模型通道这条链路理顺,否则你修完 Git Bash 报错,下一步又会卡在认证上。TaoToken 提供统一的 API 通道,Claude Code、Coding Plan 等场景可以共用一套 Key,省得每个工具单独配一遍。
你需要做的准备很简单:打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台创建一个 API Key。控制台入口是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。API 的基础地址是 https://taotoken.net/api ,注意这个地址不带任何查询参数,配置时直接填这一串即可。
提示:Key 只在创建时完整显示一次,复制后先存到密码管理器或临时文本里,别等关了页面再找。
如果你只是想先验证模型能不能通,可以打开模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 发一条消息试试。如果打算长期用 Claude Code 做编码或跑 Agent,建议直接看 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,把通道和额度一次配好,后面就不用反复切 Key 了。
3. 可复制的 settings.json 骨架与 Git Bash 配置
Claude Code 在 Windows 上的配置分两层:一层是系统环境变量CLAUDE_CODE_GIT_BASH_PATH,另一层是项目或用户级的settings.json。很多人只配了其中一层,或者配了但没生效,就会一直报错。
先给一份可以直接抄的settings.json骨架。它通常放在用户目录下的.claude/settings.json,或者项目根目录的.claude/settings.json:
{ "env": { "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe", "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoTokenKey" }, "permissions": { "allow": [], "deny": [] } }这里有几个细节必须说清楚。第一,JSON 里的反斜杠要写成双反斜杠\\,否则会被当成转义字符,路径直接解析失败。第二,ANTHROPIC_BASE_URL填https://taotoken.net/api,不要带末尾斜杠,也不要加 UTM 参数。第三,ANTHROPIC_API_KEY填你在控制台创建的那串 Key。
如果你更习惯用系统环境变量而不是settings.json,那就在当前 CMD 会话里先做临时验证:
set "CLAUDE_CODE_GIT_BASH_PATH=C:\Program Files\Git\bin\bash.exe" echo %CLAUDE_CODE_GIT_BASH_PATH% "%CLAUDE_CODE_GIT_BASH_PATH%" --version claude这三步的顺序很关键。先set只影响当前窗口,用来快速判断“路径对不对”;echo确认变量真的写进去了;再用引号包住变量去执行--version,确认这个bash.exe本身能跑;最后才启动claude。如果这样一设就能进交互模式,说明问题就是环境变量没被当前会话读到,而不是 Claude 本体坏了。
确认临时可用后,再做永久设置:
setx CLAUDE_CODE_GIT_BASH_PATH "C:\Program Files\Git\bin\bash.exe"注意:
setx只对之后新开的窗口生效,当前窗口不会变。而且不要用setx PATH "%PATH%;..."去追加 PATH,Windows 对setx写入的 PATH 有长度截断风险,很容易把原本正常的 PATH 搞坏。要改 PATH,走系统环境变量图形界面手工追加C:\Program Files\Git\cmd和C:\Program Files\Git\bin更稳。
4. 逐步验证:从环境变量优先级到重启复测
配完之后别急着下结论,按下面这套动作一步步验证,每一步都有明确的“通过标准”,避免又陷入“我觉得配好了”的错觉。
第一步,确认bash.exe真实存在。在 CMD 里执行:
where git where bash dir "C:\Program Files\Git\bin\bash.exe" dir "C:\Program Files\Git\usr\bin\bash.exe"如果where bash返回了多个结果,比如一个来自C:\Program Files\Git,另一个来自 Cygwin、MSYS2 或 WSL,那 Claude 很可能拿错了那个。优先保留C:\Program Files\Git\bin\bash.exe这一条。
第二步,检查环境变量优先级。Windows 上用户变量和系统变量同名时,进程读到的可能是其中一份,而不同终端继承的又不一样。执行:
set CLAUDE_CODE_GIT_BASH_PATH如果输出为空,说明当前窗口根本没读到这个变量。这时候要么用第 3 节的临时set补上,要么关掉所有终端重开。
第三步,确认settings.json被正确解析。Claude Code 启动时会读配置,如果 JSON 语法错了,它会静默忽略或报别的错。可以用 Node 快速校验:
node -e "console.log(JSON.parse(require('fs').readFileSync(process.env.USERPROFILE + '/.claude/settings.json','utf8')))"能打印出对象就说明 JSON 合法。报Unexpected token就是括号或逗号写错了。
第四步,重启终端后复测。这一步最容易被跳过。setx写完必须彻底关闭所有 CMD、PowerShell、Windows Terminal 窗口,退出 VS Code,再重新打开。然后执行:
echo %CLAUDE_CODE_GIT_BASH_PATH% claude如果这次不再报requires git-bash,而是进入交互界面或开始走认证流程,说明 Git Bash 这一关过了。接下来如果卡在认证,就回到第 2 节检查 TaoToken 的ANTHROPIC_BASE_URL和 Key 是否填对。
5. 本篇常见错排查
报错一:临时 set 后能跑,setx 后新窗口还是报错。大概率是变量写到了用户级,但你启动 Claude 的进程读的是系统级,或者反过来。用set CLAUDE_CODE_GIT_BASH_PATH在新窗口里确认到底读到了哪一份,必要时用户级和系统级都配一遍。
报错二:路径里有空格,Claude 把Program Files拆坏了。这是 Windows 路径解析的经典坑。如果确认是空格导致,可以把 Git 装到无空格目录,比如C:\Git,然后把变量改成C:\Git\bin\bash.exe。这不是最优解,但在部分兼容性问题里确实有效。
报错三:终端里能跑,VS Code 扩展面板还是报 git-bash。扩展宿主进程不一定继承你新设的环境变量。先在纯终端里用claude,确认 CLI 正常;如果只有扩展报错,优先在独立终端使用,或检查扩展是否需要单独配置环境变量。
报错四:Git Bash 找到了,但后面冒出C:\c\...这类奇怪路径。这是 MSYS 路径转换的副作用,通常和 Git Bash 的路径映射有关。可以在settings.json里显式指定CLAUDE_CODE_GIT_BASH_PATH,避免 Claude 自己去猜。
报错五:settings.json改了没反应。先确认文件位置对不对,用户级是~/.claude/settings.json,项目级是项目根目录的.claude/settings.json。项目级优先级通常更高,两边都改了的话以项目级为准。
6. 修完 Git Bash 之后,把通道固定下来
Git Bash 这一关过了,只是让 Claude Code 能在 Windows 上正常启动。真正决定你日常用起来顺不顺的,是模型通道稳不稳。与其每次换工具都重新配一遍 Key,不如把 TaoToken 作为统一入口固定下来。
接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各场景的配置说明。如果你主要用 Claude Code 做编码,Coding Plan 页面 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 有对应的套餐和接入方式。Key 管理和新建都在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。
最后留一个我自己的习惯:每次改完环境变量,先开一个新的 CMD 窗口跑echo %CLAUDE_CODE_GIT_BASH_PATH%和claude -v,两个都正常再进项目目录。这样能把“环境没生效”和“Claude 本身有问题”分开,省掉大量来回试错的时间。