| --- |
| sidebar_position: 9 |
| title: "Personality & SOUL.md" |
| description: "Customize Hermes Agent's personality with a global SOUL.md, built-in personalities, and custom persona definitions" |
| --- |
| |
| # Personality & SOUL.md |
|
|
| Hermes Agent's personality is fully customizable. `SOUL.md` is the **primary identity** — it's the first thing in the system prompt and defines who the agent is. |
|
|
| - `SOUL.md` — a durable persona file that lives in `HERMES_HOME` and serves as the agent's identity (slot #1 in the system prompt) |
| - built-in or custom `/personality` presets — session-level system-prompt overlays |
|
|
| If you want to change who Hermes is — or replace it with an entirely different agent persona — edit `SOUL.md`. |
|
|
| ## How SOUL.md works now |
|
|
| Hermes now seeds a default `SOUL.md` automatically in: |
|
|
| ```text |
| ~/.hermes/SOUL.md |
| ``` |
|
|
| More precisely, it uses the current instance's `HERMES_HOME`, so if you run Hermes with a custom home directory, it will use: |
|
|
| ```text |
| $HERMES_HOME/SOUL.md |
| ``` |
|
|
| ### Important behavior |
|
|
| - **SOUL.md is the agent's primary identity.** It occupies slot #1 in the system prompt, replacing the hardcoded default identity. |
| - Hermes creates a starter `SOUL.md` automatically if one does not exist yet |
| - Existing user `SOUL.md` files are never overwritten |
| - Hermes loads `SOUL.md` only from `HERMES_HOME` |
| - Hermes does not look in the current working directory for `SOUL.md` |
| - If `SOUL.md` exists but is empty, or cannot be loaded, Hermes falls back to a built-in default identity |
| - If `SOUL.md` has content, that content is injected verbatim after security scanning and truncation |
| - SOUL.md is **not** duplicated in the context files section — it appears only once, as the identity |
|
|
| That makes `SOUL.md` a true per-user or per-instance identity, not just an additive layer. |
|
|
| ## Why this design |
|
|
| This keeps personality predictable. |
|
|
| If Hermes loaded `SOUL.md` from whatever directory you happened to launch it in, your personality could change unexpectedly between projects. By loading only from `HERMES_HOME`, the personality belongs to the Hermes instance itself. |
|
|
| That also makes it easier to teach users: |
| - "Edit `~/.hermes/SOUL.md` to change Hermes' default personality." |
|
|
| ## Where to edit it |
|
|
| For most users: |
|
|
| ```bash |
| ~/.hermes/SOUL.md |
| ``` |
|
|
| If you use a custom home: |
|
|
| ```bash |
| $HERMES_HOME/SOUL.md |
| ``` |
|
|
| ## What should go in SOUL.md? |
|
|
| Use it for durable voice and personality guidance, such as: |
| - tone |
| - communication style |
| - level of directness |
| - default interaction style |
| - what to avoid stylistically |
| - how Hermes should handle uncertainty, disagreement, or ambiguity |
|
|
| Use it less for: |
| - one-off project instructions |
| - file paths |
| - repo conventions |
| - temporary workflow details |
|
|
| Those belong in `AGENTS.md`, not `SOUL.md`. |
|
|
| ## Good SOUL.md content |
|
|
| A good SOUL file is: |
| - stable across contexts |
| - broad enough to apply in many conversations |
| - specific enough to materially shape the voice |
| - focused on communication and identity, not task-specific instructions |
|
|
| ### Example |
|
|
| ```markdown |
| # Personality |
| |
| You are a pragmatic senior engineer with strong taste. |
| You optimize for truth, clarity, and usefulness over politeness theater. |
| |
| ## Style |
| - Be direct without being cold |
| - Prefer substance over filler |
| - Push back when something is a bad idea |
| - Admit uncertainty plainly |
| - Keep explanations compact unless depth is useful |
| |
| ## What to avoid |
| - Sycophancy |
| - Hype language |
| - Repeating the user's framing if it's wrong |
| - Overexplaining obvious things |
| |
| ## Technical posture |
| - Prefer simple systems over clever systems |
| - Care about operational reality, not idealized architecture |
| - Treat edge cases as part of the design, not cleanup |
| ``` |
|
|
| ## What Hermes injects into the prompt |
|
|
| `SOUL.md` content goes directly into slot #1 of the system prompt — the agent identity position. No wrapper language is added around it. |
|
|
| The content goes through: |
| - prompt-injection scanning |
| - truncation if it is too large |
|
|
| If the file is empty, whitespace-only, or cannot be read, Hermes falls back to a built-in default identity ("You are Hermes Agent, an intelligent AI assistant created by Nous Research..."). This fallback also applies when `skip_context_files` is set (e.g., in subagent/delegation contexts). |
|
|
| ## Security scanning |
|
|
| `SOUL.md` is scanned like other context-bearing files for prompt injection patterns before inclusion. |
|
|
| That means you should still keep it focused on persona/voice rather than trying to sneak in strange meta-instructions. |
|
|
| ## SOUL.md vs AGENTS.md |
|
|
| This is the most important distinction. |
|
|
| ### SOUL.md |
| Use for: |
| - identity |
| - tone |
| - style |
| - communication defaults |
| - personality-level behavior |
|
|
| ### AGENTS.md |
| Use for: |
| - project architecture |
| - coding conventions |
| - tool preferences |
| - repo-specific workflows |
| - commands, ports, paths, deployment notes |
|
|
| A useful rule: |
| - if it should follow you everywhere, it belongs in `SOUL.md` |
| - if it belongs to a project, it belongs in `AGENTS.md` |
|
|
| ## SOUL.md vs `/personality` |
|
|
| `SOUL.md` is your durable default personality. |
|
|
| `/personality` is a session-level overlay that changes or supplements the current system prompt. |
|
|
| So: |
| - `SOUL.md` = baseline voice |
| - `/personality` = temporary mode switch |
|
|
| Examples: |
| - keep a pragmatic default SOUL, then use `/personality teacher` for a tutoring conversation |
| - keep a concise SOUL, then use `/personality creative` for brainstorming |
|
|
| ## Built-in personalities |
|
|
| Hermes ships with built-in personalities you can switch to with `/personality`. |
|
|
| | Name | Description | |
| |------|-------------| |
| | **helpful** | Friendly, general-purpose assistant | |
| | **concise** | Brief, to-the-point responses | |
| | **technical** | Detailed, accurate technical expert | |
| | **creative** | Innovative, outside-the-box thinking | |
| | **teacher** | Patient educator with clear examples | |
| | **kawaii** | Cute expressions, sparkles, and enthusiasm ★ | |
| | **catgirl** | Neko-chan with cat-like expressions, nya~ | |
| | **pirate** | Captain Hermes, tech-savvy buccaneer | |
| | **shakespeare** | Bardic prose with dramatic flair | |
| | **surfer** | Totally chill bro vibes | |
| | **noir** | Hard-boiled detective narration | |
| | **uwu** | Maximum cute with uwu-speak | |
| | **philosopher** | Deep contemplation on every query | |
| | **hype** | MAXIMUM ENERGY AND ENTHUSIASM!!! | |
|
|
| ## Switching personalities with commands |
|
|
| ### CLI |
|
|
| ```text |
| /personality |
| /personality concise |
| /personality technical |
| ``` |
|
|
| ### Messaging platforms |
|
|
| ```text |
| /personality teacher |
| ``` |
|
|
| These are convenient overlays, but your global `SOUL.md` still gives Hermes its persistent default personality unless the overlay meaningfully changes it. |
|
|
| ## Custom personalities in config |
|
|
| You can also define named custom personalities in `~/.hermes/config.yaml` under `agent.personalities`. |
|
|
| ```yaml |
| agent: |
| personalities: |
| codereviewer: > |
| You are a meticulous code reviewer. Identify bugs, security issues, |
| performance concerns, and unclear design choices. Be precise and constructive. |
| ``` |
|
|
| Then switch to it with: |
|
|
| ```text |
| /personality codereviewer |
| ``` |
|
|
| ## Recommended workflow |
|
|
| A strong default setup is: |
|
|
| 1. Keep a thoughtful global `SOUL.md` in `~/.hermes/SOUL.md` |
| 2. Put project instructions in `AGENTS.md` |
| 3. Use `/personality` only when you want a temporary mode shift |
|
|
| That gives you: |
| - a stable voice |
| - project-specific behavior where it belongs |
| - temporary control when needed |
|
|
| ## How personality interacts with the full prompt |
|
|
| At a high level, the prompt stack includes: |
| 1. **SOUL.md** (agent identity — or built-in fallback if SOUL.md is unavailable) |
| 2. tool-aware behavior guidance |
| 3. memory/user context |
| 4. skills guidance |
| 5. context files (`AGENTS.md`, `.cursorrules`) |
| 6. timestamp |
| 7. platform-specific formatting hints |
| 8. optional system-prompt overlays such as `/personality` |
|
|
| `SOUL.md` is the foundation — everything else builds on top of it. |
|
|
| ## Related docs |
|
|
| - [Context Files](/docs/user-guide/features/context-files) |
| - [Configuration](/docs/user-guide/configuration) |
| - [Tips & Best Practices](/docs/guides/tips) |
| - [SOUL.md Guide](/docs/guides/use-soul-with-hermes) |
|
|
| ## CLI appearance vs conversational personality |
|
|
| Conversational personality and CLI appearance are separate: |
|
|
| - `SOUL.md`, `agent.system_prompt`, and `/personality` affect how Hermes speaks |
| - `display.skin` and `/skin` affect how Hermes looks in the terminal |
|
|
| For terminal appearance, see [Skins & Themes](./skins.md). |
|
|