Hermes Agent
Hermes Agent is an open-source AI agent framework by Nous Research that runs in your terminal, a native desktop app, messaging platforms, and IDEs. It's in the same category as Claude Code (Anthropic), Codex (OpenAI), and OpenClaw — autonomous coding and task-execution agents that use tool calling to interact with your system. Hermes works with any LLM provider (OpenRouter, Anthropic, OpenAI, Google, DeepSeek, xAI, local models, and 20+ others) and runs on Linux, macOS, Windows, and WSL.
What makes Hermes different:
- Self-improving through skills — Hermes learns from experience by saving reusable procedures as skills that load into future sessions.
- Persistent memory across sessions — remembers who you are, your preferences, environment details, and lessons learned. Pluggable memory backends.
- Multi-platform gateway — the same agent runs on Telegram, Discord, Slack, WhatsApp, iMessage, Signal, Matrix, Teams, Email, and a dozen more platforms with full tool access, not just chat.
- Many surfaces — the same agent core drives the CLI, the Ink TUI, a native Electron desktop app, a web dashboard, and an ACP server for IDEs (VS Code / Zed / JetBrains).
- Provider-agnostic — swap models and providers mid-workflow; credential pools rotate across multiple API keys automatically.
- Profiles — run multiple independent Hermes instances with isolated configs, sessions, skills, and memory.
- Extensible & themeable — plugins, MCP servers, custom tools, webhook triggers, cron scheduling, skins that theme every surface, desktop UI plugins, TUI widgets, and pet mascots.
This skill is a hub. The body covers identity, quick start, spawning/orchestration, and hard invariants. Everything else lives in reference files — load the matching reference (below) before answering; do not answer detail questions from the body alone.
Docs: https://hermes-agent.nousresearch.com/docs/
Scope & Verification
This skill is a concise operating guide, not the complete source of truth for every Hermes feature. If a Hermes feature, command, or setting is not mentioned here or in a reference, do not treat that absence as evidence that it does not exist. Check the live repository and official docs before giving a negative answer.
Good verification targets, cheapest first:
- Every shipped feature, one line each: https://hermes-agent.nousresearch.com/docs/llms.txt. Start here for any "can Hermes do X?" or "how do I do X?" — it indexes the entire documentation set with a link to the page that answers. It is generated from the docs tree on every build, so it is never behind the product. Fetch it with
web_extract, or curl -s https://hermes-agent.nousresearch.com/docs/llms.txt when web tools are off. The whole documentation set in one file is at /docs/llms-full.txt.
- CLI commands:
hermes --help, hermes <command> --help, and hermes_cli/main.py
- Source tree: https://github.com/NousResearch/hermes-agent
Never answer "Hermes can't do that" from memory. Hermes ships far more than this skill body describes, and the index exists so a negative answer is always checkable.
Quick Start
# Install (shell installer — sets up uv, Python, the venv, and the launcher)
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
# Interactive chat (default surface; set display.interface: tui to launch the Ink TUI instead)
hermes
# Single query
hermes chat -q "What is the capital of France?"
# Setup wizard / pick model+provider / health check
hermes setup
hermes model
hermes doctor
# Other surfaces
hermes desktop # launch the native desktop app (alias: hermes gui)
hermes dashboard # web admin panel + embedded chat
hermes proxy # OpenAI-compatible local proxy backed by your OAuth provider
Key Paths
~/.hermes/config.yaml Main configuration (settings — never secrets)
~/.hermes/.env API keys and secrets ONLY (under $HERMES_HOME if set)
$HERMES_HOME/skills/ Installed skills
~/.hermes/skins/ Custom themes (see references/themes.md)
~/.hermes/desktop-plugins/ Desktop app UI plugins (see references/desktop-plugins.md)
~/.hermes/tui-widgets/ TUI widget apps (see references/tui-widgets.md)
~/.hermes/pets/ Installed pet mascots (see references/petdex.md)
~/.hermes/state.db Canonical session store (SQLite + FTS5)
~/.hermes/sessions/ Gateway routing index, request dumps, *.jsonl transcripts
~/.hermes/logs/ Gateway and error logs
~/.hermes/auth.json OAuth tokens and credential pools
~/.hermes/hermes-agent/ Source code (if git-installed)
Profiles use ~/.hermes/profiles/<name>/ with the same layout. When a profile is active, resolve the real home from $HERMES_HOME — never hardcode ~/.hermes.
Routing Table — load the reference for the task
| User wants... |
Load |
| Anything not listed below — "can Hermes do X?", "how do I set up X?" |
https://hermes-agent.nousresearch.com/docs/llms.txt |
| Bots that chat, run routines, or message each other; the Bots tab |
docs: /user-guide/bot-mode |
| CLI commands, subcommands, flags, "how do I run X" |
references/cli-reference.md |
| In-session slash commands |
references/slash-commands.md |
| Provider setup, API keys, OAuth |
references/providers-and-models.md |
| config.yaml sections, toolsets, voice/STT/TTS |
references/configuration.md |
| AGENTS.md / .hermes.md / CLAUDE.md project rules |
references/project-context-files.md |
| Secret redaction, PII, approval modes, "reset permissions" |
references/security-privacy.md |
| Delegation, cron, curator, kanban |
references/background-systems.md |
MCP servers (add, catalog, hermes mcp) |
references/native-mcp.md |
| Webhook routes and event-driven runs |
references/webhooks.md |
| A custom theme/skin ("synthwave theme", "change the gold ●") |
references/themes.md + templates/skin.yaml |
| A desktop app UI element (pane, widget, ⌘K command, page) |
references/desktop-plugins.md + templates/plugin.js |
| A live TUI panel or modal widget (ticker, clock, dashboard) |
references/tui-widgets.md + templates/clock.mjs |
| Pet mascots — install, select, scale, diagnose |
references/petdex.md |
| Windows-specific issues (keybinds, WinError 10106, BOM) |
references/windows-quirks.md |
| Debugging: voice, tools missing, gateway, aux models |
references/troubleshooting.md |
| Contributing code: adding tools, slash commands, tests |
references/contributor-guide.md |
| delegate_task "capped at N" reports |
references/delegate-task-concurrency-diagnosis.md |
| "Can app X use my Nous Portal subscription/OAuth?" |
references/portal-auth-for-third-party-apps.md |
| Connecting a messaging platform (Telegram, Discord, Slack, WhatsApp, …) |
docs: /user-guide/messaging |
The reference list above is not the feature list — it is the set of topics that
need more than their docs page. For everything else Hermes ships, fetch
llms.txt and it maps the question to the page that answers it.
Two theming rules that hold even without loading the reference: you apply skins yourself (hermes config set display.skin <name> — every surface repaints live within ~a second; don't tell the user to run /skin), and to tweak one color, edit the ACTIVE skin (hermes skin set <key> <hex>) — never fork default, which drops the palette and resets the background.
Spawning Additional Hermes Instances
Run additional Hermes processes as fully independent subprocesses — separate sessions, tools, and environments.
When to Use This vs delegate_task
|
delegate_task |
Spawning hermes process |
| Isolation |
Separate conversation, shared process |
Fully independent process |
| Duration |
Minutes (bounded by parent loop) |
Hours/days |
| Tool access |
Subset of parent's tools |
Full tool access |
| Interactive |
No |
Yes (PTY mode) |
| Use case |
Quick parallel subtasks |
Long autonomous missions |
One-Shot Mode
terminal(command="hermes chat -q 'Research GRPO papers and write summary to ~/research/grpo.md'", timeout=300)
# Background for long tasks:
terminal(command="hermes chat -q 'Set up CI/CD for ~/myapp'", background=true)
Interactive PTY Mode (via tmux)
Hermes uses prompt_toolkit, which requires a real terminal. Use tmux for interactive spawning:
# Start
terminal(command="tmux new-session -d -s agent1 -x 120 -y 40 'hermes'", timeout=10)
# Wait for startup, then send a message
terminal(command="sleep 8 && tmux send-keys -t agent1 'Build a FastAPI auth service' Enter", timeout=15)
# Read output
terminal(command="sleep 20 && tmux capture-pane -t agent1 -p", timeout=5)
# Send follow-up
terminal(command="tmux send-keys -t agent1 'Add rate limiting middleware' Enter", timeout=5)
# Exit
terminal(command="tmux send-keys -t agent1 '/exit' Enter && sleep 2 && tmux kill-session -t agent1", timeout=10)
Multi-Agent Coordination
# Agent A: backend
terminal(command="tmux new-session -d -s backend -x 120 -y 40 'hermes -w'", timeout=10)
terminal(command="sleep 8 && tmux send-keys -t backend 'Build REST API for user management' Enter", timeout=15)
# Agent B: frontend
terminal(command="tmux new-session -d -s frontend -x 120 -y 40 'hermes -w'", timeout=10)
terminal(command="sleep 8 && tmux send-keys -t frontend 'Build React dashboard for user management' Enter", timeout=15)
# Check progress, relay context between them
terminal(command="tmux capture-pane -t backend -p | tail -30", timeout=5)
terminal(command="tmux send-keys -t frontend 'Here is the API schema from the backend agent: ...' Enter", timeout=5)
Session Resume
# Resume most recent session
terminal(command="tmux new-session -d -s resumed 'hermes --continue'", timeout=10)
# Resume specific session
terminal(command="tmux new-session -d -s resumed 'hermes --resume 20260225_143052_a1b2c3'", timeout=10)
Tips
- Prefer
delegate_task for quick subtasks — less overhead than spawning a full process
- Use
-w (worktree mode) when spawning agents that edit code — prevents git conflicts
- Set timeouts for one-shot mode — complex tasks can take 5-10 minutes
- Use
hermes chat -q for fire-and-forget — no PTY needed
- Use tmux for interactive sessions — raw PTY mode has
\r vs \n issues with prompt_toolkit
- For scheduled tasks, use the
cronjob tool instead of spawning — handles delivery and retry
- "delegate_task is capped at N" reports — see
references/delegate-task-concurrency-diagnosis.md. Three real cap paths in Hermes; if none fired, the model is self-limiting and rationalising it as "the runtime caps."
- "Can $external_app use my Nous Portal subscription / OAuth?" — see
references/portal-auth-for-third-party-apps.md. Walk the user through three layers (plugin-vs-app, what Portal actually exposes, local-broker-proxy option).
Surfaces (quick orientation)
- Desktop app (
hermes desktop / hermes gui) — native Electron app for macOS/Linux/Windows: streaming chat, session list, Cmd+K palette, drag-and-drop files, native notifications, per-profile remote-gateway login. Extend it with UI plugins — references/desktop-plugins.md.
- Web dashboard (
hermes dashboard) — full admin panel: messaging channels, MCP catalog, webhooks, memory, profile builder, plus an embedded hermes --tui chat. Secured behind an OAuth/token gate.
- Ink TUI (
hermes --tui or display.interface: tui) — terminal UI with docked widget apps — references/tui-widgets.md.
- OpenAI-compatible proxy (
hermes proxy) — a local OpenAI API backed by whichever OAuth provider you're signed into. Point Codex CLI, Aider, Cline, or any script at it — no API key.
Hard Invariants (never violate, regardless of what you loaded)
- Never break prompt caching — don't change past context, toolsets, or the system prompt mid-conversation. The only exception is context compression.
- Message role alternation — never two assistant or two user messages in a row; only
tool results can repeat.
- Secrets in
.env, settings in config.yaml — never tell a user to put a non-credential setting in .env.
- Profile-safe paths —
get_hermes_home() in code, $HERMES_HOME when resolving paths in a session.
- Never hand-edit
config.yaml for the user — use hermes config set KEY VAL; a stray indent can corrupt the file and break the live gateway.
1---2name: hermes-agent3description: Use, configure, theme, extend, and orchestrate Hermes Agent.4license: MIT5---6
7# Hermes Agent
8
9Hermes Agent is an open-source AI agent framework by Nous Research that runs in your terminal, a native desktop app, messaging platforms, and IDEs. It's in the same category as Claude Code (Anthropic), Codex (OpenAI), and OpenClaw — autonomous coding and task-execution agents that use tool calling to interact with your system. Hermes works with any LLM provider (OpenRouter, Anthropic, OpenAI, Google, DeepSeek, xAI, local models, and 20+ others) and runs on Linux, macOS, Windows, and WSL.
10
11What makes Hermes different:
12
13- **Self-improving through skills** — Hermes learns from experience by saving reusable procedures as skills that load into future sessions.
14- **Persistent memory across sessions** — remembers who you are, your preferences, environment details, and lessons learned. Pluggable memory backends.
15- **Multi-platform gateway** — the same agent runs on Telegram, Discord, Slack, WhatsApp, iMessage, Signal, Matrix, Teams, Email, and a dozen more platforms with full tool access, not just chat.
16- **Many surfaces** — the same agent core drives the CLI, the Ink TUI, a native Electron desktop app, a web dashboard, and an ACP server for IDEs (VS Code / Zed / JetBrains).
17- **Provider-agnostic** — swap models and providers mid-workflow; credential pools rotate across multiple API keys automatically.
18- **Profiles** — run multiple independent Hermes instances with isolated configs, sessions, skills, and memory.
19- **Extensible & themeable** — plugins, MCP servers, custom tools, webhook triggers, cron scheduling, skins that theme every surface, desktop UI plugins, TUI widgets, and pet mascots.
20
21**This skill is a hub.** The body covers identity, quick start, spawning/orchestration, and hard invariants. Everything else lives in reference files — **load the matching reference (below) before answering**; do not answer detail questions from the body alone.
22
23**Docs:** https://hermes-agent.nousresearch.com/docs/
24
25## Scope & Verification
26
27This skill is a concise operating guide, not the complete source of truth for every Hermes feature. If a Hermes feature, command, or setting is not mentioned here or in a reference, do not treat that absence as evidence that it does not exist. Check the live repository and official docs before giving a negative answer.
28
29Good verification targets, cheapest first:
30
31- **Every shipped feature, one line each: https://hermes-agent.nousresearch.com/docs/llms.txt.** Start here for any "can Hermes do X?" or "how do I do X?" — it indexes the entire documentation set with a link to the page that answers. It is generated from the docs tree on every build, so it is never behind the product. Fetch it with `web_extract`, or `curl -s https://hermes-agent.nousresearch.com/docs/llms.txt` when web tools are off. The whole documentation set in one file is at `/docs/llms-full.txt`.
32- CLI commands: `hermes --help`, `hermes <command> --help`, and `hermes_cli/main.py`
33- Source tree: https://github.com/NousResearch/hermes-agent
34
35Never answer "Hermes can't do that" from memory. Hermes ships far more than this skill body describes, and the index exists so a negative answer is always checkable.
36
37## Quick Start
38
39```bash
40# Install (shell installer — sets up uv, Python, the venv, and the launcher)
41curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
42
43# Interactive chat (default surface; set display.interface: tui to launch the Ink TUI instead)
44hermes
45
46# Single query
47hermes chat -q "What is the capital of France?"
48
49# Setup wizard / pick model+provider / health check
50hermes setup
51hermes model
52hermes doctor
53
54# Other surfaces
55hermes desktop # launch the native desktop app (alias: hermes gui)
56hermes dashboard # web admin panel + embedded chat
57hermes proxy # OpenAI-compatible local proxy backed by your OAuth provider
58```
59
60## Key Paths
61
62```
63~/.hermes/config.yaml Main configuration (settings — never secrets)
64~/.hermes/.env API keys and secrets ONLY (under $HERMES_HOME if set)
65$HERMES_HOME/skills/ Installed skills
66~/.hermes/skins/ Custom themes (see references/themes.md)
67~/.hermes/desktop-plugins/ Desktop app UI plugins (see references/desktop-plugins.md)
68~/.hermes/tui-widgets/ TUI widget apps (see references/tui-widgets.md)
69~/.hermes/pets/ Installed pet mascots (see references/petdex.md)
70~/.hermes/state.db Canonical session store (SQLite + FTS5)
71~/.hermes/sessions/ Gateway routing index, request dumps, *.jsonl transcripts
72~/.hermes/logs/ Gateway and error logs
73~/.hermes/auth.json OAuth tokens and credential pools
74~/.hermes/hermes-agent/ Source code (if git-installed)
75```
76
77Profiles use `~/.hermes/profiles/<name>/` with the same layout. When a profile is active, resolve the real home from `$HERMES_HOME` — never hardcode `~/.hermes`.
78
79## Routing Table — load the reference for the task
80
81| User wants... | Load |
82|---|---|
83| **Anything not listed below — "can Hermes do X?", "how do I set up X?"** | **https://hermes-agent.nousresearch.com/docs/llms.txt** |
84| Bots that chat, run routines, or message each other; the Bots tab | docs: `/user-guide/bot-mode` |
85| CLI commands, subcommands, flags, "how do I run X" | `references/cli-reference.md` |
86| In-session slash commands | `references/slash-commands.md` |
87| Provider setup, API keys, OAuth | `references/providers-and-models.md` |
88| config.yaml sections, toolsets, voice/STT/TTS | `references/configuration.md` |
89| AGENTS.md / .hermes.md / CLAUDE.md project rules | `references/project-context-files.md` |
90| Secret redaction, PII, approval modes, "reset permissions" | `references/security-privacy.md` |
91| Delegation, cron, curator, kanban | `references/background-systems.md` |
92| MCP servers (add, catalog, `hermes mcp`) | `references/native-mcp.md` |
93| Webhook routes and event-driven runs | `references/webhooks.md` |
94| A custom theme/skin ("synthwave theme", "change the gold ●") | `references/themes.md` + `templates/skin.yaml` |
95| A desktop app UI element (pane, widget, ⌘K command, page) | `references/desktop-plugins.md` + `templates/plugin.js` |
96| A live TUI panel or modal widget (ticker, clock, dashboard) | `references/tui-widgets.md` + `templates/clock.mjs` |
97| Pet mascots — install, select, scale, diagnose | `references/petdex.md` |
98| Windows-specific issues (keybinds, WinError 10106, BOM) | `references/windows-quirks.md` |
99| Debugging: voice, tools missing, gateway, aux models | `references/troubleshooting.md` |
100| Contributing code: adding tools, slash commands, tests | `references/contributor-guide.md` |
101| delegate_task "capped at N" reports | `references/delegate-task-concurrency-diagnosis.md` |
102| "Can app X use my Nous Portal subscription/OAuth?" | `references/portal-auth-for-third-party-apps.md` |
103| Connecting a messaging platform (Telegram, Discord, Slack, WhatsApp, …) | docs: `/user-guide/messaging` |
104
105The reference list above is not the feature list — it is the set of topics that
106need more than their docs page. For everything else Hermes ships, fetch
107`llms.txt` and it maps the question to the page that answers it.
108
109Two theming rules that hold even without loading the reference: **you apply skins yourself** (`hermes config set display.skin <name>` — every surface repaints live within ~a second; don't tell the user to run `/skin`), and **to tweak one color, edit the ACTIVE skin** (`hermes skin set <key> <hex>`) — never fork `default`, which drops the palette and resets the background.
110
111## Spawning Additional Hermes Instances
112
113Run additional Hermes processes as fully independent subprocesses — separate sessions, tools, and environments.
114
115### When to Use This vs delegate_task
116
117| | `delegate_task` | Spawning `hermes` process |
118|-|-----------------|--------------------------|
119| Isolation | Separate conversation, shared process | Fully independent process |
120| Duration | Minutes (bounded by parent loop) | Hours/days |
121| Tool access | Subset of parent's tools | Full tool access |
122| Interactive | No | Yes (PTY mode) |
123| Use case | Quick parallel subtasks | Long autonomous missions |
124
125### One-Shot Mode
126
127```
128terminal(command="hermes chat -q 'Research GRPO papers and write summary to ~/research/grpo.md'", timeout=300)
129
130# Background for long tasks:
131terminal(command="hermes chat -q 'Set up CI/CD for ~/myapp'", background=true)
132```
133
134### Interactive PTY Mode (via tmux)
135
136Hermes uses prompt_toolkit, which requires a real terminal. Use tmux for interactive spawning:
137
138```
139# Start
140terminal(command="tmux new-session -d -s agent1 -x 120 -y 40 'hermes'", timeout=10)
141
142# Wait for startup, then send a message
143terminal(command="sleep 8 && tmux send-keys -t agent1 'Build a FastAPI auth service' Enter", timeout=15)
144
145# Read output
146terminal(command="sleep 20 && tmux capture-pane -t agent1 -p", timeout=5)
147
148# Send follow-up
149terminal(command="tmux send-keys -t agent1 'Add rate limiting middleware' Enter", timeout=5)
150
151# Exit
152terminal(command="tmux send-keys -t agent1 '/exit' Enter && sleep 2 && tmux kill-session -t agent1", timeout=10)
153```
154
155### Multi-Agent Coordination
156
157```
158# Agent A: backend
159terminal(command="tmux new-session -d -s backend -x 120 -y 40 'hermes -w'", timeout=10)
160terminal(command="sleep 8 && tmux send-keys -t backend 'Build REST API for user management' Enter", timeout=15)
161
162# Agent B: frontend
163terminal(command="tmux new-session -d -s frontend -x 120 -y 40 'hermes -w'", timeout=10)
164terminal(command="sleep 8 && tmux send-keys -t frontend 'Build React dashboard for user management' Enter", timeout=15)
165
166# Check progress, relay context between them
167terminal(command="tmux capture-pane -t backend -p | tail -30", timeout=5)
168terminal(command="tmux send-keys -t frontend 'Here is the API schema from the backend agent: ...' Enter", timeout=5)
169```
170
171### Session Resume
172
173```
174# Resume most recent session
175terminal(command="tmux new-session -d -s resumed 'hermes --continue'", timeout=10)
176
177# Resume specific session
178terminal(command="tmux new-session -d -s resumed 'hermes --resume 20260225_143052_a1b2c3'", timeout=10)
179```
180
181### Tips
182
183- **Prefer `delegate_task` for quick subtasks** — less overhead than spawning a full process
184- **Use `-w` (worktree mode)** when spawning agents that edit code — prevents git conflicts
185- **Set timeouts** for one-shot mode — complex tasks can take 5-10 minutes
186- **Use `hermes chat -q` for fire-and-forget** — no PTY needed
187- **Use tmux for interactive sessions** — raw PTY mode has `\r` vs `\n` issues with prompt_toolkit
188- **For scheduled tasks**, use the `cronjob` tool instead of spawning — handles delivery and retry
189- **"delegate_task is capped at N" reports** — see `references/delegate-task-concurrency-diagnosis.md`. Three real cap paths in Hermes; if none fired, the model is self-limiting and rationalising it as "the runtime caps."
190- **"Can $external_app use my Nous Portal subscription / OAuth?"** — see `references/portal-auth-for-third-party-apps.md`. Walk the user through three layers (plugin-vs-app, what Portal actually exposes, local-broker-proxy option).
191
192## Surfaces (quick orientation)
193
194- **Desktop app** (`hermes desktop` / `hermes gui`) — native Electron app for macOS/Linux/Windows: streaming chat, session list, Cmd+K palette, drag-and-drop files, native notifications, per-profile remote-gateway login. Extend it with UI plugins — `references/desktop-plugins.md`.
195- **Web dashboard** (`hermes dashboard`) — full admin panel: messaging channels, MCP catalog, webhooks, memory, profile builder, plus an embedded `hermes --tui` chat. Secured behind an OAuth/token gate.
196- **Ink TUI** (`hermes --tui` or `display.interface: tui`) — terminal UI with docked widget apps — `references/tui-widgets.md`.
197- **OpenAI-compatible proxy** (`hermes proxy`) — a local OpenAI API backed by whichever OAuth provider you're signed into. Point Codex CLI, Aider, Cline, or any script at it — no API key.
198
199## Hard Invariants (never violate, regardless of what you loaded)
200
201- **Never break prompt caching** — don't change past context, toolsets, or the system prompt mid-conversation. The only exception is context compression.
202- **Message role alternation** — never two assistant or two user messages in a row; only `tool` results can repeat.
203- **Secrets in `.env`, settings in `config.yaml`** — never tell a user to put a non-credential setting in `.env`.
204- **Profile-safe paths** — `get_hermes_home()` in code, `$HERMES_HOME` when resolving paths in a session.
205- **Never hand-edit `config.yaml` for the user** — use `hermes config set KEY VAL`; a stray indent can corrupt the file and break the live gateway.