Security patch addressing a regression introduced in v0.3.2. Thanks to @ppritcha for both the field report (#4) and the fix (#5).
Security
v0.3.2 fixed issue #3 (Hermes binary unreachable under the sandbox user) in part by running chmod 755 /root in the Dockerfile. That change was too coarse — it opened not just /root/.hermes/ but the entire root home directory to any process running as sandbox, exposing:
/root/.hermes/config.yaml— inference provider API keys/root/.ssh/— SSH private keys (if present)/root/.gnupg/— GPG private keys (if present)/root/.bash_history— command history, which may include secrets passed as arguments/root/.local/— pip-installed packages and scripts
v0.3.6 removes the chmod 755 /root entirely and instead relocates Hermes's runtime data to /opt/hermes-data, following the same pattern already used for the binary (/usr/local/bin/hermes) and venv (/opt/hermes-venv). /root stays at its default 700 permissions.
Changed
- Dockerfile —
cp -a /root/.hermes /opt/hermes-data,chmod -R a+rXfor read access, writable subdirs (memories,sessions,skills,cron,hooks,logs) viaa+rwX.HERMES_HOMEset to/opt/hermes-data. - All four OpenShell policies —
read_write: /root/.hermes→/opt/hermes-data. openshell/hermesclaw-profile.yaml—containerPathandHERMES_HOMEupdated.docker-compose.yml—HERMES_HOMEand named-volume mount paths updated.configs/hermes.yaml.example— memory + skills paths updated.- Docs + test scripts — all references updated to match.
Upgrade
docker pull ghcr.io/theaisingularity/hermesclaw:v0.3.6
# or, if you ran the one-liner:
curl -fsSL https://raw.githubusercontent.com/TheAiSingularity/hermesclaw/main/scripts/install.sh | bash
# or, from an existing clone:
cd ~/.hermesclaw && git pull && ./scripts/setup.shData migration is automatic. The named Docker volumes (hermesclaw-memories, hermesclaw-skills) are mounted at the new /opt/hermes-data/* paths; Hermes reads via HERMES_HOME. No manual steps needed. If you use the OpenShell profile, the host-side ~/.hermes mount now maps to /opt/hermes-data inside the container — same host directory, new in-container location.