mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-09 03:11:58 +00:00
PR #20831 shipped the feature with a terse reference page. This adds a proper user guide — ~570 lines of what/why/when/how with use-case walkthroughs, lifecycle coverage from author through installer through update, and recipe snippets for common workflows. New page: website/docs/user-guide/profile-distributions.md Sections: * What this means — the before/after, side-by-side * Why git, not tarballs or a custom format * When to use a distribution (personal, team, community, product) and when NOT to (local backup, sharing credentials, sharing memories) * The lifecycle — dedicated walkthroughs for authors (publish in 4 steps) and installers (install, check, update, remove) * Use cases: personal sync, team internal bot, community publish, commercial product, ephemeral ops agent * Recipes: pin a version, compare installed vs. latest, preserve local customizations through updates, force clean reinstall, fork-and-customize, test before pushing * What is NEVER in a distribution (the user-owned exclude list verbatim) * Security and trust model — what you are trusting, why cron is not auto-scheduled, the browser-extension analogy Cross-linking: * Added to sidebar under Getting Started, right after user-guide/profiles. * Existing Profiles page ends with a Sharing profiles as distributions teaser that links here. * The Distribution section of the reference page gets an admonition pointing newcomers here first. The reference stays as a CLI-flag lookup for people who already know what they want. Validation: * ascii-guard lint --exclude-code-blocks docs -> 0 errors. * All internal links resolve to real pages.
459 lines
13 KiB
Markdown
459 lines
13 KiB
Markdown
---
|
|
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 <subcommand>
|
|
```
|
|
|
|
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 <name>
|
|
```
|
|
|
|
Sets `<name>` as the active profile. All subsequent `hermes` commands (without `-p`) will use this profile.
|
|
|
|
| Argument | Description |
|
|
|----------|-------------|
|
|
| `<name>` | 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 <name> [options]
|
|
```
|
|
|
|
Creates a new profile.
|
|
|
|
| Argument / Option | Description |
|
|
|-------------------|-------------|
|
|
| `<name>` | 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 <profile>` | 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 <name> [options]
|
|
```
|
|
|
|
Deletes a profile and removes its shell alias.
|
|
|
|
| Argument / Option | Description |
|
|
|-------------------|-------------|
|
|
| `<name>` | 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 <name>
|
|
```
|
|
|
|
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 |
|
|
|----------|-------------|
|
|
| `<name>` | 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 <name> [options]
|
|
```
|
|
|
|
Regenerates the shell alias script at `~/.local/bin/<name>`. Useful if the alias was accidentally deleted or if you need to update it after moving your Hermes installation.
|
|
|
|
| Argument / Option | Description |
|
|
|-------------------|-------------|
|
|
| `<name>` | Profile to create/update the alias for. |
|
|
| `--remove` | Remove the wrapper script instead of creating it. |
|
|
| `--name <alias>` | 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 <old-name> <new-name>
|
|
```
|
|
|
|
Renames a profile. Updates the directory and shell alias.
|
|
|
|
| Argument | Description |
|
|
|----------|-------------|
|
|
| `<old-name>` | Current profile name. |
|
|
| `<new-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 <name> [options]
|
|
```
|
|
|
|
Exports a profile as a compressed tar.gz archive.
|
|
|
|
| Argument / Option | Description |
|
|
|-------------------|-------------|
|
|
| `<name>` | Profile to export. |
|
|
| `-o`, `--output <path>` | Output file path (default: `<name>.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 <archive> [options]
|
|
```
|
|
|
|
Imports a profile from a tar.gz archive.
|
|
|
|
| Argument / Option | Description |
|
|
|-------------------|-------------|
|
|
| `<archive>` | Path to the tar.gz archive to import. |
|
|
| `--name <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
|
|
|
|
:::tip
|
|
**New to distributions?** Start with the [Profile Distributions user guide](../user-guide/profile-distributions.md) — it covers the why, when, and how with full examples. The sections below are a dry CLI reference for when you know what you want.
|
|
:::
|
|
|
|
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 <source> [--name <name>] [--alias] [--force] [--yes]
|
|
```
|
|
|
|
Installs a profile distribution from a git URL or a local directory.
|
|
|
|
| Option | Description |
|
|
|--------|-------------|
|
|
| `<source>` | 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 <name> [--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 <name>
|
|
```
|
|
|
|
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 <name>` / `delete <name>`
|
|
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 <your-repo-url>`.
|
|
|
|
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 <name> <command> [options]
|
|
hermes --profile <name> <command> [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 <name>`, `--profile <name>` | 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 <shell>
|
|
```
|
|
|
|
Generates shell completion scripts. Includes completions for profile names and profile subcommands.
|
|
|
|
| Argument | Description |
|
|
|----------|-------------|
|
|
| `<shell>` | 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 <TAB>` — subcommands (list, use, create, etc.)
|
|
- `hermes profile use <TAB>` — profile names
|
|
- `hermes -p <TAB>` — profile names
|
|
|
|
## See also
|
|
|
|
- [Profiles User Guide](../user-guide/profiles.md)
|
|
- [CLI Commands Reference](./cli-commands.md)
|
|
- [FAQ — Profiles section](./faq.md#profiles)
|