Profile System and Distributions
We can use Hermes to createMultiple independent Agents—one for writing code, one for operations, one for research.
This chapter explains how the Profile system runs multiple fully isolated Agent instances on one machine, and how to package an entire Agent as a distribution to share with others.
Profile system: one machine, multiple independent Agents
What is a Profile
A Profile is a standalone Hermes home directory. Each Profile has its own fully isolated configuration and data:
~/.hermes/profiles/<name>/ ├── config.yaml # 模型、工具、终端后端等所有设置 ├── .env # API Key、Bot Token(各档案各自独立) ├── SOUL.md # Agent 人格与身份设定 ├── memories/ # 独立的持久记忆(MEMORY.md、USER.md) ├── skills/ # 独立的技能目录 ├── cron/ # 独立的定时任务 └── state.db # 独立的会话历史数据库
Key Design: After creating a Profile, it automatically becomes an independent command. Create a Profile named coder and you immediately havecoder chat、coder setup、coder gateway startand all subcommands—just like having a completely independent Hermes instance installed.
Quick start
Create an independent coding assistant in three steps:
Example
hermes profile create coder
# Step 2: Configure this Profile's API Key and model
coder setup
# Step 3: Start chatting
coder chat
Three creation modes
Example
hermes profile create mybot
# Mode 2: Clone configuration (config.yaml + .env + SOUL.md + skills,
# Memory and sessions are not copied)
hermes profile create work --clone
# Mode 3: Full clone (including memory, skills, scheduled tasks, plugins,
# (excluding session history)
hermes profile create backup --clone-all
# Clone from specified Profile
hermes profile create work-backup --clone-from coder --clone-all
| Mode | Copy Content | Do not copy content | Applicable scenarios |
|---|---|---|---|
| New (Default) | Only built-in skills | — | Configure a new Agent from scratch |
| --clone | Configuration, environment variables, persona, skills | Memory, session history | Different variants of the same Agent |
| --clone-all | configuration, memory, skills, scheduled tasks, plugins | Conversation History | Full Backup |
Switching and using Profiles
Example
coder chat
coder gateway start
coder skills list
coder config set model.default anthropic/claude-sonnet-4-6
# Method 2: Explicitly specify the -p flag
hermes -p coder chat
hermes --profile=coder doctor
hermes chat -p coder -q Hello
# Method 3: Set the current default (similar to kubectl config use-context)
hermes profile use coder # After that, running hermes directly will use coder
hermes profile use default # Revert to Default
Determine which Profile you're currently in:
- Command prompt display
coder ❯(rather than the usual❯) - Startup banner display
Profile: coder - Run
hermes profileView current Profile name, path, model, gateway status
Differences between Profile, working directory, and sandbox
These are the three most easily confused concepts:
| Concepts | Controlled content | Configuration Method |
|---|---|---|
| Profile | Hermes's own status (configuration, memory, skills, sessions) | hermes profile create |
| Working directory | Where terminal commands start executing | terminal.cwd |
| Sandbox | Filesystem access scope restriction | Terminal backend (docker/modal, etc.) |
A Profile is not a sandbox—with the default local backend, the Agent still has the same filesystem permissions as you. If you need to restrict access scope, switch the terminal backend (see Chapter 05).
Make a Profile always start working from a specific directory:
Example
# Pin coder Profile to start from the project directory
terminal:
backend: local
cwd: /absolute/path/to/project
Multi-Profile gateway: each Agent connects to a different platform
Each Profile runs its own independent gateway process, using its own Bot Token:
Example
coder gateway start # Telegram Bot bound to coder
assistant gateway start # Bind Different Bots
# Install as Persistent System Service
coder gateway install # Create hermes-gateway-coder systemd service
assistant gateway install # Create the hermes-gateway-assistant service
Security protection: if two Profiles accidentally use the same Bot Token, the second gateway will immediately report an error and indicate the conflicting Profile name, so no silent conflict occurs.
Profile management commands
Example
hermes profile list
# View detailed information of a Profile
hermes profile show coder
# Rename (automatically update aliases and services)
hermes profile rename coder dev-bot
# Export as coder.tar.gz
hermes profile export coder
# Import from archive
hermes profile import coder.tar.gz
# Delete (enter name to confirm)
hermes profile delete coder
# Skip confirmation and delete directly
hermes profile delete coder --yes
Cannot delete the default profile (~/.hermes). To completely uninstall, use hermes uninstall.
Profile Distribution: share an entire Agent with others
Profile Distribution packages a complete Hermes Agent—persona settings, skills, scheduled tasks, MCP connections, configuration—into a Git repository.
Anyone can install the entire Agent with one command, and receive your updates while keeping their own memories, sessions, and API Key.
Distribution vs Profile backup
| Dimension | Distribution | Backup (export/import) |
|---|---|---|
| Target Audience | Others (team, community) | Yourself (migration between machines) |
| Installation method | hermes profile install github.com/... | hermes profile import xxx.tar.gz |
| Version management | Git repository + tags | None |
| Update | hermes profile update | Manual re-export and import |
| API Key | Recipient configures it themselves | Included in the export |
Scenarios suitable for distributions
- Distribute specialized Agents to teams (compliance monitoring, code review, research assistants)
- Deploy the same Agent to multiple machines without manually copying files
- Continuously iterate on the Agent, letting recipients get the latest version with one command
- Distribute Agents to the community as products
Creating and publishing distributions
Step 1: Add to an existing Profiledistribution.yaml:
Example
name: research-bot
version: 1.0.0
description: "Autonomous research assistant, integrating arXiv and web tools."
hermes_requires: ">=0.12.0"
author: "Your Name"
license: "MIT"
# Declare environment variables that the receiver needs to configure
env_requires:
- name: OPENAI_API_KEY
description: "OpenAI API Key (for model access)"
required: true
- name: SERPAPI_KEY
description: "SerpAPI Key (for web search)"
required: false
default: ""
Step 2: Push to a Git repository:
Example
cd ~/.hermes/profiles/research-bot
git init
git add .
git commit -m "v1.0.0"
git remote add origin git@github.com:you/research-bot.git
git tag v1.0.0
git push -u origin main --tags
.env and auth.json are automatically excluded—API Keys won't enter the repository. Memory and session history are not included either.
Installing and updating distributions
Example
hermes profile install github.com/you/research-bot --alias
# Configure API Key after installation
nano ~/.hermes/profiles/research-bot/.env
# Update to latest version (preserve your memory and conversations)
hermes profile update research-bot
Common commands quick reference
Example
hermes profile create <name> # Create New
hermes profile create <name> --clone # Clone Configuration
hermes profile create <name> --clone-all # Full Clone
hermes profile create <name> --clone-from <src> # Clone from specified profile
hermes profile list # List All
hermes profile show <name> # View Details
hermes profile use <name> # Set as Default
hermes profile rename <old> <new> # Rename
hermes profile export <name> # Export Backup
hermes profile import <file> # Import Backup
hermes profile delete <name> # Delete
# Profile command aliases (automatically available after creation).
<name> chat / setup / gateway start / skills list / doctor
# ─── Release ──────────────────────────────────────────────────
hermes profile install github.com/user/repo --alias # Install
hermes profile update <name> # Update