跳到主要内容

Windows VSCode 调用 WSL 中的 Hermes Agent 实战

· 阅读需 9 分钟

背景

这套组合的出现有一个很现实的理由:

  • VSCode 是 Windows 上最好的编辑器之一,生态丰富,Remote 插件体系成熟
  • WSL 提供了完整的 Linux 开发环境,项目依赖、脚本、网络工具链都在 WSL 里
  • Hermes Agent 跑在 Linux 上最顺畅,它需要访问项目的 Git 历史、文件结构、终端环境

所以很自然的,你会想让 VSCode 连进 WSL,然后在编辑器里直接和 Hermes 交互——写完代码让它审,遇到问题让它查,重构代码让它帮。

这篇文章就讲清楚这条路怎么打通,以及打通之后能怎么用。


什么时候需要这套方案

先确认一下场景。如果你符合以下任意一条,这篇文章就是给你写的:

  • Windows 日常办公,项目代码放在 WSL 文件系统(~/projects/ 而非 /mnt/c/
  • 已经装了 Hermes Agent 在 WSL 里,想在 VSCode 里方便地用它
  • 不想为了 AI 辅助切换到完全不同的编辑器(比如 Cursor),希望 VSCode 也能有类似的体验
  • 想复用 VSCode 的插件生态(GitLens、Error Lens、Live Share)同时享受 AI agent 能力

反之,如果你代码全在 Windows 原生盘(C:\)并且不打算搬,或者你已经在用 Cursor/VS Code Insiders with Copilot 且够用,那没必要折腾。


环境架构

┌─────────────────────────────────────────────┐
│ Windows 11/10 │
│ │
│ ┌──────────────────┐ ┌─────────────────┐ │
│ │ VSCode (UI) │ │ Edge / Chrome │ │
│ │ Remote-WSL 插件 │ │ (Hermes 浏览器) │ │
│ └────────┬─────────┘ └─────────────────┘ │
│ │ │
├───────────┼─────────────────────────────────────┤
│ WSL (Ubuntu/Debian) │
│ │ │
│ ┌────────┴─────────┐ │
│ │ VSCode Server │ │
│ │ (远程后端) │ │
│ └────────┬─────────┘ │
│ │ │
│ ┌────────┴─────────┐ ┌──────────────────┐ │
│ │ Terminal │ │ Hermes Agent │ │
│ │ (zsh/bash) │──│ (hermes 命令) │ │
│ └─────────────────┘ └──────────────────┘ │
│ │
│ ┌──────────────────────────────────┐ │
│ │ 项目代码 (~/projects/) │ │
│ │ Git 历史 · 依赖 · 构建 │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────────┘

VSCode 通过 Remote - WSL 插件在 WSL 中启动一个后端 Server,UI 仍然在 Windows 上渲染。Terminal 自然也是 WSL 里的 shell。这时候在终端里敲 hermes,调的就是 WSL 里的 Hermes Agent。


安装与配置

1. WSL 里安装 Hermes Agent

假设 WSL 已经装好。在 WSL terminal 里:

# 安装 hermes CLI(以官方方式为准)
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh

# 确认安装成功
hermes --version

# 初始化配置(如果第一次用)
hermes setup

安装完成后,hermes 命令在 WSL 的 $PATH 中可用。建议加到 ~/.zshrc~/.bashrc 里。

2. VSCode 插件安装

Windows 上的 VSCode 装两个插件就够了:

插件作用
Remote - WSL (ms-vscode-remote.remote-wsl)连入 WSL 环境
Remote Explorer (ms-vscode.remote-explorer)方便切换 WSL 实例

装好后,左下角状态栏应该有一个绿色的 >< WSL: Ubuntu 按钮,点它或者按 Ctrl+Shift+PRemote-WSL: Open Folder in WSL 打开项目。

3. 确认连通

VSCode 终端 (Ctrl+`` ) 里跑:

hermes --version
# 应该输出版本号,而不是 "command not found"

hermes --help
# 看到帮助信息即 OK

核心用法

基础:终端里直接调 Hermes

最直接的方式就是在 VSCode 终端里像用任何 CLI 工具一样用 Hermes:

# 让 Hermes 分析当前项目
hermes "分析一下这个项目的架构"

# 代码审查
hermes "帮我在 git diff 的基础上做 code review"

但这样每次都要切窗口打字,体验不够流畅。下面几个方法能大幅提升效率。

进阶一:VSCode Tasks 自动化

VSCode Tasks 允许你定义可重复执行的命令,绑定快捷键或通过命令面板触发。

在项目根目录创建 .vscode/tasks.json

{
"version": "2.0.0",
"tasks": [
{
"label": "Hermes: Code Review",
"type": "shell",
"command": "cd ${workspaceFolder} && git diff --cached | hermes 'Review this diff for bugs, security issues, and style problems. 用中文回复'",
"group": "none",
"problemMatcher": []
},
{
"label": "Hermes: 分析当前文件",
"type": "shell",
"command": "hermes '分析 ${file} 的代码结构和潜在问题'",
"group": "none",
"problemMatcher": []
},
{
"label": "Hermes: 项目架构总览",
"type": "shell",
"command": "hermes '阅读项目结构,给一份整体架构文档,包括目录设计、数据流、核心模块职责'",
"group": "none",
"problemMatcher": []
},
{
"label": "Hermes: 生成单元测试",
"type": "shell",
"command": "hermes '为 ${file} 生成 pytest 单元测试'",
"group": "none",
"problemMatcher": []
}
]
}

用法:Ctrl+Shift+PTasks: Run Task → 选一个即可。

进阶二:快捷键绑定

把常用的 Hermes 任务绑定到自定义快捷键。

keybindings.jsonCtrl+Shift+PPreferences: Open Keyboard Shortcuts (JSON))里加:

