快速结论:这个报错通常出现在 Windows 桌面版 LobeHub 中调用 claude-code 异构代理时,SDK 路径直接把 npm 生成的 claude.cmd 交给 child_process.spawn,Node.js 在 Windows 上无法直接 spawn .cmd,从而抛出 spawn EINVAL。优先排查的是调用 claude-code 时实际传入的 commandPath 是否为 .cmd shim,以及是否走了 sendPromptWithClaudeSdk 这条路径。
适用环境:OS:Windows 11 (x64);LobeHub:2.2.14;Claude Code:2.1.235(npm 全局安装);Node.js:v24.14.1。
最快修复方案:暂无确认的一步修复方案。Issue 中给出的修复方向是:在 Windows 上把 commandPath 交给 Claude Agent SDK 之前,先复用 CLI 路径已有的 shim 解包逻辑(类似 resolveCliSpawnPlan),把 claude.cmd 解析为实际的 node.exe 或 claude.exe,而不是直接把 .cmd 传给 SDK。该方案属于代码修复方向,尚未在 Issue 中标记为已验证。
注意事项:代码库刻意保留 PATH 顺序,不优先选择 .exe,以规避此前 #17376 涉及的 PATH 顺序问题,因此“优先使用 claude.exe”的做法可能与既有设计冲突。另外,通过 lh CLI 的 spawnLhHeteroExec 路径本身是正常的,问题只出在 SDK 直连 spawn 这条路径上。
问题场景
用户在 Windows 桌面版 LobeHub(LobeHub 2.2.14)中配置并调用 claude-code 异构代理(heterogeneous agent),触发 sendPromptWithClaudeSdk 流程时失败,返回 “SDK error”,且没有任何结果返回。该问题与通过 lh CLI 调用的路径形成对比:spawnLhHeteroExec 路径可以正常工作,只有直接走 Claude Agent SDK 的路径会失败。
复现步骤(来自 Issue):在 Windows 上执行 npm install -g @anthropic-ai/claude-code,在 LobeHub 中添加一个 claude-code heterogeneous agent,然后调用该 agent,即可触发 spawn EINVAL。
报错原文
Starting Claude Code SDK session: {
commandPath: 'C:\Users\<user>\AppData\Roaming\npm\claude.cmd'
}
[error] Claude SDK session error: Error: spawn EINVAL
at ChildProcess.spawn (node:internal/child_process)
at WT.spawnLocalProcess (.../sdk-MJfKLhQi.js)
原因分析
最可能的原因:HeterogeneousAgentCtr 通过 sendPromptWithClaudeSdk 直接把 claude.cmd(npm 生成的批处理 shim)作为 commandPath 传给 @anthropic-ai/claude-agent-sdk 的 pathToClaudeCodeExecutable,SDK 内部对该路径直接调用 child_process.spawn。自 Node 18.20.2 / 20.12.2 针对 CVE-2024-27980 的修复之后,Node.js 在 Windows 上不能直接 spawn .cmd 文件,必须使用 shell: true 或 cmd.exe /c,否则抛出 EINVAL。
对比之下,lh hetero exec 路径之所以正常,是因为它使用了 resolveCliSpawnPlan:在 Windows 上读取 .cmd shim 的内容,解析出其中的 node.exe 与脚本路径,然后直接 spawn node.exe <script>,完全不经过 cmd.exe,也不把 .cmd 传给 spawn。SDK 路径缺少这层 shim 解包,因此失败。
值得注意的是,检测阶段本身是通过 resolveCliSpawnPlan 验证可运行的,但在 Windows 上最终确认的 commandPath 仍是来自 where 的 claude.cmd,因为代码把 .cmd 和 .exe 都列入 WINDOWS_RUNNABLE_EXTS,并且刻意保留 PATH 顺序,不优先选择 .exe(以避免较早的 npm claude.cmd 被另一个工具自带的较晚 claude.exe 抢占,参见 #17376)。虽然 npm 包内实际还附带了原生二进制 node_modules/@anthropic-ai/claude-code/bin/claude.exe,但 SDK 的查找逻辑仍会选择 claude.cmd。
环境排查
- 操作系统确认:是否为 Windows 11 (x64) 或其它 Windows 版本,Windows 是此问题的触发前提。
- Node.js 版本确认:Issue 中为 v24.14.1;需注意 Node 18.20.2 / 20.12.2 之后的版本均包含 CVE-2024-27980 修复,行为一致。
- LobeHub 版本确认:Issue 中为 2.2.14。
- Claude Code 安装方式与版本确认:通过
npm install -g @anthropic-ai/claude-code全局安装,版本 2.1.235,确认claude.cmd位于%AppData%\Roaming\npm\下。 - 确认调用路径:问题发生在
sendPromptWithClaudeSdk(SDK 直连 spawn),而spawnLhHeteroExec(lh CLI)路径可正常工作,可用于对照定位。 - 确认同目录下是否存在
@anthropic-ai/claude-code/bin/claude.exe原生二进制。
解决步骤
- 先在 Windows 上确认复现路径:通过 LobeHub 桌面端调用 claude-code heterogeneous agent,复现
spawn EINVAL;再用lh hetero exec调用同一代理,确认 CLI 路径正常,从而确认问题位于 SDK 路径。 - 确认日志中的
commandPath是否以.cmd结尾(例如C:\Users\<user>\AppData\Roaming\npm\claude.cmd),排除其它路径或权限问题。 - 在代码层面,于 Windows 上构造
ClaudeAgentSdkSession之前,先对 commandPath 执行与 CLI spawn 路径一致的 shim 解包,例如调用resolveCliSpawnPlan(commandPath, []),并取plan.command作为传给 SDK 的路径(即node.exe或真实.exe,而非.cmdshim)。 - 避免采用“优先选择
.exe”的替代方案:Issue 指出该方式会引入 PATH 顺序问题,与既有#17376的设计冲突,因此 shim 解包方案更符合现有 Windows 处理逻辑。 - 如果上述代码修复暂不可用,可优先尝试的可替代思路是:确保 claude-code 的调用走
lh hetero exec路径,该路径在 Issue 中已被确认可正常工作;但需注意这是作者侧的行为差异,不代表官方推荐配置。
验证方法
修复后,在 Windows 桌面版 LobeHub 中重新调用 claude-code heterogeneous agent,观察日志中传给 Claude Agent SDK 的 commandPath 不再是 .cmd shim,而是解包后的 node.exe 或原生 claude.exe 路径;此前出现的 [error] Claude SDK session error: Error: spawn EINVAL 不再出现,且代理能正常返回结果。同时可对比 lh hetero exec 路径,确认两条路径行为一致。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[Bug] Android 1.0.15 routes remote Codex device execution to Provider API instead of Agent Gateway](https://www.chat-gpts.plus/wp-content/uploads/2026/09/18713-46b4b404-768x403.jpg)
