Always-on agents · Open source and free

Hermes Agent on a five-dollar server

Hermes Agent is the open-source agent that learns skills from its own past work and keeps a gateway open to your chat apps. I installed it from scratch in a fresh container on 20 October 2026, configured it for a free local model from the command line, and verified the service unit I would run it under on a five-dollar server. Here is what worked, what did not, and the one line in its own documentation that decides which model you need.

In short

Hermes Agent installs with one command, is configured with hermes setup or hermes config set, and installs its messaging gateway as a service with hermes gateway install. Its memory lives under ~/.hermes. It is MIT-licensed and free; you pay for the model. Its guide says small local models only chat, so an agent that acts needs a 31B model or a hosted one.

Part of the Always-on agents series, post 20 of 33.

Of the open-source agents I compared in the comparison post, Hermes Agent is the one with the most interesting idea: it writes skills from the work it has done, refines them as it goes, and searches its own earlier conversations. It is also the one whose documentation is most honest about hardware, which I appreciated more the longer I spent with it. This is a setup guide, so I installed it rather than describing it, and I kept the parts I could not finish in plain sight.

What it is, in its makers' words

The repository describes Hermes Agent as the agent that grows with you, with a built-in learning loop, and a persistent gateway that runs on your own infrastructure and connects to Telegram, Discord, Slack, WhatsApp, Signal and email. It is MIT-licensed. On the day I read it the GitHub page showed about 255,500 stars and 57,000 commits, which for a project first released in February 2026 is a remarkable amount of attention. The install is a single command on Linux, macOS and WSL2; native Windows has its own PowerShell line and, as the Ollama integration page notes, the agent itself expects WSL2 there.

The machine

The guides I trust put Hermes on a one-CPU, one-gigabyte server when the model runs over an API, and two gigabytes or more if you want local tools or memory on the box. A five-dollar cloud box fits the first description; the cloud guide covers choosing one and the first login. Everything below assumes a Debian or Ubuntu machine with a non-root user who can sudo, set up the way the Linux core page describes.

Install

Terminal, as the agent usercurl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
# then open a new shell, or source the profile the installer printed, and check:
hermes --version

I ran exactly that in a fresh Ubuntu 24.04 container on my Mac, with a user called hermes who could sudo, and nothing else installed beyond curl, git and Python. The output below is what the installer printed, trimmed only for length where it repeated progress lines.

Fresh ubuntu:24.04 container, 20 October 2026(earlier lines: package downloads and progress)
→ Building the hermes command and apps
Preparing the isolated Hermes runtime...
  → Installing Python dependencies...
  ✓ Installing Python dependencies
  → Preparing Node dependencies...
  ✓ Preparing Node dependencies
  → Building the TUI...
  ✓ Building the TUI
  → Building the web UI...
  ✓ Building the web UI
  ✓ Model catalog cache refreshed from checkout

→ Syncing bundled skills...
  + 58 new: xurl, design-md, popular-web-designs, ascii-video, p5js, claude-design, baoyu-infographic, songwriting-and-ai-music, manim-video, humanizer, architecture-diagram, document-to-action-items, meeting-action-items, notion, docx, powerpoint, xlsx, airtable, product-price-monitor, box, google-workspace, weekly-review-planning, pdf, teams-meeting-pipeline, maps, himalaya, email-inbox-triage, python-debugpy, systematic-debugging, hermes-agent-skill-authoring, inspecting-hermes-desktop-dom, node-inspect-debugger, test-driven-development, github, codebase-inspection, spike, requesting-code-review, simplify-code, dogfood, sdlc-review, blocked-page-recovery, youtube-content, gif-search, songsee, claude-code, computer-use, hermes-agent, opencode, codex, obsidian, apple-reminders, apple-notes, imessage, findmy, competitor-news-monitor, arxiv, grounded-citations, llm-wiki

→ Syncing bundled skills to all profiles...
  default: up to date

→ Checking configuration for new options...
  ✓ Configuration is up to date

✓ Install complete! [detached @ d923a5eb48]

ℹ Skill curator
  Background skill maintenance is enabled. First pass is deferred ~7d after installation; only agent-created skills are in scope and nothing is ever auto-deleted (archive is recoverable).
  Preview now:  hermes curator run --dry-run
  Pause it:     hermes curator pause
  Docs:         https://hermes-agent.nousresearch.com/docs/user-guide/features/curator

→ Installing cua-driver (default tool; opt out with `hermes pm install --without cua-driver`)...
  ⚠ cua-driver was not installed: cua-driver: staged entry failed verification: /home/hermes/.hermes/tools/.staging-gbzhgu20/tree/cua-driver --version exited 127: /home/hermes/.hermes/tools/.staging-gbzhgu20/tree/cua-driver: error while loading shared libraries: libXi.so.6: cannot open shared object file: No such file or directory - retry, or run `hermes pm doctor`
    Retry with: hermes pm install cua-driver
