Files
hermes-skills-autonomous-ai…/hermes-agent/references/windows-quirks.md
T

2.4 KiB

Windows-Specific Quirks

Hermes runs natively on Windows (PowerShell, cmd, Windows Terminal, git-bash mintty, VS Code integrated terminal). Most of it just works, but a handful of differences between Win32 and POSIX have bitten us — document new ones here as you hit them so the next person (or the next session) doesn't rediscover them from scratch.

Input / Keybindings

Alt+Enter doesn't insert a newline — Windows Terminal (and mintty) grab it for fullscreen before prompt_toolkit sees it. Use Ctrl+Enter instead (the CLI binds it to newline on Windows; raw Ctrl+J does the same, harmlessly). To inspect how your terminal reports a keystroke, run python scripts/keystroke_diagnostic.py from the repo root.

Config / Files

HTTP 400 "No models provided" on first runconfig.yaml was saved with a UTF-8 BOM (Notepad does this). Re-save as UTF-8 without BOM; hermes config edit writes correctly.

execute_code / Sandbox

WinError 10106 from the sandbox child process — it can't create an AF_INET socket. Root cause is usually Hermes's env scrubber dropping SYSTEMROOT/WINDIR/COMSPEC (Python's socket needs SYSTEMROOT to find mswsock.dll), not a broken Winsock LSP. The _WINDOWS_ESSENTIAL_ENV_VARS allowlist in tools/code_execution_tool.py covers it; if you still hit it, echo os.environ inside an execute_code block to confirm SYSTEMROOT is set.

Testing on Windows

scripts/run_tests.sh is POSIX-only (expects .venv/bin/activate); the Hermes-installed venv/Scripts/ has no pip/pytest (stripped for size). Install pytest into a system Python and run directly (the repo no longer uses pytest-xdist; the canonical runner does per-file subprocess isolation, which the POSIX-only wrapper handles):

"/c/Program Files/Python311/python" -m pip install --user pytest pyyaml
export PYTHONPATH="$(pwd)"
"/c/Program Files/Python311/python" -m pytest tests/foo/test_bar.py -v --tb=short

(POSIX-only tests need skip guards — see the cross-platform guard list in references/contributor-guide.md.)

Path / Filesystem

Line endings. Git may warn LF will be replaced by CRLF. Cosmetic — the repo's .gitattributes normalizes. Don't let editors auto-convert committed POSIX-newline files to CRLF.

Forward slashes work almost everywhere. C:/Users/... is accepted by every Hermes tool and most Windows APIs. Prefer forward slashes in code and logs — avoids shell-escaping backslashes in bash.