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

# Step 1: Create a Profile, auto-generate coder command
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

# Mode 1: Brand new Profile (blank config, built-in skills preloaded)
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
ModeCopy ContentDo not copy contentApplicable scenarios
New (Default)Only built-in skills—Configure a new Agent from scratch
--cloneConfiguration, environment variables, persona, skillsMemory, session historyDifferent variants of the same Agent
--clone-allconfiguration, memory, skills, scheduled tasks, pluginsConversation HistoryFull Backup

Switching and using Profiles

Example

# Method 1: Using auto-generated command aliases (most common)
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 displaycoder ❯(rather than the usual❯)
  • Startup banner displayProfile: coder
  • Runhermes profileView current Profile name, path, model, gateway status

Differences between Profile, working directory, and sandbox

These are the three most easily confused concepts:

ConceptsControlled contentConfiguration Method
ProfileHermes's own status (configuration, memory, skills, sessions)hermes profile create
Working directoryWhere terminal commands start executingterminal.cwd
SandboxFilesystem access scope restrictionTerminal 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

# File path: ~/.hermes/config.yaml
# 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

# Start Independent Gateways
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

# List all profiles and statuses
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

DimensionDistributionBackup (export/import)
Target AudienceOthers (team, community)Yourself (migration between machines)
Installation methodhermes profile install github.com/...hermes profile import xxx.tar.gz
Version managementGit repository + tagsNone
Updatehermes profile updateManual re-export and import
API KeyRecipient configures it themselvesIncluded 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

# File path:~/.hermes/profiles/research-bot/distribution.yaml
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

Enter the Profile directory and initialize a Git repository
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

# Installation (--alias creates a command with the same name, e.g., research-bot chat)
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

# ─── Profile 管manage ───────────────────────────────────────────
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
other extensions