Hermes Agent, set up safely
By the end of this page you will have a WORKING HERMES: installed, connected to a model, proven with a real conversation, and set up so it asks permission before doing anything consequential.
Written against Hermes v0.21.0, “The Pantheon Release” (tag v2026.8.31, released 2026-08-31). Releases land often and carry hundreds of changes each, so if a screen does not match this page exactly, check your version before assuming you did something wrong.
Understand · MODEL ≠ AGENT · read this first
MODEL is not the AGENT
Hermes is the agent. Grok, Claude, Gemini and the rest are models you plug into it.
Almost everyone arrives thinking they are about to “install an AI.” That is not what happens. You install one thing (the agent) and then plug a second, separate thing into it (the model). They come from different companies, they are paid for separately, and either one can be swapped without touching the other.
You pick the provider in Section 3. The usual choices are Nous Portal (a free sign-in that opens hundreds of models), Anthropic (Claude), OpenAI, and Google (Gemini), and the list inside Hermes is always the current one.
The agent (installed on your computer)
- The agent is the program that runs on your computer. It is the part with hands: it can read and write files, run commands, and use whatever tools you connect. It holds your settings and it is the thing actually installed on your machine.
- It holds your settings and your saved sign-in keys, in its own folder on your computer. Section 2 tells you where that folder is.
- It owns the permission rules that decide what it may do without asking you first.
The model (the thinking, at a provider)
- The model is the thinking. It does not live on your computer by default. It lives at a provider, you connect to it over the internet, and that provider bills you for what you use.
- The model has no hands. It reads what the agent gives it and writes back what it thinks should happen next. The agent turns that into action.
Why the split is good news
You can change your mind about the model without reinstalling anything. Hermes ships an interactive selector for exactly this.
Your setup survives the swap. Settings, permission rules and connections belong to the agent, not the model.
The bill splits too. Hermes itself and the model provider are separate lines.
The one real constraint
Not every model qualifies. A model has a limit on how much it can hold in mind at once, measured in tokens, and Hermes needs one that holds at least 64,000. Today's mainstream models are comfortably above that. If Hermes refuses a model at startup, pick a larger one; you do not reinstall anything.
“Grok Bot is Grok.”
Grok is the model. Grok Bot is xAI’s managed agent product, delivered through Cursor, with its own cloud computer. You can plug the Grok model into Hermes; you cannot plug Hermes into Grok Bot. Choosing between Hermes and Grok Bot is agent versus agent, not model versus model, and the route choice below is there for exactly that decision.
“Installing Hermes installs an AI.”
It installs the worker. You connect the thinking separately, and until you do there is nothing to talk to.
“If it runs on my machine, my machine is doing the thinking.”
By default, no. The agent runs locally and sends work to a provider. Running the thinking on your own hardware is a later, optional path with nothing to do with which operating system you chose.
“The model can reach my files, so the model is the risk.”
The model proposes; the agent acts. Your safety controls live on the agent side: what it may do unattended, where it may write, and what it must ask you about first. That is why the security baseline is a section, not a footnote.
How do I know this landed?
You do not need to install anything to check. Answer these three out loud:
- Which of the two is installed on your computer, and which one lives at a provider you connect to?
- If you switch models next month, does your Hermes configuration survive?
- When Hermes writes a file on your machine, which of the two performed that action?
Answers: The agent is installed locally and the model is remote by default; yes, your configuration survives because it belongs to the agent; the agent performed it.
Choose your agent route
Open-source and configurable, or managed and simpler?
Both routes end in a working agent. They differ in who runs the computer and how much you configure yourself. Keep the names apart: Grok is a model, which you can plug into Hermes; Grok Bot is xAI’s managed agent product. Realtors who want the shortest path usually start with Grok Bot; those who want to own the setup start with Hermes.
Open-source agent environment
Hermes Agent
Installs on your own computer. You choose the model (Grok, Claude, Gemini and others), can run local models, and own the settings, secrets and permission rules. More control and more configuration, with a security baseline you set on purpose.
Managed agent product
Grok Bot
A proprietary product from xAI, delivered through Cursor, with its own cloud computer that keeps working when your laptop is closed. Sign in, create a Bot, connect a tool. Simpler to start and less to maintain, with less to configure.
Neither route is the better answer for everyone. Pick by how much simplicity, control and technical comfort you want, and switch later if you like; nothing about one stops the other.
You may stop at WORKING HERMES
WORKING HERMES is a complete, valid, finished outcome. It is not a trial version, not a half-install, and not a stepping stone you are obligated to leave. Everything past it (a chat app, an inbox, a browser, running the thinking on your own hardware) is optional, additive, and separately reversible.
Keep these two questions apart
Question 1
“Which operating system am I on?”
This decides how you install (a download on macOS and Windows, a command on Linux) and where your settings file lives. It is Section 1.
Question 2
“Can my computer run a model locally?”
A hardware question (memory, chip, storage) and a later, optional topic. It does not change how you install or which operating system you are on. A modest laptop on any supported platform runs a perfectly good WORKING HERMES, because the thinking happens at the provider.
Our own tested example is an Apple Silicon Mac mini M4: first installed on an older release (v0.14.0), since updated to v0.21.0 (the release this page is written against) and in daily use.
Choose your platform
Goal
You know which supported platform you are on, whether it is fully supported or best-effort, and which install route in Section 2 is yours. Nothing is installed yet. This section is a decision, not an action on your machine.
Prerequisites
- None. This is the first step.
- You need to know two things about the computer in front of you: its operating system, and, if it is a Mac, whether it has an Apple Silicon chip (M1, M2, M3, M4 and later) or an older Intel chip.
Exact user action
Read the tiers and write down which of these you are: macOS, Windows (native or WSL2), or Linux. That choice is what you carry into Section 2, and it is also what the selector at the top of this page switches: it decides whether Section 2 shows you a download button or a command. Docker is a supported path this page does not walk yet.
Fully supported, and Nous Research says it works to never break installs or updates for these: macOS on Apple Silicon, Windows 10 and 11, Linux, Windows through WSL2, and Docker.
Best-effort, where a new release may break things: Android through Termux, and Nix. Neither is a normal starting point.
Unsupported: Intel Macs, AUR, PyPI, and Homebrew.
An Intel Mac is not a supported platform. If About This Mac shows an Intel processor, this path has no supported route for you on that machine. Use a different, supported computer. (Docker is also a supported path, but this page does not walk it yet.)
Do not install via Homebrew, even if a brew formula appears to exist. It is listed as unsupported.
Where
Nowhere yet. This is a decision made away from the keyboard, with one lookup.
Apple menu, then About This Mac, and read the chip line for “Apple M” or “Intel.”
Expect to see
One of the tier lists containing your machine. Your platform appears in Tier 1, in Tier 2, or in the unsupported list.
If your machine is Tier 2 or unsupported, you found that out now, at zero cost, instead of forty minutes into a failing install. That is a good outcome for this section.
Save / apply
Nothing to save. No file is written and no setting is changed. Write your one word down somewhere you will still have it in five minutes.
Verify success
Answer both, and be specific:
- Name your platform in the exact words the tier list uses (for example “macOS on Apple Silicon”, “Windows 11, x86_64”, or “Linux, x86_64”).
- State its tier: fully supported, best-effort, or unsupported.
- Pass condition: you can say both without going back to look. If you cannot name the tier, you have only read the list, not made the decision.
Common friction
Security / privacy
What this step exposes
Not applicable to the decision itself: nothing is installed, nothing is transmitted, and no credential exists yet.
Forward-looking note: your platform decides where your secrets will be stored on disk (%LOCALAPPDATA%\hermes\.env on native Windows, ~/.hermes/.env on macOS, Linux and WSL2), and native Windows does not get the command-content scanning layer, because that component has no prebuilt Windows binary and is silently skipped there. Silently means you will not be warned. It is the strongest argument for WSL2 over native Windows if you have a free choice.
Next safe step
Go to Section 2, Install Hermes, with the selector at the top of this page set to the platform you wrote down.
How do I know this worked?
- You can name your platform in the same words the tier list uses.
- You know whether that platform is Tier 1, Tier 2, or unsupported.
- You know whether Section 2 gives you a download button or a command.
- You have not confused “which operating system” with “can my machine run a model locally.”
If any line is untrue, go back to Verify success and then Common friction above before continuing.
Install Hermes
Goal
The Hermes agent is installed on your machine and opens when you call it: the Hermes Desktop app on macOS and Windows, or the hermes command on Linux. It has no model connected yet, so it cannot think or answer questions. That is expected: you installed the worker, and the thinking arrives in Section 3.
Prerequisites
- Section 1 complete: you know your platform and its tier.
- A working internet connection, since the installer downloads from the internet.
- macOS 12 or later on an Apple Silicon Mac. Intel Macs are unsupported (Section 1).
- Permission to install software on this machine. On a work-managed laptop this is the step that quietly blocks people, so check before you begin.
Exact user action
Beginner path
Recommended: install the Hermes Desktop app
Hermes Desktop is the official app and the recommended way to install on macOS and Windows. One installer sets up both the app and the hermes command, so nothing in the later sections is closed to you. No terminal needed.
Opens the official Hermes Desktop page. Under macOS, click Download desktop app; the file is called Hermes-Setup.dmg.
Step 1: Click the download button above. On the official page, under macOS, click Download desktop app. Your browser saves Hermes-Setup.dmg to your Downloads folder.
Step 2: Open Hermes-Setup.dmg from Downloads and follow what it shows to put Hermes in your Applications folder, then open Hermes from Applications.
If macOS asks whether you want to open an app downloaded from the internet, choose Open. Do that only for the file you downloaded from the official Hermes page.
Step 3: First launch: the app sets up the Hermes runtime in your home folder (~/.hermes), the same layout the terminal install uses. Accept the prompt if it asks, keep your internet connection on, and give it a few minutes.
Step 4: The first-run setup appears. It asks you to choose a model provider; you can pick Choose provider later and get into the app first. Section 3 covers that choice, so Choose provider later is fine.
That is the whole install. The app checks for updates in the background and offers a one-click update when one is ready. The hermes command is installed alongside the app, which is what the optional terminal checks below use.
Prefer the terminal? Install with a command instead
For technical users. The same runtime lands in the same place, and the security notes about reading an installer before running it apply here.
Use only the branch for your platform. Do not mix branches.
Step 1 · Download the installer to disk (do not pipe it into a shell)
curl -fsSL https://hermes-agent.nousresearch.com/install.sh -o /tmp/hermes_install.shNow open /tmp/hermes_install.sh and read it. Any text editor will do; in the terminal, less /tmp/hermes_install.sh shows it and q closes it. You do not need to understand every line. You are looking for anything that is obviously not an installer: a different domain than the one you typed, or something being uploaded rather than downloaded.
Step 2 · Run it
sh /tmp/hermes_install.shDownloading first means the script can be read, and hashed, before it executes. The official one-liner pipes it straight into a shell, which runs it before any human has seen it. This is the recommended pattern and it costs you thirty seconds.
Docker is also a Tier 1 install path, meaning Hermes itself runs inside a container, obtained with docker pull. Two things to know: Docker installs cannot use hermes update (you pull a new image instead), and this is not the same thing as the terminal.backend: docker sandbox setting, which isolates tool execution for an already-installed Hermes and belongs in Advanced.
Where
Hermes Desktop: your Applications folder after install. Its files live in the same place as a terminal install, ~/.hermes/ (the ~ means your home folder).
Terminal route: Terminal (Applications, then Utilities, then Terminal).
Expect to see
Hermes Desktop: after the first-launch setup, the app opens to its first-run screen and then a chat window with a message box at the bottom. Nothing to type in a terminal.
Terminal route: installer output scrolling in your terminal, ending without an error, and returning you to a normal prompt.
Judge it by shape rather than exact wording: work happening, then a clean return to your prompt, with no line saying the install failed or aborted. A wall of text is normal. If it ends and you can type again, go to VERIFY SUCCESS, which is the real test.
Save / apply
Nothing to save by hand. The installer writes what it needs.
Hermes Desktop keeps its settings in the same files a terminal install uses, so anything you set in the app is what Sections 3 and 5 refer to.
Terminal route only: close your terminal and open a new one before verifying. A freshly installed command is often not visible to a shell that was already open, which produces a “command not found” that looks like a failed install but is only a stale session.
Verify success
If you installed Hermes Desktop: open it. If it reaches the first-run setup or the chat window without an error, the install is proven. The terminal checks below are optional extra proof; you do not need them to continue.
Optional: check from the terminal instead
In a new terminal, run the built-in diagnostic. It checks config and dependency issues.
Run the diagnostic
hermes doctorIf it reports fixable problems, attempt automatic repairs
hermes doctor --fixConfirm the installed version
hermes --versionhermes -V and the hermes version subcommand print the same. Expect a single line naming Hermes Agent and a version number. If it is older than the current release, that is a hermes update step, not a failed install.
- Hermes Desktop opens to its first-run setup or its chat window. That alone proves Hermes is installed, which is what this section was for.
- Or, if you ran the optional terminal check: the command is found and produces output rather than “command not found.” That alone proves Hermes is installed and reachable.
- Either way, a complaint about a missing or unconfigured model is expected right now, because you have not connected one yet. That is Section 3’s job.
Common friction
Security / privacy
What this step exposes
This step runs code from the internet with your user’s permissions. That is what an installer is.
Download only from hermes-agent.nousresearch.com. The desktop installer there is the official build; an installer from anywhere else is the easiest way to hand a stranger a foothold on the machine that will soon hold your API keys.
Read before you run, where you can. Download-then-run exists so the script can be read and hashed before it executes, and it is the recommended pattern on macOS, Linux, and Windows through WSL2. On native Windows you currently cannot: only the piped form is confirmed to exist.
Nothing secret exists yet. No API key, password, or token has been created or stored. The credential surface opens in Section 3, and Section 5 is where it gets locked down.
Next safe step
Go to Section 3, Choose and connect a model. Stopping here is safe but not useful: you have a worker with nothing to think with. Section 3 is short.
How do I know this worked?
- Hermes Desktop opens to its first-run setup or chat window, or hermes doctor runs in a new terminal without reporting “command not found” (or PowerShell’s “not recognized”).
- The install ended without an error and returned you to a normal prompt.
- You know where your config and secrets will live for your platform: %LOCALAPPDATA%\hermes\ on native Windows, ~/.hermes/ on macOS, Linux, and WSL2.
- You understand that model-related complaints from hermes doctor are expected at this point.
If any line is untrue, go back to Verify success and then Common friction above before continuing.
Not yet verified6 details this guide will not guess at
- Minimum disk space, memory, and OS-version requirements for installing Hermes, and whether the macOS install path needs an administrator password or Xcode command line tools.
- The exact prompts Hermes Desktop shows during its first-launch runtime setup, and whether that step needs an administrator password. The click-through above follows the official Hermes docs and download page as read on 5 September 2026.
- The exact Docker image name and tag to pull, and the exact docker run invocation including volume mounts for config and secrets.
- The exact success output text of install.sh and install.ps1.
- Whether install.ps1 needs an Administrator PowerShell, which PowerShell versions it supports, and whether it updates PATH for new windows.
- The exact output format of hermes doctor, including how checks are labelled on screen.
Choose and connect a model
Goal
A model provider is connected and your credentials are stored, so Hermes has something to think with. This is the moment the installed worker from Section 2 becomes capable of answering you.
Prerequisites
- Section 2 complete: Hermes opens on your computer (or, on the terminal route, hermes doctor runs).
- You have read MODEL is not the AGENT above. This section is where the distinction stops being theoretical.
- An account with a model provider, and usually a payment method on that account. This is billed by the provider, not by Hermes.
- A model large enough for Hermes: at least 64,000 tokens of context. Mainstream current models are comfortably above that, and Hermes refuses a model that is too small rather than failing later.
- The mainstream providers a beginner will meet include Nous Portal (a free sign-in that opens 300+ models), Anthropic, OpenAI (including Codex), OpenRouter, and Google. Their default modern chat models comfortably exceed the 64,000-token minimum, and the operational rule is simpler than a table: pick a provider in the selector, and if the chosen model is under the floor, Hermes rejects it at startup rather than starting a session that will fail later.
Exact user action
Beginner path
In the app: pick a provider and sign in
Hermes Desktop asks you for this on its first-run screen, and you can change it any time in Settings under Providers. Nothing to type in a terminal.
Step 1: Open Hermes. If the first-run setup is still waiting, it asks you to choose a provider; otherwise open Settings and find Providers.
Step 2: Choose a provider from the list, then follow what it asks for. Some providers sign you in through your browser; others ask you to paste a key you copied from their website.
The fastest start with nothing to paste is Nous Portal: a free sign-in that opens hundreds of models.
Step 3: Pick a model when it offers you the list. Any mainstream current model is fine; Hermes refuses one that is too small rather than letting it fail later.
The app writes both files for you: your choice of model into the settings file, your key into the secrets file. There is nothing to save by hand and nothing to edit.
Prefer the terminal? Connect a model with a command instead
The same choice, made from the command line. It writes to the same files, so use whichever you have open.
Run hermes model, the dedicated model selector. It is interactive, and it handles adding providers, running sign-in flows, and entering API keys. Follow the prompts to pick your provider and model, and supply your credential when asked. The two commands after it are alternatives, not extra steps: hermes setup --portal if you want the free Nous sign-in with nothing to paste, and hermes setup if you want the full wizard.
The model selector (narrowest tool)
hermes modelFastest working chat, no keys to paste (Quick Setup via Nous Portal)
hermes setup --portalThe full setup wizard (model, speech, terminal, gateway, tools and agent in one flow)
hermes setupIf you run hermes setup, choosing one of its three modes is its first prompt. Quick Setup (Nous Portal): a free OAuth sign-in with no API keys; it configures a model and the Tool Gateway for you, and it is the fastest working-chat path in this guide. Full Setup: walks every provider, tool, and option with your own API keys, for deliberate control. Blank Slate: everything off except the provider and model, file operations and the terminal toolset, written to the settings file explicitly so nothing you did not choose loads later; you turn tools back on deliberately with hermes tools. It is a posture choice for people who want to start from nothing.
Read every prompt before you answer it. On a real install, a stray value left over from an earlier attempt landed in a free-text “AWS Region” prompt, silently pointing the model endpoint at AWS Bedrock with no credentials configured. Hermes then failed with could not resolve credentials from session on every run until the provider was explicitly re-selected. That was observed on v0.14.0 and is not confirmed to reproduce on the current version. Treat it as a risk pattern worth watching for, not a bug to expect.
Where
In Hermes Desktop: the first-run screen, or Settings then Providers.
On the terminal route: in your terminal, in the same environment where you installed Hermes in Section 2.
Part of this happens outside your terminal: creating your provider account, and copying an API key from the provider’s website. If the provider uses a sign-in flow instead of a pasted key, hermes model runs that flow for you.
Where the credential ends up: API keys land in the .env secrets file, ~/.hermes/.env. Settings (which model, and everything else) go to config.yaml in the same folder. Settings in one file, secrets in the other.
Expect to see
An interactive selector: a list of providers, then a model choice, then either a request for an API key or a sign-in flow. It ends by returning you to your prompt.
If you chose a model with a context window under 64,000 tokens, expect a rejection at startup rather than a warning you can ignore.
Save / apply
The selector writes your choices for you: settings into config.yaml and the credential into .env. There is no separate save button and no file to edit by hand.
Do not hand-edit either file at this stage. If something is wrong, run the selector again. Re-selecting the provider explicitly is the documented recovery from a bad configuration state.
Verify success
In the app: send a message. If it answers instead of telling you no model is configured, this section worked. Section 4 makes that a proper test.
Optional: check from the terminal instead
Run the diagnostic again.
Diagnostic
hermes doctorIf problems remain and look fixable, hermes doctor --fix attempts automatic repairs.
- Pass condition: the model-related complaints you saw at the end of Section 2 are gone. That change is the proof this section worked. The full proof is Section 4, where you actually talk to it.
Common friction
Security / privacy
What this step exposes
This is the step that creates a real secret. Your API key is written to the .env file in your Hermes folder. Anyone who can read that file can spend money on your provider account as you. Treat it as you would a saved credit card.
Never paste an API key into a plain terminal window to “check” it. On a real setup session a token was briefly pasted into a plain terminal by mistake before being entered correctly; nothing broke, but the token was on screen. Screens get shared, recorded, and shoulder-read. Enter credentials only into the prompt that asked for them. If a key is ever exposed, revoke and regenerate it at the provider immediately.
Understand the data path: your prompts, and whatever the agent includes as context, go to your model provider over the internet. If that is unacceptable for some category of your work, the local-model option under Go further is the honest answer, and it is a hardware question, not an operating-system one.
Next safe step
Go to Section 4, First successful conversation, and prove this actually works. Stopping here is safe but unproven: a configuration that looks right and has never been tested.
How do I know this worked?
- The app answers you instead of saying no model is configured, or, on the terminal route, hermes doctor no longer complains about a missing or unconfigured model.
- You know which provider you connected and which model you selected.
- You confirmed that model’s context window is at least 64,000 tokens.
- You know your API key is stored in the .env file in your Hermes folder, and where that folder is on your platform.
- Your key was never displayed in a plain terminal window.
If any line is untrue, go back to Verify success and then Common friction above before continuing.
Not yet verified2 details this guide will not guess at
- A per-model context-window table listing which specific models within each provider meet or exceed 64,000 tokens (windows change per provider release, so the guide teaches the floor and the startup rejection instead).
- The exact prompt wording, prompt order, and on-screen labels of hermes model and of each hermes setup mode.
First successful conversation
Goal
You have talked to Hermes and it answered. Installation and configuration are now proven rather than assumed, and you have seen with your own eyes that the agent and the model are connected.
Prerequisites
- Sections 2 and 3 complete: Hermes installed, a model connected, hermes doctor not complaining about the model.
- An internet connection, since the model is remote.
- Two minutes.
Exact user action
Beginner path
In the app: ask it one question
This is the whole test. Open Hermes, type in the message box at the bottom, press Enter, and read what comes back.
Step 1: Open Hermes and wait for the chat window with a message box at the bottom.
Step 2: Ask it something small and harmless that you can judge yourself. A good first ask for an agent: “Write three subject lines for an email about a just-listed three-bedroom home.”
Keep the first message a question or a piece of writing, not a task that touches your files. You are testing that the connection works, not commissioning work.
Step 3: Read the answer. If it actually answers what you asked, the agent and the model are connected and this section is done.
That is the proof. Everything below is the same conversation held from a terminal, for people who prefer one.
Prefer the terminal? Start the same conversation there
The same test from the command line, plus the interface flags if you want the full-screen version.
Start Hermes and ask it something trivial.
Start an interactive chat session
hermesWith no subcommand, Hermes launches its chat command by default; hermes chat is the explicit equivalent. If you would rather arrive with your question ready, hermes chat -q "your question" opens the session with that question as the first turn and stays open. (On older releases -q answered and exited; --oneshot is the flag for that behavior today.)
Launch the TUI (full-screen terminal interface) instead
hermes --tui--tui is equivalent to setting HERMES_TUI=1, and --tui always wins over the display.interface config setting when both are present.
Force the classic CLI explicitly
hermes --cliHermes has two interfaces. The classic CLI (a banner, then an interactive prompt with / slash-command autocomplete) is the default. The TUI is opt-in.
Once it is running, ask for something small and harmless: “What model are you using right now?” or “In one sentence, what can you do on this computer?” Do not open with a task that touches your files. You are testing the connection, not commissioning work.
Where
In the Hermes Desktop chat window.
On the terminal route: in your terminal, in the same environment where you installed and configured Hermes.
Expect to see
Hermes starts, then answers you in plain language. Whether you see a full-screen interface or a scrolling command-line session depends on which flag you used.
Structurally, both interfaces open the same way: a banner, then an input prompt waiting for your first message.
Watch for a real answer to your actual question, not a greeting. A banner proves it started. An answer proves the model is connected and reachable. Only the second one is what this section is for.
Save / apply
Nothing to save. Conversation is immediate and applies nothing to your system.
Exit when you are done: the slash command /quit (also aliased as /exit) ends the session cleanly, and Ctrl+D is the keybinding equivalent. /quit --delete also removes the session history. Closing the terminal window also ends the session, but the slash command is the clean exit.
Verify success
You asked a question in the app and got a real answer to it. That is the section.
Optional: check from the terminal instead
All three must be true:
- Hermes started without an error.
- You asked a question and got a relevant answer to that question, not just a startup banner.
- The answer arrived without a credentials error. could not resolve credentials from session means your provider configuration is wrong, not that the conversation failed.
Common friction
Security / privacy
What this step exposes
Everything you type goes to your model provider over the internet, along with whatever context Hermes includes. The habit starts here: assume anything you type reaches the provider.
This is also the first moment the agent can act rather than just answer. Keep the first conversation to questions, not tasks, until Section 5 is done. Approvals do have a working default (approvals.mode defaults to smart), so you are not unprotected; you just have not made any deliberate decisions about it yet.
Next safe step
Go to Section 5, Security baseline. It is the last section. Stopping here is tempting because it works, but you have a working agent with default permissions you have never looked at, and that is the one genuinely unfinished state in this path.
How do I know this worked?
- Hermes started and you saw an interface.
- You asked a question and received an answer that actually addressed it.
- No credentials error appeared.
- You can open Hermes again and ask it something without looking anything up.
If any line is untrue, go back to Verify success and then Common friction above before continuing.
Not yet verified1 detail this guide will not guess at
- The exact banner text of the classic CLI and the TUI (it is skin-dependent, via the display.skin setting, so only the banner-then-prompt structure is asserted).
Security baseline
Goal
Hermes asks you before it does anything consequential, the file holding your keys is not readable by anyone who wanders past your machine, and you know which protections do and do not apply on your computer. This is what turns a working install into one you can leave running. It is the longest section on this page and the only one that asks you to open a settings file.
Prerequisites
- Section 4 complete: Hermes runs and answers.
- Knowing where your config lives, from Section 2: %LOCALAPPDATA%\hermes\ on native Windows, ~/.hermes/ on macOS, Linux, and WSL2.
- Willingness to open one settings file in a plain text editor. It is a normal text file, you are mostly reading it, and the section tells you exactly what to look for.
Exact user action
Four moves, and the first three are mostly reading. The plain-English decision comes first each time; the exact setting names follow it so you can find them in the file.
1. Decide, on purpose, that Hermes asks before it acts. Out of the box it does: it checks with you before consequential actions, and the three settings that cover work happening with nobody watching are all set to refuse. Leave them that way. The whole move is looking at them once so the behavior is yours rather than inherited. The setting names, so you can find them in the file: approvals.mode (smart, manual or off; smart by default); approvals.timeout (seconds, 300 by default); approvals.cron_mode and approvals.single_query_mode (both deny by default); approvals.mcp_reload_confirm and approvals.destructive_slash_confirm (both true); approvals.deny, which is where your own rules go.
There is a third “no human present” gate as well: approvals.unattended_mode (deny | approve, default deny), which covers sessions triggered by webhook or API. The defaults are sensible. Keep all three unattended gates at deny unless you have a specific reason. The point is that you have now looked at them on purpose.
2. Know where your own hard limits would go, even if you write none today. approvals.deny is a list of things Hermes may never do, and it is the one control that still holds if a future, more impatient you switches approvals off entirely. That is what makes it worth knowing about now. We do not print an example rule because the exact syntax is on this page's not-yet-verified list and we will not guess at it. One real limit: these rules apply when Hermes acts on your own machine or over SSH, and an isolated container skips the layer entirely.
3. Know that a command scanner exists, and whether you get it. Hermes can check the content of commands before they run. It is on by default, and by default it lets a command through if the check cannot answer in time; setting security.tirith_fail_open to false reverses that if you want the stricter posture. The other settings in this family, for when you go looking: security.allow_private_urls (false by default); security.tirith_enabled (true); security.tirith_path and security.tirith_timeout; security.allow_lazy_installs (true); security.acked_advisories; security.website_blocklist.
The platform gap, stated plainly: on native Windows, Tirith is silently skipped because it has no prebuilt binary there. The Tirith binary ships for Linux and macOS. The other keys still apply on native Windows, but command-content scanning does not, and you will not be warned. If this matters to you, WSL2 gets the protection back.
4. Know that there is a way to fence off where Hermes may write files, and what it does not cover. It is an optional setting called HERMES_WRITE_SAFE_ROOT, and most people setting up their first agent will not touch it. Two things matter if you ever do: include the Hermes folder itself in the list, or the agent breaks its own housekeeping; and understand that it does not restrict the terminal tool at all. It is a guardrail against accidents, not a wall against a hostile agent; real isolation is a container, which is an Advanced topic.
Where
Two files in your Hermes folder, and it matters which is which. config.yaml holds settings, such as which model you chose. .env holds secrets: API keys, tokens and passwords. Never put a secret in the settings file, and never put a setting in the secrets file.
The environment variable is set in your shell environment, not in config.yaml. Open config.yaml in any plain text editor. It is a normal file.
Expect to see
A YAML settings file with named sections. The approvals and security keys above are the ones you are looking for.
A key you have never set may not appear in the file at all, and that is normal: it is running on its documented default. Do not panic at an absent key.
Save / apply
Save config.yaml in your editor. Safest habit, and the one this guide recommends: exit Hermes, make your edits, then start a new session.
If you choose to set the environment variable, apply it the way your platform applies environment variables persistently, so it survives a reboot (the exact per-platform steps are not yet verified here).
Then, if you know how on your platform, harden the folder permissions, wherever your path resolves: %LOCALAPPDATA%\hermes\ on native Windows, ~/.hermes/ everywhere else. The goal is simple: your user can read and write it, and no other account on the machine can read it at all. That folder holds your API keys.
Verify success
Each check has a stated pass condition:
Config is valid
hermes doctorPass condition: it does not report a configuration error introduced by your edits. A YAML typo is the most likely way to break this.
- Approvals actually gate. With approvals.mode at smart or manual, start a session and ask Hermes to do something real but harmless, such as creating a file in a scratch folder. Pass: it asks you before acting.
- Deny rules hold, if you have written any. Ask it to do something a rule forbids. Pass: it is blocked. This is the rule set that survives --yolo and approvals.mode: off, so confirm it rather than assume it. If you have not written a rule yet, skip this check.
- Secrets are not world-readable. If you know how to inspect file permissions on your platform, check the Hermes folder and the .env file. Pass: your user can read them, other accounts on the machine cannot. The exact commands are not yet verified here (see the panel below).
Common friction
Security / privacy
What this step exposes
The layers you now have, in order of how much they actually protect you: (1) approvals, including your own deny rules, evaluated before --yolo and before approvals.mode: off; (2) the three unattended gates, cron_mode, single_query_mode, and unattended_mode, all defaulting to deny; (3) network and supply-chain settings, with the native-Windows Tirith gap; (4) HERMES_WRITE_SAFE_ROOT, an accident guardrail and explicitly not a sandbox; (5) file permissions on your secrets, because everything above is irrelevant if someone can simply read your .env.
One thing to keep watching: if you ever arrange for Hermes to start automatically and stay running, you have adopted an unattended posture whether or not you intended to, and the approvals and deny rules stop being optional. On a real install, Hermes was found running as an always-on, auto-starting service, which is an unattended posture by definition. Nothing in this path sets that up; it becomes relevant under Go further or Advanced.
When you update: hermes update pulls the latest code and reinstalls dependencies, with --check to preview and --backup to snapshot first. Use both, then run hermes doctor. On a Docker install, hermes update is not available and you pull a new image instead.
Next safe step
Nothing. You are done. You have reached WORKING HERMES. Stop, use it for a couple of weeks, and find out what you actually want before adding anything.
How do I know this worked?
- You have looked at your approvals keys deliberately and know what each default is.
- All three unattended gates (cron_mode, single_query_mode, unattended_mode) are at deny.
- You know that approvals.deny is where your own hard-line rules go, and that they hold even if approvals are later switched off.
- Hermes asked your permission before doing something on your machine, and you saw it happen.
- You know that .env holds your API key, where that folder is on your platform, and that only your user should be able to read it.
- You know whether Tirith runs on your platform, and that it is silently skipped on native Windows.
- You know HERMES_WRITE_SAFE_ROOT is a guardrail against accidents and not a sandbox against a hostile agent.
- hermes doctor runs clean after your edits.
If any line is untrue, go back to Verify success and then Common friction above before continuing.
Not yet verified5 details this guide will not guess at
- The exact YAML syntax and a worked example of an approvals.deny rule, including what a rule is matched against.
- The exact syntax for HERMES_WRITE_SAFE_ROOT with multiple directory prefixes, and how to set it persistently on each platform.
- Whether a fresh install writes every approvals and security key at its default into config.yaml, or only the keys you configured.
- Whether Hermes must be restarted for edited config.yaml values to take effect.
- The exact recommended permission values and commands for hardening the Hermes folder and .env on each platform.
Milestone
WORKING HERMES
If the checklists in all five sections are complete, you have a WORKING HERMES:
- Installed on a supported platform.
- Connected to a model that meets the 64,000-token minimum.
- Proven by a real conversation.
- Gated by approvals you chose on purpose, with deny rules that survive later carelessness.
- Storing its secrets somewhere you know, with permissions you have checked.
That is the finish line, not a checkpoint. Nothing on this page is provisional and nothing is waiting to be completed later. If you never open the next sections, you still have the thing this guide promised.
Keeping it working
- Update deliberately: hermes update --check previews, hermes update --backup snapshots first. Docker installs pull a new image instead.
- Run hermes doctor right after every update, because new releases regularly change security defaults.
Nothing here requires a purchase from us, and there is nothing to buy on this page. Hermes and your model provider have their own terms and their own bills. Read both.
Optional · after WORKING HERMES
Go further: what do you want Hermes to do next?
You do not need any of this. WORKING HERMES is a complete outcome, and everything here is an addition to something that already works. What these items share is reach: each gives Hermes a new way to be contacted, or a new place to act. That is the whole appeal and the whole risk in the same sentence, so each deserves its own decision.
Rules that apply to every item
Add one at a time, and live with it. Adding three at once means you cannot tell which one caused a surprise.
Re-read your security baseline after each addition. Anything that lets Hermes be triggered when you are not sitting there runs into the unattended gates you set: cron_mode, single_query_mode, and unattended_mode, all defaulting to deny.
Talk to Hermes remotely
Real-world notesReach Hermes from your phone.
Talk to Hermes through a Telegram bot, so the agent is reachable when you are away from the terminal.
From a real setup session: a bot token was briefly pasted into a plain terminal before being entered correctly (nothing broke, but it was on screen); /sethome is a separate, easy-to-miss step after the first bot message, with TELEGRAM_HOME_CHANNEL as the documented recovery; and running a second, similarly configured agent alongside caused real confusion about which token belonged to which agent. Treat a bot token like a password, revoke and regenerate it in BotFather if ever exposed, and never reuse one token across two services running at the same time.
Work with websites
OutlineLet Hermes read and act on web pages, rather than only what you paste into it.
A browser connection.
Not yet verified: whether Hermes ships a browser capability, what it is called, and how it is enabled. The setup wizard has a tools section and there is a security.website_blocklist setting, which suggest web-reaching behavior, but no browser tool or procedure is documented.
Work with Google Workspace
OutlineConnect calendar, mail, and documents so Hermes works with what is already in your Google account.
Google Workspace.
Not yet verified: whether Hermes supports Google Workspace integration, which services are covered, and the authorization and scope model. If you do connect Google, the MRE recommended setup is a dedicated Google identity granted only the permissions the agent requires (least privilege, smaller blast radius).
Give Hermes its own email or identity
OutlineA dedicated mailbox, separate from your personal inbox, so agent mail is contained and revocable.
Dedicated email or digital identity.
Not yet verified: whether Hermes supports an email channel, how a mailbox is connected, and which providers are supported.
Reach Hermes by voice, phone, or SMS
OutlineSpeak or text instead of typing, and have it speak back.
Voice output exists as a configured surface: the setup wizard includes a tts (text to speech) section.
Not yet verified: which TTS providers are supported and how they are configured; whether voice input, telephony, or SMS are supported at all.
Run AI locally
OutlineRun the model on your own hardware so your prompts and context never leave your machine.
This is the hardware question, and it belongs here rather than in the five sections above. Your operating system does not determine whether you can run a model locally, and local capability does not change your install path.
The one constraint that carries over unchanged: any local model must still meet the 64,000-token minimum, because Hermes rejects smaller windows at startup regardless of where the model runs. Not yet verified: which local runtimes are supported, how they are selected, and the minimum hardware.
Each item becomes its own guide, with the same structure and the same closing question as the sections above. Items marked Outline carry no instructions yet, by design.
Optional · separate from Go further
Advanced: changing the terms Hermes runs under
Advanced is not a longer Go further, and the two are kept separate on purpose. Go further changes what Hermes can reach; Advanced changes the terms it operates under: where it is isolated, whether it runs when you are not there, and how many agents are involved. Finish the security baseline before anything here. Several items reduce or relocate protections you set there, and reducing a protection you never configured is not a decision, it is an accident.
The line that runs through everything here
An always-on, auto-starting gateway is an unattended posture by definition, and once that is true, approvals and deny rules are not optional. Most items here move you toward that posture. Know when you have crossed the line, because on a real install it was crossed without being noticed.
Container isolation for tool execution
OutlineRun the agent’s tools inside a container so its actions are bounded by the container rather than by your user account.
The terminal.backend: docker setting, which is not the Docker install path. Container isolation is described as the real boundary, but your approvals.deny rules apply only to host-reaching backends, so this strengthens one boundary and removes another.
Tightening the write boundary
OutlineUse HERMES_WRITE_SAFE_ROOT deliberately, with a correct root list.
~/.hermes must be in the root list or the agent’s own state writes break; the variable restricts write_file and patch only, never the terminal tool.
Unattended and scheduled operation
OutlineLet Hermes act on a schedule or in response to a trigger, with no human present.
Three separate gates, all defaulting to deny, and not interchangeable: approvals.cron_mode for scheduled runs, approvals.single_query_mode for one-shot queries, and approvals.unattended_mode for webhook and API-triggered sessions. approvals.timeout (default 300 seconds) means something different when nobody is there to answer.
Running Hermes as an always-on service
OutlineHave Hermes start automatically and stay running.
On a real macOS install this was done with launchd (RunAtLoad and KeepAlive) and was still running months later. The gateway has its own management commands (hermes gateway setup, restart, status). This is where the unattended line gets crossed. Not yet verified: an officially documented service-installation procedure for any platform.
A stricter supply-chain and network posture
OutlineMove from shipped defaults to a deliberately stricter configuration.
The lever most worth understanding is security.tirith_fail_open (default true; false is stricter). The native-Windows Tirith gap carries into every item here.
Multiple agents (Bot Mode)
OutlineRun more than one agent, communicating with each other and with users in group-chat-like environments.
Introduced in v0.21.0. The friction to lead with is not technical: separate tokens per agent, never one token reused across two services running concurrently. Not yet verified: how Bot Mode is enabled and how approvals apply across agents.
Update discipline on a customized install
OutlineUpdate without silently losing a hardened configuration.
hermes update --check to preview, --backup to snapshot, then hermes doctor immediately, because new releases regularly change security defaults. Docker installs pull a new image instead.
Setup modes
OutlineChoose how much the wizard decides for you when reconfiguring.
Quick Setup (Nous Portal, also hermes setup --portal), Full Setup, and Blank Slate (everything off except provider and model, File Operations, and Terminal; re-enable with hermes tools). Blank Slate is a posture choice that interacts with isolation, unattended operation, and multi-agent.
The order to take these in: Container isolation and the write boundary before unattended operation and the always-on service. Setting up an agent to run without you, and then deciding afterwards where it is allowed to act, is the wrong order, and it is the order most people take.
About this guide
This guide is based on the current official Hermes documentation and our own verified technical notes, written against Hermes v0.21.0, and is updated as Hermes evolves. Where a detail still needs verification, we say so clearly rather than presenting it as settled fact.