Skip to content

v0.6.2 Chat input never reaches gateway — "loding" spinner hangs forever (complete unusability) #718

@sunnysails

Description

@sunnysails

Hermes Desktop v0.6.2 — Chat input never reaches gateway, "loding" spinner hangs indefinitely (complete unusability)

Summary

Sending any chat message in the desktop chat panel leaves the UI stuck on the "loding" spinner forever. The message never reaches the gateway. No requests leave the renderer. This is not a slow response or partial failure — the desktop chat input is functionally dead.

After fully restarting the Electron app (kill all hermes-agent.exe processes, including main, gpu, utility, renderer), the symptom reproduces on a fresh boot. The bug makes the application completely unusable for chat, which is the application's primary feature.

Environment

  • OS: Windows 10 (build unknown)
  • Hermes Desktop version: 0.6.2 (latest, released 2026-06-18 per release page)
  • Installer path: C:\Users\sunnysails\AppData\Local\Programs\hermes-desktop\hermes-agent.exe
  • Hermes CLI (separate install): C:\Users\sunnysails\.hermes\hermes-agent\ (source checkout)
  • Hermes Agent backend: working — see "Backend is healthy" below
  • User data dir: C:\Users\sunnysails\AppData\Roaming\hermes-desktop\

Reproduction

  1. Fresh start: Start-Process 'C:\Users\sunnysails\AppData\Local\Programs\hermes-desktop\hermes-agent.exe'
  2. Wait ~60s for the desktop UI to fully render
  3. Click the chat input, type any message (e.g. ping), press Enter
  4. Observe: loding spinner appears, never resolves, no response, no error toast
  5. Repeat for 27+ minutes: same result every time

Diagnosis Evidence

1. Backend (gateway) is healthy

Direct curl against the local API server (the gateway that Hermes Desktop spawns to handle requests):

$ curl -s -m 5 http://127.0.0.1:8642/health
{"status": "ok", "platform": "hermes-agent"}

The gateway process is the long-running one:

pid=18040 cmd="C:\Users\sunnysails\AppData\Roaming\uv\python\cpython-3.11-windows-x86_64-none\python.exe"  -m hermes_cli.main gateway

Process pythonw.exe -m hermes_cli.main gateway (pid 35028) is its parent wrapper. This tree is stable and serving requests correctly when called via curl.

2. Desktop messages never reach state.db

The ~/.hermes/state.db SQLite store is the authoritative record of every conversation. Querying it across 27 minutes of attempts:

SELECT source, COUNT(*) FROM sessions WHERE started_at > 1781767800 GROUP BY source;
-- Result:
-- cli | 1
-- (zero api_server / desktop-originated sessions)
SELECT id, source, datetime(started_at,'unixepoch','localtime'), message_count
FROM sessions WHERE started_at > 1781766000 ORDER BY started_at DESC;
-- Result:
-- 20260618_154010_9f6a68 | cli | 2026-06-18 15:42:42 | 69

The single session in that window is source=cli — that's the terminal session I have running concurrently (which works fine). There are zero sessions originating from Hermes Desktop.

3. Renderer is idle, not starving

Sampled CPU on the real renderer process (--type=renderer, pid 48696) over 15 seconds while idle (no chat activity):

t=0   CPU=30.875  WS_MB=182.7
t=5   CPU=30.891  WS_MB=179.9   delta_CPU=0.016   delta_WS_MB=-2.8
t=15  CPU=30.891  WS_MB=179.9   delta_CPU=0.016   delta_WS_MB=-2.8

CPU is essentially flat over 15s — the renderer is not running a runaway 3D render loop or animation. WS even shrank slightly (GC kicked in). The chat input area simply never fires a submit event, or the submit handler fails before any IPC call to main reaches the gateway.

4. Other process anomalies

While the desktop is open and idle:

Id    CPUs    WS_MB  Type                              Responding
2868  0.12    85.5   --type=utility ... AudioService   True
15700 30.27   271    --type=gpu-process                True
23760 0.12    51.8   --type=utility ... NetworkService True
29488 6.25    174.9  (main, no --type= flag)           True
48696 30.72   188.3  --type=renderer                   True
  • --type=gpu-process (pid 15700) uses 30+ seconds of CPU while idle — abnormally high for an idle desktop. Suggests the GPU process is in a busy spin (likely 3D scene claw3d.ts + GLB assets apartment.glb/building1.glb/atm.glb/biz_man.glb continuously redrawing), or a hung Mojo IPC await on the GPU side.
  • Main (pid 29488) shows CPU growth without bound (6.25s after launch, climbing) — main may be waiting on the renderer but the renderer isn't responding.
  • All five processes report Responding=True, but Electron's Responding flag only proves the Win32 message pump is alive, not that the main thread is making progress. This is a known Electron pitfall.

5. Full kill + restart does not fix it

I performed a full restart twice:

  • Attempt 1: killed all 5 hermes-agent.exe processes, restarted from Start Menu. After 60s the UI rendered. Chat send → same hang.
  • Attempt 2: killed only main (pid 37056) + renderer (pid 31688) at the OS level via Stop-Process -Force. New 4-process tree spawned at 16:00:19. Gateway tree (pythonw + python) survived. Chat send → same hang.

The bug reproduces 100% of the time after a fresh boot.

6. No error logs

C:\Users\sunnysails\AppData\Roaming\hermes-desktop\logs\updater.log only contains auto-update events, no application errors. There is no other log file in the user-data dir that would surface a renderer-side stack trace. No console output is captured for the packaged Electron app, so the JavaScript error (if any) is swallowed.

7. Configuration that may be relevant

  • ~/.hermes/config.yaml has platforms.api_server.enabled: true, port: 8642, key: hermes-local-key-2026.
  • No OAuth login completed for desktop — desktop is running in local mode only.
  • ~/.hermes/hermes-agent/ is a source checkout (no venv subdirectory), so the gateway spawned by desktop runs from source. Possibly relevant: the desktop binary at AppData\Local\Programs\hermes-desktop\ is the Electron wrapper, separate from the Python source tree.

Workaround (until this is fixed)

Don't use Hermes Desktop for chat. Use the Hermes CLI directly — it bypasses the Electron renderer entirely and works reliably:

hermes chat

This is the path every other integration (CLI, Telegram, API server) uses, and is unaffected by this renderer deadlock.

Hypothesis

The renderer (or its Mojo IPC bridge to main) is in a state where the chat submit handler either:

  1. Never binds to the input element after the chat panel mounts, or
  2. The IPC message from renderer→main→gateway is dispatched but main's await on renderer completion is never woken.

Combined with the abnormal GPU process CPU (30+s, idle), this looks like a deadlock between the renderer's chat IPC handler and the GPU process's Mojo pipe — possibly because both are waiting on each other through the same Mojo channel. A Web Worker for the 3D scene, or moving the chat submit handler out of the main renderer thread, would likely unblock this.

Related existing issues

None of the above match this exact symptom (renderer idle, messages never leave process), but the pattern of "UI shows loding, no traffic leaves the renderer" recurs across reports.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions