# Hermes Desktop — Common errors and what they actually mean

Quick lookup for `errors.log` patterns. The Desktop's user-facing error messages are often misleading; this table maps the actual log signature to the real cause.

## "Update didn't finish — Backend update failed"

**Real cause: a platform plugin is wedged on startup, not the update itself.**

Log signature:
```
WARNING hermes_plugins.telegram_platform.adapter: [Telegram] Telegram polling conflict (1/5)
  — previous session still held open on Telegram's servers.
  Waiting 20s for it to expire. Error: Conflict: terminated by other getUpdates request
WARNING hermes_plugins.telegram_platform.adapter: [Telegram]
  Updater not running 60s after reconnect — treating as wedged
WARNING hermes_plugins.telegram_platform.adapter: [Telegram]
  Telegram network error (attempt 1/10), reconnecting in 5s.
```

Same pattern applies to Discord, Slack, Teams — any plugin that holds a long-poll or websocket connection to an external service.

Resolution options (in order of invasiveness):
1. **Wait 5–10 min** for the platform's session timeout to clear naturally. This works in the majority of cases.
2. **Clean Desktop restart**: X button, check system tray icon (right-click → Quit), reopen.
3. **Disable the plugin** in Hermes config if the user doesn't actively use that platform.

Worked example from a real session (July 2026): user clicked "Update now," got the dialog. `errors.log` showed telegram polling conflict with retries climbing (1/5 → 2/5). User waited ~10 min and retried; updater succeeded once the platform's session timeout fired.

## "Unable to move the cache: Access is denied"

**Real cause: Electron's cache directory is locked or the path is wrong.**

This appears in the console when the updater (or a `--help` invocation) tries to move the electron cache. Usually transient. The legitimate fix:
- Close Hermes fully (X + tray quit)
- Clear `$env:LOCALAPPDATA\hermes\hermes-agent\apps\desktop\release\win-unpacked\Cache` if it exists
- Reopen

Note: this error also surfaces spuriously from a one-off `Hermes.exe --help` invocation in a separate terminal. If the Desktop is working fine otherwise, ignore.

## Hermes processes won't die / multiple Hermes.exe

**Not a bug.** Electron apps run multiple processes: 1 main, 1+ renderer per window, 1 GPU process, utility processes. For Hermes Desktop expect ~5 `Hermes.exe` entries in Task Manager. Do NOT suggest killing them all.

If the user wants to fully close:
1. Click the X on the Desktop window
2. Check the system tray (^ arrow in the notification area) for a Hermes icon
3. Right-click → Quit (Electron apps often hide a tray process)

Verify with:
```
Get-Process | Where-Object {$_.Name -like "*hermes*"} | Format-Table -AutoSize
```
An empty result means everything is fully closed.

## "Polling conflict (N/5) — previous session still held open"

**Real cause: the previous Hermes instance (or a separate bot somewhere) is still holding a getUpdates session on the platform's side.**

Telegram-specific phrasing. The platform sees two `getUpdates` calls happening and rejects the new one. The previous session will time out on the platform's servers after ~5–10 minutes. Hermes retries with exponential backoff; if it exceeds ~5 attempts the connection is treated as wedged and a longer backoff kicks in.

If the user has another Hermes instance running elsewhere (e.g., VPS gateway with telegram plugin enabled), THAT is the culprit and needs to be stopped, not waited out.

## Slow startup / Desktop hangs at "Connecting..."

**Real cause: usually the gateway can't be reached, not a local crash.**

Check `gateway.log` for connection attempts. If the user has the VPS gateway stopped (Hermes's default posture), the Desktop should fall back to local mode. If it's hung, the local Python agent probably failed to start — check `agent.log` for python tracebacks.
