Hermes Agent is the layer that decides what to do; Ember is the engine that runs the model. Hermes handles channel routing (Telegram, Signal, WhatsApp), tool dispatch, memory and scheduling, and calls Ember as a custom OpenAI-compatible provider.
To wire it up, see Connect Hermes Agent. For where it sits in the wider system, see Architecture Overview.
Reasoning and routing
A single inference engine handles all reasoning tiers. The model is selected by prompt complexity and tool requirements:
| Tier | Purpose | When used |
|---|---|---|
| FAST | Greetings, acks | Short, low-complexity prompts |
| DEFAULT | Conversation + memory retrieval | General queries |
| REASONING | Deep analysis | Complex multi-step reasoning |
| COMPLEX | Tool execution loop | Any action requiring tool calls |
Routing path:
User Message (Telegram)
│
▼
Hermes Agent
│ ┌── custom provider: http://127.0.0.1:8000/v1
│ │ model: deepseek-v4-flash (ember-server)
│ │ backend: ROCm 7.14 on AMD Radeon 8060S
│ ▼
ember-server (Docker container, port 8000)
│
├── FAST → single-turn response
├── DEFAULT → streaming chat completion
├── REASONING → high-temperature chain-of-thought
└── COMPLEX → tool-calling agent loop with Hermes tool dispatch
The inference server runs as a Docker container with ROCm GPU passthrough (/dev/kfd, /dev/dri). The KV cache is disk-persisted — see Ember for the current deployment parameters.
Action: typed tools
Hermes Agent executes constrained operations through typed tools:
- Desktop/HID actions — JetKVM (WebRTC capture + USB HID) driven by Hermes computer-use tools
- Coordinate translation — vision model coordinates inverse-transformed to real screen coordinates before HID injection
- Code execution — sandboxed shell commands
- File operations — workspace read/write
- Messaging — post to Telegram topics, send alerts, create summaries
- Web & research — web search, page extraction
- Delegation — spawn sub-agents for parallel work
Memory
Hermes Agent provides three memory systems:
Hindsight (Long-Term Fact Storage)
Hindsight is the durable memory layer. It stores structured facts extracted from conversations and retrieves them on future turns via three parallel mechanisms:
- Semantic search — embedding-based similarity across all stored entries
- Keyword matching — full-text search over entity names and descriptions
- Entity graph traversal — follows relationships between entities (people, projects, systems) to surface connected facts
Three query modes:
| Tool | Purpose |
|---|---|
hindsight_recall(query) |
Search across all stored memories — returns ranked results |
hindsight_reflect(query) |
Synthesize a reasoned answer from all relevant memories |
hindsight_retain(content, context, tags) |
Store a new fact with automatic entity extraction and indexing |
Hindsight recall runs automatically (auto_recall), and the agent can also call hindsight_recall or hindsight_reflect explicitly when it needs long-term context. Writing is likewise automatic — auto_retain captures durable facts from conversations, and the retain tool is also called proactively when the agent learns a durable fact about the user, their environment, or a project.
Configuration:
| Setting | Value | Description |
|---|---|---|
provider |
hindsight |
Active memory backend |
memory_enabled |
true |
Memory system enabled |
memory_char_limit |
8000 |
Max characters for memory entries |
user_char_limit |
3000 |
Max characters for user profile |
nudge_interval |
10 |
Prompt to save memory every 10 turns |
flush_min_turns |
6 |
Minimum turns before memory flush |
Session Search (Conversation History)
FTS5-indexed archive of every past conversation session across all Hermes profiles. Accessed via session_search:
| Mode | Description |
|---|---|
session_search(query) |
Discovery — FTS5 search across all sessions, returns top matches with context windows |
session_search(session_id, around_message_id) |
Scroll — read ±N messages around a specific message in a session |
session_search(session_id) |
Read — dump the full session (first 20 + last 10 messages) |
session_search() |
Browse — list recent sessions chronologically |
Session search is not automatically injected — it is called on demand when the user references past work.
Skills (Procedural Memory)
Reusable markdown files stored in ~/.hermes/skills/ that encode workflows for recurring task types. Each skill has a YAML frontmatter block (trigger conditions, description, category) and a markdown body with numbered steps, commands, and pitfalls. Skills are loaded explicitly via skill_view(name) and listed via skills_list().