[
{
"key": "ctrl+shift+h",
"command": "workbench.action.tasks.runTask",
"args": "Hermes: Code Review"
},
{
"key": "alt+h",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "hermes '${selectedText}'\n"
}
}
]

第二个快捷键非常实用——选中一段代码,按 Alt+H,自动把选中文本作为问题发给 Hermes。比如选中一个函数签名,按 Alt+H,Hermes 会收到这条函数并分析它的设计。

进阶三:VSCode 命令面板集成

如果你想要更灵活的输入界面,可以装一个 Command VariableMulti Command 插件来构建交互式任务,但个人体验下来,Tasks + 快捷键已经覆盖 90% 的需求——用快捷键直接发送选中文本是最顺手的。


高频实战场景

场景 1:Git commit 前自动审查

pre-commit hook 里调 Hermes 做代码审查:

# .git/hooks/pre-commit
#!/bin/bash
git diff --cached | head -c 8000 | hermes \
'Review the following git diff for bugs and security issues. \
Reply "OK" if clean, or list issues if found. 用中文回复。'

这适合单人项目或小团队。大项目建议只审查增量 DIFF 的前 8000 字符,避免卡死。

场景 2:重构辅助

在 VSCode 中选中要重构的代码段,按 Alt+H

hermes '重构以下代码,提炼公共逻辑,减少重复,保持可读性'

Hermes 会给出重构后的代码,你可以直接复制粘贴验证。

场景 3:快速理解不熟悉的代码

打开一个陌生文件,用快捷键或 Tasks:

hermes '解释 ${file} 的核心逻辑和设计模式'

对于遗留系统或者同事写的代码,这比逐行读快得多。

场景 4:项目级技术债务分析

hermes '扫描项目,识别技术债务:过时的依赖、未使用的导入、潜在的性能瓶颈、违反单一职责的函数。'

Hermes 会基于项目文件树和代码内容给出全局视角的分析。


踩坑记录

1. 路径问题——代码放哪

