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:
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 |
| 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 |
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.
Source: NousResearch/hermes-agent → skills/autonomous-ai-agents/hermes-agent/SKILL.md
1---2name: hermes-agent3description: Use, configure, theme, extend, and orchestrate Hermes Agent.4---5
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:
30
31- CLI commands: `hermes --help`, `hermes <command> --help`, and `hermes_cli/main.py`
32- User documentation: https://hermes-agent.nousresearch.com/docs/
33- Source tree: https://github.com/NousResearch/hermes-agent
34
35## Quick Start
36
37```bash
38# Install (shell installer — sets up uv, Python, the venv, and the launcher)
39curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
40
41# Interactive chat (default surface; set display.interface: tui to launch the Ink TUI instead)
42hermes
43
44# Single query
45hermes chat -q "What is the capital of France?"
46
47# Setup wizard / pick model+provider / health check
48hermes setup
49hermes model
50hermes doctor
51
52# Other surfaces
53hermes desktop # launch the native desktop app (alias: hermes gui)
54hermes dashboard # web admin panel + embedded chat
55hermes proxy # OpenAI-compatible local proxy backed by your OAuth provider
56```
57
58## Key Paths
59
60```
61~/.hermes/config.yaml Main configuration (settings — never secrets)
62~/.hermes/.env API keys and secrets ONLY (under $HERMES_HOME if set)
63$HERMES_HOME/skills/ Installed skills
64~/.hermes/skins/ Custom themes (see references/themes.md)
65~/.hermes/desktop-plugins/ Desktop app UI plugins (see references/desktop-plugins.md)
66~/.hermes/tui-widgets/ TUI widget apps (see references/tui-widgets.md)
67~/.hermes/pets/ Installed pet mascots (see references/petdex.md)
68~/.hermes/state.db Canonical session store (SQLite + FTS5)
69~/.hermes/sessions/ Gateway routing index, request dumps, *.jsonl transcripts
70~/.hermes/logs/ Gateway and error logs
71~/.hermes/auth.json OAuth tokens and credential pools
72~/.hermes/hermes-agent/ Source code (if git-installed)
73```
74
75Profiles use `~/.hermes/profiles/<name>/` with the same layout. When a profile is active, resolve the real home from `$HERMES_HOME` — never hardcode `~/.hermes`.
76
77## Routing Table — load the reference for the task
78
79| User wants... | Load |
80|---|---|
81| CLI commands, subcommands, flags, "how do I run X" | `references/cli-reference.md` |
82| In-session slash commands | `references/slash-commands.md` |
83| Provider setup, API keys, OAuth | `references/providers-and-models.md` |
84| config.yaml sections, toolsets, voice/STT/TTS | `references/configuration.md` |
85| AGENTS.md / .hermes.md / CLAUDE.md project rules | `references/project-context-files.md` |
86| Secret redaction, PII, approval modes, "reset permissions" | `references/security-privacy.md` |
87| Delegation, cron, curator, kanban | `references/background-systems.md` |
88| MCP servers (add, catalog, `hermes mcp`) | `references/native-mcp.md` |
89| Webhook routes and event-driven runs | `references/webhooks.md` |
90| A custom theme/skin ("synthwave theme", "change the gold ●") | `references/themes.md` + `templates/skin.yaml` |
91| A desktop app UI element (pane, widget, ⌘K command, page) | `references/desktop-plugins.md` + `templates/plugin.js` |
92| A live TUI panel or modal widget (ticker, clock, dashboard) | `references/tui-widgets.md` + `templates/clock.mjs` |
93| Pet mascots — install, select, scale, diagnose | `references/petdex.md` |
94| Windows-specific issues (keybinds, WinError 10106, BOM) | `references/windows-quirks.md` |
95| Debugging: voice, tools missing, gateway, aux models | `references/troubleshooting.md` |
96| Contributing code: adding tools, slash commands, tests | `references/contributor-guide.md` |
97| delegate_task "capped at N" reports | `references/delegate-task-concurrency-diagnosis.md` |
98| "Can app X use my Nous Portal subscription/OAuth?" | `references/portal-auth-for-third-party-apps.md` |
99
100Two 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.
101
102## Spawning Additional Hermes Instances
103
104Run additional Hermes processes as fully independent subprocesses — separate sessions, tools, and environments.
105
106### When to Use This vs delegate_task
107
108| | `delegate_task` | Spawning `hermes` process |
109|-|-----------------|--------------------------|
110| Isolation | Separate conversation, shared process | Fully independent process |
111| Duration | Minutes (bounded by parent loop) | Hours/days |
112| Tool access | Subset of parent's tools | Full tool access |
113| Interactive | No | Yes (PTY mode) |
114| Use case | Quick parallel subtasks | Long autonomous missions |
115
116### One-Shot Mode
117
118```
119terminal(command="hermes chat -q 'Research GRPO papers and write summary to ~/research/grpo.md'", timeout=300)
120
121# Background for long tasks:
122terminal(command="hermes chat -q 'Set up CI/CD for ~/myapp'", background=true)
123```
124
125### Interactive PTY Mode (via tmux)
126
127Hermes uses prompt_toolkit, which requires a real terminal. Use tmux for interactive spawning:
128
129```
130# Start
131terminal(command="tmux new-session -d -s agent1 -x 120 -y 40 'hermes'", timeout=10)
132
133# Wait for startup, then send a message
134terminal(command="sleep 8 && tmux send-keys -t agent1 'Build a FastAPI auth service' Enter", timeout=15)
135
136# Read output
137terminal(command="sleep 20 && tmux capture-pane -t agent1 -p", timeout=5)
138
139# Send follow-up
140terminal(command="tmux send-keys -t agent1 'Add rate limiting middleware' Enter", timeout=5)
141
142# Exit
143terminal(command="tmux send-keys -t agent1 '/exit' Enter && sleep 2 && tmux kill-session -t agent1", timeout=10)
144```
145
146### Multi-Agent Coordination
147
148```
149# Agent A: backend
150terminal(command="tmux new-session -d -s backend -x 120 -y 40 'hermes -w'", timeout=10)
151terminal(command="sleep 8 && tmux send-keys -t backend 'Build REST API for user management' Enter", timeout=15)
152
153# Agent B: frontend
154terminal(command="tmux new-session -d -s frontend -x 120 -y 40 'hermes -w'", timeout=10)
155terminal(command="sleep 8 && tmux send-keys -t frontend 'Build React dashboard for user management' Enter", timeout=15)
156
157# Check progress, relay context between them
158terminal(command="tmux capture-pane -t backend -p | tail -30", timeout=5)
159terminal(command="tmux send-keys -t frontend 'Here is the API schema from the backend agent: ...' Enter", timeout=5)
160```
161
162### Session Resume
163
164```
165# Resume most recent session
166terminal(command="tmux new-session -d -s resumed 'hermes --continue'", timeout=10)
167
168# Resume specific session
169terminal(command="tmux new-session -d -s resumed 'hermes --resume 20260225_143052_a1b2c3'", timeout=10)
170```
171
172### Tips
173
174- **Prefer `delegate_task` for quick subtasks** — less overhead than spawning a full process
175- **Use `-w` (worktree mode)** when spawning agents that edit code — prevents git conflicts
176- **Set timeouts** for one-shot mode — complex tasks can take 5-10 minutes
177- **Use `hermes chat -q` for fire-and-forget** — no PTY needed
178- **Use tmux for interactive sessions** — raw PTY mode has `\r` vs `\n` issues with prompt_toolkit
179- **For scheduled tasks**, use the `cronjob` tool instead of spawning — handles delivery and retry
180- **"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."
181- **"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).
182
183## Surfaces (quick orientation)
184
185- **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`.
186- **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.
187- **Ink TUI** (`hermes --tui` or `display.interface: tui`) — terminal UI with docked widget apps — `references/tui-widgets.md`.
188- **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.
189
190## Hard Invariants (never violate, regardless of what you loaded)
191
192- **Never break prompt caching** — don't change past context, toolsets, or the system prompt mid-conversation. The only exception is context compression.
193- **Message role alternation** — never two assistant or two user messages in a row; only `tool` results can repeat.
194- **Secrets in `.env`, settings in `config.yaml`** — never tell a user to put a non-credential setting in `.env`.
195- **Profile-safe paths** — `get_hermes_home()` in code, `$HERMES_HOME` when resolving paths in a session.
196- **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.
197
198---
199
200**Source:** [`NousResearch/hermes-agent`](https://github.com/NousResearch/hermes-agent) → `skills/autonomous-ai-agents/hermes-agent/SKILL.md`