1. 先看清报错:npm error code 128 到底卡在哪一步
npm error code 128和npm error An unknown git error occurred这两个报错,本质上是同一件事的两种说法:npm 在安装 OpenClaw 时,需要从 GitHub 拉取一个用 Git 协议声明的依赖,而这次 Git 操作失败了。Git 返回的退出码 128 是一个通用失败码,它不告诉你具体原因,只告诉你"这次 Git 命令没跑通"。
OpenClaw 的依赖树里有一个关键包libsignal-node,它在package.json里被写成git+ssh://git@github.com/whiskeysockets/libsignal-node.git这种形式。这意味着 npm 不会去 npm registry 下载它,而是直接调用你本机的git命令,通过 SSH 协议去 GitHub 克隆源码。只要你的机器上没有配好 GitHub 的 SSH Key,或者网络环境不允许 SSH 出站,这一步就会立刻失败,然后 npm 把 Git 的 128 退出码原样抛给你。
所以这个报错跟 OpenClaw 本身关系不大,它考验的是你本机 Git + SSH + npm 三者的协作链路。适合遇到这个报错的开发者按顺序排查:先确认 SSH 能不能连上 GitHub,再决定是补 SSH Key 还是把协议换成 HTTPS,最后才是 npm 层面的配置。下面我按"先定位、再修复、后验证"的顺序,把每一步的命令和预期结果都写清楚。
2. 动手前先把 TaoToken 的 Key 和通道准备好
安装链路跑通之后,OpenClaw 还需要接入模型才能真正用起来。这里建议提前把 TaoToken 的 API Key 准备好,后面配置config.toml时直接填进去,省得装完再回头折腾。
TaoToken 是一个统一的大模型 API 通道,你可以把它理解成"一个 Key 对接多种模型"的入口。它的官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。注册后在控制台创建 API Key,就能拿到一串以sk-开头的密钥。
具体操作路径是:先打开控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,在 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 点新建,复制生成的 Key 存好。如果你后面要长期跑编码类任务或者 Agent,可以顺手看一下 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,它更适合高频调用场景。想先验证模型通不通,可以直接用模型对话页面 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 发一条测试消息。
这一步不解决 npm 报错,但能让你在装完 OpenClaw 后立刻有可用的模型通道,避免"装好了却连不上模型"的二次卡壳。
3. 可复制配置:SSH、git 协议与 .npmrc 骨架
3.1 先验证 SSH 到 GitHub 是否通
在动手改配置之前,先用一条命令确认问题出在哪一层。打开终端(Windows 用 Git Bash 或 PowerShell),执行:
ssh -T git@github.com如果返回Hi username! You've authenticated successfully.,说明 SSH Key 已经配好,问题可能在 npm 或网络层。如果返回git@github.com: Permission denied (publickey),那就是没有可用的 SSH Key,需要走 3.2 生成。如果命令卡住很久然后超时,多半是 22 端口被网络环境拦了,直接跳到 3.3 用 HTTPS 替换。
3.2 生成并挂载 GitHub SSH Key
如果上一步是 publickey 报错,先生成一对 ed25519 密钥:
ssh-keygen -t ed25519 -C "your_email@example.com"一路回车用默认路径~/.ssh/id_ed25519即可。然后复制公钥内容:
cat ~/.ssh/id_ed25519.pub把输出的整行内容粘贴到 GitHub 的 Settings → SSH and GPG keys → New SSH key 里保存。再跑一次ssh -T git@github.com验证,看到成功提示就说明这一层通了。
3.3 用 HTTPS 替换 SSH 协议(网络受限时首选)
如果 22 端口不通,或者你不想折腾密钥,最省事的办法是让 git 自动把 SSH 地址改写成 HTTPS。执行:
git config --global url."https://github.com/".insteadOf git@github.com: git config --global url."https://github.com/".insteadOf ssh://git@github.com/这两条命令的意思是:以后 git 只要看到git@github.com:或ssh://git@github.com/开头的地址,就自动替换成https://github.com/。npm 调用 git 克隆依赖时,就会走 HTTPS 而不是 SSH,绕开出站限制。
3.4 .npmrc 骨架
在项目根目录或用户目录下建一个.npmrc,把 git 相关行为固定下来,避免 npm 版本差异带来的额外校验:
# .npmrc git-tag-version=false fund=false audit=falsegit-tag-version=false可以避免 npm 在安装 git 依赖时尝试打 tag,减少一类边缘报错。改完后清一次缓存再装:
npm cache clean --force npm install -g openclaw@latest3.5 config.toml 接入 TaoToken
OpenClaw 装好后,模型接入写在config.toml里。下面是一个可直接改用的骨架,把sk-换成你在 TaoToken 控制台拿到的 Key:
# config.toml [model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" model = "claude-3-5-sonnet" [agent] max_tokens = 4096 temperature = 0.7base_url填 TaoToken 的 API 地址,api_key填你的密钥,model按你实际要用的模型名填。这样 OpenClaw 的所有模型请求都会走 TaoToken 这条统一通道,不用为每个模型单独配 Key。
4. 验证请求:确认安装与模型通道都跑通
4.1 验证 OpenClaw 安装成功
重新执行安装命令后,用版本号确认:
openclaw --version能打印出版本号,说明 npm 依赖已经完整拉取,libsignal-node那一步过了。
4.2 验证 git 协议替换生效
想确认 HTTPS 替换真的起作用,可以单独测一次克隆:
git ls-remote https://github.com/whiskeysockets/libsignal-node.git如果这条命令能列出 refs,说明 HTTPS 路径通畅。反过来,如果之前 SSH 那条git ls-remote ssh://git@github.com/...报 128,现在换成 HTTPS 能通,就基本锁定是协议层的问题。
4.3 验证 TaoToken 通道
用 curl 直接打一次 TaoToken 的接口,确认 Key 和地址都对:
curl https://taotoken.net/api/v1/models \ -H "Authorization: Bearer sk-你的TaoToken密钥"返回模型列表就说明通道正常。如果返回 401,检查 Key 是否复制完整;返回 404,检查base_url有没有多写或少写路径段。这一步过了,再启动 OpenClaw 让它读config.toml,模型请求就能正常发出。
5. 本篇常见错排查
报错一:npm error code 128依旧出现,但 SSH 测试是通的。这种情况多半是 npm 缓存里还留着旧的失败记录。执行npm cache clean --force后重装。如果还不行,检查是不是全局 git 配置被别的工具覆盖了,用git config --global --list看insteadOf规则还在不在。
报错二:An unknown git error occurred后面跟着USER/GROUP字样。这通常意味着上游仓库改名或迁移了,whiskeysockets/libsignal-node可能已经不是当前有效地址。去 GitHub 搜一下最新仓库名,手动克隆后npm link,再回到 OpenClaw 目录安装。
报错三:HTTPS 替换后提示could not read Username。说明这个仓库需要认证,HTTPS 匿名拉不下来。这时候要么回到 SSH Key 方案,要么确认该依赖是否有公开的替代源。不要在这里填账号密码到 URL 里,容易泄露。
报错四:Windows 下git config改了但 npm 不认。Windows 上 npm 可能用的是自带的 git 而不是系统 git。用npm config get git看它指向哪个可执行文件,必要时用npm config set git "C:\Program Files\Git\cmd\git.exe"指到系统 git。
报错五:装完后 OpenClaw 启动报模型连接失败。先单独用 4.3 的 curl 验证 TaoToken 通道,再检查config.toml里的base_url是不是写成了带尾斜杠的版本。https://taotoken.net/api和https://taotoken.net/api/在部分客户端里行为不一致,建议按文档给的写法来。接入细节可以对照接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 核对参数名。
6. 后续接入与长期使用建议
安装链路修好只是第一步。如果你后面要长期用 OpenClaw 跑编码或 Agent 任务,建议把模型通道固定成 TaoToken 这一条,Key 统一管理,换模型时只改config.toml里的model字段,不用动其他配置。需要新建或轮换 Key 时,直接去 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 操作。高频调用场景可以看 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,普通验证用模型对话 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 就够了。
回到 npm error code 128 本身,记住排查顺序:先ssh -T git@github.com定位是不是密钥问题,再决定补 Key 还是换 HTTPS,最后才动 npm 配置。绝大多数情况下,3.3 的两条insteadOf命令就能解决,剩下的交给缓存清理和仓库地址核对。