How-To Guide
How to Update Hermes Agent Safely
Update Hermes Agent safely with current backup, preview, dependency, Desktop, Docker, Windows, gateway, and post-update verification steps.
Quick answer
Run hermes update --check, protect important state with hermes update --backup, close conflicting Desktop/Windows processes, then run hermes update. Read any partial Node/npm failure before restarting services, run hermes config check, hermes doctor, and hermes gateway status, and prove one real tool or channel workflow. Docker users must pull and recreate the image instead of running hermes update inside the container.
Updating Hermes Agent is more than pulling code. The current updater can preview changes, snapshot state, auto-stash source edits, validate critical files, refresh Python and Node dependencies, migrate configuration, sync skills, and restart gateways. The safe workflow is to identify the install method, protect state, read partial-update output exactly, then prove the real tool or channel path after the update.
Managed cloud · API costs included · Skill library · Cancel anytime
Before you start:
- ☑A working Hermes Agent install and access to the active profile
- ☑Enough free disk space for dependency refreshes and a pre-update snapshot
- ☑A maintenance window if Telegram, Discord, cron, webhooks, Desktop, or a remote gateway must stay available
- ☑For Docker: access to the Compose/image workflow and the persistent
/opt/datamount
Steps
- 1
Read the v0.20 release notes before updating
The Hermes Agent v0.20 Herald Release adds conversational voice, A2A, signed outbound webhooks, Desktop artifacts, grounded citations, and new CLI commands. Review the focused release guide before changing a production profile.
- 2
Identify the install and check the current version
Run
which hermes,hermes --version, andhermes doctor. Hermes detects git-installer, Docker, and NixOS layouts differently, so confirm the active binary before changing anything. - 3
Preview the update without modifying files
Run
hermes update --check. It fetches and compares your checkout withorigin/mainwithout pulling code, installing dependencies, or restarting gateways. Read the latest release notes before a production update. - 4
Take the right pre-update backup
Normal updates take a lightweight state snapshot. Use
hermes update --backupfor a fullHERMES_HOMEarchive on production gateways or important profiles. Commit intentional source changes first; Hermes auto-stashes a dirty source checkout, but restoring custom edits can conflict with new code. - 5
Close conflicting Windows or Desktop processes
On Windows, close Hermes Desktop, exit open Hermes REPLs, and stop the gateway before updating so
hermes.exeand venv files are not locked. For a Desktop retry loop, close every Hermes window before using the terminal updater and inspect~/.hermes/logs/bootstrap-installer.log. - 6
Run the update
Run
hermes update. It pulls the configured branch, validates critical Python files, refreshes Python and Node dependencies, migrates config, syncs bundled skills, and attempts to restart running gateway profiles. Use/updatefrom a supported messaging platform only when you can tolerate the bot going briefly offline. - 7
Read partial-update errors literally
If Hermes says Node dependencies did not refresh, the code and Python environment may be current while Desktop, dashboard, or TUI assets remain mixed. Run
node --versionandnpm --version, then compare the error'sRequiredandActualengine ranges with the current Hermespackage.json; use a supported LTS Node/npm pair instead of bypassingengine-strict. - 8
Migrate config only when prompted or reported
Run
hermes config checkafter the update. If it reports missing options, runhermes config migrate. Do not use obsolete commands such ashermes config validate. - 9
Verify the updated runtime
Run
hermes --version,hermes doctor, andhermes gateway status. For a git install, inspectgit -C ~/.hermes/hermes-agent status --short. If Hermes restored local source changes, review the diff before blaming the new release. - 10
Prove one real workflow
Open the private Hermes dashboard, confirm the intended profile/provider, then run one harmless tool call and one real Telegram, Discord, cron, or webhook test. A successful update message does not prove every long-running channel loaded the new code.
Pro Tips
- 💡Use
hermes update --checkbefore changing a production install andhermes update --backupwhen the profile is expensive to reconstruct. - 💡The normal updater already attempts to restart running gateway profiles; use
hermes gateway restartonly when validation shows a gateway stayed stale. - 💡Docker installs do not support
hermes update; pull the new image, recreate the service, and preserve the Hermes home volume. - 💡Do not solve Node/npm engine failures with random global upgrades. Read the current repo engine constraints and use a supported LTS combination.
- 💡If prompted to restore local changes, choose yes only for source edits you recognize. Choosing no leaves the update stash preserved for later review.
- 💡If an SSH terminal disconnects, inspect
~/.hermes/logs/update.log; current updates mirror progress there and ignore SIGHUP.
Troubleshooting
❌ Update is partially complete because Node dependencies failed
✅ Do not assume the whole update rolled back. Check node --version, npm --version, and the error's Required/Actual ranges; select a supported LTS Node/npm pair, rebuild the failed workspace, then rerun hermes doctor. The dashboard/TUI/Desktop can remain mixed until this is fixed.
❌ Desktop Retry Update loops or says an update is already in progress
✅ Close every Hermes Desktop window and backend process. Inspect ~/.hermes/logs/bootstrap-installer.log and ~/.hermes/logs/update.log. Only remove ~/.hermes/.hermes-update-in-progress when no updater is actually running, then use the installed terminal/bootstrap updater to get the fixed updater before reopening Desktop.
❌ Windows update cannot replace hermes.exe or venv files
✅ Close Desktop, exit Hermes REPLs, stop the gateway, and retry. Do not force through a real venv lock: a half-refreshed native dependency set is worse than a cleanly refused update.
❌ Update asks whether to restore local changes
✅ Hermes found modified or untracked source files and saved them in git stash. Restore only intentional customizations, then review git status and git diff. If you decline, the stash remains available for manual recovery.
❌ Hermes works in CLI but Telegram, Discord, or cron fails after update
✅ Run hermes gateway status, fully restart the affected gateway profile if needed, and test the exact destination. Separate stale gateway code from provider credits, allowlists, thread IDs, and delivery permissions.
❌ A Docker install says hermes update is unsupported
✅ That is expected. Pull the current Hermes image and recreate the container while preserving host ~/.hermes at container /opt/data. Never mount over the immutable /opt/hermes application tree.
FAQ
Does updating Hermes erase memory, sessions, skills, or config?
A normal update preserves profile state and takes a quick pre-update snapshot. Use hermes update --backup for a full Hermes-home archive before a high-value production update.
Does hermes update restart the gateway automatically?
Current Hermes attempts to restart every running gateway profile after a successful update. Verify with hermes gateway status; manually restart only when the service did not refresh or the real channel still uses stale code.
What does Update partially complete mean?
It can mean code and Python dependencies updated while one or more Node workspaces did not. Desktop, dashboard, or TUI assets may be in a mixed state until the Node/npm engine or dependency error is repaired.
What does Restore local changes mean during a Hermes update?
The updater auto-stashed a dirty source checkout before pulling. Restore only custom source edits you recognize; otherwise leave the stash preserved and review it later.
How do I update Hermes Agent in Docker?
Pull the current image and recreate the container or Compose service while preserving /opt/data. Docker installs do not support the hermes update command.
Should I use sudo to fix a Hermes update permission error?
Not as a blanket fix. First identify the active install and the exact path with wrong ownership. Running global npm or Hermes commands with sudo can create root-owned caches and make later updates harder.
Related setup and cost guides
Fix a hanging or partial Hermes update
Use the full recovery runbook for PATH, git, Python, Node/npm, Desktop marker, and stash failures.
Back up and restore Hermes Agent
Protect profiles, sessions, skills, cron jobs, config, auth, and gateway state before production upgrades.
Troubleshoot Hermes Agent by layer
Separate install, provider, tool, terminal, gateway, and delivery failures after an upgrade.
Hermes Docker update and recovery
Pull a new image and preserve `/opt/data`; Docker installs do not update with `hermes update`.
Hermes Desktop remote backend guide
Keep Desktop, the remote runtime, dashboard port, profiles, and gateway ownership distinct.