一篇从"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
-
Nous Portal:https://portal.nousresearch.com
中文社区站点可用于辅助阅读,但不是 Nous Research 官方站点:
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.1 astral.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.2 files.pythonhosted.org TLS 握手失败
典型错误:
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.4 invalid_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
属于正常提示,不影响本地 hermes CLI。
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.6 hermes 启动后暂时黑屏
等待初始化,或使用:
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,并能使用已认证的模型完成第一次中文回复时,这条链路才真正闭环。