✓ added ~/.local/bin to PATH in /home/hermes/.bashrc
✓ app products and hermes command ready
→ setup skipped (no terminal); run 'hermes setup' after install
→ gateway setup skipped (no terminal); run 'hermes gateway install' after install
✓ Hermes Agent install complete. Run: hermes
→ Reload your shell to use hermes: open a new terminal, or run: source ~/.bashrc

Four things in that output are worth your attention. The installer builds the hermes command plus a terminal UI and a web UI, and reports a version: v0.22.2, dated 24 September 2026, installed from git. It syncs 58 bundled skills on first run, including ones named email-inbox-triage, competitor-news-monitor and product-price-monitor, which tells you what its makers expect people to run it for. It enables a background skill curator and says so, with the command to pause it. And one optional tool, cua-driver, failed to install because my headless container has no X libraries; the installer printed the retry command and carried on, which is the right behaviour. The setup wizard and gateway setup were skipped because the installer had no terminal, so I configured the model from the command line instead. Afterwards ~/.hermes was 2.8 gigabytes, which matters on a small server with a small disk.

Choose a model, and read this table first

This is the part of Hermes' documentation I want everyone to see before they buy hardware. Its local-model guide lists four Ollama models with their tool-calling support: gemma4 at 31B (about 20GB on disk, 24GB or more of RAM) is marked yes; gemma2 at 27B and 9B and llama3.2 at 3B are marked no. The guide's own sentence: models without tool-call support can only chat; they cannot take actions. It adds that agentic work with tools needs at least a 64,000-token context, and shows a Modelfile with PARAMETER num_ctx 64000 to raise Ollama's default. Minimum hardware is given as 8GB of RAM for 3B models; recommended is 32GB and eight cores.

So the honest choice on a five-dollar server is a hosted model, with a local one as a fallback for chat, not the other way round. Hermes supports many providers, and its config file takes a fallback list. If you have a 32GB machine at home, the 31B model is the one its makers say will actually use tools.

~/.hermes/config.yaml (from the Hermes local-model guide)model:
  default: "gemma4:31b"
  provider: "custom"
  base_url: "http://localhost:11434/v1"

fallback_providers:
  - provider: openrouter
    model: anthropic/claude-sonnet-4

For the test I pointed it at the smallest thing that would answer, to check the plumbing rather than the judgement: an Ollama server on the host with qwen2.5:1.5b. With no terminal for the wizard I used the three hermes config set lines below, and read the section back. I did not run a conversation through it in the container; the plumbing test ends at a config file that Hermes accepts. Ollama also ships a shortcut, ollama launch hermes, that installs Hermes if needed, picks a model, writes this configuration and offers the gateway setup in one go.

Terminal, as the hermes user (real output)$ hermes config get model
default: anthropic/claude-opus-4.6
provider: auto
base_url: https://openrouter.ai/api/v1
$ hermes config set model.provider custom
✓ Set model.provider = custom in /home/hermes/.hermes/config.yaml
$ hermes config set model.base_url http://host.docker.internal:11434/v1
✓ Set model.base_url = http://host.docker.internal:11434/v1 in /home/hermes/.hermes/config.yaml
$ hermes config set model.default qwen2.5:1.5b
✓ Set model.default = qwen2.5:1.5b in /home/hermes/.hermes/config.yaml
$ hermes config get model
default: qwen2.5:1.5b
provider: custom
base_url: http://host.docker.internal:11434/v1

Keep the gateway alive with systemd

The gateway is the long-lived process that holds the connection to your chat apps and runs scheduled jobs, and it has to stay up. I had assumed from the docs page that Hermes left this to you; the command's own help corrected me. hermes gateway install installs the gateway as a systemd or launchd background service, start, stop and status manage it, and hermes gateway run runs it in the foreground, which the help text recommends for WSL and Docker. So on a normal server, use the built-in installer. I could not run it in my container, which has no systemd booted, so I wrote the unit I would use if I wanted to own it myself and verified it; it follows the core page: a dedicated user, a restart policy, a memory cap, and secrets in a file only that user can read.

Terminal (real output of the gateway help)$ hermes gateway --help
usage: hermes gateway [-h] [--accept-hooks]
                      {run,start,stop,restart,status,install,uninstall,list,setup,migrate-legacy,migrate,enroll} ...
Manage the messaging gateway (Telegram, Discord, WhatsApp, Weixin, and more)
    run                 Run gateway in foreground (recommended for WSL and Docker)
    start               Start the installed systemd/launchd background service
    install             Install gateway as a systemd/launchd background service
    setup               Configure messaging platforms
/etc/systemd/system/hermes-gateway.service[Unit]
Description=Hermes Agent messaging gateway
After=network-online.target
Wants=network-online.target

