# 当 Hermes Agent 偷走了你的 node


<!--more-->
nvm use v22.22.1` 后 `node -v` 仍是 **v22.23.1？**

不是 nvm 坏了，是 Hermes Agent 安装脚本在 `~/.local/bin` 里留了三个“卧底”：`node`、`npm`、`npx`。

------

## 一、现象：nvm 切换“失效”

macOS + nvm 用户常有的操作：

```bash
nvm use v22.22.1
Now using node v22.22.1 (npm v10.9.8)
node -v
# v22.23.1   ❓
which node
# /Users/me/.local/bin/node
```

`nvm current` 明明是 v22.22.1，终端里的 `node` 却是另一份。

------

## 二、凶手：Hermes Agent 的安装器

Hermes Agent 官方安装脚本（`curl ... install.sh | bash`）为了“自带 Node 运行时不污染系统”，会做这样一组动作（参考其 `install_node` 逻辑）：

1. 下载 Node v22 LTS 解压到 **`~/.hermes/node/`**
2. 把 `node/npm/npx` **软链到 `~/.local/bin/`** `ln -sf ~/.hermes/node/bin/node ~/.local/bin/node ln -sf ~/.hermes/node/bin/npm  ~/.local/bin/npm ln -sf ~/.hermes/node/bin/npx  ~/.local/bin/npx`
3. 把 `~/.local/bin` 写进你的 shell profile（`export PATH="$HOME/.local/bin:$PATH"`）

Hermes 自己启动会用 `~/.hermes/node/bin/node` 绝对路径，没问题。

**但你的交互终端 PATH 里，`~/.local/bin` 排在了 nvm 的 `.../v22.22.1/bin` 前面**——于是 `node` 永远先命中 Hermes 那份 v22.23.1。

> ⚠️ 这不是 bug，是 Hermes 故意做的“运行时隔离”，但副作用是：**和 nvm 共用一台机器时，node 命令被抢答**。

顺带连带反应：

- `npm list -g` 在 nvm 上下文看不到 codex/gemini/picgo（它们被你之前 `npm i -g` 装进了 `~/.local` prefix）
- `opencode` 在 nvm v22.22.1/bin 里，却能跑（PATH 向后扫到了）
- 你以为 nvm 没生效，其实是 PATH 优先级问题

------

## 三、最小代价修复（我最终选的方案）

不需要卸 Hermes，不需要卸 brew node，不需要改 `.zprofile` 顺序——

```bash
rm ~/.local/bin/node ~/.local/bin/npm ~/.local/bin/npx
```

重启终端（或新开 tab）：

```bash
nvm use v22.22.1
which node      # ~/.nvm/versions/node/v22.22.1/bin/node ✅
node -v         # v22.22.1 ✅
which codex     # ~/.local/bin/codex（仍在）
codex --version # 正常，env node 现在走 nvm 的 node ✅
```

Hermes Agent 自身完全不受影响——它只认 `~/.hermes/node/bin/node` 绝对路径，不依赖那三个软链。

------

## 四、为什么这是“最舒服”的解法

| 方案                                       | 代价                                           |
| ------------------------------------------ | ---------------------------------------------- |
| 卸 brew node                               | 可行，但不是根因                               |
| 改 `.zprofile` 把 nvm 锁 PATH 最前         | 有效，但要防后续脚本再插队                     |
| **删 `~/.local/bin` 里 node/npm/npx 软链** | **一刀，根因消失，Hermes 自活，nvm 夺回 node** |

删完后环境收敛成：

- `node/npm/npx` → 唯一来源 nvm
- `codex/gemini/picgo/claude/uv` → 在 `~/.local/bin`，运行时借 nvm 的 node
- Hermes → `~/.hermes/node` 自闭环

------

## 五、以后装“自带 Node 的 AI 工具”要注意

Hermes、Claude Code、Codex CLI、Gemini CLI、OpenCode……只要安装器往 `~/.local/bin` 写 node 软链，都可能和 nvm 打架。

**诊断三连永远是：**

```bash
which node
echo $PATH | tr ':' '\n' | grep -E 'nvm|local|brew'
npm config get prefix
```

看到 `node` 不在 `~/.nvm/...` 下，先怀疑是不是某个 Agent 的软链抢了位。

------

> 一行教训：**AI Agent 可以自带 Node，但别让它的软链躺在 `~/.local/bin` 里和你抢 `node` 这个名字。** `rm` 掉就清净了。


