Pinned Releases and Rollback Plans
Nous Research
Hermes was acting less like a stable app release train and more like a fast moving source checkout, which pushes operational work onto users. In September 2026, Nous shipped a patch release after a session store rewrite in v0.21.0 made state.db vulnerable to writer lock conflicts, false corruption signals, and session listing failures. The practical lesson is to pin known good builds, because a plain update could also move installs onto unreleased main line code.1 2 3
- The patch release on September 11, 2026 was unusually large for a reliability fix, spanning 947 non merge commits and 312 merged PRs since v0.21.1. That size matters because it mixes a database repair with many unrelated changes, which makes upgrades harder to reason about and test in production.1
- The failure mode was concrete. Two Hermes processes touching the same profile could cancel each other’s SQLite WAL locks, leaving a healthy store looking broken. The fix re held locks on SQLite descriptors and moved some foreign profile reads to read only opens, which shows the risk came from concurrency inside normal product workflows, not exotic misuse.2 4
- Rollback also needed real procedure, not just old binaries. Hermes docs say older releases can refuse to run once a newer gateway runtime has written to state.db, and recommend restoring pre update state instead. In parallel, a September 2026 incident report showed some source installs drifting 2,901 commits past the newest release tag after a plain update.3 5
Going forward, Hermes adoption depends on behaving more like enterprise software, with slower default channels, cleaner release boundaries, and safer downgrade paths. As harnesses become swappable across Claude Code, Cursor, Codex, and OpenClaw, the teams that win trust will be the ones whose upgrades feel boring.6 3 5