WSL 文件系统以外(/mnt/c/)性能差很多。 跨文件系统的 IO 操作(ext4 ←→ NTFS)会走 DrvFS 翻译,git status 慢几倍,Hermes 读文件也会延迟。

最佳实践:代码放在 ~/projects/(WSL 原生 ext4),不要放在 /mnt/c/Users/...

但如果你需要在 Windows 上通过 Explorer 直接访问代码,可以在 Windows 里用 \\wsl$\Ubuntu\home\用户名\projects\ 访问——这是 WSL 的 9P 协议网络共享路径。

2. 环境变量不一致

Windows 的 PATH 和 WSL 的 PATH 是独立的。在 VSCode 终端里能跑 hermes 不代表在所有 shell 里都能——确保:

# ~/.zshrc 或 ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"

如果 Hermes 用了 .env 或者环境变量(API Key 等),也确认它们被加载。

3. 代理配置

Windows 的代理设置不会自动同步到 WSL。如果你在 Windows 上走代理:

# ~/.zshrc
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"

注意 WSL 的 127.0.0.1 指向的是 WSL 自己的 loopback,不是 Windows 的。要连接 Windows 上的代理,需要用 Windows 的 WSL 虚拟网卡 IP:

# 在 WSL 里获取 Windows 的 WSL 网卡 IP
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'
# 比如输出 172.x.x.x

# 然后在 .zshrc 里
export http_proxy="http://172.x.x.x:7890"

4. git 换行符

Windows 默认 core.autocrlf=true,WSL 里应该设 inputfalse,否则 git diff 会看到大量 ^M 换行符,污染 Hermes 的 diff 输入:

git config --global core.autocrlf input

5. VSCode 终端类型

VSCode 内置终端默认继承 Windows 的环境变量。通过 Remote-WSL 连入后,它启动的是 WSL 的 shell,这时候 echo $SHELL 应该是 /bin/zsh/bin/bash。如果发现 hermes 找不到,排查一下:

# 看看 PATH 对不对
echo $PATH | grep -o 'hermes\|\.local/bin'

6. Windows 下 VSCode 自体终端 vs Remote-WSL 终端

对比维度原生 VSCode 终端Remote-WSL 终端
Shell 类型PowerShell / CMDbash / zsh
Hermes 可用❌ (除非你在 Windows 也装了)
文件路径C:\.../home/...
git 行为Windows 换行符Linux 换行符

一定要在 Remote-WSL 窗口中打开终端,而不是本地窗口。 看左下角状态栏:绿色 >< WSL: Ubuntu 就是对的。


效果对比:有 / 没有这套方案

场景之前之后
做 code review手动逐行看 diffCtrl+Shift+H → Hermes 审完报结果
不熟悉的代码打开文件逐行读选中 → Alt+H → 问 Hermes
写新模块新建文件照着模板写写接口签名 → Hermes 生成骨架
定位 bug加 print/log 跑几次描述症状 → Hermes 给出怀疑位置
重构手动梳理调用关系Hermes 先给依赖图和分析

核心变化不是 Hermes 替你写了多少代码,而是 从"遇到问题自己查"变成"遇到问题问 Hermes",且整个交互不离开编辑器。


一张图总结

Windows
└── VSCode (UI + 插件)

Remote-WSL 连接


WSL (Ubuntu)
├── VS Code Server (后端)
├── Hermes Agent (CLI)
├── Git / 构建工具
└── 项目代码 (~/projects/)

快捷键:
Ctrl+Shift+P → Tasks → 选 Hermes 任务
Alt+H → 选中代码直接问 Hermes
Ctrl+Shift+H → 快捷 Code Review

这套方案最大的价值不是省了多少时间,而是降低了使用 AI agent 的门槛——不用切窗口、不用开网页、不用复制粘贴代码。Hermes 就在你的终端里,快捷键一按就能用。

如果你也在用 VSCode + WSL 的组合,不妨花十分钟配一下。之后每天写代码都会感觉顺手很多。