Hermes-Workspace v2.2.0 — HermesWorld
The biggest gameplay-shaped release we've shipped. HermesWorld turns the playground into a full multiplayer 3D environment where every NPC teaches a real Hermes Agent skill. 222 commits since v2.1.3.
✨ HermesWorld
A six-world action-RPG that lives at /playground (now featured as HermesWorld in the workspace sidebar with a gold NEW badge):
- Six worlds — Training Grounds, Forge, Agora, Grove, Oracle, Arena. Each one teaches a real concept (prompts, skills, multi-agent coordination, memory, routing, evals).
- Every NPC = a real skill — Athena, Pan, Hermes, the Knight, and the rest. Talking to them surfaces actual Hermes Agent capabilities.
- Multiplayer out of the box — Cloudflare Hibernation API powers the public WS hub. Any two devices that open the workspace see each other in the same world. HTTP polling fallback keeps it bulletproof on flaky networks.
- Premium presentation — cinematic camera, ASCII NPC portraits, lore loading screen, knight armor models, in-world speech bubbles, focus mode, and a hero canvas agent network on the title screen.
- Quests — Tutorial loop in Training, Forge unlock gate, Diplomacy & Summoning quests, journal upgrades, low-HP cinematics, mobile-friendly layout.
The full demo script and recording kit live at memory/goals/2026-05-03-playground-training-grounds/.
🎨 Themes
- Matrix dark / light (#279, thanks @Interstellar-code) — phosphor green on cinematic black, plus a paper-white companion.
⚙️ Settings & onboarding
- Custom OpenAI-compatible provider UI (#287, @Interstellar-code) — always-clickable Custom card with editable Base URL + API key. Stored in
.envasCUSTOM_API_KEY, with base URL in config. - Provider card verified status (#282, @Interstellar-code) — single-dot precedence and a verified-only green dot. Local providers no longer pretend to be online when they're not.
- Auth Secure-cookie LAN warning (#281, @Interstellar-code) — startup warning when running in production mode behind a non-loopback bind address without HTTPS, since browsers silently drop
Securecookies on plain HTTP.
🌍 i18n
- Japanese (ja) locale (#290, @yasuhidekoizumi-afk) — full translation pass replacing the previous
ja: ENfallback, plus regression tests mirroring the existing zh/ru coverage.
🔍 Search
- Recent Searches now real (#292) — replaced the hardcoded placeholder strings with localStorage-backed history (cap 6, dedupe by case-insensitive match). The section hides itself when there's no history yet.
- Chats scope actually finds chats (#291) — the search modal now matches against the API's
derivedTitleandpreviewinstead of just the rawfriendlyId. Queries likegithuborworkflowwill now hit the chat that was about that topic instead of returning "No results found."
🛠️ Dev-server fixes
- Vite connection-status returns the full capabilities map (#285) — the dev server's inline shortcut for
/api/connection-statusreturned a slim{ok, mode, backend}body that silently brokeuseFeatureCapabilityanduseFeatureAvailablein dev. The shortcut is removed; the real route file (which already caches viaensureGatewayProbed) handles the path everywhere. - Probe
/api/sessionson the dashboard URL (#276, #289 by @Sanjays2402) —/api/sessionslives on the Hermes Dashboard (default:9119), not the agent. The dev server was hitting the agent URL and getting a 404 every 15 seconds. - Send
Authorization: Bearer $HERMES_API_TOKENon dev-mode probes (#288, @Interstellar-code) so a gateway secured withAPI_SERVER_KEYis detected correctly. Same patch added awatch.ignoredlist for.runtime/.tanstack/.omc/.omx/coverage/dist/etc.so noisy internal paths don't trigger spurious dev reloads. - Vite proxy port +
/cron→/jobslink fixes (#283, @Interstellar-code) — fixes #277 ("/cron 404 Page Not Found"). - Route-tree noise fix — renamed
src/routes/api/send-stream-live-tools.ts→-send-stream-live-tools.tsso TanStack Router stops emitting "does not export a Route" on every regeneration.
🛟 Safety
- Update banner shows the full reason and the blocking files (#293) — the banner used to truncate at "...has local c" and never told the user which files were blocking the update. Now displays the full reason, the repo path of the dirty checkout, and a list of up to 8 paths from
git status --porcelain. Reason copy mentions "remove the listed files" so users with untracked files know what to do.
🧠 Swarm
- HERMES_TMUX_BIN override (#244) — for non-standard tmux installs (Docker containers, NixOS, custom package layouts). Set
HERMES_TMUX_BIN=/path/to/tmuxand the swarm dispatcher and runtime will use it instead of falling through the hard-coded candidate list. Also added/usr/bin/tmuxto the candidate list (Debian/Ubuntu default).
🔧 Operator surfaces & dashboard
- Provider mix donut + cache efficiency tile, Velocity + Cost Ledger menu entries, and the rebranded dashboard header.
- Contextual Operator Tip card that fills the bottom-left gap; sessions list now stretches to fill the column.
- Polish on swarm surfaces; quieter usage-meter error handling.
- Update flow now realigns clean repos to remote on update.
Breaking / migration
None. This is a strict superset of v2.1.3.
Thanks
Big thanks to community contributors this cycle:
- @Interstellar-code — #279, #281, #282, #287, #288, #283
- @Sanjays2402 — #289 / #276
- @yasuhidekoizumi-afk — #290
- Everyone who filed issues #244, #276, #277, #285, #291, #292, #293
🌙 Onward.