--- sidebar_position: 7 --- # Profile Commands Reference This page covers all commands related to [Hermes profiles](../user-guide/profiles.md). For general CLI commands, see [CLI Commands Reference](./cli-commands.md). ## `hermes profile` ```bash hermes profile ``` Top-level command for managing profiles. Running `hermes profile` without a subcommand shows help. | Subcommand | Description | |------------|-------------| | `list` | List all profiles. | | `use` | Set the active (default) profile. | | `create` | Create a new profile. | | `delete` | Delete a profile. | | `show` | Show details about a profile. | | `alias` | Regenerate the shell alias for a profile. | | `rename` | Rename a profile. | | `export` | Export a profile to a tar.gz archive. | | `import` | Import a profile from a tar.gz archive. | ## `hermes profile list` ```bash hermes profile list ``` Lists all profiles. The currently active profile is marked with `*`. **Example:** ```bash $ hermes profile list default * work dev personal ``` No options. ## `hermes profile use` ```bash hermes profile use ``` Sets `` as the active profile. All subsequent `hermes` commands (without `-p`) will use this profile. | Argument | Description | |----------|-------------| | `` | Profile name to activate. Use `default` to return to the base profile. | **Example:** ```bash hermes profile use work hermes profile use default ``` ## `hermes profile create` ```bash hermes profile create [options] ``` Creates a new profile. | Argument / Option | Description | |-------------------|-------------| | `` | Name for the new profile. Must be a valid directory name (alphanumeric, hyphens, underscores). | | `--clone` | Copy `config.yaml`, `.env`, and `SOUL.md` from the current profile. | | `--clone-all` | Copy everything (config, memories, skills, sessions, state) from the current profile. | | `--clone-from ` | Clone from a specific profile instead of the current one. Used with `--clone` or `--clone-all`. | | `--no-alias` | Skip wrapper script creation. | Creating a profile does **not** make that profile directory the default project/workspace directory for terminal commands. If you want a profile to start in a specific project, set `terminal.cwd` in that profile's `config.yaml`. **Examples:** ```bash # Blank profile — needs full setup hermes profile create mybot # Clone config only from current profile hermes profile create work --clone # Clone everything from current profile hermes profile create backup --clone-all # Clone config from a specific profile hermes profile create work2 --clone --clone-from work ``` ## `hermes profile delete` ```bash hermes profile delete [options] ``` Deletes a profile and removes its shell alias. | Argument / Option | Description | |-------------------|-------------| | `` | Profile to delete. | | `--yes`, `-y` | Skip confirmation prompt. | **Example:** ```bash hermes profile delete mybot hermes profile delete mybot --yes ``` :::warning This permanently deletes the profile's entire directory including all config, memories, sessions, and skills. Cannot delete the currently active profile. ::: ## `hermes profile show` ```bash hermes profile show ``` Displays details about a profile including its home directory, configured model, gateway status, skills count, and configuration file status. This shows the profile's Hermes home directory, not the terminal working directory. Terminal commands start from `terminal.cwd` (or the launch directory on the local backend when `cwd: "."`). | Argument | Description | |----------|-------------| | `` | Profile to inspect. | **Example:** ```bash $ hermes profile show work Profile: work Path: ~/.hermes/profiles/work Model: anthropic/claude-sonnet-4 (anthropic) Gateway: stopped Skills: 12 .env: exists SOUL.md: exists Alias: ~/.local/bin/work ``` ## `hermes profile alias` ```bash hermes profile alias [options] ``` Regenerates the shell alias script at `~/.local/bin/`. Useful if the alias was accidentally deleted or if you need to update it after moving your Hermes installation. | Argument / Option | Description | |-------------------|-------------| | `` | Profile to create/update the alias for. | | `--remove` | Remove the wrapper script instead of creating it. | | `--name ` | Custom alias name (default: profile name). | **Example:** ```bash hermes profile alias work # Creates/updates ~/.local/bin/work hermes profile alias work --name mywork # Creates ~/.local/bin/mywork hermes profile alias work --remove # Removes the wrapper script ``` ## `hermes profile rename` ```bash hermes profile rename ``` Renames a profile. Updates the directory and shell alias. | Argument | Description | |----------|-------------| | `` | Current profile name. | | `` | New profile name. | **Example:** ```bash hermes profile rename mybot assistant # ~/.hermes/profiles/mybot → ~/.hermes/profiles/assistant # ~/.local/bin/mybot → ~/.local/bin/assistant ``` ## `hermes profile export` ```bash hermes profile export [options] ``` Exports a profile as a compressed tar.gz archive. | Argument / Option | Description | |-------------------|-------------| | `` | Profile to export. | | `-o`, `--output ` | Output file path (default: `.tar.gz`). | **Example:** ```bash hermes profile export work # Creates work.tar.gz in the current directory hermes profile export work -o ./work-2026-03-29.tar.gz ``` ## `hermes profile import` ```bash hermes profile import [options] ``` Imports a profile from a tar.gz archive. | Argument / Option | Description | |-------------------|-------------| | `` | Path to the tar.gz archive to import. | | `--name ` | Name for the imported profile (default: inferred from archive). | **Example:** ```bash hermes profile import ./work-2026-03-29.tar.gz # Infers profile name from the archive hermes profile import ./work-2026-03-29.tar.gz --name work-restored ``` ## Distribution commands Distributions turn a profile into a shareable, versioned artifact published as a **git repository**. A recipient installs the distribution with a single command and can update it in place later without touching their local memories, sessions, or credentials. `auth.json` and `.env` are never part of a distribution — they stay on the installing user's machine. The recipient's user data (memories, sessions, auth, their own edits to `.env`) is always preserved across the initial install and subsequent updates. :::info `hermes profile export` / `import` are still the right commands for **local backup and restore** of a profile on your own machine. Distribution (`install` / `update` / `info`) is a separate concept: ship a profile via git so someone else can install it. ::: ### `hermes profile install` ```bash hermes profile install [--name ] [--alias] [--force] [--yes] ``` Installs a profile distribution from a git URL or a local directory. | Option | Description | |--------|-------------| | `` | Git URL (`github.com/user/repo`, `https://...`, `git@...`, `ssh://`, `git://`) or a local directory containing `distribution.yaml` at its root. | | `--name NAME` | Override the profile name from the manifest. | | `--alias` | Also create a shell wrapper (e.g. `telemetry` → `hermes -p telemetry`). | | `--force` | Overwrite an existing profile of the same name. User data is still preserved. | | `-y`, `--yes` | Skip the manifest-preview confirmation prompt. | The installer shows the manifest, lists required env vars, and warns about cron jobs before asking for confirmation. Required env vars go into a `.env.EXAMPLE` file you copy to `.env` and fill in. **Examples:** ```bash # Install from a GitHub repo (shorthand) hermes profile install github.com/kyle/telemetry-distribution --alias # Install from a full HTTPS git URL hermes profile install https://github.com/kyle/telemetry-distribution.git # Install from SSH hermes profile install git@github.com:kyle/telemetry-distribution.git # Install from a local directory during development hermes profile install ./telemetry/ ``` ### `hermes profile update` ```bash hermes profile update [--force-config] [--yes] ``` Re-clones the distribution from its recorded source and applies updates. Distribution-owned files (SOUL.md, skills/, cron/, mcp.json) are overwritten; user data (memories, sessions, auth, .env) is never touched. `config.yaml` is preserved by default to keep your local overrides. Pass `--force-config` to reset it to the distribution's shipped config. ### `hermes profile info` ```bash hermes profile info ``` Prints the profile's distribution manifest — name, version, required Hermes version, author, env var requirements, the source URL/path, and the `Installed:` timestamp recorded when the distribution was last `install`-ed or `update`-d. Useful for checking what a shared profile needs before installing it, and for spotting "this profile was installed 6 months ago and hasn't been updated." `hermes profile list` also shows the distribution name and version in a `Distribution` column, and `hermes profile show ` / `delete ` surface the source URL so you can tell at a glance which profiles came from a git repo vs. were created locally. ### Private distributions A private git repository works as a distribution source with no extra configuration — the install shells out to your normal `git` binary, so whatever authentication your shell is already set up for (SSH key, `git credential` helper, GitHub CLI's stored HTTPS credentials) applies transparently. ```bash # Uses your SSH key, the same as any other `git clone` hermes profile install git@github.com:your-org/internal-assistant.git # Uses your git credential helper hermes profile install https://github.com/your-org/internal-assistant.git ``` If a clone prompts for credentials interactively in your terminal during install, that prompt flows through. Set up your auth the way you'd normally use `git clone` against the same repo first, then install. ### Distribution manifest (`distribution.yaml`) Every distribution has a `distribution.yaml` at the root of its repository: ```yaml name: telemetry version: 0.1.0 description: "Compliance monitoring harness" hermes_requires: ">=0.12.0" author: "Your Name" license: "MIT" env_requires: - name: OPENAI_API_KEY description: "OpenAI API key" required: true - name: GRAPHITI_MCP_URL description: "Memory graph URL" required: false default: "http://127.0.0.1:8000/sse" distribution_owned: # optional; defaults to SOUL.md, config.yaml, # mcp.json, skills/, cron/, distribution.yaml - SOUL.md - skills/compliance/ - cron/ ``` `hermes_requires` supports `>=`, `<=`, `==`, `!=`, `>`, `<`, or a bare version (treated as `>=`). Install fails with a clear error if the current Hermes version doesn't satisfy the spec. `distribution_owned` is optional. If set, only those paths are replaced on update; anything else in the profile stays user-owned. If omitted, the defaults above apply. ### Publishing a distribution Authoring a distribution is just a git push: 1. In your profile directory, create `distribution.yaml` with at least `name` and `version`. 2. Initialize a git repo (or use an existing one) and push to GitHub / GitLab / any host Hermes can clone from. 3. Tell recipients to run `hermes profile install `. Use git tags for versioned releases — recipients who clone `HEAD` get your latest state, and you can always bump `version:` in the manifest. ## `hermes -p` / `hermes --profile` ```bash hermes -p [options] hermes --profile [options] ``` Global flag to run any Hermes command under a specific profile without changing the sticky default. This overrides the active profile for the duration of the command. | Option | Description | |--------|-------------| | `-p `, `--profile ` | Profile to use for this command. | **Examples:** ```bash hermes -p work chat -q "Check the server status" hermes --profile dev gateway start hermes -p personal skills list hermes -p work config edit ``` ## `hermes completion` ```bash hermes completion ``` Generates shell completion scripts. Includes completions for profile names and profile subcommands. | Argument | Description | |----------|-------------| | `` | Shell to generate completions for: `bash` or `zsh`. | **Examples:** ```bash # Install completions hermes completion bash >> ~/.bashrc hermes completion zsh >> ~/.zshrc # Reload shell source ~/.bashrc ``` After installation, tab completion works for: - `hermes profile ` — subcommands (list, use, create, etc.) - `hermes profile use ` — profile names - `hermes -p ` — profile names ## See also - [Profiles User Guide](../user-guide/profiles.md) - [CLI Commands Reference](./cli-commands.md) - [FAQ — Profiles section](./faq.md#profiles)