[Service]
User=hermes
WorkingDirectory=/home/hermes
EnvironmentFile=/home/hermes/.hermes/gateway.env
ExecStart=/home/hermes/.local/bin/hermes gateway
Restart=always
RestartSec=10
MemoryMax=1500M

[Install]
WantedBy=multi-user.target
Terminalsudo systemd-analyze verify /etc/systemd/system/hermes-gateway.service
sudo systemctl enable --now hermes-gateway.service
journalctl -u hermes-gateway.service -f

In the container, systemd-analyze verify on that unit exited 0, so the file is at least well-formed. What I did not do is enable it, because the container has no init system to enable it under. On the real five-dollar box the honest order is: try hermes gateway install first, read what it wrote with systemctl cat, and only replace it with your own unit if you need the memory cap or the environment file it does not give you.

Connect a channel

A Telegram bot is the five-minute option: create the bot, copy its token, run hermes gateway setup and paste it. I did not finish this step in the container, because a bot token is a credential tied to my account and I do not put credentials in test containers; the rules are in the permissions post. On the real box the token goes in gateway.env, readable by the hermes user only, never in the unit file.

Back up what it learns

Everything Hermes becomes lives under ~/.hermes: the config, the skills it writes for itself, the memory files its documentation calls MEMORY.md and USER.md, and imported skills. If the five-dollar server dies, that directory is the agent. A nightly copy off the box is the minimum; the timer is the same shape as every other timer in this series.

/etc/systemd/system/hermes-backup.service and .timer[Service]
Type=oneshot
User=hermes
ExecStart=/usr/bin/tar czf /home/hermes/backups/hermes-%Y%m%d.tgz -C /home/hermes .hermes

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Then copy the backups folder somewhere that is not the server, with whatever you already use. I use the storage bucket that serves this website, under a service account that can write to one folder and read nothing else.

The sequence on a real server

  1. Install as the agent's own user, not root. The one-line installer, then open a new shell so the hermes command is on the path.
  2. Point it at a model that can call tools, with a local fallback for chat. hermes setup with a terminal, or the three hermes config set lines without one; read the hardware table before choosing a local model.
  3. Install the gateway as a service. hermes gateway install, then hermes gateway status. Use my unit only if you need a memory cap or an environment file.
  4. Link one channel from the real box. hermes gateway setup with a Telegram bot token kept in gateway.env, readable by the hermes user only.
  5. Back up ~/.hermes nightly, off the machine. The timer in this post; the directory is the agent.

Would I run it?

For a personal agent on a machine with a real model, yes, and the learning loop is the reason. For a business job on a small server, I would run it as a well-made gateway in front of a hosted model, and I would read its own hardware table to anyone who tells me a 3B model will do. The project's honesty on that point is the best argument for trusting the rest of it.

Sources

  1. Nous Research on GitHub, hermes-agent: the agent that grows with you (accessed October 20, 2026)
  2. Nous Research, Run Hermes locally with Ollama (accessed October 20, 2026)
  3. Ollama, Hermes integration: ollama launch hermes (accessed October 20, 2026)

Written by Lera Leonteva. Installed and configured in a fresh ubuntu:24.04 container on the access date; the Telegram step was described, not completed, because I do not put live credentials in test containers.

Frequently asked questions

Is Hermes Agent free?

Yes. It is MIT-licensed and the installer is a single command. You pay for the model, either a hosted provider or the electricity of a machine big enough for a local one that can call tools.

Can Hermes Agent run on a 3B local model?

It can chat with one. Its own local-model guide marks llama3.2:3b and the gemma2 models as not supporting tool calls, and says such models can only chat and cannot take actions. For an agent that acts, the guide lists gemma4:31b, which needs 24GB or more of RAM.

How do I keep the Hermes gateway running after I log out?

Run hermes gateway install, which sets it up as a systemd or launchd background service, then hermes gateway status to check it. If you want a memory cap or an environment file of your own, the unit in this post is the one I wrote and verified; hermes gateway run is the foreground option for Docker and WSL.

Where does Hermes store its memory?

Under ~/.hermes: configuration, the skills it writes, its memory files, and imported skills. Back that directory up nightly to somewhere off the machine.

Does Hermes Agent run on Windows?

There is a native PowerShell installer, but Ollama's integration page and the guides I read say the agent expects WSL2 on Windows. The Windows post in this series covers the WSL2 and systemd setup.

Lera Leonteva
Lera Leonteva
CEO & Founder, Leo AI

Lera Leonteva is the founder and CEO of Leo AI, where she works on turning long-form footage into short-form video that earns attention on its own merits. She writes Video Scaling Strategies, taking one piece of content that worked and one that did not, and using what the market is doing to explain the gap.

The always-on agent I run for social video

Leo watches what your audience is responding to, picks a clip from footage you already have, edits it and books it on the calendar. Every hour, without being asked. It is the agent this whole series grew out of.

Keep going with the series

Every post in the Always-on agents series is on one page, newest first. If you would rather see the agent I run for social video, here it is.