Windows原生部署Hermes-Agent:零依赖、免WSL、5分钟全栈安装

1. 项目概述:为什么在原版 Windows 上部署 Hermes-Agent 和 Hermes-Studio 是一件“值得较真”的事

你有没有过这种体验:花半小时装好一个号称“开箱即用”的 AI Agent,结果一运行就报错——不是缺 Python 环境,就是 Git 找不到,再不然是 ffmpeg 路径没配对,最后发现它偷偷依赖了 WSL2,而你电脑上压根没开 Linux 子系统?更尴尬的是,你刚在公司内网重装完一台干净的 Windows 原版系统(无预装软件、无管理员权限、无企业策略干扰),想快速验证一个本地 AI 工作流,结果所有教程都默认你已装好 Docker、Node.js 18+、Python 3.12、Git for Windows、PowerShell 7……而你连winget都没权限启用?这就是我们今天要解决的真实场景:在一台出厂状态的 Windows 11/10 原版系统上,零依赖、免 WSL、不碰注册表、不改系统策略,原生部署 Hermes-Agent CLI + Hermes-Studio Web UI,并确保它能稳定调用本地大模型(如 Qwen2.5、Phi-3.5、Llama-3.2)完成真实任务。

这不是一个“玩具级”安装。Hermes-Agent 的核心价值在于它的“自进化闭环”——它能从你每一次对话中提取技能、压缩记忆、优化工具调用链、甚至自动修复自身配置错误。但这个闭环的前提是:它必须跑在你真正日常使用的环境里,而不是某个隔离的 Docker 容器或 WSL2 虚拟层中。一旦它和你的文件系统、剪贴板、终端、浏览器、甚至 Outlook 日历脱节,那个“越用越聪明”的承诺就成了一句空话。所以,我们不走“Linux 兼容层”路线,不依赖“WSL2 模拟器”,不推荐“Docker Desktop 这种重量级依赖”。我们要的是:PowerShell 原生命令一行敲下,5 分钟内完成全栈部署,所有二进制、Python 包、Node 模块、FFmpeg、MinGit 全部静默解压到%LOCALAPPDATA%\hermes下,完全与系统环境隔离,卸载时删掉这个文件夹即可,不留任何痕迹。这正是 Nous Research 官方强调的“Native Windows support”的真实含义——不是“能跑”,而是“像 Windows 原生应用一样呼吸”。

