AgentFixboard

Local session answers one turn then pauses with storage_unavailable

A local conversation answers exactly one turn, then later messages stay queued and never run. The gateway log prints WARNING gateway.session_authority: Session local-<id> paused: storage_unavailable 96 to 180 ms after response ready.

From GitHub

NousResearch/hermes-agent

Difficulty
Easy
Time
~5 min
Steps
2
Fixed in
—
Last checked

Not fixed upstream yet: the issue is open. Source: issue open. Last checked 2026-10-23.

Symptom

A local conversation answers exactly one turn, then later messages stay queued and never run. The gateway log prints WARNING gateway.session_authority: Session local-<id> paused: storage_unavailable 96 to 180 ms after response ready.

Evidence what you'll see

  • session_admissions rows for those messages sit at status='queued' with generation NULL, so they were never claimed.
  • Restarting the gateway buys exactly one more turn per conversation because it clears authority.sessions and the first claim takes the live is None branch.
  • PRAGMA quick_check is ok. Replaying claim_session_input() against a copy of the database succeeds.
  • On the first failing claim, live.source.to_dict() includes message_id and the receipt source omits it. The two dicts differ only by that field.

Why it happens

restore_local_session() compares live.source.to_dict() != source.to_dict(). message_id is a per-message field. local_source() rebuilds the receipt source without a message, and SessionSource.to_dict() omits a None message_id, so the comparison cannot match after the first turn. The raise is named storage_unavailable even though storage is fine.

Affected versions

Hermes v0.22.4 (4d04303818b), macOS arm64, local TUI sessions through a shared launchd-managed gateway, Python 3.14.7. The recovery file is unchanged on v0.22.5.

Fix steps

0 of 2 done

Your check marks stay in this browser only.

How to check it worked

  • Consecutive messages on one local session run (runtime_generation 1 then 2 then 3) with no leftover queued rows and no paused: storage_unavailable after a completed turn.

If it still fails

  • A comment tracks this under issue #134889 as local sessions stalling after one turn. Issue #140113 strips only profile before retry, so message_id still differs.
  • The linked issue does not give a one-off command that clears the pause besides restarting the gateway, which restores only the next first turn.

Sources and credit

Summarized in our own words from these public reports. Credit goes to their authors.

Provided as is, without warranty. Try changes in a non-production environment and back up first. Security-related steps: verify against the official docs. Terms · Request removal or attribution change

Hit an error we don't cover? Submit it