Hermes AgentのBot Modeをprofile分離から理解する

Hermes AgentのBot Modeをprofile分離から理解する

Bot Mode で作る Bot は、別種の AI エージェントではありません。名前の付いた Hermes profile です。この見方に変えると、Bot Chat や Routines がどのデータへ結び付くのかを追いやすくなります。

今回は、調査だけを受け持つresearcherを空の skill 構成で作りました。実行環境は Hermes Agent v0.21.0(2026 年 8 月 31 日版)です。

前回から何を変えるのか

前回の「Hermes Agentの人格を仕事別に分ける」では、HERMES_HOMEを分けるとSOUL.md、Memory、Skills、設定、cron、セッションの境界が分かれることを実機で確かめました。

今回は、その profile が Desktop の Bot Mode でどう見えるかを追います。新しい分離機構を足すのではなく、既存の profile に Bot Chat、roster、Routines という操作面を重ねます。

時点できること
前回完了時役割ごとにprofileを分け、状態の参照先をCLIで確認できます
今回完了後profile、Bot Chat、roster、Routinesの対応を理解し、DesktopとCLIで同じ役割を選べます

すでに profile の境界を理解している場合は、「Bot Mode と profile の構成」まで飛ばせます。これから初めて Bot を作る場合は、分離の理由を決めてから空の profile を用意します。

先に考えるべきは、Botの数ではなく分離の理由です

同じ profile へ複数の役割を足すと、設定変更の影響先が広がります。調査で覚えた前提が執筆へ入り、執筆用に追加した skill を定期処理も読める状態になります。API key、会話履歴、cron job も同じ Hermes home へ集まります。

Hermes 公式ガイドは、2 つの agent process を同じ profile へ向けないよう案内しています。両方が memory へ書き込み、次のセッション開始時に互いの書き込みを読むためです。並行して動かす役割には、別 profile を割り当てます。

ただし、profile は OS の sandbox ではありません。状態の置き場所は分かれますが、標準の local terminal backend では、同じ OS user が読めるファイルへ到達できます。ファイル操作を制限したい場合は、profile 分離とは別に sandbox や実行権限を設計します。

私なら、次の条件が 1 つでも当てはまる役割を別 profile にします。

  • 継続して持つ memory を混ぜたくありません
  • 利用する skills、toolsets、MCP server を絞りたいです
  • model や provider を固定したいです
  • chat history や cron job の所有者を明確にしたいです
  • messaging channel の認証情報を役割ごとに管理したいです

口調を一時的に変えるだけなら、profile を増やしません。分離には設定、更新、監視の手間も増えるからです。

用語をそろえる

用語ここでの意味
profile1体のHermes agentが使う独立したHermes homeです。config、memory、sessions、skills、cron、stateなどを持ちます
BotBot Modeがprofileへ付けるUI上の見せ方です。新しい実行単位ではありません
Bot Chat各Botに結び付く、固定の会話入口です。Botの作成時に作られ、rosterから同じ会話を開きます
rosterDesktopのBots tabに並ぶBot一覧です
RoutineBotにひも付いて見える定期処理です。内部では[bot:<name>]で名前空間を付けたHermes cron jobです
skill手順や専門知識を必要時に読み込む単位です。OSの権限境界ではありません
HERMES_HOME現在のprofileが状態を保存する基点です
sandboxfilesystemなどへのアクセスを制限する仕組みです。profileとは別です

Bot Modeとprofileの構成

Hermes Desktop
└── Bot Mode(profileを見せるUI)
    ├── Bots tab / roster
    │   ├── default Bot ─────── default profile
    │   │                        ├── config / SOUL
    │   │                        ├── memory / skills
    │   │                        ├── credentials / sessions
    │   │                        └── cron / state
    │   └── researcher Bot ──── researcher profile
    │                            ├── config / SOUL
    │                            ├── memory / skills
    │                            ├── credentials / sessions
    │                            └── cron / state
    ├── Bot Chat ────────────── profile固有の会話履歴へ接続
    └── Routines ───────────── profile固有のcron jobを表示

CLIから同じprofileを指定
└── hermes -p researcher chat

Bot Mode を無効にしても、profile、sessions、cron jobs は消えません。UI がそれらを所有しているのではなく、既存の profile を表示しているためです。

credentialsの分離には例外があります

各 profile は.envや設定を持てますが、OAuth login は単純なファイルコピーでは扱えません。公式ガイドでは、single-use refresh token の競合を防ぐため、root のauth.jsonから共有して読む方式を説明しています。Bot 作成画面でも、Shared keys がデフォルトです。

そのため、「profile を分けたから認証主体も必ず別」とは判断しません。別の OAuth login が必要なら、対象 profile を指定して認証を追加します。messaging channel は複製時にデフォルトで除外されるため、新しい Bot 側で個別に設定します。

読みたいところだけ選ぶ

  • 考え方だけ必要なら、「Bot Mode と profile の構成」までで十分です
  • CLI で最小 profile を作るなら、次の「空の researcher を作る」から読めます
  • Desktop だけで作るなら、CLI 手順を飛ばして「Desktop では何が変わるか」へ進めます
  • 問題の切り分けだけ必要なら、「よくあるエラーと誤解」へ飛べます

空のresearcherを作る

作業用のHERMES_HOMEを一時ディレクトリへ向けます。本番 profile には触れません。--no-skillsで bundled skills を入れず、--no-aliasで shell alias も作りません。

LAB_HOME="$(mktemp -d)"
export HERMES_HOME="$LAB_HOME"

