一篇从“Ubuntu 无法访问外网”开始,最终完成 Hermes Agent 安装、Nous Portal OAuth 登录、免费模型选择、本地终端后端配置、Playwright 浏览器验证与首次中文对话的完整实战记录。
写在前面
很多安装教程只给出一条命令:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
这条命令没有问题,它来自 Nous Research 官方仓库。但在真实的 Windows + WSL2 环境中,真正耗时的部分往往不是输入命令,而是解决下面这些问题:
WSL2 无法直接复用 Windows 的
127.0.0.1代理;Clash 已开启,但 Ubuntu 访问宿主机代理端口仍然超时;
astral.sh、GitHub 或files.pythonhosted.org出现 TLS 握手中断;Playwright Chromium 下载完成,却因缺少 Linux 动态库无法启动;
Nous Portal 网页登录成功,但终端设备码已经过期;
GitHub OAuth 页面能打开,授权按钮却始终无法点击;
安装完成后输入
hermes,终端短时间内看起来没有反应。
本文不回避这些问题。它既给出官方标准路径,也记录一套经过完整验证的 Windows + WSL2 实战路径。
最终验证结果:
WSL2 Ubuntu 外网链路正常;
Clash Verge 代理可被 WSL2 稳定使用;
Hermes Agent CLI 安装成功;
Nous Portal OAuth 登录成功;
免费模型配置成功;
Local 终端后端配置成功;
Playwright Chromium 实际启动成功;
Gateway 用户服务正常运行;
Hermes Agent 完成第一次中文对话。
1. 依据、范围与版本快照
1.1 官方依据
本文涉及 Hermes Agent 的安装命令、目录结构、CLI 命令和主要功能,依据以下 Nous Research 官方资源:
官方仓库:GitHub - NousResearch/hermes-agent: The agent that grows with you · GitHub
官方文档:Hermes Agent Documentation | Hermes Agent
官方安装脚本:https://hermes-agent.nousresearch.com/install.sh
Nous Portal:https://portal.nousresearch.com
中文社区站点可用于辅助阅读,但不是 Nous Research 官方站点:
社区中文指南:Hermes Agent 中文文档 — 安装、桌面版与多语言指南 | hermes-ai.net
1.2 实测环境
本文最后一次验证环境:
| 项目 | 实测值 |
|---|---|
| 宿主系统 | Windows 11 |
| Linux 环境 | Ubuntu on WSL2 |
| WSL 网络 | NAT |
| 代理软件 | Clash Verge |
| Clash mixed-port | 7897 |
| Hermes Agent | v0.21.4 |
| 仓库提交 | 913c045 |
| Hermes Python | 3.11.16 |
| OpenAI SDK | 2.24.0 |
| Hermes Node.js | v26.9.0 |
| 认证提供方 | nous |
| 实测免费模型 | poolside/laguna-s-2.1:free |
| 终端后端 | local |
软件版本、模型目录、免费额度和模型价格会变化。读者应以安装时的官方页面和终端输出为准。
1.3 本文的证据边界
需要明确区分两类内容:
Hermes 安装脚本、仓库、命令和 Nous Portal 登录流程来自官方。
WSL NAT、Clash 局域网访问、防火墙规则、PyPI 镜像与 TLS 故障处理,是针对本次 Windows 环境完成的实测方案。
第二类方案具备实践参考价值,但不等于所有机器都必须使用相同配置。
2. Hermes Agent 是什么
Hermes Agent 是 Nous Research 开发的开源智能代理。它不只是一个聊天界面,而是把模型、终端、文件、浏览器、技能、记忆、定时任务和消息平台组织在同一套 Agent 运行环境中。
官方仓库强调的主要能力包括:
终端 TUI 交互;
文件读写与项目操作;
浏览器自动化;
技能系统与经验学习;
持久记忆与会话搜索;
定时任务;
子 Agent 委派与并行任务;
Telegram、Discord、Slack、WhatsApp、Signal 等消息平台接入;
Local、Docker、SSH、Singularity、Modal、Daytona、Vercel Sandbox 等终端后端;
Nous Portal、OpenRouter、自定义 OpenAI 兼容端点等模型来源。
如果只想聊天,普通聊天产品更简单。如果希望 Agent 能在真实环境里读文件、执行命令、操作浏览器、维护技能和长期运行,Hermes Agent 才能体现价值。
3. 整体链路
本教程最终打通的链路如下:
Windows 11 -> Clash Verge -> Windows 宿主机代理端口 7897 -> WSL2 NAT 网络 -> Ubuntu -> Hermes Agent -> Nous Portal OAuth -> 免费模型 -> Local 终端后端 -> CLI 首次对话
推荐按这个顺序操作:
确认 WSL2 -> 修复 Ubuntu 网络 -> 验证代理出口 -> 验证 GitHub/PyPI -> 下载并检查安装脚本 -> 安装 Hermes -> 验证 CLI 和浏览器 -> 登录 Nous Portal -> 选择模型 -> 选择 Local 后端 -> 完成首次对话
不要在网络尚未稳定时反复执行安装脚本,否则很难区分安装错误与下载错误。
4. 安装前准备
4.1 检查 WSL
在 Windows PowerShell 中执行:
wsl --version wsl --status wsl -l -v
确认 Ubuntu 的VERSION为2。
如果尚未安装 Ubuntu:
wsl --install -d Ubuntu
安装完成后重启 Windows,并打开 Ubuntu 完成初始用户名和密码设置。
4.2 检查 Ubuntu 基础状态
在 Ubuntu 中执行:
whoami uname -a cat /etc/os-release ip -brief address ip route cat /etc/resolv.conf
健康的 WSL NAT 网络通常至少应看到:
lo回环接口;eth0网络接口;default via ... dev eth0默认路由;/etc/resolv.conf中的nameserver。
如果只有lo,没有eth0和默认路由,先处理第 14.2 节,不要继续安装。
5. WSL2 与 Clash Verge 的正确关系
5.1 为什么会出现 localhost 代理警告
常见提示:
wsl: 检测到 localhost 代理配置,但未镜像到 WSL。 NAT 模式下的 WSL 不支持 localhost 代理。
原因是:
Windows 的系统代理监听
127.0.0.1:7897;WSL2 NAT 中的
127.0.0.1指向 Ubuntu 自己;它不等于 Windows 的
127.0.0.1。
所以在 NAT 模式下,Ubuntu 需要通过 Windows 宿主机在 WSL 网络中的地址访问代理。
5.2 本次实测采用的.wslconfig
文件路径:
C:\Users\<Windows用户名>\.wslconfig
内容:
[wsl2] networkingMode=nat dnsTunneling=true autoProxy=false firewall=true
应用配置:
wsl --shutdown
然后重新打开 Ubuntu。
为什么选择 NAT:本次机器尝试networkingMode=mirrored后,Ubuntu 只剩lo,默认路由和/etc/resolv.conf均消失。即使启用 Windows Hypervisor Platform 并完整重启,镜像网络仍未恢复,因此回退到稳定的 NAT。
这不代表镜像网络普遍不可用。如果你的镜像网络工作正常,可以继续使用,不必照搬 NAT。
5.3 Clash Verge 设置
在 Clash Verge 中启用:
虚拟网卡模式;
系统代理;
局域网连接。
确认端口。本次环境为:
mixed-port: 7897
在 Windows PowerShell 检查监听:
Get-NetTCPConnection -LocalPort 7897 -State Listen
5.4 获取 Windows 宿主机地址
在 Ubuntu 中:
WIN_HOST=$(ip route | awk '/default/ {print $3}') echo "$WIN_HOST"本次环境曾得到192.168.128.1,但这个地址可能在 WSL 重启或网络变化后改变,所以脚本中应动态获取,不要永久写死。
5.5 为当前终端设置代理
export HTTP_PROXY="http://${WIN_HOST}:7897" export HTTPS_PROXY="http://${WIN_HOST}:7897" export ALL_PROXY="http://${WIN_HOST}:7897"检查:
env | grep -i proxy
这些环境变量只对当前 Shell 及其子进程有效。
5.6 只允许 WSL 子网访问 Clash
如果 Clash 已开启“局域网连接”,但 Ubuntu 访问${WIN_HOST}:7897仍超时,可在管理员 PowerShell 中创建规则:
New-NetFirewallRule ` -DisplayName "Clash-Wsl-7897" ` -Direction Inbound ` -Action Allow ` -Protocol TCP ` -LocalPort 7897 ` -RemoteAddress 192.168.128.0/20 ` -Profile Any
这里的192.168.128.0/20应按你的 WSL 实际子网调整。可在 Ubuntu 用下面的命令确认:
ip -4 addr show eth0 ip route
检查规则:
Get-NetFirewallRule -DisplayName "Clash-Wsl-7897"
这条规则限定了远端 WSL 子网,不应改成任意来源地址。
6. 在安装前证明网络真的可用
6.1 检查代理出口
curl -4 -x "http://${WIN_HOST}:7897" https://ipinfo.io需要看到代理出口信息,而不是本地网络出口。
6.2 检查 Hermes 安装脚本
curl -4 -I --connect-timeout 10 --max-time 30 \ https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh
6.3 检查 GitHub
curl -4 -I --connect-timeout 10 --max-time 30 \ https://github.com/NousResearch/hermes-agent
6.4 检查 PyPI
curl -4 -I --connect-timeout 10 --max-time 30 \ https://pypi.org/simple/
6.5 检查 GitHub 静态资源
这一项很重要。GitHub OAuth 页面依赖github.githubassets.com的 CSS 与 JavaScript:
curl -4 -I --connect-timeout 10 --max-time 30 \ https://github.githubassets.com/favicons/favicon.svg
如果 GitHub 主站能打开,但这个域名 TLS 失败,GitHub 授权按钮可能永远保持禁用。
只有这些检查稳定通过后,才开始安装。
7. 官方标准安装路径
7.1 官方一行命令
Nous Research 官方 README 给出的 Linux、macOS、WSL2 安装方式:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
安装完成后:
source ~/.bashrc hermes
7.2 更适合生产排障的三步安装
为了能审查脚本并保留安装文件,推荐:
curl -fsSLO \ https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh less install.sh bash -n install.sh bash install.sh
含义:
下载官方仓库中的安装脚本;
用
less阅读脚本;用
bash -n做语法检查;执行安装。
不要从来历不明的镜像站下载修改过的安装脚本。
7.3 带显式代理执行安装
WIN_HOST=$(ip route | awk '/default/ {print $3}') export HTTP_PROXY="http://${WIN_HOST}:7897" export HTTPS_PROXY="http://${WIN_HOST}:7897" export ALL_PROXY="http://${WIN_HOST}:7897" bash install.sh安装器会处理或检查:
uv;Python;
Git;
Node.js;
C++ 编译器;
Hermes Agent 仓库;
Python 虚拟环境和依赖;
Node.js 浏览器依赖;
Playwright Chromium;
Computer Use 驱动;
PATH;
配置模板;
内置技能。
7.4 可选系统包怎么选
安装器可能询问:
Install ripgrep for faster file search ffmpeg for TTS voice messages?
说明:
ripgrep:加快文本搜索,非核心依赖;ffmpeg:用于音视频与部分语音能力,非核心对话依赖;build-essential、python3-dev、libffi-dev:原生包编译工具。
有 sudo 权限时建议安装。没有 sudo 权限时可先跳过,遇到明确的编译错误后再处理。
8. 本次实际遇到的安装故障与恢复
正常网络环境通常不需要本节。只有安装器失败时才按错误类型处理。
8.1astral.sh下载 uv 超时
错误特征:
Failed to download uv installer from https://astral.sh/uv/install.sh
先显式设置代理,然后手工安装官方 uv:
WIN_HOST=$(ip route | awk '/default/ {print $3}') export HTTP_PROXY="http://${WIN_HOST}:7897" export HTTPS_PROXY="http://${WIN_HOST}:7897" export ALL_PROXY="http://${WIN_HOST}:7897" mkdir -p "$HOME/.hermes/bin" curl -4 -LsSf https://astral.sh/uv/install.sh -o /tmp/uv-install.sh UV_UNMANAGED_INSTALL="$HOME/.hermes/bin" sh /tmp/uv-install.sh "$HOME/.hermes/bin/uv" --version然后重新运行bash install.sh,安装器会识别已安装的 uv。
8.2files.pythonhosted.orgTLS 握手失败
典型错误:
tls handshake eof SSL_ERROR_SYSCALL
先分别测试:
curl -4 -I -x "http://${WIN_HOST}:7897" \ https://pypi.org/simple/ curl -4 -I -x "http://${WIN_HOST}:7897" \ https://files.pythonhosted.org/如果代理节点对 PyPI 文件域名不稳定,优先切换 Clash 节点。不要默认关闭 TLS 校验。
必要时可临时使用可信 PyPI 镜像:
export UV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ export UV_DEFAULT_INDEX=https://mirrors.aliyun.com/pypi/simple/ export UV_HTTP_TIMEOUT=120
8.3 镜像缺少上传时间导致exclude-newer误判
Hermes 项目的 uv 配置可能限制最近发布的依赖。部分镜像缺少上传时间元数据,可能出现:
No solution found when resolving dependencies was filtered by exclude-newer
只对当前安装进程临时关闭:
export UV_EXCLUDE_NEWER=false
不要直接修改官方仓库的pyproject.toml或uv.lock。
8.4 保留锁文件版本与哈希的恢复方式
如果uv sync --locked因镜像元数据不兼容失败,可以从官方uv.lock导出固定版本和 SHA256 哈希:
cd "$HOME/.hermes/hermes-agent" "$HOME/.hermes/bin/uv" export \ --frozen \ --extra all \ --no-dev \ --no-emit-project \ --format requirements.txt \ --output-file /tmp/hermes-requirements.txt
随后按哈希从镜像安装:
"$HOME/.hermes/bin/uv" pip install \ --python "$HOME/.hermes/hermes-agent/venv/bin/python" \ --no-config \ --require-hashes \ --index-url https://mirrors.aliyun.com/pypi/simple/ \ -r /tmp/hermes-requirements.txt
这种方法保留了锁文件的固定版本和哈希校验,比无约束重新解析依赖更严谨。
8.5 本地 Hermes 包构建仍访问官方 PyPI
如果本地包构建因为setuptools或wheel下载失败:
"$HOME/.hermes/bin/uv" pip install \ --python "$HOME/.hermes/hermes-agent/venv/bin/python" \ --no-config \ --index-url https://mirrors.aliyun.com/pypi/simple/ \ setuptools wheel
再安装本地包:
cd "$HOME/.hermes/hermes-agent" "$HOME/.hermes/bin/uv" pip install \ --python venv/bin/python \ --no-config \ --no-build-isolation \ --no-deps \ -e .
验证:
venv/bin/hermes --version
9. Playwright Chromium 的完整验证
浏览器二进制下载成功,不代表浏览器一定能启动。Linux 还需要系统动态库。
9.1 常见缺库错误
error while loading shared libraries: libnspr4.so
9.2 安装 Playwright 系统依赖
cd "$HOME/.hermes/hermes-agent" export PATH="$HOME/.hermes/node/bin:$PATH" sudo npx playwright install-deps chromium
如果只能从 Windows 侧调用 WSL root:
wsl -d Ubuntu -u root -- bash -lc ` 'cd /home/<Linux用户名>/.hermes/hermes-agent && ` export PATH=/home/<Linux用户名>/.hermes/node/bin:/usr/local/bin:/usr/bin:/bin && ` npx playwright install-deps chromium'
9.3 实际启动测试
cd "$HOME/.hermes/hermes-agent" export PATH="$HOME/.hermes/node/bin:$PATH" export PLAYWRIGHT_BROWSERS_PATH="$HOME/.cache/ms-playwright" npx playwright screenshot about:blank /tmp/hermes-browser-test.png test -s /tmp/hermes-browser-test.png && echo browser_ok
只有看到browser_ok,才说明 Chromium 真正可运行。
10. 安装完成后的验收
重新加载 Shell:
source ~/.bashrc
10.1 检查 Hermes
command -v hermes hermes --version hermes --help
10.2 检查 Python 环境
~/.hermes/hermes-agent/venv/bin/python --version
10.3 检查配置文件
ls -l ~/.hermes/config.yaml ~/.hermes/.env
10.4 运行诊断
hermes doctor
hermes doctor可能检查多个 API 端点,需要等待。以下警告未必阻断基础对话:
未配置图片生成密钥;
未安装本地 Whisper;
未设置 GitHub Token;
未安装 ripgrep;
未启用消息平台。
应重点关注:
Python 环境;
SSL 证书;
必需包;
Hermes 命令;
模型认证;
API 连通性。
11. Nous Portal 登录与设备码绑定
11.1 为什么使用 Nous Portal
官方提供的 Nous Portal 可以统一承载模型与部分工具能力,减少分别维护多个服务商 API Key 的负担。
登录命令:
hermes portal
或运行完整向导:
hermes setup
11.2 WSL 无法自动打开 Windows 浏览器
常见提示:
gio: Operation not supported
这不代表登录失败,只是 WSL 无法自动拉起 Windows Chrome。手动复制终端输出的链接到 Windows 浏览器即可。
11.3 设备码必须保持一致
终端会显示类似:
Open: https://portal.nousresearch.com/manage-subscription?user_code=XXXX-XXXX
正确流程:
保持终端中的
hermes portal进程运行;立即在浏览器打开终端给出的链接;
确认网页和终端显示同一个设备码;
登录 Nous Portal;
点击
CONNECT;等待终端显示
Login successful!。
不要重复运行多个hermes portal。每次重跑都会生成新设备码,旧码可能失效。
11.4invalid_grant: Invalid device code
这表示:
设备码已过期;或
浏览器使用的是旧设备码;或
终端轮询已结束。
重新执行:
hermes portal
使用新链接,并立刻完成连接。
11.5 GitHub OAuth 授权按钮不可点击
本次实测中,原因不是邮箱未验证,而是:
github.githubassets.com net::ERR_CONNECTION_CLOSED
GitHub OAuth 页面的 CSS 和 JavaScript 没有加载,页面只剩裸 HTML。授权按钮由服务端初始输出为禁用,GitHub 的 OAuth 脚本加载后才会启用。
验证静态资源:
curl.exe -I -x http://127.0.0.1:7897 ` --connect-timeout 10 --max-time 30 ` https://github.githubassets.com/favicons/favicon.svg
如果只有:
HTTP/1.1 200 Connection established
却没有后续HTTP/1.1 200 OK或HTTP/2 200,说明只建立了代理隧道,目标站 TLS 尚未成功。
处理方法:
切换 Clash 节点;
重新测试
github.githubassets.com;确认返回完整 HTTP 200;
在 OAuth 页面按
Ctrl+Shift+R强制刷新。
不要通过开发者工具强行移除按钮的disabled属性。那是在绕过页面安全状态,而不是修复登录。
11.6 邮箱六位验证码在哪里
GitHub 登录 Nous Portal 后,Nous Portal 可能要求确认 GitHub 账号绑定的邮箱。
验证码在 GitHub 主邮箱的收件箱中,不在 GitHub 设置页面中。可在:
GitHub -> Settings -> Emails
确认主邮箱,然后登录对应邮箱查找 Nous Portal 邮件。检查:
收件箱;
垃圾邮件;
订阅邮件;
搜索关键词
Nous、verification code。
验证码属于登录凭据,不要发给他人。
11.7 最终认证验收
hermes auth status nous
必须看到:
nous: logged in
浏览器显示已登录,不等于终端已经拿到认证。以该命令结果为准。
12. 选择模型、终端后端和消息平台
12.1 选择免费模型
如果 Nous Portal 余额为$0.00,应选择列表中标注:free的模型。
本次实测选择:
poolside/laguna-s-2.1:free
它偏向编程与代码任务。
免费模型目录随时可能变化,应以hermes model当时显示的列表为准。
切换模型:
hermes model
查看当前配置:
hermes config get model.provider hermes config get model.default
实测结果:
nous poolside/laguna-s-2.1:free
12.2 终端后端选择 Local
在本地 WSL2 使用时,选择:
Keep current (local)
或者选择:
Local - run directly on this machine
Local 表示 Agent 的 Shell 命令直接在当前 Ubuntu 环境运行。
其他后端适用于不同目标:
Docker/Podman:容器隔离;
SSH:远程机器;
Singularity/Apptainer:HPC 环境;
Modal、Daytona、Vercel Sandbox:云端或沙箱运行。
不要因为名称看起来高级就随意选择。后端决定命令执行、文件访问和隔离边界。
12.3 消息平台可以以后配置
首次安装可以选择:
Skip - set up later
本地 CLI 不依赖 Telegram 或 Discord。
以后配置:
hermes setup gateway
13. Gateway 服务
检查:
hermes gateway status
重启并刷新服务定义:
hermes gateway restart
如果没有配置消息平台,日志中出现:
No messaging platforms enabled
属于正常提示,不影响本地hermesCLI。
Gateway 使用 systemd 用户服务时,可以通过下面命令查看日志:
journalctl --user -u hermes-gateway -f
14. 启动 Hermes 与第一次对话
14.1 启动
source ~/.bashrc hermes
首次启动可能需要几秒初始化模型、工具、技能和安全扫描。短时间黑屏不一定是卡死。
可在另一个终端检查进程:
ps -ef | grep -E '[h]ermes($| .*chat|hermes_cli)'
14.2 如果 TUI 长时间不显示
先按一次Enter,或等待 10 至 30 秒。
仍无显示时,按Ctrl+C退出,使用传统 CLI 模式:
hermes --cli
也可显式启动聊天:
hermes chat --cli
查看终端变量:
echo "$TERM" stty size
如果终端尺寸异常,可先调整 Windows Terminal 窗口大小,再启动 Hermes。
14.3 第一次建议输入什么
先测试普通对话:
你好,请介绍一下你当前可用的模型、工具和技能。
然后测试只读项目分析:
请检查当前目录的项目结构,告诉我它是什么项目以及如何启动,但暂时不要修改任何文件。
再测试终端:
请运行 pwd 和 ls,解释当前目录中的主要文件,不要写入或删除任何内容。
不要一开始就让 Agent 执行大范围删除、系统升级或不可逆操作。
15. 常用命令速查
15.1 Shell 命令
hermes # 启动交互界面 hermes --cli # 使用传统 CLI 界面 hermes --version # 查看版本 hermes doctor # 环境诊断 hermes status # 查看组件状态 hermes model # 选择模型 hermes tools # 配置工具 hermes setup # 完整设置向导 hermes setup terminal # 配置终端后端 hermes setup gateway # 配置消息平台 hermes portal # Nous Portal 登录与模型配置 hermes portal info # 查看 Portal 路由状态 hermes auth status nous # 检查 Nous 登录 hermes gateway status # 检查 Gateway hermes gateway restart # 重启 Gateway hermes update # 更新 Hermes
15.2 对话内命令
/help /model /tools /skills /new /reset /retry /undo /compress /usage
具体可用命令以当前版本/help输出为准。
16. 配置与数据目录
默认目录:
~/.hermes/
常见文件:
~/.hermes/config.yaml CLI 和模型等配置 ~/.hermes/.env API Key 等环境变量 ~/.hermes/auth.json 认证状态 ~/.hermes/hermes-agent/ 代码与虚拟环境 ~/.hermes/skills/ 技能 ~/.hermes/sessions/ 会话 ~/.hermes/logs/ 日志 ~/.hermes/cron/ 定时任务 ~/.hermes/state.db 状态数据库
查看配置:
hermes config
编辑配置:
hermes config edit
不要把.env、auth.json或其他凭据文件提交到 Git。
17. 安全边界
17.1 Local 后端意味着什么
Local 后端下,Hermes 可以在当前 WSL Ubuntu 中:
读取和修改文件;
执行 Shell 命令;
访问
/mnt/c等 Windows 挂载目录;调用浏览器工具;
安装依赖;
运行项目。
因此应把它视为一个具有当前 Linux 用户权限的自动化程序。
17.2 推荐的操作习惯
首次进入项目先要求只读检查;
明确指定工作目录;
修改前要求说明计划;
删除前要求列出精确目标;
外部消息、支付、发布、授权等动作必须人工确认;
不把密码、邮箱验证码、API Key 发到对话中;
重要项目使用 Git;
高风险任务考虑 Docker 或其他隔离后端。
17.3 防火墙规则的清理
不再需要 WSL 访问 Clash 7897 时:
Remove-NetFirewallRule -DisplayName "Clash-Wsl-7897"
删除前确认不会影响 WSL 后续联网。
18. 常见问题索引
18.1 Ubuntu 域名无法解析
ip route cat /etc/resolv.conf getent hosts github.com
没有默认路由时先恢复 WSL 网络,不要只改 DNS。
18.2 Ubuntu 只有lo
将.wslconfig回退到 NAT:
[wsl2] networkingMode=nat dnsTunneling=true autoProxy=false firewall=true
然后:
wsl --shutdown
18.3 WSL 访问 7897 超时
依次检查:
Clash 是否运行;
端口是否为 7897;
局域网连接是否打开;
Windows 是否监听该端口;
防火墙规则是否允许 WSL 子网;
Ubuntu 使用的是宿主机地址而不是
127.0.0.1。
18.4 GitHub 页面裸奔、无样式
测试:
curl.exe -I -x http://127.0.0.1:7897 ` https://github.githubassets.com/favicons/favicon.svg
切换能完整返回 HTTP 200 的代理节点。
18.5 Nous Portal 浏览器已登录,但 Hermes 仍 logged out
hermes auth status nous
如果是logged out,重新运行:
hermes portal
浏览器登录与设备码绑定是两个步骤。
18.6hermes启动后暂时黑屏
等待初始化,或使用:
hermes --cli
18.7 免费模型是否永久免费
不能保证。:free代表选择时目录中的免费路由,是否持续免费、速率限制和可用性由服务端决定。
18.8 Gateway 没有消息平台
不影响本地 CLI。以后执行:
hermes setup gateway
19. 最终验收清单
逐项执行:
source ~/.bashrc hermes --version hermes auth status nous hermes config get model.provider hermes config get model.default hermes gateway status
本次实测得到:
Hermes Agent v0.21.4 nous: logged in nous poolside/laguna-s-2.1:free Gateway active (running)
浏览器验收:
cd "$HOME/.hermes/hermes-agent" export PATH="$HOME/.hermes/node/bin:$PATH" export PLAYWRIGHT_BROWSERS_PATH="$HOME/.cache/ms-playwright" npx playwright screenshot about:blank /tmp/hermes-browser-test.png test -s /tmp/hermes-browser-test.png && echo browser_ok
最后启动:
hermes
完成一次实际对话,才算完整链路真正打通。
20. 结语
这次实践的价值,不只是“把一个 CLI 装上了”。真正完成的是一条可复现、可验证、可排障的 Agent 运行链路:
WSL 网络 -> Clash 代理 -> 防火墙边界 -> 官方安装脚本 -> Python 与 Node 运行时 -> 浏览器引擎 -> Nous Portal OAuth -> 免费模型 -> Local 终端后端 -> Gateway -> 第一次真实对话
官方命令提供了入口,真实环境验证补齐了入口之后的工程细节。
只要读者遵守三个原则,这套流程就具备较强的可迁移性:
每一层都先验证,再进入下一层;
区分网络故障、依赖故障、认证故障和运行故障;
不通过关闭安全校验或强行绕过页面状态来“解决”问题。
当终端最终出现 Hermes Agent 的 TUI,并能使用已认证的模型完成第一次中文回复时,这条链路才真正闭环。