NousResearch/hermes-agent
CLI process loop freeze and input unresponsiveness
Cluster 16803 · hermes cli. Data as of
Nothing open on GitHub. Fix merged in #55964 on 1 Jul 2026. Check it covers your case.
The short answer
0open issues
0open PRs
3items grouped
- Known?
- Yes. 3 related items grouped here, 1 issue already closed.
- Fix event
- A fix was merged to main in PR #55964. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
resolved, deciding PR #55964. That is separate from the fix event. - Still open
- Nothing open on GitHub.
These members address a bug where the CLI process loop becomes unresponsive, ignoring user input and resisting interrupts like Ctrl-C. Fixes target the process loop lifecycle, MCP reload join behavior, and related flag handling.
Open issues0
Open PRs0
Fixes on record
-
#55964 fix(cli): prevent process_loop freeze from MCP reload join and voice flag leak (#16803)
files:
cli.pyShow the diff
-
cli.py@@ -10107,9 +10107,11 @@ def _check_config_mcp_changes(self) -> None: target=self._reload_mcp, daemon=True ) _reload_thread.start() - _reload_thread.join(timeout=30) - if _reload_thread.is_alive(): - print(" ⚠️ MCP reload timed out (30s). Some servers may not have reconnected.") + # Do NOT join here — process_loop calls this from its idle branch, so a + # blocking join would freeze input consumption for up to 30s (and a hung + # MCP server could block far longer). The reload runs purely in the + # background daemon thread, which reports its own progress/completion + # status via print() inside _reload_mcp(). # Inline-skip tokens that bypass the destructive-slash confirmation modal. # A general escape hatch for non-interactive use (scripting/automation) and @@ -10737,8 +10739,16 @@ def _voice_start_recording(self): except Exception: pass + # Recorder creation can fail (no input device, PortAudio init error). + # Reset the flag on failure or _voice_recording stays True forever and + # every future voice start is silently skipped by the guard above. if self._voice_recorder is None: - self._voice_recorder = create_audio_recorder() + try: + self._voice_recorder = create_audio_recorder() + except Exception: + with self._voice_lock: + self._voice_recording = False + raise # Apply config-driven silence params (numeric-guarded so YAML # scalar corruption doesn't break recording start-up).
-
1 PR closed without merging
From the close comments: merged via another change 1
-
#16931 fix: make process_loop never die, preventing TUI input black hole · merged via another change →
972aa33,#55964
Closed issues · 1
- Closed#16803[Bug]: hermes-cli enter a dummy status, it ignore any input, and ctl-c, only can kill it
How this cluster was grouped
-
Link evidence (
structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference. -
Pairwise link density
0.67: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the LabAt a glance
- Subsystem
- hermes cli
- Merged PRs
- #55964
- Closed issues
- 1
- Attempts
- 1 PR closed without merging
- Fix link checked
- 1 Jul 2026