
1. EACCES: permission denied 到底卡在哪一步EACCES: permission denied是 Claude Code 通过 npm 全局安装时最常见的拦路虎尤其在 macOS 和 Linux 上。它的本质不是 Claude Code 本身有问题而是 npm 想往一个你没有写权限的目录里塞文件。这个目录通常是/usr/local/lib/node_modules或/opt/homebrew/lib/node_modules它们归 root 所有普通用户只能读不能写。先看一个典型复现。你在终端敲下npm install -g anthropic-ai/claude-code终端立刻吐出一长串npm error code EACCES npm error syscall access npm error path /usr/local/lib/node_modules/anthropic-ai/claude-code npm error errno -13 npm error Error: EACCES: permission denied, access /usr/local/lib/node_modules/anthropic-ai/claude-code有时候报错路径会变成缓存目录npm error code EACCES npm error syscall mkdir npm error path /usr/local/lib/node_modules/anthropic-ai/.claude-code-XXXX npm error errno -13这两种报错指向同一个根因npm 的全局安装前缀prefix落在系统级目录而当前用户没有写权限。你可以用一条命令确认npm config get prefix如果输出是/usr/local或/opt/homebrew那基本就锁定了问题。如果输出是~/.nvm/versions/node/vXX.X.X这类用户目录那权限问题通常不会出现。哪些场景最容易踩这个坑我整理了一张对照表你可以先对号入座场景全局目录位置是否易触发 EACCESHomebrew 安装 NodeApple Silicon/opt/homebrew/lib/node_modules是Homebrew 安装 NodeIntel/usr/local/lib/node_modules是官网 .pkg 安装 Node/usr/local/lib/node_modules是nvm 安装 Node~/.nvm/versions/node/...否Volta 安装 Node~/.volta/...否之前用过sudo npm install -g混合权限是且更顽固这里要特别说一个高频误区很多人第一次遇到 EACCES下意识就加sudosudo npm install -g anthropic-ai/claude-code命令确实能跑完但这是把问题从「装不上」升级成「以后都装不上」。因为 sudo 会以 root 身份把包写进全局目录目录里从此混入 root 所有的文件。之后你再用普通用户执行任何全局安装或更新npm 碰到这些 root 文件又会报 EACCES。更麻烦的是 Claude Code 运行时需要写~/.claude/配置目录如果这个目录也被 root 占过启动时还会出别的错。所以正确的思路不是「提权绕过」而是「把全局目录搬到用户自己的地盘」。这也是后面所有方案的主线。理解这一点你再看各种修复命令就不会只是照抄而是知道每一步在改什么。2. 安装 Claude Code 前先把 npm 全局目录迁到用户级在动手装 Claude Code 之前先把 npm 的全局前缀改到用户目录这是一劳永逸的做法适用于 macOS、Linux 以及企业多用户服务器。核心就三步建目录、改 prefix、把 bin 加进 PATH。第一步创建用户级全局目录mkdir -p ~/.npm-global第二步让 npm 使用这个目录作为全局安装位置npm config set prefix ~/.npm-global第三步把~/.npm-global/bin加进 PATH。如果你用 zshmacOS 默认echo export PATH$HOME/.npm-global/bin:$PATH ~/.zshrc source ~/.zshrc如果你用 bashecho export PATH$HOME/.npm-global/bin:$PATH ~/.bashrc source ~/.bashrc做完这三步再确认一下配置是否生效npm config get prefix应该输出/Users/你的用户名/.npm-global或/home/你的用户名/.npm-global。如果还是/usr/local说明配置没写进去可以手动检查~/.npmrccat ~/.npmrc正常情况下应该能看到一行prefix/Users/你的用户名/.npm-global。如果没有直接手动写入echo prefix${HOME}/.npm-global ~/.npmrc现在可以安装 Claude Code 了注意不要加 sudonpm install -g anthropic-ai/claude-code安装完成后验证which claude claude --versionwhich claude应该指向~/.npm-global/bin/claude。如果这一步找不到命令八成是 PATH 没生效重新source一下配置文件或者新开一个终端窗口。如果你之前已经用 sudo 装过目录里残留了 root 文件那在改 prefix 之前还得先修权限。先看看有没有 root 所有的文件find ~/.npm -user root 2/dev/null find ~/.claude -user root 2/dev/null如果有输出执行sudo chown -R $(whoami) ~/.npm sudo chown -R $(whoami) ~/.claude然后卸载 sudo 装的旧版本清理残留sudo npm uninstall -g anthropic-ai/claude-code sudo rm -rf /usr/local/lib/node_modules/anthropic-ai sudo rm -f /usr/local/bin/claude清完再用上面的用户级目录方案重装。这套流程走下来Claude Code 的安装权限问题基本就根治了。接下来才是配置 API 接入的部分。3. 把 Claude Code 的 Base URL 与 Key 改到 TaoToken 的 settings 配置Claude Code 装好之后默认会走官方端点。如果你希望统一管理 Key、或者在国内网络环境下更稳定地调用可以把 Base URL 和 API Key 指向 TaoToken。TaoToken 提供统一的模型接入入口官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 。Claude Code 的配置主要落在~/.claude/settings.json这个文件里。你可以先看看它是否存在ls -la ~/.claude/如果没有settings.json直接新建一个。下面是一份可复制的配置片段把 Base URL、API Key 和模型 ID 三件套都写全{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的TaoToken密钥, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }这里三个字段各有分工别写混字段作用示例值ANTHROPIC_BASE_URL请求发往哪个端点https://taotoken.net/apiANTHROPIC_AUTH_TOKEN身份凭证sk-xxxxxxANTHROPIC_MODEL默认调用的模型 IDclaude-sonnet-4-20250514如果你更习惯用环境变量而不是 settings 文件也可以在 shell 配置里写export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENsk-你的TaoToken密钥 export ANTHROPIC_MODELclaude-sonnet-4-20250514两种方式二选一即可settings.json 的好处是跟着项目走、不污染全局 shell 环境。Key 从哪里来登录 TaoToken 控制台在 API Keys 页面创建即可地址是 https://taotoken.net/console/api-keys 。创建后复制那串sk-开头的字符串填进上面的配置。有一点要提醒ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY是两个不同的变量名Claude Code 读的是前者。如果你只写了ANTHROPIC_API_KEY可能会遇到认证失败。另外 Base URL 末尾不要多加斜杠https://taotoken.net/api就是完整写法写成https://taotoken.net/api/有时会导致路径拼接异常。配置改完后建议重启一下终端让环境变量和 settings 都重新加载。然后就可以进入下一步验证了。4. 一次安装与调用验证确认 Claude Code 真的通了配置写完不代表就通了得实际发一次请求验证。Claude Code 提供了非交互模式可以直接在命令行里跑一次对话非常适合做连通性测试。先确认版本和路径which claude claude --version然后跑一个最简单的请求claude -p 用一句话说明什么是递归如果配置正确你会看到模型返回的一句话解释。这一步同时验证了三件事Claude Code 二进制能正常执行、Base URL 指向了 TaoToken、API Key 认证通过。如果你想更明确地看到请求走的是哪个端点可以加上调试输出claude -p 你好 --debug调试日志里会打印出请求的 base URL 和模型 ID你可以核对是不是https://taotoken.net/api和你配置的模型。再进一步进入交互模式测试多轮对话claude进入后随便问几个问题确认上下文能正常保持。如果这一步也顺利说明整个链路完全打通了。对于需要长期在项目里用 Claude Code 做编码辅助的场景可以考虑用 TaoToken 的 Coding Plan地址是 https://taotoken.net/coding-plan 适合持续性的 Agent 编码任务。如果只是想先试试模型对话效果可以用模型对话页面 https://taotoken.net/models 快速体验。验证通过后你可能会想把这套配置固化下来。一个小技巧把~/.claude/settings.json纳入你的 dotfiles 管理换机器时直接同步省得每次重配。但注意 Key 不要提交到公开仓库可以用环境变量注入的方式处理敏感信息。5. 本篇常见错排查401、local proxy failed、reading choices 与 OAuth配置和安装过程中除了 EACCES还会撞上几类典型报错。我把它们和真实错误信息对照着列出来方便你快速定位。401 认证失败API Error: 401 Unauthorized这通常是 Key 写错、过期或者变量名用错。检查~/.claude/settings.json里是不是写的ANTHROPIC_AUTH_TOKEN而不是ANTHROPIC_API_KEY。另外确认 Key 没有多余空格复制时容易带上换行。去 https://taotoken.net/console/api-keys 重新生成一个再试。local proxy failedError: local proxy failed to start这个报错和权限、端口占用有关。先检查~/.claude/目录权限是不是被 root 占了ls -la ~/.claude/如果 owner 是 root执行sudo chown -R $(whoami) ~/.claude。另外确认没有别的进程占用 Claude Code 需要的本地端口重启终端再试。reading choices 相关报错TypeError: Cannot read properties of undefined (reading choices)这类报错多半是响应格式不符合预期常见于 Base URL 配错、请求打到了非兼容端点。核对ANTHROPIC_BASE_URL是不是https://taotoken.net/api末尾有没有多余斜杠。如果用的是自定义网关确认它返回的是 Anthropic 兼容格式。OAuth 登录循环OAuth error: invalid_grant如果你之前登录过官方账号本地可能残留了旧的 OAuth 凭证和新的 Token 配置冲突。清理一下rm -rf ~/.claude/credentials.json然后重新用 Token 方式配置。注意 Token 方式和 OAuth 方式不要混用选一种即可。claude 命令找不到command not found: claude这是 PATH 问题不是权限问题。确认~/.npm-global/bin在 PATH 里echo $PATH | grep npm-global没有的话回到第 2 节重新配置 PATH 并source。npm cache clean 也报 EACCESnpm error code EACCES npm error path ~/.npm/_cacache缓存目录被 root 占了。先修权限再清sudo chown -R $(whoami) ~/.npm npm cache clean --force排查时记住一个顺序先看npm config get prefix确认目录再看ls -la确认权限归属最后看 settings.json 确认接入配置。三步走完绝大多数报错都能定位。6. 把 Claude Code 接入 TaoToken 的完整动作清单走到这里你已经把安装权限和 API 接入两件事都处理完了。最后给一份可以直接照着做的动作清单方便你在新机器上快速复现。先处理 npm 权限把全局目录迁到用户级mkdir -p ~/.npm-global npm config set prefix ~/.npm-global echo export PATH$HOME/.npm-global/bin:$PATH ~/.zshrc source ~/.zshrc然后安装 Claude Code全程不加 sudonpm install -g anthropic-ai/claude-code which claude claude --version接着写接入配置到~/.claude/settings.json{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的TaoToken密钥, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }Key 在 https://taotoken.net/console/api-keys 创建接入文档在 https://taotoken.net/doc 可以查到最新的端点说明。最后跑一次验证claude -p 用一句话说明什么是递归看到模型正常返回整条链路就通了。如果中途卡在权限上回到第 2 节修 root 残留如果卡在认证上回到第 5 节对照报错排查。这套流程我在几台不同系统的机器上都跑过最省事的做法永远是一开始就用 nvm 或用户级 prefix别碰 sudo。