AI Automation May 28, 2026

Hermes Agent macOS Setup: Install, Configure, Gateway, and launchd (2026)

NodeMac Team

~12 min read

Hermes Agent is an MIT-licensed agent from Nous Research with a self-improving loop: it creates skills from experience, persists memory with periodic nudges, searches past sessions via FTS5, and models user context through Honcho. On macOS it installs as a native CLI plus optional messaging gateway—Telegram, Discord, Slack, WhatsApp, Signal, and Email—from one hermes gateway process.

This guide walks through macOS setup on Apple Silicon or Intel—install, first configuration, gateway wiring, and keeping the gateway alive with launchd. It assumes macOS 15+ on a machine you control (MacBook, Mac mini, Mac Studio, or a remote Mac you SSH into). If you already run agents in the cloud, see our separate Hermes on Mac mini M4 runbook for headless-host patterns; the commands below are identical on any Mac.

Hermes Agent macOS setup guide on Apple Silicon Mac
Disclosure: NodeMac publishes Mac hosting guides and operates a Mac rental service. This article documents upstream Hermes Agent behavior; install and config paths come from the official repository.

What you need before installing

Requirement Notes
macOS15+ recommended; Apple Silicon (arm64) and Intel supported per upstream install script
Shellzsh (default) or bash; installer appends to ~/.zshrc or ~/.bashrc
NetworkOutbound HTTPS for model APIs, optional Nous Portal OAuth, and messaging platform webhooks
DiskPlan 2–5GB for uv, Python 3.11, Node.js, and ~/.hermes/ state; more if you store TTS assets or large skill libraries
RAM16GB comfortable for CLI + gateway + one tool-heavy turn; 24GB if you run subagents or MCP servers concurrently

The installer pulls uv, Python 3.11, Node.js, ripgrep, and ffmpeg when missing. Verify afterward with hermes doctor.

How Hermes is laid out on macOS

After install, state lives under ~/.hermes/:

~/.hermes/
├── config.toml          # providers, tools, terminal backend, gateway settings
├── skills/              # user and auto-created skills
│   └── openclaw-imports/   # after hermes claw migrate
├── memory/              # curated memory files
└── logs/                # gateway and CLI logs (paths per upstream docs)

The hermes binary symlinks to ~/.local/bin/hermes. Three surfaces matter for daily use:

  1. CLI (hermes) — Interactive TUI; slash commands (/model, /skills, /compress, /new).
  2. Gateway (hermes gateway) — Bridges messaging platforms to the same agent loop.
  3. Terminal backends — Where shell/file tools execute: local (default on macOS), Docker, SSH, Singularity, Modal, or Daytona.

Model routing is provider-agnostic: hermes model switches among Nous Portal, OpenRouter (200+ models), OpenAI, Anthropic, and BYO endpoints without code changes.

Step-by-step macOS setup

1. Install Hermes

Review the install script in your org before piping to shell. Upstream one-liner:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.zshrc    # or: source ~/.bashrc
hermes doctor

hermes doctor should report clean checks for uv, Python 3.11, Node, ripgrep, and ffmpeg. Fix any flagged dependency and re-run.

2. Run first-time setup

Either the full wizard or Portal OAuth:

hermes setup              # interactive: provider, tools, gateway hints
# OR
hermes setup --portal     # Nous Portal OAuth + Tool Gateway (search, images, browser, TTS)

The wizard detects ~/.openclaw and offers migration—skip if this is a fresh install.

3. Choose model and tools

hermes model              # pick provider:model (e.g. openrouter:anthropic/claude-sonnet-4)
hermes tools              # enable/disable toolsets (40+ tools upstream)
hermes config set KEY VALUE   # fine-grained overrides

Confirm with a short CLI session:

hermes
# inside TUI: ask a question, run /usage, exit with Ctrl+D or /quit

4. Migrate from OpenClaw (optional)

If you have an existing OpenClaw workspace:

hermes claw migrate --dry-run
hermes claw migrate

Imports typically include SOUL.md persona, MEMORY.md / USER.md entries, user skills, command allowlists, messaging settings, and allowlisted API keys into ~/.hermes/. See hermes claw migrate --help for presets.

5. Configure the messaging gateway

hermes gateway setup      # platform tokens, DM pairing, allowed users
hermes gateway start      # foreground test

Test from Telegram (or your platform): send /new, then a prompt. Use /status from the messaging side if the bot appears online but silent—often a pairing or allowlist issue (upstream Security docs).

6. Persist the gateway with launchd

