Hermes Desktop is the Electron GUI companion to the Hermes Agent CLI. It launches the same agent/ core that runs in your terminal, just wrapped in a chat window with a sidebar, file previews, and provider settings. If you’ve already installed Hermes CLI (see the companion article), the desktop is one command. This piece covers what it actually adds, where the seams are between CLI and GUI, and how to debug when they drift.

Same core, different surface

The desktop isn’t a separate agent. It’s apps/desktop/ inside the NousResearch/hermes-agent monorepo, sharing agent/, cli.py, config, memory, skills, and gateway with the CLI. The Electron shell mainly adds:

  • A real chat panel with markdown rendering and syntax-highlighted code blocks (the terminal uses rich, which is good but plain)
  • Side tabs for sessions, scheduled jobs, and insight summaries
  • A provider/key settings UI so you can flip between Anthropic, OpenAI, Ollama, etc. without editing config.yaml
  • File diff previews before approving edits — easier to read than the terminal diff pager
  • Voice input/output if you have ffmpeg installed (which the Hermes installer already adds)

State is shared: a conversation started in the terminal shows up in the desktop’s session list, and vice versa. Memory, skills, and scheduled jobs are the same files on disk.

Install and launch

The desktop is bundled with the Hermes CLI install — curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash already puts both hermes (the CLI) and hermes desktop (the GUI launcher) on your PATH. To start it:

Bash
hermes desktop

What this does under the hood: spawns the Electron process, which loads apps/desktop/ from the same source tree and reuses the installed Python venv (no shadow install). First launch takes ~3-5 seconds while Electron warms up.

On Ubuntu 22.04 you’ll need libnss3 and libgbm1 for Electron to render. The Hermes installer pulls these in via apt as a soft dependency; if you’re on a minimal install and the GUI doesn’t open, this is the fix:

Bash
sudo apt install -y libnss3 libgbm1 libatk-bridge2.0-0 libxkbcommon0 libxss1 libasound2

Where the desktop shines

The terminal is faster for keyboard-driven work — invoking tools, looping over files, piping output. The desktop is faster for reading. The chat panel renders long tool traces with collapsible sections and a “rendered artifact” tab for HTML/SVG that the terminal can’t preview. Diff previews are where you’ll spend most of your approval time, and a 200-line colorized diff beats a terminal scrollback every time.

For scheduled jobs, the desktop’s Jobs tab is also the discovery surface: click any past run to see the trace, the result, and any insights the agent extracted. The CLI gives you hermes cron list and hermes insights separately; the desktop unifies them.

Where the CLI still wins

Anything that requires piping, scripting, or running unattended. Cron jobs, hooks, subagent delegation, and any workflow you want to dry-run and commit to disk — those are CLI-only. The desktop is a UI on top of an existing CLI workflow, not a replacement.

A few small gotchas

The desktop reads config.yaml on startup; if you edit it in the terminal while the GUI is open, the desktop needs a relaunch to pick up the new values (no hot-reload). Memory and skill files are watched and do hot-reload; only config is static.

Voice transcription uses the local Whisper model by default, which downloads ~150MB on first use. If you’d rather use a hosted transcriber, set voice.provider = openai in config.yaml and provide an OPENAI_API_KEY.

The Electron dev tools are accessible via Ctrl+Shift+I if you want to inspect network requests to your model provider — useful for debugging token cost surprises.

When to use which

Both, usually. Keep a terminal open for routine work, drop into the desktop when you’re reasoning about a long edit or browsing what the agent did overnight. The two share enough state that you shouldn’t have to do anything special to switch.

Last modified: 2026年7月15日

Author

Comments

Write a Reply or Comment

Your email address will not be published.