- Build fails after update —
libasound2renamed tolibasound2t64in Debian bookworm. Dockerfile now tries both names, falling back gracefully so builds succeed on all base image variants. - Unpinned jupyterlab breaks venv —
uv pip install jupyterlabwithout a version constraint could pull a release incompatible with existing Hermes venv packages. Pinned to>=4.0,<5range to bound resolution. uvnot in PATH during Docker build — switched from bareuvto explicit/opt/hermes/.venv/bin/uvso the install works regardless of base image PATH configuration.visudonot in PATH during Docker build — switched to explicit/usr/sbin/visudopath.- Kanban patch exits with code 1 — entire kanban migration patch now wrapped in
try/except; any unexpected error (file encoding, permission, changed upstream structure) skips silently instead of failing the Docker build.
- ENV Builder — interactive UI at
/env-builderfor configuring all Space secrets. Grouped sections: Core, Backup, Telegram, Terminal, Providers, Cloudflare, Advanced. Model picker with provider/model-name presets. Import/export asHUGGINGMES_ENV_BUNDLEor plain.env. - JupyterLab terminal — full shell access at
/terminal/. On by default (DEV_MODE=true). UsesGATEWAY_TOKENas terminal password — no separateJUPYTER_TOKENneeded. Dashboard button added. - Chromium browser tools — installs Chromium and display/font libs so Hermes browser-use tools work out of the box.
- Plugin persistence — Hermes plugin directory symlinked into the persistent volume; plugins survive container restarts.
- Secret redaction — enabled by default in Hermes config (
security.redact_secrets: true). - Cloudflare Keepalive — Cloudflare Worker setup for automatic space keep-awake.
- Space stuck at RUNNING_APP_STARTING — root cause:
start_jupyter()calledpython3 -c "import jupyterlab"using system Python; JupyterLab is installed in the Hermes venv. Import failed →return 1→set -euo pipefailkilledstart.sh→ container crashed every boot. Fixed to use/opt/hermes/.venv/bin/python. - Terminal double password prompt — proxy now injects
Authorization: token <JUPYTER_TOKEN>header when forwarding requests to JupyterLab, bypassing its own login screen. One login instead of two. - Gemini 404 errors — strip
google/orgemini/prefix when setting Hermes model name; Hermes gemini provider expects bare model name (e.g.gemini-2.5-flash, notgoogle/gemini-2.5-flash). - Config persistence — use
setdefaultfor user-configurable fields; always overwritemodel.defaultandmodel.providerfrom env so deploy-time settings win without clobbering dashboard changes. - Keys disappearing after restart — sync state to HF Dataset on natural gateway exit (in addition to periodic sync and SIGTERM path).
- Sync timeouts — set
HF_HUB_DOWNLOAD_TIMEOUT=300and enableHF_XET_HIGH_PERFORMANCEfor faster dataset transfers. - hermes not found in terminal — symlink
hermesCLI into$HERMES_HOME/.local/bin; add/etc/profile.d/hermes-venv.shso PATH includes venv bin in all shell types. - Kanban migration crash — wrap
ALTER TABLE ADD COLUMNin try/except; idempotent on existing databases. - Health endpoint returning 503 —
/healthalways returns HTTP 200 (gateway status in JSON body). Returning 503 when gateway was starting caused Docker HEALTHCHECK to fail indefinitely.
- Space emoji updated to 🪽 (Hermes winged sandals) across README and dashboard.
- Login page redesigned to match HuggingClaw dark-card aesthetic.
- ENV Builder, Terminal, and Control UI all require session auth (single
GATEWAY_TOKENlogin). HF_HUB_ENABLE_HF_TRANSFER(deprecated) replaced withHF_XET_HIGH_PERFORMANCE=1.- HEALTHCHECK
start-periodtuned to 60s; health endpoint always returns 200.
- Initial HuggingMes Docker Space wrapper for Nous Research Hermes Agent.
- Added HF Space dashboard,
/health,/status,/v1/*proxy, and Telegram webhook proxy. - Added Cloudflare Worker setup for Telegram Bot API base URL proxying.
- Added private HF Dataset backup and restore for Hermes state.
- Added Cloudflare Keepalive Worker setup for automatic space keep-awake.