Windows (Native) Guide
دليل ويندوز الأصلي
What this page is, and what it holds.
This page covers Windows (Native) Guide. You will use hermes uninstall and hermes gateway status here; about 19 minutes to read. Open the channel to yourself first with an allowlist. An open channel means anyone can message your agent.
Run Hermes Agent natively on Windows 10 / 11 — install, feature matrix, UTF-8 console, Git Bash, gateway as a Scheduled Task, editor handling, PATH, uninstall, and common pitfalls
Outcomes taken from this page, not a template.
- Understand what بوابة المراسلة is and when you need it.
- Run
hermes uninstallandhermes gateway statusand understand what happens next. - Read the table and take only the row that applies to you.
- Set
TELEGRAM_BOT_TOKENin the right place.
Exactly as they appear in Hermes.
hermes uninstallhermes gateway statushermes doctorhermes gateway installhermes setuphermes gateway stophermes gateway start
TELEGRAM_BOT_TOKENDISCORD_BOT_TOKENSLACK_BOT_TOKENSLACK_APP_TOKENWHATSAPP_ENABLEDHERMES_GIT_BASH_PATHCTRL_C_EVENTHERMES_HOME
Jump to the part you need.
- 01Quick install
- 02What the installer actually does
- 03Feature matrix
- 04How Hermes runs shell commands on Windows
- 05UTF-8 console on Windows
- 06The editor (`Ctrl-X Ctrl-E`, `/edit`)
- 07`Ctrl+Enter` for newline in the CLI
- 08Running the gateway at Windows login
- 09Data layout
- 10Browser tool
- 11Running Hermes on Windows — practical notes
- 12Uninstall
- 13Process management internals
- 14Common pitfalls
- 15Where to go next
Nothing summarised away.
The documentation body below is reproduced from the official source so commands and identifiers stay exact. Each section carries a short note describing what it contains.
Hermes runs natively on Windows 10 and Windows 11 — no WSL, no Cygwin, no Docker. This page is the deep dive: what works natively, what's WSL-only, what the installer actually does, and the Windows-specific knobs you might need to touch.
If you just want to install, the one-liner on the landing page ↗ or Installation page is all you need. Come back here when something surprises you.
Quick install
Ordered, practical steps. Run one and confirm it worked before moving on.
Open PowerShell (or Windows Terminal) and run:
iex (irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1)No admin rights required. The installer goes to %LOCALAPPDATA%\hermes\ and adds hermes to your User PATH — open a new terminal after it finishes.
Installer options (requires the scriptblock form to pass parameters):
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1))) -NoVenv -SkipSetup -Branch main| Parameter | Default | Purpose |
|---|---|---|
-Branch | main | Clone a specific branch (useful for testing PRs) |
-Commit | unset | Pin install to a specific commit SHA (overrides -Branch) |
-Tag | unset | Pin install to a specific git tag (e.g. v0.14.0) |
-NoVenv | off | Skip venv creation (advanced — you manage Python yourself) |
-SkipSetup | off | Skip the post-install hermes setup wizard |
-HermesHome | %LOCALAPPDATA%hermes | Override data directory |
-InstallDir | %LOCALAPPDATA%hermeshermes-agent | Override code location |
The installer auto-retries flaky git fetches and strips BOM from any downloaded install.ps1 payload, so a UTF-8 BOM picked up during HTTP transit no longer breaks the [scriptblock]::Create((irm ...)) form.
Desktop installer (alternative)
A thin GUI installer is also available — useful if you'd rather double-click an .exe than open PowerShell. Download Hermes Desktop, run the installer, and on first launch the GUI calls install.ps1 under the hood to provision Python (via uv), Node, PortableGit, and the rest of the dependency bootstrap described below. After the first run, the desktop app and the PowerShell-installed hermes CLI share the same %LOCALAPPDATA%\hermes\hermes-agent install and %LOCALAPPDATA%\hermes data directory — switch between the GUI and the CLI freely.
Use the desktop installer when you want a familiar Windows install experience or you're handing Hermes to a non-developer; use the PowerShell one-liner when you're already in a terminal.
Dependency bootstrap (depensure)
On first launch (and on demand when a missing tool is detected), Hermes runs a small Python bootstrapper — hermes_cli/dep_ensure.py — that checks for and lazily installs the non-Python dependencies it needs. On Windows, the relevant ones are:
| Dependency | Why Hermes needs it |
|---|---|
| PortableGit | Provides bash.exe for the terminal tool and git for in-session clones. Provisioned at install time, not by dep_ensure. |
| Node.js 26 | Required for the browser tool (agent-browser), the TUI's web bridge, and the WhatsApp bridge. |
| ffmpeg | Audio format conversion for TTS / voice messages. |
| ripgrep | Fast file search — falls back to grep if unavailable. |
| npm packages | agent-browser, Playwright Chromium, and any per-toolset Node deps are installed once at first browser-tool use. |
Each dep has a shutil.which(...)-style check; if a binary is missing and the run is interactive, dep_ensure offers to install it (deferring to scripts\install.ps1 -ensure <dep> for the actual install logic). Non-interactive runs (gateway, cron, headless desktop launches) skip the prompt and surface a clear this feature needs <dep> error instead.
What the installer actually does
Ordered, practical steps. Run one and confirm it worked before moving on. Commands here: hermes setup.
Top-to-bottom, in order:
- Bootstraps
uv— Astral's fast Python manager. Installed to%USERPROFILE%\.local\bin. - Installs Python 3.11 via
uv. No existing Python needed. - Installs Node.js 26 (winget if available, else a portable Node tarball unpacked under
%LOCALAPPDATA%\hermes\node). Used for the browser tool and the WhatsApp bridge. - Installs portable Git — if
gitis already on PATH the installer uses it; otherwise it downloads a trimmed, self-contained PortableGit (~45 MB, from the officialgit-for-windowsrelease) to%LOCALAPPDATA%\hermes\git. No admin, no Windows installer registry, no interference with anything else on the box. - Clones the repo to
%LOCALAPPDATA%\hermes\hermes-agentand creates a virtualenv inside it. - Tiered
uv pip install— tries.[all]first, falls back to progressively smaller sets ([messaging,dashboard,ext]→[messaging]→.) if agit+httpsdep flakes on rate-limited GitHub. Prevents "single flake drops you to a bare install" failure mode. - Auto-installs messaging SDKs keyed off
.env— ifTELEGRAM_BOT_TOKEN/DISCORD_BOT_TOKEN/SLACK_BOT_TOKEN/SLACK_APP_TOKEN/WHATSAPP_ENABLEDare present, runspython -m ensurepip --upgradeand targetedpip installcalls so each platform's SDK is actually importable. - Sets
HERMES_GIT_BASH_PATHto the resolvedbash.exeso Hermes finds it deterministically in fresh shells. - Adds
%LOCALAPPDATA%\hermes\hermes-agent\binto User PATH and setsHERMES_HOME=%LOCALAPPDATA%\hermes— exposes thehermescommand (and points it at your data dir) after you open a new terminal. Only thehermes.exe/hermes-acp.exelaunchers are copied into thisbindirectory; the fullvenv\Scriptsis deliberately not placed on PATH so Hermes never shadows your ownpythoncommand. - Runs
hermes setup— the normal first-run wizard (model, provider, toolsets). Skip with-SkipSetup.
Feature matrix
A lookup table. Do not read it all; find the row that applies to you.
Everything except the dashboard's embedded terminal pane runs natively on Windows.
| Feature | Native Windows | WSL2 |
|---|---|---|
CLI (hermes chat, hermes setup, hermes gateway, …) | ✓ | ✓ |
Interactive TUI (hermes --tui) | ✓ | ✓ |
| Messaging gateway (Telegram, Discord, Slack, WhatsApp, 15+ platforms) | ✓ | ✓ |
| Cron scheduler | ✓ | ✓ |
| Browser tool (Chromium via Node) | ✓ | ✓ |
| MCP servers (stdio and HTTP) | ✓ | ✓ |
| Local Ollama / LM Studio / llama-server | ✓ | ✓ (via WSL networking) |
| Web dashboard (sessions, jobs, metrics, config) | ✓ | ✓ |
Dashboard /chat embedded terminal pane | ✗ (needs POSIX PTY) | ✓ |
| Auto-start at login | ✓ (schtasks) | ✓ (systemd) |
The dashboard's /chat tab embeds a real terminal via a POSIX PTY (ptyprocess). Native Windows has no equivalent primitive; Python's pywinpty / Windows ConPTY would work but is a separate implementation — treat as future work. The rest of the dashboard works natively — only that one tab shows a "use WSL2 for this" banner.
How Hermes runs shell commands on Windows
Settings you configure once. Change one at a time so you can see what each does. Set HERMES_GIT_BASH_PATH in your environment, not in the chat.
Hermes's terminal tool runs commands through Git Bash, same strategy Claude Code uses. This sidesteps the POSIX-vs-Windows gap without rewriting every tool.
Resolution order for bash.exe:
HERMES_GIT_BASH_PATHenvironment variable if set.%LOCALAPPDATA%\hermes\git\usr\bin\bash.exe(installer-managed PortableGit).%LOCALAPPDATA%\hermes\git\bin\bash.exe(older Git-for-Windows layout).- System Git-for-Windows install (
%ProgramFiles%\Git\bin\bash.exe, etc.). - MSYS2, Cygwin, or any
bash.exeon PATH as a last resort.
The installer sets HERMES_GIT_BASH_PATH explicitly so fresh PowerShell sessions don't have to re-discover. Override it if you want Hermes to use a specific bash — for example, your system Git Bash or a WSL-hosted bash via a symlink.
Pitfall: MinGit's layout is different from the full Git-for-Windows installer — bash lives under usr\bin\bash.exe, not bin\bash.exe. Hermes checks both. If you're manually unpacking a MinGit zip, make sure you pick the non-busybox variant (MinGit-*-64-bit.zip, not MinGit-*-busybox*.zip) — busybox builds ship ash instead of bash and most coreutils are missing.
UTF-8 console on Windows
Explains the idea itself. Read it slowly; the later sections build on it.
Python's default stdio on Windows uses the console's active code page (usually cp1252 or cp437). Hermes's banner, slash-command list, tool feed, Rich panels, and skill descriptions all contain Unicode. Without intervention, any of that crashes with UnicodeEncodeError: 'charmap' codec can't encode character….
The fix is in hermes_cli/stdio.py::configure_windows_stdio(), called early in every entry point (cli.py::main, hermes_cli/main.py::main, gateway/run.py::main). It:
- Flips the console code page to CP_UTF8 (65001) via
kernel32.SetConsoleCP/SetConsoleOutputCP. - Reconfigures
sys.stdout/sys.stderr/sys.stdinto UTF-8 witherrors='replace'. - Sets
PYTHONIOENCODING=utf-8andPYTHONUTF8=1(viasetdefault, so explicit user values win) so child Python subprocesses inherit UTF-8. - Sets
EDITOR=notepadif neitherEDITORnorVISUALis set (see the Editor section below).
Idempotent. No-op on non-Windows.
Opt out: HERMES_DISABLE_WINDOWS_UTF8=1 in the environment falls back to the legacy cp1252 stdio path. Useful for bisecting an encoding bug; unlikely to be the right setting in normal operation.
The editor (`Ctrl-X Ctrl-E`, `/edit`)
A lookup table. Do not read it all; find the row that applies to you.
Pre-#21561, pressing Ctrl-X Ctrl-E or typing /edit silently did nothing on Windows. prompt_toolkit has a hardcoded POSIX-absolute fallback list (/usr/bin/nano, /usr/bin/pico, /usr/bin/vi, …) that never resolves on Windows — even with full Git for Windows installed.
Hermes's Windows stdio shim now sets EDITOR=notepad as a default. Notepad ships with every Windows install and works as a blocking editor — subprocess.call(["notepad", file]) blocks until the window closes.
User overrides still win (they're checked before the setdefault):
| Editor | PowerShell command |
|---|---|
| VS Code | $env:EDITOR = "code --wait" |
| Notepad++ | $env:EDITOR = "'C:Program FilesNotepad++notepad++.exe' -multiInst -nosession" |
| Neovim | $env:EDITOR = "nvim" |
| Helix | $env:EDITOR = "hx" |
The --wait flag on VS Code is critical — without it the editor returns immediately and Hermes gets a blank buffer back.
Set it permanently in your PowerShell profile:
# In $PROFILE
$env:EDITOR = "code --wait"Or as a User environment variable in System Settings so every new shell picks it up.
`Ctrl+Enter` for newline in the CLI
Explains the idea itself. Read it slowly; the later sections build on it.
Windows Terminal passes Ctrl+Enter through as a dedicated key sequence. Hermes binds it to "insert newline" so you can compose multi-line prompts in the CLI without falling back to Esc-then-Enter. Works in Windows Terminal, VS Code integrated terminal, and any modern Windows console host that honors VT escape sequences.
On legacy cmd.exe consoles Ctrl+Enter collapses to plain Enter — use Esc Enter instead, or upgrade to Windows Terminal (it's free and installed by default on Windows 11).
Running the gateway at Windows login
Ordered, practical steps. Run one and confirm it worked before moving on. Commands here: hermes gateway status, hermes gateway start.
hermes gateway install on Windows uses Scheduled Tasks with a Startup-folder fallback — no admin required.
Install
hermes gateway installWhat happens under the hood:
schtasks /Create /SC ONLOGON /RL LIMITED /TN HermesGateway— registers a task that runs at your login with standard (non-elevated) permissions. No UAC prompt.- If schtasks is blocked by group policy, falls back to writing a
start /min cmd.exe /d /c <wrapper>shortcut into%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup. Same effect, slightly cruder. - Spawns the gateway detached via
pythonw.exe— notpython.exe.pythonw.exehas no console attached, which immunizes it againstCTRL_C_EVENTbroadcasts from sibling processes (a real issue that used to kill the gateway when you Ctrl+C'd anything in the same process group).
Flags used when spawning: DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW | CREATE_BREAKAWAY_FROM_JOB.
Manage
hermes gateway status # Merged view: schtasks + Startup folder + running PID
hermes gateway start # Starts the scheduled task now
hermes gateway stop # Graceful SIGTERM equivalent (TerminateProcess via psutil)
hermes gateway restart
hermes gateway uninstall # Removes schtasks entry, Startup shortcut, pid filehermes gateway status is idempotent — call it a thousand times in a row and it will never accidentally kill the gateway. (Pre-PR #21561 it silently did, via os.kill(pid, 0) colliding with CTRL_C_EVENT at the C level — see "process management internals" below if you care about the story.)
Why not a Windows Service?
Services require admin rights to install and tie the gateway's lifecycle to machine boot, not user login. The typical Hermes user wants: log in → gateway available, log out → gateway gone. Scheduled Tasks do exactly that without elevation. If you genuinely want a service, use nssm or sc create manually — but you probably don't.
Data layout
A lookup table. Do not read it all; find the row that applies to you.
| Path | Contents |
|---|---|
%LOCALAPPDATA%hermeshermes-agent | Git checkout + venv. The binhermes.exe launcher (copied from venvScriptshermes.exe) is the command added to User PATH. Safe to Remove-Item -Recurse and reinstall. |
%LOCALAPPDATA%hermesgit | PortableGit (only if the installer provisioned it). |
%LOCALAPPDATA%hermesnode | Portable Node.js (only if the installer provisioned it). |
%LOCALAPPDATA%hermesbin | Hermes's managed uv.exe (the Python manager it uses for updates). |
%LOCALAPPDATA%hermes (root) | Your config, auth, skills, sessions, logs (config.yaml, .env, skills, sessions, logs, …). Survives reinstalls. |
On native Windows the installer sets HERMES_HOME=%LOCALAPPDATA%\hermes, so your data and the disposable install live under the same %LOCALAPPDATA%\hermes root: the install/runtime is the hermes-agent\, git\, node\, and bin\ subdirectories, while your data files sit directly in %LOCALAPPDATA%\hermes. Reinstalling only replaces the hermes-agent\ checkout, so your data survives — but because the two share a root, don't Remove-Item -Recurse %LOCALAPPDATA%\hermes if you want to keep your data; delete the hermes-agent\ subdirectory instead. Your data directory is identical in shape to a Linux ~/.hermes, so you can mirror it between machines.
Override HERMES_HOME: set the environment variable to point at a different data dir (e.g. %USERPROFILE%\.hermes to match a Linux/WSL layout). Works the same as on Linux.
Browser tool
Commands you type in a terminal. Understand what one does before copying it. Commands here: hermes doctor.
The browser tool uses agent-browser (a Node helper) to drive Chromium. On Windows:
- The installer puts
agent-browseron PATH via npm. shutil.which("agent-browser", path=...)picks up the.cmdshim automatically —CreateProcessWcan't execute an extensionless shebang, so Hermes always resolves to the.CMDwrapper. Don't manually invoke the shebang script; always go through the.cmd.- Playwright Chromium is auto-installed on first run (
npx playwright install chromium). If installation fails,hermes doctorsurfaces it with a fix-it hint.
Running Hermes on Windows — practical notes
Settings you configure once. Change one at a time so you can see what each does. Set HERMES_HOME, OPENROUTER_API_KEY in your environment, not in the chat.
PATH after install
The installer adds %LOCALAPPDATA%\hermes\hermes-agent\bin to your User PATH via [Environment]::SetEnvironmentVariable. Existing terminals don't pick this up — open a new PowerShell window (or Windows Terminal tab) after installation. Close-and-reopen, don't $env:PATH += … by hand unless you know what you're doing.
Verify:
Get-Command hermes # should print C:\Users\<you>\AppData\Local\hermes\hermes-agent\bin\hermes.exe
hermes --versionEnvironment variables
Hermes honors both $env:X (process-scope) and User environment variables (permanent, set in System Properties → Environment Variables). Setting API keys in %LOCALAPPDATA%\hermes\.env (your HERMES_HOME) is the normal path — same as Linux:
OPENROUTER_API_KEY=sk-or-...
TELEGRAM_BOT_TOKEN=...Don't put secrets in User environment variables unless you specifically want every Windows process to see them (it isn't what you want).
Windows-specific env vars
These only affect native Windows installs:
| Variable | Effect |
|---|---|
HERMES_GIT_BASH_PATH | Override bash.exe discovery. Point at any bash — full Git-for-Windows, WSL bash via symlink, MSYS2, Cygwin. The installer sets this automatically. |
HERMES_DISABLE_WINDOWS_UTF8 | Set to 1 to disable the UTF-8 stdio shim and fall back to the locale code page. Useful for bisecting an encoding bug. |
EDITOR / VISUAL | Your editor for /edit and Ctrl-X Ctrl-E. Hermes defaults to notepad if both are unset. |
Uninstall
Ordered, practical steps. Run one and confirm it worked before moving on. Commands here: hermes uninstall.
From PowerShell:
hermes uninstallThat's the clean path — removes the schtasks entry, Startup folder shortcut, hermes.cmd shim, deletes %LOCALAPPDATA%\hermes\hermes-agent\, and trims the User PATH. It leaves the rest of %LOCALAPPDATA%\hermes\ alone (your config, auth, skills, sessions, logs) in case you're reinstalling.
To nuke everything:
hermes uninstall
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\hermes"
# Also remove a legacy CLI/WSL data dir if you ever used one:
Remove-Item -Recurse -Force "$env:USERPROFILE\.hermes"The hermes uninstall CLI subcommand also handles the case where the schtasks entry was registered under a different task name (older installs) — it searches by install path rather than by hardcoded task name.
Process management internals
Settings you configure once. Change one at a time so you can see what each does. Set CTRL_C_EVENT in your environment, not in the chat.
This is background material — skip unless you're debugging an "it's killing itself" weirdness.
On Linux and macOS, the POSIX idiom os.kill(pid, 0) is a no-op permission check: "is this PID alive and can I signal it?" On Windows, Python's os.kill maps sig=0 to CTRL_C_EVENT — they collide at integer value 0 — and routes it through GenerateConsoleCtrlEvent(0, pid), which broadcasts Ctrl+C to the entire console process group containing the target PID. That's bpo-14484 ↗, open since 2012. It won't be fixed because changing it would break scripts that depend on the current behavior.
Consequence: any codepath that said "check if this PID is alive" via os.kill(pid, 0) on Windows was silently killing the target. Hermes migrated every such site (14 across 11 files) to gateway.status._pid_exists(), which uses psutil.pid_exists() (which in turn uses OpenProcess + GetExitCodeProcess on Windows — no signals). If you're writing a plugin or patch, use psutil.pid_exists() directly or gateway.status._pid_exists() — never os.kill(pid, 0).
scripts/check-windows-footguns.py enforces this in CI: any new os.kill(pid, 0) call fails the Windows footguns (blocking) check unless the line carries a # windows-footgun: ok — <reason> marker.
Common pitfalls
Settings you configure once. Change one at a time so you can see what each does. Commands here: hermes doctor, hermes gateway status. Set HERMES_DISABLE_WINDOWS_UTF8 in your environment, not in the chat.
hermes: command not found right after install.
Open a new PowerShell window. The installer added %LOCALAPPDATA%\hermes\hermes-agent\bin to User PATH, but existing shells need to be restarted to pick it up. In the meantime you can run & "$env:LOCALAPPDATA\hermes\hermes-agent\bin\hermes.exe".
WinError 193: %1 is not a valid Win32 application when running a tool.
You hit a shebang-script invocation that bypassed the .cmd shim. Hermes resolves commands through shutil.which(cmd, path=local_bin) so PATHEXT picks up .CMD — if you're invoking the tool via a hardcoded path instead, switch to the .cmd variant (e.g., npx.cmd, not npx).
[scriptblock]::Create(...) fails with The assignment expression is not valid.
Your download of install.ps1 picked up a UTF-8 BOM. The irm | iex form strips BOMs automatically; [scriptblock]::Create((irm ...)) does not. Re-run with the simple irm | iex form, or download the script manually and save it without a BOM via [IO.File]::WriteAllText($path, $text, (New-Object Text.UTF8Encoding $false)).
Gateway won't stay running after restart.
Check hermes gateway status — it merges the schtasks entry, the Startup-folder shortcut (if used), and the live PID. If schtasks is registered but not running, group policy may be blocking ONLOGON triggers. Run schtasks /Query /TN HermesGateway /V /FO LIST to see the task's failure reason, or fall back to the Startup-folder path by uninstalling and reinstalling with HERMES_GATEWAY_FORCE_STARTUP=1.
/edit still does nothing after setting $env:EDITOR.
You set it in the current process only; close and reopen the shell, or set it at User scope in System Properties → Environment Variables. Verify with echo $env:EDITOR in a new PowerShell window.
Browser tool launches but tools time out.
Chromium is auto-installed on first run. If the install failed (rate-limited GitHub, Playwright CDN hiccup), run hermes doctor — it will surface the missing Chromium and print the exact npx playwright install chromium command to fix it.
agent-browser fails with a weird Node version error.
The installer provisions Node 26 at %LOCALAPPDATA%\hermes\node but your PATH may have an older system Node 18 first. Either move Hermes's node dir earlier on PATH, or delete the system install if you don't use Node elsewhere.
Chinese / Japanese / Arabic characters show as ? in the CLI.
The UTF-8 stdio shim didn't activate. Check that HERMES_DISABLE_WINDOWS_UTF8 is NOT set (Get-ChildItem env:HERMES_DISABLE_WINDOWS_UTF8). If it's empty and you still see ?, the console host (very old cmd.exe) may not support UTF-8 at all — switch to Windows Terminal.
Gateway can't send Telegram photos — "BadRequest: payload contains invalid characters".
This is unrelated to Windows but sometimes surfaces first there. Usually it means your file path contains unescaped backslashes in a JSON body. Telegram should be receiving paths Hermes normalizes, not raw Windows paths — if you're seeing this inside a custom plugin, make sure you're passing the Hermes-provided path, not str(Path(...)) from user input.
"Works on my other machine" encoding weirdness after git pull.
If you edited Hermes config or a skill on Windows using a non-UTF-8 editor (Notepad on older Windows versions, some Chinese IMEs), the file may have been saved with a BOM. Hermes tolerates utf-8-sig on most config reads, but a BOM inside a folded YAML scalar (description: >) silently breaks YAML parsing. Re-save the file as plain UTF-8 without BOM.
Where to go next
Explains the idea itself. Read it slowly; the later sections build on it.
- Installation — the full install page, including Linux/macOS/WSL2/Termux.
- Windows (WSL2) Guide — if you want POSIX semantics or the dashboard terminal pane.
- CLI Reference — every
hermessubcommand. - FAQ — common non-Windows-specific questions.
- Messaging Gateway — running Telegram/Discord/Slack on Windows.
5 questions answered by this page alone.
Every option is a real identifier from the Hermes documentation. The wrong ones are real too, just from other pages.