Skip to content

Desktop: message queued in a busy session is delivered to an unrelated idle session #61573

Description

@LeighAtVT

Summary

On the desktop app, a message queued/composed for one busy session was delivered to a different, unrelated session — the one that had most recently gone idle/focused. The user got no indication it landed in the wrong thread; the wrong session executed the message with full tool access. This has happened to this user multiple times ("when I have something queued in one thread, it will sometimes post in an unrelated thread").

Environment

  • Hermes Agent 0.18.2 (git install), desktop app 0.0.1 (Hermes.app)
  • macOS 26.5.2 (build 25F84)
  • Platform: desktop (both deliveries tagged platform=desktop in agent.log)
  • Model: claude-fable-5 / anthropic

Evidence (from ~/.hermes/logs/agent.log and state.db)

The user composed a message intended for a long-running work session (20260708_151656_007b80, 369 messages, actively mid-task). Instead it was delivered to an unrelated session (20260709_113746_44b749, a config-discussion thread) that had gone idle ~2 minutes earlier:

2026-07-09 11:46:24,927 INFO [20260709_113746_44b749] agent.turn_context: conversation turn:
  session=20260709_113746_44b749 model=claude-fable-5 provider=anthropic platform=desktop
  history=27 msg='you can probably look in posthog too, to find evidence of where they look, and w...'

2026-07-09 11:48:19,302 INFO [20260708_151656_007b80] agent.turn_context: conversation turn:
  session=20260708_151656_007b80 model=claude-fable-5 provider=anthropic platform=desktop
  history=369 msg='you can probably look in posthog too, to find evidence of where they look, and w...'

The 11:48:19 delivery is NOT the app self-correcting — it is the user manually re-sending the same message to the correct thread after noticing the misfire. Without that manual catch, the intended session would never have received the message.

Timeline context: the receiving (wrong) session's previous turn completed at ~11:44; the intended session was busy mid-turn when the message was sent at 11:46.

Impact

  1. Silent cross-thread contamination — the wrong session treats the message as an on-topic instruction and acts on it with full tool access. In this case it burned several minutes of redundant read-only DB/analytics queries; the sharper risk is an approval-shaped message ("yes, go ahead") landing in a session that is waiting to approve something else entirely.
  2. Silent message loss for the intended thread — the busy session never receives the queued message unless the user notices and re-sends manually.
  3. No UI indication that delivery went somewhere other than where the user typed it.

Repro shape (not 100% deterministic — "sometimes")

  1. Have two desktop sessions: A (busy, mid-turn on a long task) and B (idle).
  2. Type/queue a message in session A while it is working.
  3. Sometimes the message is delivered as a new turn in session B instead of being queued for A.

Happy to provide additional log context or run a diagnostic build — the misfire recurs often enough for this user that a debug-instrumented repro is feasible.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium — degraded but workaround existsarea/sessionsSession lifecycle, resume, persistence, historycomp/desktopElectron desktop app (apps/desktop/*)needs-reproBug needs reproduction stepssweeper:risk-session-stateSweeper risk: may lose/corrupt/mis-associate session or context statetype/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions