Hermes Agent
Before you begin
Use Hermes Agent >=0.21.3, Node.js >=20, npm, and the
Inline CLI. Hermes 0.21.3, shipped in the official Umbrel app,
requires adapter 0.0.20 or later.
Run setup as the user and in the container that already runs Hermes, with the
same HERMES_HOME and profile. Setup adds an Inline channel to that agent;
it does not migrate or replace its models, memory, skills, or other channels.
Supported versions
| Hermes version | Latest supported Inline adapter |
|---|---|
0.21.3 (Umbrel app 2026.9.14) | 0.0.20 |
0.21.4 | 0.0.20 |
0.21.5 | 0.0.20 |
Earlier Hermes versions are not covered by this release. Compatibility work for those versions is separate; use the matching supported host and adapter above.
Agent setup prompt
Give your coding agent SSH access to the server and this prompt:
Connect my existing Hermes on my Umbrel server to Inline using
https://inline.chat/docs/hermes.md.
Find the existing Hermes container, service user, persisted Hermes home and
profile first. Preserve its models, memory, skills and existing channels.
Install the Inline CLI and adapter in persistent storage as that service user.
Use browser sign-in with --no-open and give me the approval URL when needed.
Do not read or print .env files, tokens, or other secrets. Do not create a
second Hermes instance or replace an existing Inline bot without asking.
Finish by verifying the live gateway and an actual reply in Inline.Existing Hermes on Umbrel
SSH to the Umbrel host. Discover the running Hermes container without dumping its environment or configuration:
sudo docker ps --format '{{.Names}}\t{{.Image}}'The official Hermes app currently uses the hermes service user and persisted
HERMES_HOME=/opt/data. Enter the existing container (replace CONTAINER with
the name returned above; it is commonly hermes-agent_web_1):
sudo docker exec -it --user hermes -e HOME=/opt/data/home CONTAINER bashInside that container, verify the runtime and install into its persistent volume:
export HERMES_HOME=/opt/data
export PATH="/opt/data/.local/bin:/opt/hermes/bin:/opt/hermes/.venv/bin:$PATH"
export npm_config_prefix=/opt/data/.local
hermes --version
node --version
npm --version
curl -fsSL https://inline.chat/cli/install.sh | INLINE_INSTALL_DIR=/opt/data/.local/bin sh
inline --versionUse these paths only for the official app layout. For a custom image, identify
its actual service user and durable Hermes home first. Do not install into the
Umbrel host's home or create a new profile. inline agents discover inspects
only the environment where it runs; it does not discover Hermes across SSH or
Docker boundaries. An interactive docker exec shell may omit Hermes from
PATH even when the gateway runs normally. Keep /opt/hermes/bin before
/opt/hermes/.venv/bin so gateway commands use the app's supervisor wrapper.
Guided setup uses npm's cache under the persistent HOME;
npm_config_prefix selects the persistent location for the manual global
install/update commands below. It does not need to remain in the gateway
environment. Persistent files survive container replacement. For custom
images, retain any custom PATH or Node settings in the app's supported
startup configuration.
Connect Inline
Run these commands in the same environment as Hermes:
inline me --jsonIf sign-in is required:
inline login --browser --no-openOpen the printed URL on your own computer and approve the login. This signs in the CLI as the bot owner; setup then configures a separate bot credential without printing it.
Preview and configure:
inline agents setup --target hermes --dry-run --non-interactive --json
inline agents setup --target hermes --non-interactive --jsonFor a named existing profile, add --profile NAME to both commands. To reuse
an existing bot, add --bot-id ID. Setup defaults to --access owner; use
--access allowlist --allow-user ID for additional operators. Do not use --replace unless you
intend to replace a conflicting Inline credential.
Setup installs the adapter, enables the plugin, configures Inline, and asks
Hermes to restart its gateway. Current official Umbrel images route Hermes'
gateway commands through their s6 supervisor; they do not need a systemd
service inside the container. If the installed host cannot manage its gateway,
use --no-restart, then restart it through that deployment's existing process
manager. A configured result is not a ready gateway.
Resume an incomplete setup
If a previous attempt already created a bot, sign in as its owner in this
same container with inline login --browser --no-open, then list your bots:
inline bots list --jsonFind the intended bot's ID and reuse it instead of creating another:
inline agents setup --target hermes --bot-id BOT_ID --dry-run --non-interactive --json
inline agents setup --target hermes --bot-id BOT_ID --non-interactive --jsonReplace BOT_ID with the returned numeric ID. Add --profile NAME when
using a named existing profile. A signed-out CLI and a disabled Hermes plugin
are separate states: signing in restores the owner's CLI session, while setup
enables and configures the plugin. Do not reset the Hermes home or replace a
conflicting bot credential to recover a partial setup. If setup reports a
conflict, confirm the intended bot before using --replace.
Install from the Hermes Catalog
You can also install Inline from the Hermes plugin catalog:
hermes plugins install inline-platformIn the same Hermes home and profile, enable the plugin and configure the gateway:
hermes plugins enable inline-platform
hermes gateway setupSelect Inline and configure its bot credential. Restart through your existing
process manager, then check hermes inline status --json --probe and verify a
reply in Inline.
Verify
The guided setup uses npm exec; it does not require a global inline-hermes
command. Run the doctor through the package too:
npm exec --yes --package=@inline-chat/hermes-agent-adapter -- inline-hermes doctor --json
hermes inline status --json --probe
hermes gateway statusUse the same profile and home for these checks. Setup reports status: "ready"
and service.ready: true only after checking the credential and gateway.
Inspect the nested gateway readiness in a standalone status probe as well;
a valid credential alone does not prove that the gateway is running.
Find the bot using the returned openUrl or username in Inline search, send a
message, and verify a final reply. This last check also exercises your existing
Hermes model/provider credentials and inbound delivery.
Manual installation
If you already manage bot credentials and gateway configuration:
npm install -g @inline-chat/hermes-agent-adapter@latest
inline-hermes install
hermes plugins enable inline-platform
hermes gateway setupSelect Inline, then use the guided setup or an existing bot token. The wizard saves configuration first. Restart through your process manager and complete the checks above before declaring it ready.
Update
For a catalog installation:
hermes plugins update inline-platform
hermes gateway restartFor an npm installation, run in the same user, home, profile, and persistent npm prefix used at install:
inline update
npm install -g @inline-chat/hermes-agent-adapter@latest
inline-hermes install --force
hermes gateway restart
inline-hermes doctor --json
hermes inline status --json --probeAdapter 0.0.19 no longer provides /inline_update; update through the package
manager. install --force refreshes plugin files while preserving Hermes
configuration and credentials.
Shared transcripts in groups and threads
To share one conversation transcript among admitted participants in a group
or thread, add these keys at the root of the config.yaml used by the Hermes
gateway process, outside platforms.inline.extra:
group_sessions_per_user: false
thread_sessions_per_user: falseHermes defaults group_sessions_per_user to true (groups split by sender)
and thread_sessions_per_user to false (threads shared). These settings
affect every messaging platform governed by that gateway configuration.
For separate profile gateways, configure each gateway's profile separately.
With a multiplexed gateway, do not assume a secondary profile's values control
its sessions; this adapter does not qualify per-profile session-policy overrides.
Distinct Hermes profile/gateway namespaces keep separate conversation sessions. Swapping a bot token within one profile does not create a new transcript namespace. These flags select shared sessions; they do not merge existing histories, import all Inline history, grant permissions, or change access, mention, or bot wake rules. Restart the gateway through its existing process manager after editing.