Hermes Agent теперь поддерживает оба варианта: нативный Windows и WSL2. На этой странице описан путь через WSL2; для установки через нативный PowerShell обратитесь к Руководству по Windows (нативный).
Когда стоит выбрать WSL2 вместо нативного варианта:
Вы хотите использовать встроенный терминал панели управления (вкладка /chat) — эта панель требует POSIX PTY и доступна только в WSL2.
Вы занимаетесь разработкой, активно использующей POSIX, и хотите, чтобы сессии Hermes использовали ту же файловую систему и те же пути, что и ваши инструменты разработки.
У вас уже есть окружение WSL2, и вы не хотите поддерживать вторую установку.
Когда нативный вариант подходит (или лучше):
Интерактивный чат, шлюз (Telegram/Discord и т.д.), планировщик cron, инструмент браузера, MCP-серверы и большинство функций Hermes работают в Windows нативно.
Вы не хотите думать о пересечении границы WSL↔Windows каждый раз, когда ссылаетесь на файл или открываете URL.
В WSL2 фактически задействованы два компьютера: ваш хост Windows и виртуальная машина Linux под управлением WSL. Большинство путаницы возникает от того, что вы не уверены, на каком из них находитесь в данный момент.
Это руководство охватывает те аспекты этого разделения, которые напрямую влияют на Hermes: установка WSL2, передача файлов между Windows и Linux, сетевые взаимодействия в обоих направлениях и типичные ошибки, с которыми сталкиваются пользователи.
info 简体中文
|A Chinese-language walkthrough of the minimum install path is maintained on this same page — switch via the language menu (top right) and select 简体中文.
|
Почему WSL2 (а не нативный Windows)
Нативная установка Windows работает напрямую в Windows: ваш терминал Windows (PowerShell, Windows Terminal и т.д.), пути файловой системы Windows (C:\Users\…) и процессы Windows. Hermes использует Git Bash для выполнения команд оболочки — так же, как Claude Code и другие агенты работают с Windows сегодня; это обходит разрыв между POSIX и Windows без полной перезаписи.
WSL2 запускает настоящее ядро Linux в легковесной виртуальной машине, поэтому Hermes внутри неё практически идентичен запуску на Ubuntu. Это ценно, когда вам нужно реальное POSIX-окружение: fork, /tmp, UNIX-сокеты, семантика сигналов, терминалы с PTY, оболочки вроде bash/zsh и инструменты вроде rg, git, ffmpeg, которые работают так же, как на Linux.
Практические следствия использования WSL2:
CLI Hermes, шлюз, сессии, память, навыки и среда выполнения инструментов — всё работает внутри виртуальной машины Linux.
Программы Windows (браузеры, нативные приложения, Chrome с вашим профилем) находятся за её пределами.
Каждый раз, когда вы хотите, чтобы они взаимодействовали — обменивались файлами, открывали URL, управляли Chrome, обращались к локальному серверу моделей, открывали шлюз Hermes для вашего телефона — вы пересекаете границу. Именно об этих границах и рассказывается в данном руководстве.
Установка WSL2
Из Admin PowerShell или Windows Terminal:
wsl--install
На свежей Windows 10 22H2+ или Windows 11 эта команда устанавливает ядро WSL2, компонент Virtual Machine Platform и дистрибутив Ubuntu по умолчанию. Перезагрузите компьютер при запросе. После перезагрузки Ubuntu запустится и запросит имя пользователя Linux и пароль — это новый пользователь Linux, не связанный с вашей учётной записью Windows.
Убедитесь, что вы используете WSL2 (не устаревший WSL1):
wsl--list--verbose
Вы должны увидеть VERSION 2. Если дистрибутив показывает VERSION 1, преобразуйте его:
wsl--set-versionUbuntu2wsl--set-default-version2
Hermes ненадёжно работает на WSL1 — WSL1 транслирует системные вызовы Linux на лету, и некоторые аспекты поведения (procfs, сигналы, сеть) отличаются от настоящего Linux.
Выбор дистрибутива
Ubuntu (LTS) — это дистрибутив, на котором мы тестируем. Debian работает. Arch и NixOS подходят тем, кто хочет их использовать, но установщик одной командой предполагает систему на основе Debian с apt — для альтернативного пути обратитесь к руководству по установке Nix.
Включение systemd (рекомендуется)
Шлюзом Hermes (и всем остальным, что должно работать постоянно) проще управлять через systemd. В современном WSL включите его один раз внутри вашего дистрибутива:
Снова откройте терминал WSL. Команда ps -p 1 -o comm= должна вывести systemd.
Опция монтирования metadata выше важна — без неё файлы на /mnt/c/... не смогут хранить реальные права доступа Linux, что нарушает работу таких вещей, как chmod +x для скриптов, расположенных в путях Windows.
Установщик воспринимает WSL2 как обычный Linux — ничего специфичного для WSL не требуется. Полную структуру установки см. в разделе Установка.
Файловая система: пересечение границы Windows ↔ WSL2
Это та часть, которая вызывает больше всего затруднений. Существует две файловые системы, и от того, где вы размещаете файлы, зависит производительность, корректность работы и доступность для инструментов.
Два направления
Направление
Путь внутри
Используемый путь
Диск Windows, видимый из WSL
C:\Users\you\Documents
/mnt/c/Users/you/Documents
Диск WSL, видимый из Windows
/home/you/code
\\wsl$\Ubuntu\home\you\code (или \\wsl.localhost\Ubuntu\... в новых сборках)
Оба варианта реальны и работают, но это не одна и та же файловая система — под капотом они соединены сетевым протоколом 9P. Это имеет реальные последствия для производительности и семантики.
Где размещать Hermes и ваши проекты
Общее правило: всё, что относится к Linux, храните внутри файловой системы Linux.
Установка Hermes (~/.hermes/) — на стороне Linux. Установщик уже делает это.
Ваши git-репозитории, с которыми вы работаете из WSL — на стороне Linux (~/code/..., ~/projects/...).
Ваши модели, наборы данных, виртуальные окружения — на стороне Linux.
Что вы получаете, следуя этому правилу:
Быстрый ввод-вывод. Операции на /mnt/c/... проходят через 9P и в 10–100 раз медленнее нативного ext4. git status в репозитории с 10 000 файлов, который мгновенен в ~/code, может занимать 15+ секунд в /mnt/c.
Корректные права доступа. Права доступа Linux на /mnt/c эмулируются с ограничениями. Часто встречаются отказы ssh с сообщением «bad permissions» или молчаливый сбой chmod +x.
Надёжные наблюдатели за файлами. inotify через 9P работает нестабильно — наблюдатели за файлами (серверы разработки, тестовые раннеры) регулярно пропускают изменения на /mnt/c.
Никаких сюрпризов с регистром символов. Пути Windows по умолчанию нечувствительны к регистру; Linux — чувствителен. Проекты, содержащие и Readme.md, и README.md, ведут себя по-разному в зависимости от того, на какой стороне вы находитесь.
Размещайте файлы на /mnt/c только тогда, когда файл должен находиться на стороне Windows — например, если вы хотите открыть его из GUI-приложения Windows, или если Chrome DevTools MCP от Windows требует, чтобы текущий каталог был доступен из Windows.
Передача файлов туда и обратно
Из Windows → в WSL: проще всего открыть Проводник и ввести \\wsl.localhost\Ubuntu в адресной строке. Затем можно перетащить файлы в \home\<you>\.... Или из PowerShell:
Из WSL → в Windows: скопируйте в /mnt/c/Users/<you>/..., и файл сразу появится в Проводнике Windows:
cp~/reports/output.pdf/mnt/c/Users/you/Desktop/
Открыть файл из WSL в приложении Windows (GUI-редактор, браузер и т.д.): используйте explorer.exe или wslview:
sudoaptinstallwslu# однократно — устанавливает wslview, wslpath, wslopen и т.д.
wslview~/reports/output.pdf# открывается обработчиком Windows по умолчанию
explorer.exe.# открывает текущий каталог WSL в Проводнике Windows
Если вы редактируете файлы на стороне Windows с помощью редактора Windows, они могут получить окончания строк CRLF. Когда bash или Python на стороне Linux читают их, скрипты оболочки ломаются с ошибкой bad interpreter: /bin/bash^M, а Python может не работать с .env файлами, содержащими BOM.
Решение — правильная конфигурация git внутри WSL (не в Windows):
Клонируйте внутри WSL. Всегда, если у вас нет веской причины поступить иначе. Типичный рабочий процесс с Hermes (hermes chat, вызовы инструментов, использующие rg/ripgrep для поиска по репозиторию, наблюдатели за файлами, фоновый шлюз) будет значительно быстрее и надёжнее в ~/code/myrepo, чем в /mnt/c/Users/you/myrepo.
Одно исключение: MCP-мосты, запускающие исполняемые файлы Windows. Если вы используете chrome-devtools-mcp через cmd.exe (см. руководство по MCP: WSL → Windows Chrome), Windows может выдать предупреждение UNC, если текущий рабочий каталог Hermes — ~. В таком случае запустите Hermes из каталога на /mnt/c/, чтобы у процесса Windows был путь с буквой диска.
Сеть: WSL ↔ Windows
WSL2 работает в легковесной виртуальной машине с собственным сетевым стеком. Это означает, что localhost внутри WSL — это не то же самое, чтоlocalhost на Windows; с точки зрения сети это два разных хоста. Для каждого сервиса необходимо определить направление трафика и выбрать правильный мост.
Два случая встречаются постоянно.
Случай 1 — Hermes в WSL обращается к сервису на Windows
Самый распространённый: вы запускаете Ollama, LM Studio или llama-server на Windows, и Hermes (внутри WSL) должен к нему обращаться.
Windows 11 22H2+: включите зеркальный режим сети (networkingMode=mirrored в %USERPROFILE%\.wslconfig, затем wsl --shutdown). localhost будет работать в обоих направлениях.
Windows 10 или старые сборки: используйте IP-адрес хоста Windows (шлюз по умолчанию виртуальной сети WSL) и убедитесь, что сервер на Windows прослушивает 0.0.0.0, а не только 127.0.0.1. В брандмауэре Windows обычно также требуется правило для порта.
Полную таблицу (Ollama / LM Studio / vLLM / SGLang адреса привязки, однострочные команды для брандмауэра, утилиты для динамических IP, обход Hyper-V Firewall) см. по ссылке выше — не дублируем её здесь.
Случай 2 — Что-то на Windows (или в вашей локальной сети) обращается к Hermes в WSL
Это обратное направление, менее документированное, но необходимое для:
Использования веб-панели управления Hermes из браузера Windows.
Использования API-сервера, совместимого с OpenAI (предоставляемого hermes gateway при API_SERVER_ENABLED=true) из инструментов на стороне Windows. См. страницу API Server.
Тестирования шлюзов обмена сообщениями (Telegram, Discord и т.д.), где платформа отправляет запросы на локальный URL вебхука — обычно для этого проще использовать cloudflared/ngrok, чем проброс портов.
Подслучай 2a: с самого хоста Windows
На Windows 11 22H2+ с включённым зеркальным режимом ничего дополнительно делать не нужно. Процесс в WSL, прослушивающий 0.0.0.0:8080 (или даже 127.0.0.1:8080), будет доступен из браузера Windows по адресу http://localhost:8080. WSL автоматически публикует привязку обратно на хост.
В NAT-режиме (Windows 10 / старые версии Windows 11) стандартная «переадресация localhost» в WSL2 обычно пробрасывает привязки Linux-стороны на 127.0.0.1 в Windows localhost, так что сервис Hermes, запущенный с --host 127.0.0.1, обычно доступен как http://localhost:PORT из Windows. Если нет:
Явно укажите привязку к 0.0.0.0 внутри WSL.
Найдите IP-адрес виртуальной машины WSL командой ip -4 addr show eth0 | grep inet и обращайтесь к нему из Windows.
Подслучай 2b: с другого устройства в вашей локальной сети (телефон, планшет, другой ПК)
Это самая сложная часть. Трафик идёт по пути устройство в LAN → хост Windows → виртуальная машина WSL, и вам нужно настроить оба перехода:
Привязка на всех интерфейсах внутри WSL. Процесс, прослушивающий 127.0.0.1, никогда не будет доступен извне виртуальной машины. Используйте 0.0.0.0.
Проброс портов Windows → WSL VM. В зеркальном режиме это автоматически. В NAT-режиме требуется сделать это вручную для каждого порта в Admin PowerShell:
```powershell
# Получаем текущий IP виртуальной машины WSL (он меняется при каждом перезапуске WSL в NAT-режиме)
$wslIp = (wsl hostname -I).Trim().Split(' ')[0]
# Пробрасываем порт Windows 8080 → WSL:8080
netsh interface portproxy add v4tov4 `listenaddress=0.0.0.0 listenport=8080`
connectaddress=$wslIp connectport=8080
# Разрешаем через брандмауэр Windows
New-NetFirewallRule -DisplayName "Hermes WSL 8080" `
-Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
```
Удалить правило позже можно командой netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8080.
Направьте устройство в LAN на http://<windows-lan-ip>:8080.
Поскольку IP виртуальной машины WSL меняется при каждом перезапуске в NAT-режиме, одноразовое правило действует только до следующего wsl --shutdown. Для постоянной работы используйте зеркальный режим или заверните шаг проброса портов в скрипт, запускаемый при входе в Windows.
Для вебхуков от облачных мессенджеров (Telegram setWebhook, события Slack и т.д.) не пытайтесь настраивать проброс портов — используйте туннели cloudflared. См. руководство по вебхукам.
Запуск сервисов Hermes на постоянной основе в Windows
Tool Gateway Hermes и API-сервер — это долгоживущие процессы. В WSL2 у вас есть несколько вариантов для поддержания их работы.
Внутри WSL с systemd (рекомендуется)
Если вы включили systemd, как описано в разделе настройки выше, hermes gateway и API-сервер работают так же, как на любом Linux-компьютере. Используйте мастер настройки шлюза:
hermesgatewaysetup
Мастер предложит установить systemd-юнит для пользователя, чтобы шлюз автоматически запускался при старте WSL.
Автоматический запуск WSL при входе в Windows
Виртуальная машина WSL остаётся активной только пока кто-то её использует. Чтобы ваш шлюз был доступен без открытого окна терминала, запускайте процесс WSL при входе в Windows через Планировщик задач:
Это поддерживает виртуальную машину в активном состоянии, чтобы шлюз, управляемый через systemd, продолжал работать. На Windows 11 также работают более новые потоки wsl --install --no-launch + автозапуск; трюк с sleep infinity — это универсальный вариант.
Проброс GPU (локальные модели)
WSL2 поддерживает NVIDIA GPU нативно, начиная с ядра WSL 5.10.43+ — установите стандартный драйвер NVIDIA на Windows (не устанавливайте драйвер NVIDIA для Linux внутри WSL), и nvidia-smi внутри WSL увидит GPU. После этого CUDA toolkit, torch, vllm, sglang и llama-server будут работать с реальным GPU как обычно.
Поддержка AMD ROCm и Intel Arc внутри WSL2 всё ещё развивается и находится за пределами тестовой матрицы Hermes — это может работать с текущими драйверами, но готовых рекомендаций у нас нет.
Если вы запускаете Windows-нативный сервер локальных моделей (Ollama для Windows, LM Studio), который уже использует ваш GPU через драйверы Windows, проброс GPU через WSL вам вообще не нужен — просто следуйте Случаю 1 выше и обращайтесь к нему по сети из WSL.
Частые проблемы
«Connection refused» при обращении к Ollama / LM Studio на Windows.
См. Сеть WSL2. В девяноста процентах случаев сервер привязан к 127.0.0.1 и должен быть переключён на 0.0.0.0 (Ollama: OLLAMA_HOST=0.0.0.0), или отсутствует правило брандмауэра.
Сильная медлительность git status / hermes chat в репозитории.
Скорее всего, вы работаете в /mnt/c/.... Перенесите репозиторий в ~/code/... (на сторону Linux). Ускорение на порядок.
bad interpreter: /bin/bash^M в скриптах.
Окончания строк CRLF от редактора Windows. Выполните dos2unix script.sh и установите core.autocrlf input в конфигурации git внутри WSL.
Предупреждение «UNC paths are not supported» от исполняемых файлов Windows, запущенных через MCP.
Текущий рабочий каталог Hermes находится внутри файловой системы Linux, и Windows cmd.exe не знает, что с ним делать. Запустите Hermes из /mnt/c/... для этой сессии или используйте обёртку, которая переходит в каталог, доступный из Windows, перед вызовом исполняемого файла Windows.
Расхождение часов после сна/гибернации.
Часы WSL2 могут отставать на минуты после выхода хоста из сна, что нарушает работу любых сертификатных механизмов (OAuth, HTTPS API). Исправляется по запросу:
sudohwclock-s
Или установите ntpdate и запускайте его при входе.
DNS перестаёт работать после включения зеркального режима или при подключении VPN.
Зеркальный режим передаёт сетевые настройки хоста в WSL — если DNS на Windows работает нестабильно (VPN split-tunnel, корпоративный резолвер), WSL наследует эти проблемы. Обход: переопределите resolv.conf вручную (установите generateResolvConf=false в /etc/wsl.conf, затем создайте свой /etc/resolv.conf с 1.1.1.1 или DNS вашего VPN).
hermes не найден после запуска установщика.
Установщик добавляет ~/.local/bin в PATH вашей оболочки через ~/.bashrc. Вам нужно выполнить source ~/.bashrc (или открыть новый терминал), чтобы изменения вступили в силу в текущей сессии.
Windows Defender замедляет работу с файлами WSL.
Defender сканирует файлы через мост 9P при доступе из Windows, что усугубляет медлительность кросс-граничного доступа через /mnt/c. Если вы обращаетесь к файлам WSL только изнутри WSL, это не имеет значения. Если вы часто используете инструменты Windows для работы с \\wsl$\..., рассмотрите возможность исключения пути к дистрибутиву WSL из сканирования в реальном времени.
Заканчивается место на диске.
WSL2 хранит диск виртуальной машины как разрежённый VHDX в %LOCALAPPDATA%\Packages\.... Он растёт, но не сжимается автоматически при удалении файлов. Чтобы вернуть место: wsl --shutdown, затем из Admin PowerShell выполните Optimize-VHD -Path <путь-к-ext4.vhdx> -Mode Full (требуются средства Hyper-V) — или более простой путь через diskpart, описанный в документации WSL.
Что дальше
Установка — фактические шаги установки (Linux/WSL2/Termux используют один и тот же установщик).