Foreground hermes gateway start stops when you log out. For a Mac that stays powered on (desk Mac mini, studio machine, or remote host), create a user LaunchAgent. Example plist skeleton—adjust paths after which hermes:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>com.hermes.gateway</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Users/YOU/.local/bin/hermes</string>
    <string>gateway</string>
    <string>start</string>
  </array>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
  <key>StandardOutPath</key><string>/Users/YOU/.hermes/logs/gateway.stdout.log</string>
  <key>StandardErrorPath</key><string>/Users/YOU/.hermes/logs/gateway.stderr.log</string>
</dict>
</plist>

Load it:

mkdir -p ~/.hermes/logs
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.hermes.gateway.plist
launchctl kickstart -k gui/$(id -u)/com.hermes.gateway

Store Telegram/Discord tokens in the plist EnvironmentVariables dict or a root-owned env file referenced at boot—avoid leaving tokens only in an SSH session export.

7. Enable cron-style automations (optional)

Hermes ships a built-in cron scheduler with delivery to messaging platforms. Define jobs in natural language through the CLI or config per upstream cron docs. On macOS, cron jobs require the gateway (or CLI) process to stay running—another reason to use launchd on a non-sleeping Mac.

8. Backup ~/.hermes/

tar -czf hermes-backup-$(date +%Y%m%d).tar.gz -C ~ .hermes

Skills and memory are harder to regenerate than chat logs. Snapshot before major upgrades:

hermes update
hermes doctor

Troubleshooting

hermes doctor fails on Python or uv

Symptom: Doctor reports missing uv or wrong Python version.

Fix: Re-run the install script. Hermes expects Python 3.11 via uv. On macOS with Homebrew you can also brew install ripgrep ffmpeg node for ancillary tools, then hermes doctor again.

Gateway starts but bots never reply

Symptom: hermes gateway start logs "running"; DMs hang with no error in chat.

Fix: Complete DM pairing and allowlists from hermes gateway setup. Restart the gateway after changing tokens. If using launchd, confirm env vars survived the plist—launchctl print gui/$(id -u)/com.hermes.gateway shows injected environment.

CLI tools fail with permission errors

Symptom: File or shell tools error on macOS paths outside the workspace.

Fix: Review command approval settings in config (upstream Security). For full-disk paths, macOS TCC may prompt for Files/Folders access—grant on the machine where the local backend runs.

When to use an always-on Mac

A MacBook that sleeps pauses gateway delivery and cron. Teams that chat from Telegram while the agent runs elsewhere often dedicate a small always-on Mac—a desk Mac mini or a hosted macOS instance—with launchd managing hermes gateway. The setup steps in this guide do not change; only the machine's sleep policy and network reachability differ. For SSH-backend workflows (CLI on laptop, tools on remote Mac), point the terminal backend at that host in config.toml per upstream Tools documentation.

After install, run multi-agent newsletter pipelines with Hermes subagent delegation for solopreneurs —one boss, three parallel workers via delegate_task.

After gateway install, wire Telegram phone + Discord desktop with Hermes multi-device Gateway guide —subway handoff, /background tasks, honest session semantics.

FAQ

Does Hermes replace OpenClaw or OpenHuman?

No—different designs. Hermes emphasizes skills + memory nudges + built-in cron; OpenClaw is gateway-first automation; OpenHuman is desktop memory with OAuth auto-fetch. You can migrate OpenClaw data into Hermes with hermes claw migrate. Comparison runbooks live in our Hermes Mac mini M4 tutorial and OpenClaw install guide.

Do I need Nous Portal?

No. Portal (hermes setup --portal) bundles models and Tool Gateway under one OAuth login. You can supply OpenRouter, OpenAI, or Anthropic keys directly and enable tools à la carte.

Where is config stored on macOS?

Primary tree: ~/.hermes/ with config.toml, skills, memory, and logs. The hermes binary is at ~/.local/bin/hermes. Run hermes config subcommands rather than editing blindly—wizard values map to documented keys.

Can Hermes run on Apple Silicon Mac mini?

Yes—the install script supports macOS on Apple Silicon. Gateway + local backend run natively; no Rosetta required for the Python stack installed by uv.

How do I update Hermes?

hermes update
hermes doctor

Restart launchd-managed gateway after updates: launchctl kickstart -k gui/$(id -u)/com.hermes.gateway.

Need an always-on Mac for your gateway?

Dedicated Apple Silicon Macs with SSH access in HK, JP, SG, KR, and US regions.

NM
NodeMac Cloud Mac
5-min deployment

Rent a dedicated Apple Silicon Mac. SSH/VNC, HK·JP·SG·KO·US nodes.

Get Started