hermes --version | sed -n '1s/ ·.*//p'
hermes profile create researcher \
  --no-alias \
  --no-skills \
  --description '一次情報を調べ、出典付きで要点を整理します。'

hermes profile list

実行時の出力です。profile 作成行に含まれた一時パスだけを$LAB_HOMEへ置き換えています。

Hermes Agent v0.21.0 (2026.8.31)

Profile 'researcher' created at $LAB_HOME/profiles/researcher
No bundled skills seeded (--no-skills). Delete .no-bundled-skills in the profile to opt back in.

Next steps:
  researcher setup              Configure API keys and model
  researcher chat               Start chatting
  researcher gateway start      Start the messaging gateway

  ⚠ This profile has no API keys yet. Run 'researcher setup' first,
    or it will inherit keys from your shell environment.
  Edit $LAB_HOME/profiles/researcher/SOUL.md to customize personality

 Profile          Model                        Gateway      Alias        Distribution
 ───────────────    ───────────────────────────    ───────────    ───────────    ────────────────────
 ◆default         —                            stopped      —            —
  researcher      —                            stopped      —            —

defaultresearcherの 2 行が現れました。どちらも model は未設定で、gateway はstoppedです。作成に成功しただけで、会話や messaging を始められる状態にはしていません。

確認後は、一時ディレクトリを削除します。

unset HERMES_HOME
rm -rf "$LAB_HOME"

この手順では--no-skillsを出発点にしました。調査役へ必要な skill だけを後から追加し、toolset や MCP server も別に選びます。--no-skillsだけで filesystem 権限まで制限されるわけではありません。

なぜcloneから始めなかったのか

--cloneは、元 profile の config、.envSOUL.md、skills、選ばれた memory を複製します。立ち上がりは速いですが、調査役に不要な能力や前提も持ち込みます。

今回は役割の境界を確認したいので、空の profile を選びました。次の順番なら、追加理由を追えます。

  1. description で担当範囲を固定します
  2. model と provider を設定します
  3. 一次情報の取得に必要な skill を追加します
  4. 必要な toolset と MCP server だけを有効にします
  5. 実タスクで不足した能力を 1 つずつ足します

--no-skillsと clone 系の option は同時に使えません。空から始めるか、既存設定を引き継ぐかを先に決めます。

Desktopでは何が変わるか

Desktop の Bot Mode はデフォルトで有効です。左側の Bots tab には profile が roster として並びます。researcherを選ぶと、その Bot 固有の Bot Chat を開きます。

New Agent の Advanced では、Fresh profile、Create empty を選べます。model、provider、SOUL.md、skills、toolsets、MCP servers も個別に指定できます。CLI の profile 作成を画面から行う入口として捉えれば迷いません。

Routines も別の scheduler ではありません。Bot の横で作成した定期処理は Hermes cron job になり、hermes cron listからも確認できます。Bot Chat と Routines は、profile 固有の history と cron へ意味のある名前を付ける UI です。

CLI から同じ調査役を開く場合は、次の形です。

hermes -p researcher chat

--no-aliasで作ったため、researcher chatという wrapper は使いません。profile 名を明示する-pなら、sticky default を変えずに対象を選べます。

よくあるエラーと誤解

状況原因対応
researcherがすでに存在すると表示されます同名profileが作成済みですhermes profile show researcherで中身を確認し、別名を使います。確認なしに削除しません
--no-skills--cloneを併用できません空のskillsとskills複製は両立しません最小構成なら--no-skills、継承ならclone系optionを選びます
作成後もmodelがですprofile作成とmodel設定は別です対象profileへhermes -p researcher setupを実行します
gatewayがstoppedですprofileを作ってもgatewayは自動起動しませんmessagingが必要な時だけ対象profileのgatewayを起動します
researcher chatが見つかりません--no-aliasでwrapper作成を止めましたhermes -p researcher chatを使います
profileを分けたのでfilesystemも隔離されたと思いましたprofileは状態分離でありsandboxではありませんsandbox、OS user、terminal backendの権限を別に設計します
2つのprocessが同じ記憶へ書き込みます両方を同じprofileへ向けています同時に動かすagentへ別profileを割り当てます
Bot Modeを無効にしたらBotが消えたように見えますrosterのUIだけが非表示ですhermes profile listhermes cron listで元データを確認します

分離後に確認すること

profile を増やす時は、名前より所有範囲を記録します。次の 5 点を説明できれば、Bot の境界が曖昧になりにくいです。

  • 何を記憶してよいか
  • どの skills、toolsets、MCP servers を使うか
  • どの model と credentials を使うか
  • どの Bot Chat と cron jobs を所有するか
  • filesystem access をどこで制限するか

Bot Mode の roster は、この境界を日常的に選ぶ画面です。内部では profile が状態を分け、Bot Chat が会話の入口を固定し、Routines が cron の担当者を示します。

1 つの profile で人格だけを替える方法と、役割ごとに profile を分ける方法は競合しません。短期の話し方は/personality、長く残る状態と能力は profile で分けます。私は新しい Bot を作る時、まず--no-skills相当の空構成から始めます。必要な能力を後から足す方が、その Bot が何をできるのかを説明しやすいためです。

公開一次情報

出典確認した内容
Hermes Agent公式ドキュメント: Bot ModeBotがprofileであること、Bot Chat、Routines、Desktop UI、Shared keys、CLIとの対応
Hermes Agent公式ドキュメント: Profilesprofileごとの状態分離、同一profileへの複数process接続の注意、clone、credentials、sandboxとの違い
Hermes Agent公式リファレンス: Profile Commandsprofile create--no-alias--no-skills--descriptionprofile list-pの仕様
この記事をシェア