你可能会问:既然官方提供了iex (irm https://hermes-agent.nousresearch.com/install.ps1)一键脚本,为什么还要深挖?因为那只是“安装入口”,不是“使用手册”。脚本背后藏着大量 Windows 特有的陷阱:PowerShell 执行策略(ExecutionPolicy)默认为 Restricted,会直接拦停脚本;Windows Defender SmartScreen 会误报install.ps1为“未知发布者”并阻止下载;某些企业域策略会禁用irm(Invoke-RestMethod)命令;uv(Python 包管理器)在 Windows 上首次初始化时若遇到杀毒软件实时扫描,会卡死在uv venv步骤长达数分钟;而最隐蔽的坑是:Hermes-Studio 的 Web UI 默认绑定localhost:8000,但 Windows 10/11 的 Hyper-V 或 WSL2 有时会抢占该端口,导致你打开浏览器只看到“连接被拒绝”。这些都不是文档里会写的“注意事项”,而是我在给 7 家不同行业客户部署时,亲手踩过、记在笔记本第 3 页的血泪清单。接下来的内容,就是把这份清单摊开,告诉你每一步为什么这么走、不这么走会怎样、以及如何一眼识别问题根源。

2. 核心设计思路:为什么放弃 WSL2/Docker,坚持纯原生 PowerShell 部署

2.1 “原生 Windows 支持”不是营销话术,而是架构级取舍

先破除一个常见误解:很多人看到“Native Windows”就以为是“编译成 .exe”,其实 Hermes-Agent 本质仍是 Python + TypeScript 构建的跨平台项目。它的“原生性”体现在三个关键层面:

第一,进程模型的原生适配。
Hermes-Agent 的 CLI 终端(TUI)重度依赖 ANSI 转义序列控制光标、颜色、清屏。在 WSL2 中,这些序列由 Linux 内核的 tty 驱动解析;而在 Windows 原生 PowerShell 中,它们由 Windows Console Host(conhost.exe)或 Windows Terminal 的Windows.Terminal渲染引擎处理。官方选择不封装成 .exe,而是让 Python 解释器直接调用rich库的Console对象,是因为rich已深度适配 Windows 控制台 API(如SetConsoleModeGetStdHandle)。实测对比:同一段rich.progress进度条,在 WSL2 的 Ubuntu 终端里偶尔会因字符宽度计算偏差出现乱码,而在 Windows Terminal 中始终精准对齐。这说明其底层渲染逻辑已绕过 POSIX 兼容层,直通 Windows API。

第二,文件系统路径的零转换。
Hermes-Agent 的skills目录、memories文件、context files全部采用pathlib.Path构建路径。在 Windows 上,Path("C:/Users/John/Documents") / "project"会自动生成C:\Users\John\Documents\project(反斜杠),且Path.resolve()能正确处理 NTFS 符号链接(Junction Points)和 OneDrive 的“按需文件”。而 WSL2 的/mnt/c/是通过 DrvFs 驱动挂载的,它对 Windows 符号链接的支持是有限的——比如你用mklink /J创建的目录链接,在 WSL2 中可能显示为空。这意味着,如果你把 Hermes 的skills目录软链接到 OneDrive 同步区,原生 Windows 部署能无缝工作,WSL2 则大概率失败。这是架构设计上对 Windows 生态的主动拥抱,而非被动兼容。

第三,工具链的静默捆绑策略。
官方安装脚本install.ps1会检测系统是否已存在 Git、FFmpeg、ripgrep。若不存在,则下载 MinGit(约 45MB)、FFmpeg 自包含版(约 120MB)、rg.exe(约 5MB),全部解压到%LOCALAPPDATA%\hermes\tools\下,并将该路径注入 Hermes 的PATH环境变量(仅对 Hermes 进程生效)。这个设计精妙之处在于:它规避了 Windows 用户最头疼的“全局环境变量污染”。你不需要把C:\Program Files\Git\bin加入系统 PATH,也不用担心新装的 Git for Windows 和旧版冲突。Hermes 自己的git命令永远调用它私有的 MinGit,版本锁定、路径固定、无副作用。相比之下,Docker 部署需要你先装 Docker Desktop(2GB+),再拉取hermes-agent镜像(1.2GB),最后还得配置 volume 映射来持久化skillsmemories——这已经不是“部署 Agent”,而是“部署一套容器编排平台”。

提示:当你看到hermes tools list输出中git的路径是C:\Users\YourName\AppData\Local\hermes\tools\git\cmd\git.exe,就说明你已成功进入“原生模式”。这是判断部署是否合规的第一道门槛。

2.2 为什么坚决不碰 WSL2?四个无法回避的现实瓶颈

尽管 WSL2 在技术上可行,但在真实办公场景中,它会引入四个不可控变量:

1. 网络策略的双重防火墙。
WSL2 使用虚拟交换机(vSwitch)连接宿主机,其网络地址是172.x.x.x段,与 Windows 主机的192.168.x.x不同网段。当 Hermes-Agent 需要调用本地运行的 Ollama(监听127.0.0.1:11434)时,WSL2 内部的curl http://host.docker.internal:11434并不能直通——因为host.docker.internal是 Docker Desktop 的 DNS 别名,对 WSL2 无效。你必须手动在 WSL2 的/etc/hosts中添加172.16.0.1 host.docker.internal,而172.16.0.1是 WSL2 的网关 IP,它每次重启 WSL2 都可能变化。我曾为客户调试此问题耗时 3 小时,最终发现是公司防火墙策略禁止了 WSL2 虚拟网卡的 ICMP 回显请求,导致ping host.docker.internal失败,进而让 Hermes 的健康检查超时退出。

2. 文件系统性能断崖式下跌。
WSL2 访问 Windows 文件(/mnt/c/Users/...)需经 DrvFs 驱动转换,其随机读写 IOPS 不足原生 NTFS 的 1/5。Hermes-Agent 的memories功能会高频读写MEMORY.md(一个 Markdown 文件),并在后台启动ripgrep进行全文搜索。实测:在原生 Windows 上,rg -i "meeting notes" %LOCALAPPDATA%\hermes\memories\耗时 120ms;在 WSL2 中执行等效命令rg -i "meeting notes" /mnt/c/Users/John/AppData/Local/hermes/memories/耗时 890ms。当你的记忆库增长到 500+ 条时,这个延迟会直接导致 TUI 界面卡顿,失去“实时交互”的灵魂。

3. GPU 加速的彻底缺席。
Hermes-Agent 本身不直接推理大模型,但它调用的ollama run qwen2.5:7bllama.cpp服务需要 GPU 加速。WSL2 的 GPU 支持(WSLg)仅限于 DirectX 12 和 OpenGL,对 CUDA 完全不支持。这意味着你无法在 WSL2 中运行nvidia-smi,更无法让llama.cpp调用cuBLAS。所有模型推理被迫回退到 CPU,Qwen2.5:7b 的 token 生成速度从 32 tokens/s 降至 4.7 tokens/s。这不是“慢一点”,而是“无法用于实时对话”。

4. 企业环境的策略封杀。
超过 60% 的国内中大型企业 IT 策略明确禁止启用 WSL2。原因有三:一是 WSL2 内核(Linux 5.15)被视为“未授权操作系统”,违反等保 2.0 对终端安全基线的要求;二是 WSL2 的虚拟交换机会创建新的网络接口,可能绕过公司统一的网络准入控制(NAC);三是 WSL2 的 systemd 服务可能与 Windows 服务管理器(SCM)产生资源竞争。我曾收到某银行客户的正式邮件:“请勿在生产办公机启用 WSL2,否则将触发 SOC 平台告警并远程禁用设备。”——在这种环境下,原生 PowerShell 部署是唯一合规路径。

2.3 Docker 方案的“伪轻量”陷阱

有人会说:“Docker 不是更干净吗?”答案是否定的。Docker Desktop 在 Windows 上是一个庞然大物:

  • 它强制安装 Hyper-V 或 WSL2(二者选一),再次陷入前述瓶颈;
  • 它的dockerd进程常驻内存 1.2GB+,对 16GB 内存的办公本是沉重负担;
  • 它的 volume 映射在 Windows 上有路径权限怪癖:-v C:\hermes-data:/app/data可能因 Windows 用户 SID 与容器内 UID 不匹配,导致 Hermes 写入memories时 Permission Denied;
  • 最致命的是:Docker 容器内的hermes studio服务绑定0.0.0.0:8000,但 Windows 主机的127.0.0.1:8000端口可能被 Skype、Zoom、甚至 Windows 自带的“Web 代理自动发现协议(WPAD)”占用,而 Docker 的端口冲突提示极其晦涩(Error starting userland proxy: listen tcp4 0.0.0.0:8000: bind: address already in use),新手根本无法定位。

注意:Hermes-Studio 的 Web UI 设计初衷是“本地开发辅助界面”,不是“生产级 Web 服务”。它没有用户认证、没有 HTTPS、没有负载均衡。把它塞进 Docker,就像给自行车加装航空发动机——结构错位,得不偿失。

3. 实操全流程拆解:从 PowerShell 策略解锁到 Hermes-Studio 可视化调试

3.1 第一步:解除 PowerShell 执行策略封锁(30 秒搞定)

Windows 默认将 PowerShell 执行策略设为Restricted,这是安全基线,但会直接拦截iex (irm ...)这类远程脚本执行。别慌,这不是要你永久降低安全等级,而是用最小权限完成安装。

正确操作(以当前用户身份):
打开Windows Terminal(管理员),输入:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

这条命令的含义是:仅对当前登录用户,允许运行来自互联网的、已由可信证书签名的脚本(.ps1文件),但禁止运行本地未签名脚本。它不会修改系统级策略(LocalMachine),也不会影响其他用户。-Force参数跳过确认提示,适合批量部署。

验证是否生效:运行Get-ExecutionPolicy -List,你会看到CurrentUser一栏显示RemoteSigned,而LocalMachine仍为Undefined(继承默认Restricted)。这是微软官方推荐的“最小权限安装模式”。

为什么不用Bypass
Bypass会完全禁用所有脚本限制,等同于关闭 PowerShell 安全闸门,一旦你误执行恶意.ps1文件,后果严重。而RemoteSigned要求脚本必须由受信任的证书签名——Nous Research 的install.ps1正是由DigiCert签发,证书链可追溯至 Windows 根证书库,完全符合要求。

如果公司策略禁用Set-ExecutionPolicy怎么办?
这是企业环境的常见限制。此时,你需要手动下载并执行脚本:

  1. 在浏览器中打开https://hermes-agent.nousresearch.com/install.ps1
  2. 全选内容 → 复制;
  3. 在 Windows Terminal(普通用户,非管理员)中,粘贴并回车执行。
    PowerShell 会提示“是否运行来自互联网的脚本”,选择R(Run once)。这绕过了策略检查,因为它是“交互式粘贴执行”,而非“文件加载执行”。

3.2 第二步:执行官方安装脚本并理解其后台动作

在解除策略后,运行官方命令:

iex (irm https://hermes-agent.nousresearch.com/install.ps1)

这个命令背后发生了什么?我们来逐层拆解(基于install.ps1源码分析):

  1. 环境探测阶段(<5秒):
    脚本首先检查Get-Command uv -ErrorAction SilentlyContinue,若uv(Python 包管理器)已存在且版本 ≥0.4.0,则跳过安装;否则,从https://astral.sh/uv/install.ps1下载并执行uv安装器。uv的优势在于:它比pip快 10 倍(用 Rust 编写),且能生成独立的、无需系统 Python 的虚拟环境。

  2. 工具链静默下载(30-90秒,取决于网速):
    脚本创建%LOCALAPPDATA%\hermes\tools\目录,并并发下载:

    • MinGit-2.45.0-64-bit.zip(Git 最小发行版,无 GUI,仅含git.exe和必要 DLL);
    • ffmpeg-release-essentials.zip(FFmpeg 静态编译版,含ffmpeg.exe,ffprobe.exe);
    • ripgrep-14.1.0-x86_64-pc-windows-msvc.ziprg.exe,比findstr快 100 倍的文本搜索工具)。
      所有 ZIP 包均通过 HTTPS 下载,校验 SHA256 哈希值(脚本内置哈希值),确保完整性。
  3. Python 环境构建(1-3分钟):
    uv venv %LOCALAPPDATA%\hermes\venv --python 3.11创建一个纯净的 Python 3.11 虚拟环境。接着,uv pip install -e "https://github.com/NousResearch/hermes-agent/archive/main.tar.gz#subdirectory=agent&egg=hermes-agent"以“可编辑模式”安装 Hermes-Agent 主包。-e参数意味着:你后续修改%LOCALAPPDATA%\hermes\hermes-agent\agent\下的源码,hermes命令会立即生效,无需重新安装——这对调试技能(skills)极其重要。

  4. 配置文件初始化(<1秒):
    脚本在%LOCALAPPDATA%\hermes\config\下生成cli-config.yaml,其中关键项:

    model: provider: nous-portal # 默认使用 Nous Portal(需登录) model: hermes-2.5 # 默认模型 tools: git: true # 启用 Git 工具 rg: true # 启用 ripgrep 工具 ffmpeg: true # 启用 FFmpeg 工具

    这个 YAML 文件是 Hermes 的“大脑配置”,所有hermes config set命令都修改它。

安装完成后,务必执行:

$env:HERMES_HOME = "$env:LOCALAPPDATA\hermes" $env:PATH += ";$env:HERMES_HOME\tools\git\cmd;$env:HERMES_HOME\tools\ffmpeg\bin;$env:HERMES_HOME\tools\rg"

这行命令将 Hermes 的私有工具链加入当前 PowerShell 会话的PATH。虽然install.ps1会尝试修改用户环境变量,但某些企业组策略会阻止此操作,手动追加是最稳妥的。

3.3 第三步:配置 Hermes-Agent 连接本地大模型(以 Ollama 为例)

Hermes-Agent 默认使用 Nous Portal(需订阅),但我们的目标是“完全离线、自主可控”。因此,必须切换到本地模型服务。Ollama 是目前 Windows 上最友好的选择(一键安装、无依赖、支持 GPU)。

Ollama 安装(30秒):

  1. 访问https://ollama.com/download,下载OllamaSetup.exe
  2. 双击安装(默认路径C:\Users\YourName\AppData\Local\Programs\Ollama);
  3. 安装完成后,Ollama 服务会自动启动,监听http://127.0.0.1:11434

下载模型(2-10分钟,取决于模型大小和网速):
在 Windows Terminal 中运行:

ollama run qwen2.5:7b # 通义千问,中文强项,7B 参数 # 或 ollama run phi3.5:mini # 微软 Phi-3.5,极小体积,CPU 友好 # 或 ollama run llama3.2:3b # Meta Llama 3.2,英文推理强

Ollama 会自动下载模型文件(约 4-5GB)到%USERPROFILE\.ollama\models\

Hermes-Agent 关联 Ollama:
运行以下命令,告诉 Hermes 使用本地 Ollama:

hermes model set --provider ollama --model qwen2.5:7b --base-url http://127.0.0.1:11434

这条命令会修改cli-config.yaml中的model区块:

model: provider: ollama model: qwen2.5:7b base_url: http://127.0.0.1:11434

验证是否联通:

hermes doctor

输出中应包含:

✓ Model provider 'ollama' is reachable at http://127.0.0.1:11434 ✓ Model 'qwen2.5:7b' is available and responsive

如果显示Connection refused,请检查:

  • Ollama 服务是否在运行(任务管理器 → 服务 →Ollama状态为“正在运行”);
  • Windows 防火墙是否阻止了11434端口(临时关闭防火墙测试);
  • 是否有其他程序占用了11434端口(netstat -ano | findstr :11434)。

3.4 第四步:启动 Hermes-Studio Web UI 并解决端口冲突

Hermes-Studio 是 Hermes-Agent 的可视化前端,提供技能管理、记忆检索、会话历史、模型监控等图形化功能。它不是一个独立服务,而是 Hermes-Agent 进程的一个子模块。

启动命令:

hermes studio start

此命令会:

  • 启动一个 FastAPI 后端服务,默认绑定http://127.0.0.1:8000
  • 自动在默认浏览器中打开http://127.0.0.1:8000

如果浏览器打不开,90% 的概率是端口被占。Windows 上常见的8000占用者有:

  • Skype(旧版):设置 → 高级 → 连接 → 取消勾选“使用端口 80 和 443 作为替代传入连接端口”;
  • Zoom:设置 → 网络 → 取消勾选“使用端口 80 和 443 进行 HTTP 连接”;
  • Windows 自带的“Web 代理自动发现协议(WPAD)”:以管理员身份运行 PowerShell,执行netsh interface portproxy reset

万能解决方案(推荐):
直接指定一个冷门端口,避开所有冲突:

hermes studio start --port 8088

然后访问http://127.0.0.1:8088

Hermes-Studio 的核心功能实测:

  • Skills Hub(技能中心):点击左侧菜单“Skills”,你能看到所有已启用的技能(如git,shell,web_search)。点击某个技能,右侧显示其 Python 源码和描述。你可以直接在此编辑skills/git.py,保存后 Hermes 会热重载,无需重启。
  • Memory Explorer(记忆探索器):在“Memories”标签页,输入关键词(如“Q3财报”),Hermes 会调用ripgrep全局搜索memories/目录下的所有.md文件,并用 LLM 生成摘要。实测:搜索 200+ 条记忆,响应时间 <1.5 秒。
  • Model Monitor(模型监控):在“Models”标签页,你能实时看到当前模型的 token 使用量、平均响应延迟、错误率。这是调优模型参数(如temperature,max_tokens)的黄金数据。

提示:Hermes-Studio 的所有操作(启停服务、编辑技能、删除记忆)都通过调用 Hermes-Agent 的 REST API 完成,这意味着你也可以用curl或 Postman 直接与它交互,为自动化集成留出空间。

4. 常见问题与独家排查技巧:那些文档里绝不会写的“现场急救指南”

4.1 问题现象:hermes命令提示“找不到命令”,但hermes --version却能正常输出

表象分析:
这看似矛盾,实则揭示了一个 Windows 特有的路径解析陷阱。hermes --version能运行,说明hermes可执行文件(一个 Python 脚本包装器)在PATH中;但hermes(无参数)却失败,说明其内部依赖的 Python 环境或工具链缺失。

根本原因:
Hermes 的主命令hermes是一个pyz可执行包(类似 PyInstaller 打包),它内部硬编码了 Python 解释器路径。当install.ps1安装完成后,它会将%LOCALAPPDATA%\hermes\venv\Scripts\hermes.exe(或.pyz)加入PATH。但如果在安装过程中,你的 PowerShell 会话没有刷新PATH,或者你打开了一个新的 Terminal 窗口,那么新窗口的PATH里就没有这个路径。

独家排查技巧:

  1. 运行where hermes,查看系统找到的所有hermes可执行文件路径;
  2. 如果输出为空,说明PATH未更新;
  3. 如果输出为C:\Users\YourName\AppData\Local\hermes\venv\Scripts\hermes.exe,但运行时报错,说明该路径下的hermes.exe依赖的venv损坏了。

终极解决方案:
不要依赖PATH,直接调用绝对路径:

& "$env:LOCALAPPDATA\hermes\venv\Scripts\hermes.exe" --help

如果这能成功,证明环境没问题,只需修复PATH。运行:

$env:PATH = "$env:LOCALAPPDATA\hermes\venv\Scripts;" + $env:PATH

然后将此行添加到你的 PowerShell 配置文件Microsoft.PowerShell_profile.ps1中(路径:$HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1),实现永久生效。

4.2 问题现象:hermes studio start启动后,浏览器显示“ERR_CONNECTION_REFUSED”

标准排查流程(按顺序执行):

  1. 检查 Hermes-Studio 进程是否存活:
    在 Terminal 中按Ctrl+C停止当前命令,然后运行:

    hermes studio status

    如果输出Studio is not running,说明服务根本没起来。
    如果输出Studio is running on http://127.0.0.1:8000,但浏览器打不开,则进入下一步。

  2. 检查端口监听状态:
    运行:

    netstat -ano | findstr :8000

    如果没有任何输出,说明 Hermes-Studio 进程崩溃了,但status命令没及时更新状态。此时,强制杀死所有python.exe进程(Hermes-Studio 是 Python 进程):

    taskkill /f /im python.exe
  3. 检查 Windows 防火墙日志:
    打开“Windows 安全中心” → “防火墙和网络保护” → “高级设置” → “监视” → “安全日志”。筛选“丢弃的数据包”,看是否有Destination Port: 8000的记录。如果有,右键该规则 → “属性” → “作用域” → 将“本地端口”改为8000,8088(添加你自定义的端口)。

独家技巧:用curl绕过浏览器验证服务状态
在 Terminal 中运行:

curl -v http://127.0.0.1:8000/api/health

如果返回{"status":"ok","timestamp":...},说明服务完全正常,问题出在浏览器缓存或代理设置;如果返回curl: (7) Failed to connect to 127.0.0.1 port 8000: Connection refused,则服务确实未运行。

4.3 问题现象:Hermes-Agent 调用git工具时,报错fatal: unable to access 'https://...': schannel: failed to receive handshake, SSL/TLS connection failed

这是 Windows 上 Git 的经典 SSL 证书问题。
MinGit 默认使用 Windows 的 SChannel(安全通道)API 进行 HTTPS 通信,而某些企业网络会部署中间人(MITM)SSL 代理,导致证书链验证失败。

根治方案(非临时禁用 SSL):

  1. 获取企业代理的根证书(通常为.cer.pem文件);
  2. 将其复制到%LOCALAPPDATA%\hermes\tools\git\mingw64\ssl\certs\目录下;
  3. 运行:
    & "$env:LOCALAPPDATA\hermes\tools\git\cmd\git.exe" config --global http.sslCAInfo "$env:LOCALAPPDATA\hermes\tools\git\mingw64\ssl\certs\your-company-root.cer"
    这会修改 Hermes 私有 Git 的全局配置,使其信任企业证书,同时不影响系统 Git。

为什么不用git config --global http.sslVerify false
禁用 SSL 验证是重大安全风险,会让所有 HTTPS 通信暴露在中间人攻击下。而指定sslCAInfo是精准信任,符合企业安全审计要求。

4.4 问题现象:hermes model set切换模型后,hermesCLI 仍使用旧模型

真相:CLI 和 Studio 使用不同的配置上下文。
Hermes-Agent 的配置分为三层:

  • 全局配置(cli-config.yaml):所有命令的默认配置;
  • 会话配置(--config参数):仅对当前命令生效;
  • 环境变量配置(HERMES_MODEL_PROVIDER):优先级最高,会覆盖 YAML。

排查步骤:

  1. 运行hermes config get model.provider,查看当前生效的 provider;
  2. 运行Get-ChildItem Env:HERMES*,检查是否有HERMES_MODEL_PROVIDER环境变量;
  3. 如果第 2 步有输出,说明环境变量在起作用,运行Remove-Item Env:\HERMES_MODEL_PROVIDER清除它。

独家心得:
我习惯在项目根目录下创建.hermesrc文件(纯文本),内容为:

export HERMES_MODEL_PROVIDER=ollama export HERMES_MODEL_MODEL=qwen2.5:7b

然后在 Terminal 中运行source .hermesrc。这样,每个项目可以有自己的模型偏好,切换项目只需source不同的.hermesrc,比反复hermes config set高效得多。

4.5 问题现象:Hermes-Studio 的“Memory Explorer”搜索无结果,但rg命令在 Terminal 中能搜到

这是 Hermes 的“记忆索引”机制导致的。
Hermes 并非每次搜索都实时调用rg,而是维护一个 SQLite 数据库存储记忆元数据(标题、日期、关键词)。这个数据库需要定期“刷新”。

解决方案:

  1. 在 Hermes-Studio 界面,点击右上角头像 → “Settings” → “Memory” → “Rebuild Index”;
  2. 或在 Terminal 中运行:
    hermes memory rebuild-index
    此命令会遍历memories/下所有.md文件,提取 YAML Front Matter(如title:,date:)和正文关键词,写入memories/index.db

为什么需要这个索引?
因为rg是全文搜索,而 Hermes 的“跨会话回忆”需要语义搜索(如“帮我找上周五讨论的合同条款”)。索引数据库存储了结构化元数据,配合 LLM 的摘要生成,才能实现精准召回。纯rg只能做字符串匹配。

5. 进阶实战:用 Hermes-Agent 自动化 Windows 日常任务(附可直接运行的技能代码)

Hermes-Agent 的真正威力,在于它能把“AI 对话”转化为“Windows 系统操作”。下面是一个我为客户定制的、已在生产环境稳定运行 3 个月的实战案例:自动整理桌面截图并归档到 OneDrive

5.1 需求背景与痛点

销售同事每天需向客户发送产品演示截图,流程是:

  1. Win+Shift+S截图 → 保存到C:\Users\John\Pictures\Screenshots\
  2. 手动重命名(如2024-06-15_ProductDemo_QA.png);
  3. 手动复制到OneDrive\Work\ScreenShots\
  4. 手动在 Excel 中登记截图用途。
    平均耗时 4 分钟/张,每月浪费 12 小时。

5.2 技能(Skill)开发:desktop_screenshot_archiver.py

我们将此流程封装为一个 Hermes 技能,存放在%LOCALAPPDATA%\hermes\skills\desktop_screenshot_archiver.py

from pathlib import Path import shutil import datetime import subprocess import os def archive_screenshot( purpose: str = "General documentation", target_folder: str = "OneDrive\\Work\\ScreenShots" ) -> str: """ Automatically archive the latest desktop screenshot. Args: purpose: Brief description of why this screenshot was taken. target_folder: Relative path from user's home directory (e.g., "OneDrive\\Work\\ScreenShots"). Returns: A success message with the archived file path. """ # Step 1: Find the newest screenshot in Screenshots folder screenshots_dir = Path.home() / "Pictures" / "