Shape
Hermes runs on the host, not in a container, as a systemd user unit with linger enabled. The
API server listens on :8642 and the app reaches it through host.docker.internal.
systemctl --user is-active hermes-gateway
ss -ltn | grep 8642
journalctl --user -u hermes-gateway -n 50
The tools/list cache trap
The agent reads tools/list when it connects. A tool added to /mcp is invisible to the
model until the gateway restarts — the model will insist "I don't have that tool" while the
server advertises it. Check both halves:
hermes mcp test nx-master # server side
hermes gateway restart # then the agent
Exit 75
gateway install can restart-loop with exit 75 when an ad-hoc hermes chat gateway already owns
the profile. Stop the ad-hoc one, then start the unit.
Per-profile commands
hermes profile list
hermes -p <profile> gateway status
hermes gateway list # every profile and its status
This is the mechanism the one-bot-per-user decision relies on:
a profile is an isolated instance with its own config, .env, MCP entries and API server port
(API_SERVER_PORT).
Rendered from nx-master/references/gateway.md · OKF bundle · regenerate with npm run render