Hermes Desktop Setup — Decision Guide
Hermes Desktop Setup — Decision Guide
A decision-tree approach to installing and configuring the Hermes Agent desktop app, synthesized from five in-depth walkthroughs. Pick your path based on your model source, risk tolerance, and what you want Hermes to do for you.
Quick-Start: Minimum Viable Setup (10 minutes)
If you just want Hermes running with defaults and a working model:
- Download the desktop app from hermesagent.com
- Pick a provider — if you already pay for OpenAI/Codex, sign in with that. If not, the Nous Research subscription is purpose-built for Hermes.
- Start a session — type "hello" and confirm you get a response
- Done. You're functional. Everything below is optimization.
UI Tour: Where Everything Lives
Before diving into settings, orient yourself in the desktop app. Tonbi's mental model: the desktop app is a control room, not a chat box — it can point to any Hermes instance on the network, and everything you need to manage the agent is in one place.
Left Sidebar
| Element | What It Does |
|---|---|
| Sessions | Chronological list of all conversations. Click to switch. Right-click to pin, rename, or group by workspace. |
| Artifacts | Files the agent has created (images, code, documents). Browse without leaving the app. |
| Messaging | Connect Telegram, Discord, Slack, WhatsApp — configure bot tokens and user IDs here. |
| Skills & Tools | Enable/disable individual skills and tool sets. Also where you manage cron jobs — create, edit, pause, view history. |
Bottom Panel
| Element | What It Shows |
|---|---|
| Model selector | Current model. Click to switch between providers and models on the fly. |
| Context meter | How full the context window is (e.g., "6%"). Watch this on long sessions. |
| Session counter | Turn count for the current session. |
| Gateway indicator | Shows whether you're connected to local or remote gateway. |
| Terminal button | Opens an integrated terminal at the workspace directory. |
| Updates indicator | Hermes updates frequently — the bell icon lights up. |
Chat Area
- Session tabs: multiple sessions run concurrently. Blue dot = working. Yellow dot = waiting for approval. Click between them while one processes.
- Drag-and-drop files: drop images or documents directly into chat for the agent to analyze.
- Reasoning blocks: when enabled (recommended), you'll see the model's thinking expand inline before the final answer.
- Preview rail: the right side can show browser previews, file contents, or rendered markdown — toggle it from the toolbar.
Decision 1: Which Model Provider?
This is the single biggest lever affecting cost, capability, and privacy. Match your situation:
| I want to... | Best choice | Why |
|---|---|---|
| Use my existing Codex/OpenAI subscription | Codex | Near-unlimited GPT-5.5 at no extra per-token cost. Best value if you're already paying $100-200/mo. |
| Support open-source, get best Hermes integration | Nous Research subscription | Purpose-built for Hermes. Igor's #1 recommendation. Revenue supports open model research. |
| Run entirely on my own hardware, zero API costs | Local Ollama | Point Hermes at a local endpoint (http://localhost:11434/v1). Requires ≥ 64K context window — most Ollama models default to 2048. See the context fix below. |
| Access 200+ models under one API key, tier by cost | OpenRouter + Porto router | AI LABS' choice for team use. Porto auto-routes tasks to the right tier (cheap for simple, powerful for complex). |
| Maximum power, cost is secondary | Anthropic (Claude Opus) | Note: Anthropic's subscription ToS disallows this use. API key only. Igor: only worth auxiliary offloading to cheaper models for background tasks. |
The Local Ollama 64K Context Fix
Most Ollama models ship with a 2048-token context window. Hermes needs 64,000 tokens minimum to give your agent tools. Without this fix, the agent will respond "I can't access anything" or hallucinate.
# 1. Create a Modelfile
ollama show gemma4:12b --modelfile > Modelfile.gemma4
# 2. Add this line:
# PARAMETER num_ctx 65536
# 3. Create the variant
ollama create gemma4-64k -f Modelfile.gemma4
# 4. Point Hermes at it
hermes config set model.default_model gemma4-64k
Decision 2: Essential Settings (What to Configure First)
These settings have the highest impact-to-effort ratio. Sources agree on most; disagreements are noted.
Personality & Transparency
| Setting | Recommendation | Why |
|---|---|---|
| Personality | Concise or Technical | Igor: "Everything else I dislike." Avoids verbose/chatty output. |
| Reasoning blocks | ON | Igor: lets you see the model's thinking and spot errors before it acts. Transparency > speed. |
| Timezone | Set it | So "tomorrow 8am" means your 8am. |
Safety: Pick Your Philosophy
Two camps exist. Neither is wrong — pick based on your model and risk tolerance.
| Philosophy | Approval Mode | Who Recommends | When to Use |
|---|---|---|---|
| YOLO | Off or Smart | Igor, AI LABS (with --yolo flag) |
You're using a smart frontier model (GPT-5.5, Claude Opus 4.5+). These models rarely make catastrophic mistakes. Igor: "The graph looks like this — as intelligence goes up, mess-up rate goes to near zero." |
| Measured | Smart | Default for most users | You want the agent to ask before destructive operations (file deletion, shell commands) but not pester you for routine work. |
Igor's blunt take: "I don't believe secure mode actually exists. You can't sandbox your agent to zero risk through approval prompts. If you want real isolation, use Docker for the execution backend — not approval mode."
Memory
| Setting | Recommendation | Consensus |
|---|---|---|
| Persistent memory | ON | Unanimous. This is Hermes' killer feature — the agent builds user.md and memory.md autonomously over time. |
| User profile | ON | Unanimous. Tells the agent who you are and how you work. |
| Memory budget | Leave default | Auto-prunes stale entries to keep context small. |
| Auto-memory | ON | AI LABS keeps it on even though it costs tokens — team-wide context sharing via Slack is worth it. If you're solo and cost-sensitive, you could turn it off, but you lose the self-evolving nature. |
Context Engine
| Setting | Default | Recommendation | Source |
|---|---|---|---|
| Compressor | ON | Keep ON | Unanimous — compresses long conversations to avoid context window bloat |
| Compression threshold | 50% | 50-75% | AI LABS: lower it to compress sooner (save tokens). Tonbi: 75% matches Codex/Claude Code standard. Decision: start at 50%, raise only if you notice context loss |
| Target ratio | 20% | 20% or lower | How much uncompressed tail carries over. Lower = fewer tokens per message. AI LABS lowered theirs on OpenRouter. |
Voice
Igor: "I recommend you completely skip it." Wanderloots and Tonbi both noted built-in voice exists but didn't recommend it. All three creators prefer external tools — the built-in voice works but isn't a strength of the desktop app yet.
Recommended alternative: Handy — a free, open-source, cross-platform speech-to-text app that runs entirely offline. Press a keyboard shortcut (default: Ctrl+Z), speak, release, and your words appear in any text field — including the Hermes chat input. Uses Whisper and Parakeet models locally on your device. No cloud, no subscription, no API keys. Ideal for dictating prompts to Hermes without sending audio anywhere.
Decision 3: Productivity Boosters (By What You Want)
"I want to keep costs predictable"
From AI LABS' systematic team audit:
| Action | Setting | Impact |
|---|---|---|
| Cap output | max_tokens |
Prevents rambling responses that waste tokens |
| Limit turns | max_turns: 60 (default 150) |
Stops the agent spinning on stuck problems. "150 turns of confused looping burns real money." |
| Prevent loops | hard_stop: true |
Kills sessions where the agent isn't making progress |
| Cron job caps | Set max_turns per cron job |
No limit by default — runaway background jobs are the #1 hidden cost |
| Auxiliary models | Point to cheaper model | Background tasks (vision, search, compression, skill scanning) default to your expensive main model. Offload to DeepSeek or Gemini Flash. |
| Sub-agent model | Set cheaper model | Every sub-agent spawns its own context window. Each spawn costs tokens. |
| Track spend | hermes insights |
30-day breakdown by tool, skill, and session. Also: Hermes stores all token data in a SQLite DB — any agent can query it. |
"I want to keep things fast"
| Action | How |
|---|---|
| Trim unused tools | Hermes ships with 17+ tools. Disable any you never use via Settings → Tools or hermes tools disable <name>. Fewer tools = smaller context per message = faster responses. |
| Trim unused skills | 90+ skills pre-installed. Each one's header (name + description) sits in context permanently. Disable Minecraft skills, CAD tools, trading workflows — anything outside your actual work. |
| Disconnect unused MCP servers | Each MCP server brings its own tool definitions into the context window. |
| Set tool search to auto | Loads tool definitions only when the agent actually needs them — like Claude's tool search. |
| Use ephemeral system prompts | One-time session instructions via HERMES_EPHEMERAL_SYSTEM_PROMPT instead of permanent context files. |
"I want separate work and personal setups"
Use Profiles (Wanderloots + Igor):
- Each profile has: its own model, skills, gateways, sessions, and memory
- Work profile: employer-paid Codex, restricted skills, separate working directory
- Personal profile: Nous Research or local Ollama, full skill set, private memory
Igor's take: "Profiles are separation of context — like separation of concerns in software engineering. Powerful, but adds complexity. Only use if you genuinely need strict isolation."
Wanderloots' approach: simply ask Hermes to set up profiles for you — "create two profiles, one for local and one for cloud" — and it handles the cloning.
"I want quick commands for repetitive tasks"
From AI LABS and Tonbi:
| Command | What it does |
|---|---|
/compress |
Start a fresh session from a summary — saves tokens, keeps context |
/undo |
Step back one message. Better than re-prompting — undo, then give a fresh prompt explaining what went wrong |
/fix-aux <provider> <model> |
Repoint all 9 auxiliary model slots in one command (custom quick command) |
hermes prompt-size |
See exactly what's in your system prompt — skills, memory, tool schemas, profile |
hermes sessions optimize |
Merge search index, vacuum session DB |
"I want to understand how sessions work"
Tonbi emphasized session mechanics as a core workflow and cost-saving pattern:
- Each session is an isolated context — nothing bleeds between threads. A conversation about your calendar doesn't carry tokens from your coding session.
- Split work deliberately: instead of one mega-conversation, open a new session per task. This keeps each context window small and cheap.
- Concurrent execution: multiple sessions run in parallel. Blue dot = agent is working. Yellow dot = agent needs your approval on something. Click between tabs while one processes.
- Session indicator lights are your dashboard: blue means you can switch away and come back. Yellow means the agent is blocked waiting for you.
- Native OS notifications fire when a background session completes — you don't need to watch it.
- Right-click sessions to pin (keep at top), rename, or group by workspace (e.g., group all coding sessions together).
"I want to use sub-agents for parallel work"
Sub-agents are Hermes spawning copies of itself to work on independent subtasks simultaneously. Each sub-agent gets its own context window and reports findings back. Tonbi: "Profiles are independent agents with different models, skills, and memory. Sub-agents are parallel workers cloned from the current agent."
When to use sub-agents: research that benefits from parallel exploration (search three sources at once), code reviews (one sub-agent reviews while another tests), any task where doing things sequentially is the bottleneck.
Key settings (from AI LABS):
| Setting | Default | Recommended | Why |
|---|---|---|---|
max_concurrent_children |
3 | 3-5 | How many sub-agents can run in parallel. Default 3 is fine for most. Bump to 5 if you regularly hit bottlenecks. |
max_spawn_depth |
1 | 1 | Whether sub-agents can spawn their own sub-agents. Keep at 1 — nesting multiplies token costs exponentially. |
subagent_auto_approve |
false | true | When true, sub-agents don't pause to ask permission for tool calls. Essential for hands-off parallel work. |
| Sub-agent model | auto (main model) | Set cheaper model | Every sub-agent spawn burns tokens at your main model's rate. Offload to DeepSeek or Gemini Flash — AI LABS saved significantly here. |
Cost warning: sub-agents are powerful but not free. Each spawn creates its own context window with full tool/skill headers. If you run 3 sub-agents on your main model, you're paying ~3× the per-turn cost. Always set a cheaper sub-agent model.
Decision 4: Execution Backend — Safety & Sandboxing
This controls where terminal commands and file operations execute. It is NOT the same thing as the gateway (see Remote Connectivity below). Igor draws the line most people miss: execution backend only affects terminal/file ops — API calls to OpenAI/Anthropic still happen on your local machine regardless.
| Backend | What It Does | When to Use |
|---|---|---|
| Local | Everything runs on your machine | You trust your model and accept responsibility. Igor's default. |
| Docker | Terminal/file ops run in a container — actual sandboxing | You want real isolation. Igor: "The BEST way to isolate if you don't fully trust your model. Don't rely on approval mode — that's theater. Docker is the real sandbox." |
| SSH | Terminal/file ops run on a remote machine | You have a dedicated server (training, compute-heavy tasks) but want API calls to stay local. |
| Modal / Daytona / Singularity | Cloud container backends | Alternative container runtimes if Docker isn't your stack. |
Remote Connectivity
Every creator who covered the desktop app called this the killer feature. Igor: "My favorite feature — the best way to run Hermes." Tonbi: "The desktop app is a control room, not a chat box." Wanderloots: "One shared brain across multiple devices."
Remote connectivity is about decoupling the GUI from where the agent runs. The Hermes desktop app is not the agent — it's a window into the agent, wherever that agent lives. This means the agent keeps running when you close the app, cron jobs fire on schedule, and you can connect from multiple devices to the same agent with a single memory bank.
The Critical Distinction
Before configuring anything, understand these are two different things:
| Setting | Location | What It Controls |
|---|---|---|
| Execution backend | Settings → Advanced | Where terminal commands and files live |
| Gateway | Bottom-left panel | Where the Hermes agent process runs — this is what makes remote connectivity work |
When you connect via remote gateway, the desktop app becomes a thin client — like messaging the agent on Telegram, but with the full desktop UI. Nothing runs on your local machine except the UI. All processing, memory, skills, and cron jobs live on the remote machine.
Pattern A: Same Wi-Fi / LAN
The simplest remote setup. Both machines are on the same network.
On the machine running Hermes (the "server"):
- Set a username, password, and 32-character secret in Hermes settings
- Start the dashboard:
hermes dashboard --no-open --host 0.0.0.0 --port 9119 - Note the machine's local IP (e.g.,
192.168.1.100)
On your laptop (the "client"):
- Settings → Gateway → Remote Gateway
- Enter:
http://192.168.1.100:9119 - Authenticate with username/password
Your laptop is now a window into the server's agent. Sessions, memory, skills — everything lives on the server.
Pattern B: VPS (24/7 Agent)
The agent runs on a cloud VPS. This is the pattern for always-on cron jobs and multi-device access. Igor considers this the best way to run Hermes.
Prerequisites:
- A VPS with Hermes installed (Hostinger, Hetzner, any Linux VPS)
- Both local machine and VPS signed into the same Nous Research account
On the VPS:
- SSH into the VPS
- Register the dashboard:
hermes dashboard register - Set up OAuth (required for VPS, not needed for LAN):
- In
.env, add:HERMES_DASHBOARD_OAUTH_CLIENT_ID=<your-client-id> - In Nous Research Portal, set the redirect URL to
http://<VPS-IP>:9119/oauth/callback
- In
- Start the dashboard:
hermes dashboard --host 0.0.0.0 --port 9119 - Critical — make it permanent. The dashboard process dies when your SSH session ends. The cleanest fix: ask Hermes itself to create a long-running service. "Create a systemd service for the Hermes dashboard that starts on boot and survives disconnects."
On your desktop/laptop:
- Settings → Gateway → Remote Gateway
- Enter:
http://<VPS-IP>:9119 - Sign in via Nous Research OAuth when prompted
- The gateway connects — your local app is now a thin client
What you get:
- Agent runs 24/7 — cron jobs fire even when your laptop is off
- Connect from any machine with the desktop app installed
- Telegram bot continues working (it was always connected to the server, not your desktop)
- Single memory bank — all devices see the same user.md and memory.md
Pattern C: Tailscale (Secure, No Public IPs)
Tonbi's recommended pattern for production. Tailscale creates a private mesh network so you never expose Hermes to the public internet.
On both machines:
- Install Tailscale (
sudo tailscale up) - Verify:
tailscale status— both machines should show as connected
On the VPS:
- Start the dashboard with the Tailscale IP:
hermes dashboard --host <tailscale-ip> --port 9119 - In Nous Research Portal, set the redirect URL using the Tailscale IP:
http://100.x.y.z:9119/oauth/callback
On your desktop/laptop:
- Settings → Gateway → Remote Gateway
- Enter:
http://<VPS-tailscale-ip>:9119 - Authenticate via OAuth
Why Tailscale: No open ports on the VPS. No public IP exposure. Traffic is encrypted end-to-end. Works even if both machines are behind NAT/firewalls.
Multi-Device, Single Memory Bank
Wanderloots emphasized this pattern: run the Hermes backend on one machine (desktop or VPS), connect from multiple devices (laptop, phone via Telegram), and maintain one shared brain. Memory updates from any device are visible to all devices.
┌─────────────────────┐
│ VPS / Desktop │
│ (Hermes Backend) │
│ • Memory │
│ • Skills │
│ • Cron Jobs │
└──────┬──────┬───────┘
│ │
gateway │ │ Telegram
│ │
┌───────────┘ └──────────┐
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Laptop │ │ Phone │
│ (Desktop │ │ (Telegram │
│ App) │ │ Bot) │
└─────────────┘ └─────────────┘
Troubleshooting Remote Connectivity
| Problem | Likely Cause | Fix |
|---|---|---|
| "Gateway disconnected" after SSH exit | Dashboard process died | Make dashboard permanent (systemd service or nohup) |
| OAuth redirect fails | Redirect URL mismatch in Nous Portal | Match the URL exactly — check protocol (http vs https), IP, and port |
| Can't reach VPS dashboard | Firewall blocking port 9119 | Open port 9119 on VPS firewall, or use Tailscale |
| "Registration error" on dashboard | VPS not registered | Run hermes dashboard register on the VPS first |
| Tailscale machines can't see each other | Tailscale not running or magicDNS disabled | tailscale status on both; ensure both show as active |
Decision 5: Automation & Messaging
Connect Hermes to Your Phone
Telegram is the easiest gateway (Wanderloots, Tonbi, all sources agree):
- Search BotFather on Telegram →
/newbot→ name it → copy the API token - Search Raw Data Bot on Telegram →
/start→ copy your user ID - In Hermes Desktop: Settings → Messaging → Telegram → paste token + user ID
- Restart the messaging gateway
- Message your bot on Telegram — two-way conversation with your agent from anywhere
Other platforms: Discord, Slack, WhatsApp, SMS, email — all follow the same bot-token + user-ID pattern.
Build a Self-Learning Daily Briefing
Wanderloots' end-to-end workflow for a cron job that gets better every day:
- Describe the goal to Hermes in chat. Example: "Every morning, give me the top AI news curated for my interests, delivered to Telegram."
- Ask it to make a plan first — ground it in Hermes docs so it doesn't hallucinate capabilities
- Run a dry run in chat — don't jump straight to cron. See what the output looks like, tweak it.
- Give feedback → agent updates the skill. "More like story #2, less on funding, deeper on agent workflows."
- Schedule the cron job — attach the skill, set delivery to Telegram, pick time
- The feedback loop: each day, reply to the Telegram briefing with feedback → Hermes updates the skill → tomorrow is better
Critical design rule: Cron jobs start fresh sessions with no messaging history. Design your skill to pull context from memory or Obsidian — not from chat history. Wanderloots solved this with a second cron job ("skill updater") that reads Telegram feedback before the daily report fires.
Cost Optimization: The Full Picture
From AI LABS' team audit — organized by impact:
| Rank | Action | Savings Mechanism |
|---|---|---|
| 1 | Pick the right provider | Codex subscription = no per-token cost. OpenRouter Porto = tiered routing. Biggest lever. |
| 2 | Auxiliary → cheap model | Background tasks don't need GPT-5.5. DeepSeek Chat is effectively free. |
| 3 | Sub-agents → cheap model | Every spawn burns tokens. Set a cheaper model. |
| 4 | Trim tools, skills, MCP | Everything in context costs tokens every message. Be ruthless. |
| 5 | Compress early, compress often | Lower threshold, lower target ratio. Shorter context = cheaper messages. |
| 6 | Hard limits everywhere | max_turns, hard_stop, cron caps. Prevents runaway costs when things go wrong. |
| 7 | Match thinking to task | Max effort = more tokens. Off for simple tasks. |
| 8 | Session isolation | Split work across sessions instead of one mega-conversation. Each thread carries only its own history. |
Quick-Reference: Settings Cheat Sheet
| Setting | Recommendation | Quick Reason |
|---|---|---|
| Personality | Concise / Technical | Avoids verbosity |
| Reasoning blocks | ON | See what the model is thinking |
| Timezone | Set it | "Tomorrow 8am" = your time |
| Approval mode | Smart (or Off) | Smart models rarely need babysitting |
| Persistent memory | ON | Hermes' defining feature |
| Compression threshold | 50-75% | Lower = cheaper, higher = more context |
| max_turns | 60 | Default 150 is too generous |
| hard_stop | true | Prevents infinite loops |
| Tool search | auto | Load tools only when needed |
| Execution backend | Docker (safety) or Local (speed) | See Decision 4 |
| API keys | Paste in Settings panel | Never in chat |
Recovery: When Something Breaks
From Tonbi's troubleshooting coverage:
| Command | What It Does | When to Use |
|---|---|---|
hermes uninstall --gui |
Reinstall the desktop GUI only — keeps agent, config, sessions, and memories intact | Desktop app misbehaving but agent is fine |
hermes uninstall |
Remove agent binaries but keep config, sessions, and secrets | Agent needs a clean reinstall without losing your setup |
hermes uninstall --full |
Complete wipe — everything removed | Starting fresh or switching machines |
Delete .venv folder |
Removes the Python virtual environment | Dependency corruption. Desktop recreates .venv on next launch — safe to delete. |
Clean reinstall (keeps everything): hermes uninstall then reinstall. Your config, sessions, and memories survive — only the agent binaries are replaced.
Check logs: Hermes writes diagnostic output. If something fails silently, check the logs (location varies by OS — ask Hermes itself: "where are your log files?").
See Also
- Hermes Agent — Full capability overview: skills, memory, cron, deployment, integration patterns
- Local AI Coding Workflow — Hardware sizing, quantization, and local model selection
- Master-Agent-Comparison-Matrix — How Hermes compares to Claude Code, Codex, and other agents
- The Agentic Loop — The conceptual foundation: goal-driven agent architecture
- AI Engineer – Building Great Agent Skills - The Missing Manual — Deep dive on skill authoring