從 WSL 安裝 Hermes Agent 到控制 Windows Chrome
這篇教學整理一套完整流程:從 Windows 啟用 WSL、建立 HermesAgent 環境、安裝 Hermes Agent、設定 Google Gemma 4 31B、綁定 Telegram Gateway,到最後讓 Hermes 透過 Playwright CLI 控制 Windows 端的 Chrome 瀏覽器。
本文按照實際排查流程撰寫,包含一開始遇到的 502 Bad Gateway、WSL 網路模式、Chrome Debug Port、Playwright CLI、Telegram session 過大導致 Gemini API 500 等問題。
一、整體架構
完成後的架構如下:
Telegram 使用者
↓
Hermes Telegram Gateway
↓
Hermes Agent in WSL: HermesAgent
↓
playwright-cli
↓
Chrome DevTools Protocol, CDP
↓
Windows Chrome debug profile重點是:Hermes 本體跑在 WSL 裡,但它可以透過 CDP endpoint 控制 Windows 裡開啟的 Chrome。
二、安裝與啟用 WSL
先用系統管理員 PowerShell 安裝 WSL:
wsl --install如果你要指定 Ubuntu:
wsl --install -d Ubuntu安裝完成後重開機,確認 WSL 可用:
wsl --status
wsl --list --verbose本文假設你的 WSL distro 名稱是 HermesAgent。之後指令會使用:
wsl -d HermesAgent如果你的 distro 名稱不同,例如 Ubuntu,請把 HermesAgent 換成自己的名稱。
三、啟用 WSL Mirrored Networking
一開始我們使用 WSL 的 gateway IP,例如 172.22.32.1,但 Hermes 透過該位址連 Chrome debug port 時遇到 502 Bad Gateway。後來確認比較穩定的做法是開啟 WSL mirrored networking,讓 WSL 可以直接透過 127.0.0.1 連到 Windows localhost。
在 Windows 使用者資料夾建立或編輯:
%USERPROFILE%\.wslconfig加入:
[wsl2]
networkingMode=mirrored儲存後,在 PowerShell 執行:
wsl --shutdown重新開啟 WSL 後,Windows 與 WSL 之間的 localhost 行為會更接近同一台機器。
四、準備 WSL 環境
進入 HermesAgent:
wsl -d HermesAgent更新套件:
sudo apt update
sudo apt upgrade -y安裝常用工具:
sudo apt install -y git curl wget unzip ca-certificates python3 python3-pip python3-venv ripgrep確認基本工具:
git --version
python3 --version
curl --version
rg --version五、安裝 Hermes Agent
將 Hermes Agent 放在 WSL 的 home 目錄下。本文實際使用的位置是:
/root/.hermes/hermes-agent可使用 GitHub 專案:
git clone https://github.com/nousresearch/hermes-agent ~/.hermes/hermes-agent
cd ~/.hermes/hermes-agent依照專案需求安裝 Python 套件。若專案提供安裝腳本,優先使用官方腳本;若使用 pip editable install,可用:
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .確認 Hermes 指令:
hermes --help
hermes status如果 hermes 指令不在 PATH,請把 Hermes bin 路徑加入 PATH。本文後續使用:
export PATH="$HOME/.local/bin:$HOME/.hermes/node/bin:$PATH"六、設定 Gemma 4 31B 模型
本文使用 Google Gemini/OpenAI-compatible endpoint 串接 Gemma 4 31B。Hermes 的設定檔位於:
/root/.hermes/config.yaml模型設定範例:
model:
default: gemma-4-31b-it
provider: gemini
base_url: https://generativelanguage.googleapis.com/v1beta/openaiAPI key 不建議直接寫進文章或程式碼。請放在:
/root/.hermes/.env範例:
GOOGLE_API_KEY=你的_API_KEY
GEMINI_API_KEY=你的_API_KEY
GEMINI_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai檔案權限建議:
chmod 600 /root/.hermes/.env七、設定 Telegram Gateway
Hermes 可透過 Telegram Gateway 接收訊息。設定環境變數:
TELEGRAM_BOT_TOKEN=你的_TELEGRAM_BOT_TOKEN
TELEGRAM_ALLOWED_USERS=你的_TELEGRAM_USER_ID
TELEGRAM_HOME_CHANNEL=你的_TELEGRAM_USER_ID啟動 Gateway:
export PATH="$HOME/.local/bin:$HOME/.hermes/node/bin:$PATH"
hermes gateway runWSL 中若要背景執行:
mkdir -p /root/.hermes/logs
nohup hermes gateway run > /root/.hermes/logs/gateway.log 2>&1 &確認狀態:
hermes gateway status
tail -80 /root/.hermes/logs/gateway.log八、安裝 Microsoft Playwright CLI
接著安裝 Microsoft 的 playwright-cli。這是 Hermes 控制瀏覽器的關鍵工具。
export PATH="$HOME/.local/bin:$HOME/.hermes/node/bin:$PATH"
npm install -g @playwright/cli@latest建立捷徑:
ln -sf "$HOME/.hermes/node/bin/playwright-cli" "$HOME/.local/bin/playwright-cli"確認版本:
command -v playwright-cli
playwright-cli --version本文實測版本:
@playwright/cli 0.1.7九、安裝 Playwright CLI Skill 給 Hermes
下載 Microsoft playwright-cli 原始碼:
cd /tmp
git clone https://github.com/microsoft/playwright-cli playwright-cli-src複製官方 skill 到 Hermes skills 目錄:
mkdir -p "$HOME/.hermes/skills/browser"
cp -a /tmp/playwright-cli-src/skills/playwright-cli "$HOME/.hermes/skills/browser/playwright-cli"Hermes 載入時使用資料夾 ID:
hermes -s playwright-cli chat注意:Hermes 顯示名稱可能是 hermes-playwright-cli,但實際載入 skill 時應使用資料夾名稱 playwright-cli。
十、安裝 Chrome 給 Playwright CLI 測試
一開始 smoke test 可能會出現:
Error: Chromium distribution 'chrome' is not found at /opt/google/chrome/chrome可執行:
npx playwright install chrome確認:
google-chrome --version本文實測:
Google Chrome 147.0.7727.55十一、先測 WSL 內建 Chrome
在 WSL 內先測 playwright-cli 本身是否正常:
playwright-cli -s=hermes-smoke open https://example.com
playwright-cli -s=hermes-smoke snapshot
playwright-cli -s=hermes-smoke eval "document.title"
playwright-cli -s=hermes-smoke screenshot --filename=.playwright-cli/hermes-playwright-cli-smoke.png
playwright-cli -s=hermes-smoke close成功時 document.title 會回傳:
"Example Domain"十二、建立 Windows Chrome Debug 啟動 BAT
為了讓 Hermes 控制 Windows Chrome,而且記住登入狀態,不建議使用 Windows 主 Chrome profile。應建立 Hermes 專用 Chrome profile。
建立檔案:
C:\Users\KHUser\Desktop\start_chrome_local_debug.bat內容如下:
@echo off
setlocal
set "PORT=9223"
set "PROFILE=%LOCALAPPDATA%\HermesAgent\ChromeProfile"
set "CHROME_PATH=%ProgramFiles%\Google\Chrome\Application\chrome.exe"
if not exist "%CHROME_PATH%" set "CHROME_PATH=%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe"
if not exist "%CHROME_PATH%" set "CHROME_PATH=%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe"
if not exist "%CHROME_PATH%" (
echo [ERROR] Chrome not found.
pause
exit /b 1
)
echo [INFO] Starting local-only Chrome debug profile.
echo [INFO] Port: %PORT%
echo [INFO] Profile: %PROFILE%
if not exist "%PROFILE%" mkdir "%PROFILE%"
start "" "%CHROME_PATH%" ^
--remote-debugging-port=%PORT% ^
--remote-debugging-address=127.0.0.1 ^
--user-data-dir="%PROFILE%" ^
--no-first-run ^
--no-default-browser-check ^
about:blank
echo.
echo [OK] Chrome debug mode is starting.
echo [CHECK] Open this URL to verify:
echo http://127.0.0.1:%PORT%/json/version
echo.
pause這支 bat 的重點是:
--remote-debugging-port=9223
--remote-debugging-address=127.0.0.1
--user-data-dir=%LOCALAPPDATA%\HermesAgent\ChromeProfile使用固定 profile 後,你在這個 Chrome 分身登入 Google、YouTube 或其他網站,下次再執行同一支 bat,登入狀態會保留。
十三、驗證 Windows Chrome Debug Port
執行 bat 後,在 Windows 瀏覽器打開:
http://127.0.0.1:9223/json/version成功時會看到類似:
{
"Browser": "Chrome/147.0.7727.55",
"Protocol-Version": "1.3",
"webSocketDebuggerUrl": "ws://127.0.0.1:9223/devtools/browser/..."
}如果這裡沒有 JSON,Hermes 不可能控制 Chrome。請先確認 bat 有成功打開 Chrome。
十四、讓 WSL Hermes 連 Windows Chrome
在 WSL 測試:
wsl -d HermesAgentcurl -fsS http://127.0.0.1:9223/json/version成功後設定 Playwright endpoint:
export PATH="$HOME/.local/bin:$HOME/.hermes/node/bin:$PATH"
export PLAYWRIGHT_MCP_CDP_ENDPOINT="http://127.0.0.1:9223"測試開啟 YouTube:
playwright-cli -s=winchrome open https://www.youtube.com
playwright-cli -s=winchrome eval "document.title"成功時會回傳:
"YouTube"十五、把 CDP endpoint 寫進 Hermes 環境
為了讓 Telegram Gateway 也吃到這個設定,將 endpoint 寫進:
/root/.hermes/.env加入:
PLAYWRIGHT_MCP_CDP_ENDPOINT=http://127.0.0.1:9223確認:
grep -n '^PLAYWRIGHT_MCP_CDP_ENDPOINT=' /root/.hermes/.env十六、重啟 Telegram Gateway
修改 .env 後,重啟 gateway:
export PATH="$HOME/.local/bin:$HOME/.hermes/node/bin:$PATH"
hermes gateway stop
pkill -f "hermes gateway run" || true
PLAYWRIGHT_MCP_CDP_ENDPOINT="http://127.0.0.1:9223" nohup hermes gateway run > /root/.hermes/logs/gateway.log 2>&1 &確認:
hermes gateway status
tail -60 /root/.hermes/logs/gateway.log十七、Telegram 測試語句
在 Telegram 對 Hermes 傳:
用 playwright 打開 YouTube,回報目前頁面標題。使用 127.0.0.1:9223。如果一切正常,Hermes 會透過 playwright-cli 控制 Windows Chrome,並讀取頁面標題。
十八、常見錯誤:502 Bad Gateway
我們一開始使用:
http://172.22.32.1:9223結果遇到 502 Bad Gateway。這通常表示請求打到某個 gateway 或 proxy,但沒有正確轉到 Chrome。
後來修正方式是啟用 WSL mirrored networking,並改用:
http://127.0.0.1:9223結論:如果已啟用 mirrored networking,不要再用 172.22.32.1。
十九、常見錯誤:ECONNREFUSED
如果出現 ECONNREFUSED,通常代表 Chrome debug port 沒開。
請重新執行:
C:\Users\KHUser\Desktop\start_chrome_local_debug.bat再測:
curl http://127.0.0.1:9223/json/version二十、常見錯誤:Gemini API HTTP 500
後續 Telegram 使用過程中遇到:
API call failed after 3 retries: HTTP 500
Internal error encountered.檢查 Hermes log 後發現:
provider=gemini
model=gemma-4-31b-it
tokens=~97,400這代表 Telegram 對話和工具輸出累積太大,Gemma 4 31B 在接近上下文極限時,Google API 可能回 500。
處理方式是開新 session,並調整 Hermes 壓縮設定。
二十一、調整 Hermes 壓縮設定
編輯:
/root/.hermes/config.yaml將 compression 調整為:
compression:
enabled: true
threshold: 0.35
target_ratio: 0.12
protect_last_n: 6
summary_model: google/gemini-3-flash-preview原本 protect_last_n 如果太大,例如 20,Telegram 工具任務會保留太多最近內容,長期使用容易堆到非常大的上下文。
二十二、清除 Telegram Active Session Mapping
如果 Telegram 對話已經太大,可以移除 active session mapping,讓下一則 Telegram 訊息開新 session。
session mapping 位於:
/root/.hermes/sessions/sessions.json建議先備份:
cp /root/.hermes/sessions/sessions.json /root/.hermes/sessions/sessions.before-reset.json然後移除對應 key,例如:
agent:main:telegram:dm:你的_TELEGRAM_USER_ID清掉 mapping 不等於刪除所有歷史紀錄,只是讓 gateway 下一次建立新 active session。
二十三、最終成功測試
最終可用測試流程:
wsl -d HermesAgentexport PATH="$HOME/.local/bin:$HOME/.hermes/node/bin:$PATH"
export PLAYWRIGHT_MCP_CDP_ENDPOINT="http://127.0.0.1:9223"
curl -fsS http://127.0.0.1:9223/json/version
playwright-cli -s=winchrome open https://www.youtube.com
playwright-cli -s=winchrome eval "document.title"成功結果:
"YouTube"二十四、日常使用流程
之後日常使用只需要三件事:
1. 開啟 Windows Chrome Debug Profile
C:\Users\KHUser\Desktop\start_chrome_local_debug.bat2. 確認 Hermes Gateway 正在跑
wsl -d HermesAgent
hermes gateway status3. 在 Telegram 下指令
用 playwright 控制 Windows Chrome,打開 YouTube 並回報頁面標題。使用 127.0.0.1:9223。二十五、安全建議
不要把 Chrome debug port 綁到 0.0.0.0,除非你非常清楚防火牆與網路暴露風險。
建議使用:
--remote-debugging-address=127.0.0.1也不要直接使用平常主 Chrome 的 user data profile,避免 Hermes 影響你的日常瀏覽器。建議使用獨立 profile:
%LOCALAPPDATA%\HermesAgent\ChromeProfile結語
這套流程完成後,Hermes 就能從 Telegram 接收任務,透過 WSL 裡的 playwright-cli 控制 Windows Chrome。最關鍵的三個設定是 WSL mirrored networking、Chrome debug port 9223、以及 PLAYWRIGHT_MCP_CDP_ENDPOINT=http://127.0.0.1:9223。
如果遇到 502,優先檢查是否仍在使用舊的 172.22.32.1;如果遇到 Gemini HTTP 500,優先檢查 Telegram session 是否過大,並切新 session 或調整壓縮設定。



