Deployment Overview of Hermes on Server¶
Prerequisites and Basic Requirements¶
To ensure a successful deployment, the following system requirements must be met:
-
Operating System: Linux (Ubuntu/Debian preferred), macOS, or Android (Termux).
-
Privileges:
-
Standard user permissions for non-root installations.
-
sudoaccess required for installing system packages and configuring Electron sandboxes on Linux. -
Hardware/Software Dependencies:
-
Python 3.11 to 3.13 (Required).
-
Node.js (Managed version provided during installation).
-
Git (Required for repository cloning).
-
C++ Compiler (e.g.,
gcc,clang) required for building native modules likenode-pty. -
Network: Active internet connectivity is required to download the agent, Python runtimes, Node.js binaries, and browser engines.
File and Directory Structure¶
The application follows a split layout between executable code and persistent data:
| Component | Location (Default) | Description |
|---|---|---|
| Application Code | $INSTALL_DIR | The main repository files and virtual environment. |
| Data & Configs | ~/.hermes/ | Persistent storage for configurations, logs, and sessions. |
| Command Link | ~/.local/bin/ or /usr/local/bin | The directory containing the hermes executable. |
Data Directory Subdirectories (~/.hermes/)¶
-
cron/: Scheduled tasks. -
sessions/: User session data. -
logs/: Application and gateway logs. -
pairing/: Device pairing information. -
hooks/: Custom automation hooks. -
image_cache/: Cached images for vision tasks. -
audio_cache/: Cached audio files. -
memories/: Long-term memory storage. -
skills/: Bundled agent skills and capabilities.
Application Installation Process¶
The installation is performed via a comprehensive shell script (install.sh) that automates the environment setup:
-
System Preparation: The installer checks for and installs build dependencies (e.g.,
build-essential,python3-dev,libffi-dev). -
Runtime Management:
-
Installs a managed version of
uvto handle Python environments. -
Provisions a specific Python version (defaulting to 3.11) within a virtual environment.
-
Downloads and installs a compatible Node.js LTS runtime into the Hermes data directory to ensure compatibility with native modules.
-
Repository Deployment: The application source code is cloned from the official repository into the installation directory.
-
Dependency Installation:
-
Python: A virtual environment is created, and all required Python packages are installed via
uv. -
Node.js: All necessary Node modules (including browser automation tools) are installed via
npm. -
Binary Linking: The installer creates user-facing shims (
hermes,hermes-agent, andhermes-acp) in the system's PATH to allow command execution from any shell session.
Access Rights and Security¶
-
File Permissions: Sensitive files, specifically
.env(containing API keys), are restricted with0600permissions (read/write only by the owner). -
Sandbox Security: On Linux systems, the installer attempts to configure the Electron sandbox (
chrome-sandbox) withroot:rootownership and4755permissions to ensure secure browser execution. -
Environment Isolation: The launcher scripts explicitly unset
PYTHONPATHandPYTHONHOMEto prevent environment leakage from the host system into the application runtime.
Custom Scripts and Additional Setup¶
The installation process includes several specialized setup actions:
-
Configuration Seeding: Templates for
.env(environment variables) andconfig.yamlare copied to the data directory if they do not already exist. -
Persona Initialization: A default
SOUL.mdfile is created in the data directory to define the agent's personality. -
Skill Synchronization: The installer runs a skill synchronization script to populate the
~/.hermes/skills/directory with bundled capabilities. -
Browser Configuration: The installer detects system browsers and configures the
AGENT_BROWSER_EXECUTABLE_PATHin the.envfile to ensure seamless automation.
Application Update Instructions¶
To update the Hermes application to the latest version, use the built-in update command:
This command performs a controlled update of the repository code and synchronizes dependencies while attempting to preserve any local configuration changes via Git stashing.