問題

claude-mem 插件的所有 hook(SessionEnd、SessionStart、PostToolUse 等)在 session 結束時報錯:

SyntaxError: Unexpected token '.'
    at Loader.moduleStrategy (internal/modules/esm/translators.js:133:18)

錯誤發生在 bun-runner.js:97

return settings?.enabledPlugins?.['claude-mem@thedotmack'] === false;

根本原因

系統安裝的 Node.js 是 v12.22.9(Ubuntu 22.04 apt 套件),不支援 optional chaining(?.)語法,該語法在 Node.js v14 才加入。

Claude-mem 的 hooks 包含一段 PATH 修正邏輯,設計上應自動切換到 NVM 的新版 node:

export PATH="$HOME/.nvm/versions/node/v$(ls \"$HOME/.nvm/versions/node\" ...)/bin:..."

但這段邏輯有 bug:ls \"$HOME/.nvm/versions/node\" 在 fresh bash subprocess 裡,反斜線逃脫會讓 ls 失敗,導致 PATH 沒有更新,node 仍然指向系統 v12。

修復步驟

  1. 安裝 NVM + Node.js v24.14.1
  2. 建立 /usr/local/bin/node symlink → NVM v24,讓所有 bash 子行程預設拿到新版 node(不依賴 NVM PATH 修正邏輯)
  3. 建立 ~/.claude/.mcp.json,用絕對路徑啟動 mcp-search MCP server
  4. settings.json 加入 enabledMcpjsonServers: ["mcp-search"] 及相關 allow rules
  5. 修正 TaskCompleted hook 的路徑(Mac 路徑 /Users/lookoutking//root/.claude/

關鍵教訓

  • Plugin hook 命令在 fresh bash subprocess 執行,不繼承 interactive shell 的環境
  • ls \"path\"$() 內用 \" 逃脫,在某些 bash 呼叫方式下會靜默失敗
  • 解法不是修 plugin 邏輯,而是讓預設 PATH 本身就有正確的 node(symlink)

Connections